blob: 9e9e1fe92914ace474dd83c950cdc9e5bac9593a [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/* de2104x.c: A Linux PCI Ethernet driver for Intel/Digital 21040/1 chips. */
2/*
3 Copyright 2001,2003 Jeff Garzik <jgarzik@pobox.com>
4
5 Copyright 1994, 1995 Digital Equipment Corporation. [de4x5.c]
6 Written/copyright 1994-2001 by Donald Becker. [tulip.c]
7
8 This software may be used and distributed according to the terms of
9 the GNU General Public License (GPL), incorporated herein by reference.
10 Drivers based on or derived from this code fall under the GPL and must
11 retain the authorship, copyright and license notice. This file is not
12 a complete program and may only be used when the entire operating
13 system is licensed under the GPL.
14
15 See the file COPYING in this distribution for more information.
16
17 TODO, in rough priority order:
18 * Support forcing media type with a module parameter,
19 like dl2k.c/sundance.c
20 * Constants (module parms?) for Rx work limit
21 * Complete reset on PciErr
22 * Jumbo frames / dev->change_mtu
23 * Adjust Rx FIFO threshold and Max Rx DMA burst on Rx FIFO error
24 * Adjust Tx FIFO threshold and Max Tx DMA burst on Tx FIFO error
25 * Implement Tx software interrupt mitigation via
26 Tx descriptor bit
27
28 */
29
30#define DRV_NAME "de2104x"
31#define DRV_VERSION "0.7"
32#define DRV_RELDATE "Mar 17, 2004"
33
34#include <linux/config.h>
35#include <linux/module.h>
36#include <linux/kernel.h>
37#include <linux/netdevice.h>
38#include <linux/etherdevice.h>
39#include <linux/init.h>
40#include <linux/pci.h>
41#include <linux/delay.h>
42#include <linux/ethtool.h>
43#include <linux/compiler.h>
44#include <linux/rtnetlink.h>
45#include <linux/crc32.h>
46
47#include <asm/io.h>
48#include <asm/irq.h>
49#include <asm/uaccess.h>
50#include <asm/unaligned.h>
51
52/* These identify the driver base version and may not be removed. */
53static char version[] =
54KERN_INFO DRV_NAME " PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")\n";
55
56MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
57MODULE_DESCRIPTION("Intel/Digital 21040/1 series PCI Ethernet driver");
58MODULE_LICENSE("GPL");
59MODULE_VERSION(DRV_VERSION);
60
61static int debug = -1;
62module_param (debug, int, 0);
63MODULE_PARM_DESC (debug, "de2104x bitmapped message enable number");
64
65/* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
66#if defined(__alpha__) || defined(__arm__) || defined(__hppa__) \
67 || defined(__sparc_) || defined(__ia64__) \
68 || defined(__sh__) || defined(__mips__)
69static int rx_copybreak = 1518;
70#else
71static int rx_copybreak = 100;
72#endif
73module_param (rx_copybreak, int, 0);
74MODULE_PARM_DESC (rx_copybreak, "de2104x Breakpoint at which Rx packets are copied");
75
76#define PFX DRV_NAME ": "
77
78#define DE_DEF_MSG_ENABLE (NETIF_MSG_DRV | \
79 NETIF_MSG_PROBE | \
80 NETIF_MSG_LINK | \
81 NETIF_MSG_IFDOWN | \
82 NETIF_MSG_IFUP | \
83 NETIF_MSG_RX_ERR | \
84 NETIF_MSG_TX_ERR)
85
86#define DE_RX_RING_SIZE 64
87#define DE_TX_RING_SIZE 64
88#define DE_RING_BYTES \
89 ((sizeof(struct de_desc) * DE_RX_RING_SIZE) + \
90 (sizeof(struct de_desc) * DE_TX_RING_SIZE))
91#define NEXT_TX(N) (((N) + 1) & (DE_TX_RING_SIZE - 1))
92#define NEXT_RX(N) (((N) + 1) & (DE_RX_RING_SIZE - 1))
93#define TX_BUFFS_AVAIL(CP) \
94 (((CP)->tx_tail <= (CP)->tx_head) ? \
95 (CP)->tx_tail + (DE_TX_RING_SIZE - 1) - (CP)->tx_head : \
96 (CP)->tx_tail - (CP)->tx_head - 1)
97
98#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
99#define RX_OFFSET 2
100
101#define DE_SETUP_SKB ((struct sk_buff *) 1)
102#define DE_DUMMY_SKB ((struct sk_buff *) 2)
103#define DE_SETUP_FRAME_WORDS 96
104#define DE_EEPROM_WORDS 256
105#define DE_EEPROM_SIZE (DE_EEPROM_WORDS * sizeof(u16))
106#define DE_MAX_MEDIA 5
107
108#define DE_MEDIA_TP_AUTO 0
109#define DE_MEDIA_BNC 1
110#define DE_MEDIA_AUI 2
111#define DE_MEDIA_TP 3
112#define DE_MEDIA_TP_FD 4
113#define DE_MEDIA_INVALID DE_MAX_MEDIA
114#define DE_MEDIA_FIRST 0
115#define DE_MEDIA_LAST (DE_MAX_MEDIA - 1)
116#define DE_AUI_BNC (SUPPORTED_AUI | SUPPORTED_BNC)
117
118#define DE_TIMER_LINK (60 * HZ)
119#define DE_TIMER_NO_LINK (5 * HZ)
120
121#define DE_NUM_REGS 16
122#define DE_REGS_SIZE (DE_NUM_REGS * sizeof(u32))
123#define DE_REGS_VER 1
124
125/* Time in jiffies before concluding the transmitter is hung. */
126#define TX_TIMEOUT (6*HZ)
127
128#define DE_UNALIGNED_16(a) (u16)(get_unaligned((u16 *)(a)))
129
130/* This is a mysterious value that can be written to CSR11 in the 21040 (only)
131 to support a pre-NWay full-duplex signaling mechanism using short frames.
132 No one knows what it should be, but if left at its default value some
133 10base2(!) packets trigger a full-duplex-request interrupt. */
134#define FULL_DUPLEX_MAGIC 0x6969
135
136enum {
137 /* NIC registers */
138 BusMode = 0x00,
139 TxPoll = 0x08,
140 RxPoll = 0x10,
141 RxRingAddr = 0x18,
142 TxRingAddr = 0x20,
143 MacStatus = 0x28,
144 MacMode = 0x30,
145 IntrMask = 0x38,
146 RxMissed = 0x40,
147 ROMCmd = 0x48,
148 CSR11 = 0x58,
149 SIAStatus = 0x60,
150 CSR13 = 0x68,
151 CSR14 = 0x70,
152 CSR15 = 0x78,
153 PCIPM = 0x40,
154
155 /* BusMode bits */
156 CmdReset = (1 << 0),
157 CacheAlign16 = 0x00008000,
158 BurstLen4 = 0x00000400,
159
160 /* Rx/TxPoll bits */
161 NormalTxPoll = (1 << 0),
162 NormalRxPoll = (1 << 0),
163
164 /* Tx/Rx descriptor status bits */
165 DescOwn = (1 << 31),
166 RxError = (1 << 15),
167 RxErrLong = (1 << 7),
168 RxErrCRC = (1 << 1),
169 RxErrFIFO = (1 << 0),
170 RxErrRunt = (1 << 11),
171 RxErrFrame = (1 << 14),
172 RingEnd = (1 << 25),
173 FirstFrag = (1 << 29),
174 LastFrag = (1 << 30),
175 TxError = (1 << 15),
176 TxFIFOUnder = (1 << 1),
177 TxLinkFail = (1 << 2) | (1 << 10) | (1 << 11),
178 TxMaxCol = (1 << 8),
179 TxOWC = (1 << 9),
180 TxJabber = (1 << 14),
181 SetupFrame = (1 << 27),
182 TxSwInt = (1 << 31),
183
184 /* MacStatus bits */
185 IntrOK = (1 << 16),
186 IntrErr = (1 << 15),
187 RxIntr = (1 << 6),
188 RxEmpty = (1 << 7),
189 TxIntr = (1 << 0),
190 TxEmpty = (1 << 2),
191 PciErr = (1 << 13),
192 TxState = (1 << 22) | (1 << 21) | (1 << 20),
193 RxState = (1 << 19) | (1 << 18) | (1 << 17),
194 LinkFail = (1 << 12),
195 LinkPass = (1 << 4),
196 RxStopped = (1 << 8),
197 TxStopped = (1 << 1),
198
199 /* MacMode bits */
200 TxEnable = (1 << 13),
201 RxEnable = (1 << 1),
202 RxTx = TxEnable | RxEnable,
203 FullDuplex = (1 << 9),
204 AcceptAllMulticast = (1 << 7),
205 AcceptAllPhys = (1 << 6),
206 BOCnt = (1 << 5),
207 MacModeClear = (1<<12) | (1<<11) | (1<<10) | (1<<8) | (1<<3) |
208 RxTx | BOCnt | AcceptAllPhys | AcceptAllMulticast,
209
210 /* ROMCmd bits */
211 EE_SHIFT_CLK = 0x02, /* EEPROM shift clock. */
212 EE_CS = 0x01, /* EEPROM chip select. */
213 EE_DATA_WRITE = 0x04, /* Data from the Tulip to EEPROM. */
214 EE_WRITE_0 = 0x01,
215 EE_WRITE_1 = 0x05,
216 EE_DATA_READ = 0x08, /* Data from the EEPROM chip. */
217 EE_ENB = (0x4800 | EE_CS),
218
219 /* The EEPROM commands include the alway-set leading bit. */
220 EE_READ_CMD = 6,
221
222 /* RxMissed bits */
223 RxMissedOver = (1 << 16),
224 RxMissedMask = 0xffff,
225
226 /* SROM-related bits */
227 SROMC0InfoLeaf = 27,
228 MediaBlockMask = 0x3f,
229 MediaCustomCSRs = (1 << 6),
230
231 /* PCIPM bits */
232 PM_Sleep = (1 << 31),
233 PM_Snooze = (1 << 30),
234 PM_Mask = PM_Sleep | PM_Snooze,
235
236 /* SIAStatus bits */
237 NWayState = (1 << 14) | (1 << 13) | (1 << 12),
238 NWayRestart = (1 << 12),
239 NonselPortActive = (1 << 9),
240 LinkFailStatus = (1 << 2),
241 NetCxnErr = (1 << 1),
242};
243
244static const u32 de_intr_mask =
245 IntrOK | IntrErr | RxIntr | RxEmpty | TxIntr | TxEmpty |
246 LinkPass | LinkFail | PciErr;
247
248/*
249 * Set the programmable burst length to 4 longwords for all:
250 * DMA errors result without these values. Cache align 16 long.
251 */
252static const u32 de_bus_mode = CacheAlign16 | BurstLen4;
253
254struct de_srom_media_block {
255 u8 opts;
256 u16 csr13;
257 u16 csr14;
258 u16 csr15;
259} __attribute__((packed));
260
261struct de_srom_info_leaf {
262 u16 default_media;
263 u8 n_blocks;
264 u8 unused;
265} __attribute__((packed));
266
267struct de_desc {
268 u32 opts1;
269 u32 opts2;
270 u32 addr1;
271 u32 addr2;
272};
273
274struct media_info {
275 u16 type; /* DE_MEDIA_xxx */
276 u16 csr13;
277 u16 csr14;
278 u16 csr15;
279};
280
281struct ring_info {
282 struct sk_buff *skb;
283 dma_addr_t mapping;
284};
285
286struct de_private {
287 unsigned tx_head;
288 unsigned tx_tail;
289 unsigned rx_tail;
290
291 void __iomem *regs;
292 struct net_device *dev;
293 spinlock_t lock;
294
295 struct de_desc *rx_ring;
296 struct de_desc *tx_ring;
297 struct ring_info tx_skb[DE_TX_RING_SIZE];
298 struct ring_info rx_skb[DE_RX_RING_SIZE];
299 unsigned rx_buf_sz;
300 dma_addr_t ring_dma;
301
302 u32 msg_enable;
303
304 struct net_device_stats net_stats;
305
306 struct pci_dev *pdev;
307
308 u16 setup_frame[DE_SETUP_FRAME_WORDS];
309
310 u32 media_type;
311 u32 media_supported;
312 u32 media_advertise;
313 struct media_info media[DE_MAX_MEDIA];
314 struct timer_list media_timer;
315
316 u8 *ee_data;
317 unsigned board_idx;
318 unsigned de21040 : 1;
319 unsigned media_lock : 1;
320};
321
322
323static void de_set_rx_mode (struct net_device *dev);
324static void de_tx (struct de_private *de);
325static void de_clean_rings (struct de_private *de);
326static void de_media_interrupt (struct de_private *de, u32 status);
327static void de21040_media_timer (unsigned long data);
328static void de21041_media_timer (unsigned long data);
329static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media);
330
331
332static struct pci_device_id de_pci_tbl[] = {
333 { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
334 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
335 { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS,
336 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
337 { },
338};
339MODULE_DEVICE_TABLE(pci, de_pci_tbl);
340
341static const char * const media_name[DE_MAX_MEDIA] = {
342 "10baseT auto",
343 "BNC",
344 "AUI",
345 "10baseT-HD",
346 "10baseT-FD"
347};
348
349/* 21040 transceiver register settings:
350 * TP AUTO(unused), BNC(unused), AUI, TP, TP FD*/
351static u16 t21040_csr13[] = { 0, 0, 0x8F09, 0x8F01, 0x8F01, };
352static u16 t21040_csr14[] = { 0, 0, 0x0705, 0xFFFF, 0xFFFD, };
353static u16 t21040_csr15[] = { 0, 0, 0x0006, 0x0000, 0x0000, };
354
355/* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/
356static u16 t21041_csr13[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, };
357static u16 t21041_csr14[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x6F3F, 0x6F3D, };
358static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
359
360
361#define dr32(reg) readl(de->regs + (reg))
362#define dw32(reg,val) writel((val), de->regs + (reg))
363
364
365static void de_rx_err_acct (struct de_private *de, unsigned rx_tail,
366 u32 status, u32 len)
367{
368 if (netif_msg_rx_err (de))
369 printk (KERN_DEBUG
370 "%s: rx err, slot %d status 0x%x len %d\n",
371 de->dev->name, rx_tail, status, len);
372
373 if ((status & 0x38000300) != 0x0300) {
374 /* Ingore earlier buffers. */
375 if ((status & 0xffff) != 0x7fff) {
376 if (netif_msg_rx_err(de))
377 printk(KERN_WARNING "%s: Oversized Ethernet frame "
378 "spanned multiple buffers, status %8.8x!\n",
379 de->dev->name, status);
380 de->net_stats.rx_length_errors++;
381 }
382 } else if (status & RxError) {
383 /* There was a fatal error. */
384 de->net_stats.rx_errors++; /* end of a packet.*/
385 if (status & 0x0890) de->net_stats.rx_length_errors++;
386 if (status & RxErrCRC) de->net_stats.rx_crc_errors++;
387 if (status & RxErrFIFO) de->net_stats.rx_fifo_errors++;
388 }
389}
390
391static void de_rx (struct de_private *de)
392{
393 unsigned rx_tail = de->rx_tail;
394 unsigned rx_work = DE_RX_RING_SIZE;
395 unsigned drop = 0;
396 int rc;
397
398 while (rx_work--) {
399 u32 status, len;
400 dma_addr_t mapping;
401 struct sk_buff *skb, *copy_skb;
402 unsigned copying_skb, buflen;
403
404 skb = de->rx_skb[rx_tail].skb;
405 if (!skb)
406 BUG();
407 rmb();
408 status = le32_to_cpu(de->rx_ring[rx_tail].opts1);
409 if (status & DescOwn)
410 break;
411
412 len = ((status >> 16) & 0x7ff) - 4;
413 mapping = de->rx_skb[rx_tail].mapping;
414
415 if (unlikely(drop)) {
416 de->net_stats.rx_dropped++;
417 goto rx_next;
418 }
419
420 if (unlikely((status & 0x38008300) != 0x0300)) {
421 de_rx_err_acct(de, rx_tail, status, len);
422 goto rx_next;
423 }
424
425 copying_skb = (len <= rx_copybreak);
426
427 if (unlikely(netif_msg_rx_status(de)))
428 printk(KERN_DEBUG "%s: rx slot %d status 0x%x len %d copying? %d\n",
429 de->dev->name, rx_tail, status, len,
430 copying_skb);
431
432 buflen = copying_skb ? (len + RX_OFFSET) : de->rx_buf_sz;
433 copy_skb = dev_alloc_skb (buflen);
434 if (unlikely(!copy_skb)) {
435 de->net_stats.rx_dropped++;
436 drop = 1;
437 rx_work = 100;
438 goto rx_next;
439 }
440 copy_skb->dev = de->dev;
441
442 if (!copying_skb) {
443 pci_unmap_single(de->pdev, mapping,
444 buflen, PCI_DMA_FROMDEVICE);
445 skb_put(skb, len);
446
447 mapping =
448 de->rx_skb[rx_tail].mapping =
David S. Miller689be432005-06-28 15:25:31 -0700449 pci_map_single(de->pdev, copy_skb->data,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700450 buflen, PCI_DMA_FROMDEVICE);
451 de->rx_skb[rx_tail].skb = copy_skb;
452 } else {
453 pci_dma_sync_single_for_cpu(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
454 skb_reserve(copy_skb, RX_OFFSET);
David S. Miller689be432005-06-28 15:25:31 -0700455 memcpy(skb_put(copy_skb, len), skb->data, len);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700456
457 pci_dma_sync_single_for_device(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
458
459 /* We'll reuse the original ring buffer. */
460 skb = copy_skb;
461 }
462
463 skb->protocol = eth_type_trans (skb, de->dev);
464
465 de->net_stats.rx_packets++;
466 de->net_stats.rx_bytes += skb->len;
467 de->dev->last_rx = jiffies;
468 rc = netif_rx (skb);
469 if (rc == NET_RX_DROP)
470 drop = 1;
471
472rx_next:
473 de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
474 if (rx_tail == (DE_RX_RING_SIZE - 1))
475 de->rx_ring[rx_tail].opts2 =
476 cpu_to_le32(RingEnd | de->rx_buf_sz);
477 else
478 de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz);
479 de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping);
480 rx_tail = NEXT_RX(rx_tail);
481 }
482
483 if (!rx_work)
484 printk(KERN_WARNING "%s: rx work limit reached\n", de->dev->name);
485
486 de->rx_tail = rx_tail;
487}
488
489static irqreturn_t de_interrupt (int irq, void *dev_instance, struct pt_regs *regs)
490{
491 struct net_device *dev = dev_instance;
492 struct de_private *de = dev->priv;
493 u32 status;
494
495 status = dr32(MacStatus);
496 if ((!(status & (IntrOK|IntrErr))) || (status == 0xFFFF))
497 return IRQ_NONE;
498
499 if (netif_msg_intr(de))
500 printk(KERN_DEBUG "%s: intr, status %08x mode %08x desc %u/%u/%u\n",
501 dev->name, status, dr32(MacMode), de->rx_tail, de->tx_head, de->tx_tail);
502
503 dw32(MacStatus, status);
504
505 if (status & (RxIntr | RxEmpty)) {
506 de_rx(de);
507 if (status & RxEmpty)
508 dw32(RxPoll, NormalRxPoll);
509 }
510
511 spin_lock(&de->lock);
512
513 if (status & (TxIntr | TxEmpty))
514 de_tx(de);
515
516 if (status & (LinkPass | LinkFail))
517 de_media_interrupt(de, status);
518
519 spin_unlock(&de->lock);
520
521 if (status & PciErr) {
522 u16 pci_status;
523
524 pci_read_config_word(de->pdev, PCI_STATUS, &pci_status);
525 pci_write_config_word(de->pdev, PCI_STATUS, pci_status);
526 printk(KERN_ERR "%s: PCI bus error, status=%08x, PCI status=%04x\n",
527 dev->name, status, pci_status);
528 }
529
530 return IRQ_HANDLED;
531}
532
533static void de_tx (struct de_private *de)
534{
535 unsigned tx_head = de->tx_head;
536 unsigned tx_tail = de->tx_tail;
537
538 while (tx_tail != tx_head) {
539 struct sk_buff *skb;
540 u32 status;
541
542 rmb();
543 status = le32_to_cpu(de->tx_ring[tx_tail].opts1);
544 if (status & DescOwn)
545 break;
546
547 skb = de->tx_skb[tx_tail].skb;
548 if (!skb)
549 BUG();
550 if (unlikely(skb == DE_DUMMY_SKB))
551 goto next;
552
553 if (unlikely(skb == DE_SETUP_SKB)) {
554 pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
555 sizeof(de->setup_frame), PCI_DMA_TODEVICE);
556 goto next;
557 }
558
559 pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
560 skb->len, PCI_DMA_TODEVICE);
561
562 if (status & LastFrag) {
563 if (status & TxError) {
564 if (netif_msg_tx_err(de))
565 printk(KERN_DEBUG "%s: tx err, status 0x%x\n",
566 de->dev->name, status);
567 de->net_stats.tx_errors++;
568 if (status & TxOWC)
569 de->net_stats.tx_window_errors++;
570 if (status & TxMaxCol)
571 de->net_stats.tx_aborted_errors++;
572 if (status & TxLinkFail)
573 de->net_stats.tx_carrier_errors++;
574 if (status & TxFIFOUnder)
575 de->net_stats.tx_fifo_errors++;
576 } else {
577 de->net_stats.tx_packets++;
578 de->net_stats.tx_bytes += skb->len;
579 if (netif_msg_tx_done(de))
580 printk(KERN_DEBUG "%s: tx done, slot %d\n", de->dev->name, tx_tail);
581 }
582 dev_kfree_skb_irq(skb);
583 }
584
585next:
586 de->tx_skb[tx_tail].skb = NULL;
587
588 tx_tail = NEXT_TX(tx_tail);
589 }
590
591 de->tx_tail = tx_tail;
592
593 if (netif_queue_stopped(de->dev) && (TX_BUFFS_AVAIL(de) > (DE_TX_RING_SIZE / 4)))
594 netif_wake_queue(de->dev);
595}
596
597static int de_start_xmit (struct sk_buff *skb, struct net_device *dev)
598{
599 struct de_private *de = dev->priv;
600 unsigned int entry, tx_free;
601 u32 mapping, len, flags = FirstFrag | LastFrag;
602 struct de_desc *txd;
603
604 spin_lock_irq(&de->lock);
605
606 tx_free = TX_BUFFS_AVAIL(de);
607 if (tx_free == 0) {
608 netif_stop_queue(dev);
609 spin_unlock_irq(&de->lock);
610 return 1;
611 }
612 tx_free--;
613
614 entry = de->tx_head;
615
616 txd = &de->tx_ring[entry];
617
618 len = skb->len;
619 mapping = pci_map_single(de->pdev, skb->data, len, PCI_DMA_TODEVICE);
620 if (entry == (DE_TX_RING_SIZE - 1))
621 flags |= RingEnd;
622 if (!tx_free || (tx_free == (DE_TX_RING_SIZE / 2)))
623 flags |= TxSwInt;
624 flags |= len;
625 txd->opts2 = cpu_to_le32(flags);
626 txd->addr1 = cpu_to_le32(mapping);
627
628 de->tx_skb[entry].skb = skb;
629 de->tx_skb[entry].mapping = mapping;
630 wmb();
631
632 txd->opts1 = cpu_to_le32(DescOwn);
633 wmb();
634
635 de->tx_head = NEXT_TX(entry);
636 if (netif_msg_tx_queued(de))
637 printk(KERN_DEBUG "%s: tx queued, slot %d, skblen %d\n",
638 dev->name, entry, skb->len);
639
640 if (tx_free == 0)
641 netif_stop_queue(dev);
642
643 spin_unlock_irq(&de->lock);
644
645 /* Trigger an immediate transmit demand. */
646 dw32(TxPoll, NormalTxPoll);
647 dev->trans_start = jiffies;
648
649 return 0;
650}
651
652/* Set or clear the multicast filter for this adaptor.
653 Note that we only use exclusion around actually queueing the
654 new frame, not around filling de->setup_frame. This is non-deterministic
655 when re-entered but still correct. */
656
657#undef set_bit_le
658#define set_bit_le(i,p) do { ((char *)(p))[(i)/8] |= (1<<((i)%8)); } while(0)
659
660static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
661{
662 struct de_private *de = dev->priv;
663 u16 hash_table[32];
664 struct dev_mc_list *mclist;
665 int i;
666 u16 *eaddrs;
667
668 memset(hash_table, 0, sizeof(hash_table));
669 set_bit_le(255, hash_table); /* Broadcast entry */
670 /* This should work on big-endian machines as well. */
671 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
672 i++, mclist = mclist->next) {
673 int index = ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x1ff;
674
675 set_bit_le(index, hash_table);
676
677 for (i = 0; i < 32; i++) {
678 *setup_frm++ = hash_table[i];
679 *setup_frm++ = hash_table[i];
680 }
681 setup_frm = &de->setup_frame[13*6];
682 }
683
684 /* Fill the final entry with our physical address. */
685 eaddrs = (u16 *)dev->dev_addr;
686 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
687 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
688 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
689}
690
691static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
692{
693 struct de_private *de = dev->priv;
694 struct dev_mc_list *mclist;
695 int i;
696 u16 *eaddrs;
697
698 /* We have <= 14 addresses so we can use the wonderful
699 16 address perfect filtering of the Tulip. */
700 for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
701 i++, mclist = mclist->next) {
702 eaddrs = (u16 *)mclist->dmi_addr;
703 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
704 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
705 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
706 }
707 /* Fill the unused entries with the broadcast address. */
708 memset(setup_frm, 0xff, (15-i)*12);
709 setup_frm = &de->setup_frame[15*6];
710
711 /* Fill the final entry with our physical address. */
712 eaddrs = (u16 *)dev->dev_addr;
713 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
714 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
715 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
716}
717
718
719static void __de_set_rx_mode (struct net_device *dev)
720{
721 struct de_private *de = dev->priv;
722 u32 macmode;
723 unsigned int entry;
724 u32 mapping;
725 struct de_desc *txd;
726 struct de_desc *dummy_txd = NULL;
727
728 macmode = dr32(MacMode) & ~(AcceptAllMulticast | AcceptAllPhys);
729
730 if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
731 macmode |= AcceptAllMulticast | AcceptAllPhys;
732 goto out;
733 }
734
735 if ((dev->mc_count > 1000) || (dev->flags & IFF_ALLMULTI)) {
736 /* Too many to filter well -- accept all multicasts. */
737 macmode |= AcceptAllMulticast;
738 goto out;
739 }
740
741 /* Note that only the low-address shortword of setup_frame is valid!
742 The values are doubled for big-endian architectures. */
743 if (dev->mc_count > 14) /* Must use a multicast hash table. */
744 build_setup_frame_hash (de->setup_frame, dev);
745 else
746 build_setup_frame_perfect (de->setup_frame, dev);
747
748 /*
749 * Now add this frame to the Tx list.
750 */
751
752 entry = de->tx_head;
753
754 /* Avoid a chip errata by prefixing a dummy entry. */
755 if (entry != 0) {
756 de->tx_skb[entry].skb = DE_DUMMY_SKB;
757
758 dummy_txd = &de->tx_ring[entry];
759 dummy_txd->opts2 = (entry == (DE_TX_RING_SIZE - 1)) ?
760 cpu_to_le32(RingEnd) : 0;
761 dummy_txd->addr1 = 0;
762
763 /* Must set DescOwned later to avoid race with chip */
764
765 entry = NEXT_TX(entry);
766 }
767
768 de->tx_skb[entry].skb = DE_SETUP_SKB;
769 de->tx_skb[entry].mapping = mapping =
770 pci_map_single (de->pdev, de->setup_frame,
771 sizeof (de->setup_frame), PCI_DMA_TODEVICE);
772
773 /* Put the setup frame on the Tx list. */
774 txd = &de->tx_ring[entry];
775 if (entry == (DE_TX_RING_SIZE - 1))
776 txd->opts2 = cpu_to_le32(SetupFrame | RingEnd | sizeof (de->setup_frame));
777 else
778 txd->opts2 = cpu_to_le32(SetupFrame | sizeof (de->setup_frame));
779 txd->addr1 = cpu_to_le32(mapping);
780 wmb();
781
782 txd->opts1 = cpu_to_le32(DescOwn);
783 wmb();
784
785 if (dummy_txd) {
786 dummy_txd->opts1 = cpu_to_le32(DescOwn);
787 wmb();
788 }
789
790 de->tx_head = NEXT_TX(entry);
791
792 if (TX_BUFFS_AVAIL(de) < 0)
793 BUG();
794 if (TX_BUFFS_AVAIL(de) == 0)
795 netif_stop_queue(dev);
796
797 /* Trigger an immediate transmit demand. */
798 dw32(TxPoll, NormalTxPoll);
799
800out:
801 if (macmode != dr32(MacMode))
802 dw32(MacMode, macmode);
803}
804
805static void de_set_rx_mode (struct net_device *dev)
806{
807 unsigned long flags;
808 struct de_private *de = dev->priv;
809
810 spin_lock_irqsave (&de->lock, flags);
811 __de_set_rx_mode(dev);
812 spin_unlock_irqrestore (&de->lock, flags);
813}
814
815static inline void de_rx_missed(struct de_private *de, u32 rx_missed)
816{
817 if (unlikely(rx_missed & RxMissedOver))
818 de->net_stats.rx_missed_errors += RxMissedMask;
819 else
820 de->net_stats.rx_missed_errors += (rx_missed & RxMissedMask);
821}
822
823static void __de_get_stats(struct de_private *de)
824{
825 u32 tmp = dr32(RxMissed); /* self-clearing */
826
827 de_rx_missed(de, tmp);
828}
829
830static struct net_device_stats *de_get_stats(struct net_device *dev)
831{
832 struct de_private *de = dev->priv;
833
834 /* The chip only need report frame silently dropped. */
835 spin_lock_irq(&de->lock);
836 if (netif_running(dev) && netif_device_present(dev))
837 __de_get_stats(de);
838 spin_unlock_irq(&de->lock);
839
840 return &de->net_stats;
841}
842
843static inline int de_is_running (struct de_private *de)
844{
845 return (dr32(MacStatus) & (RxState | TxState)) ? 1 : 0;
846}
847
848static void de_stop_rxtx (struct de_private *de)
849{
850 u32 macmode;
851 unsigned int work = 1000;
852
853 macmode = dr32(MacMode);
854 if (macmode & RxTx) {
855 dw32(MacMode, macmode & ~RxTx);
856 dr32(MacMode);
857 }
858
859 while (--work > 0) {
860 if (!de_is_running(de))
861 return;
862 cpu_relax();
863 }
864
865 printk(KERN_WARNING "%s: timeout expired stopping DMA\n", de->dev->name);
866}
867
868static inline void de_start_rxtx (struct de_private *de)
869{
870 u32 macmode;
871
872 macmode = dr32(MacMode);
873 if ((macmode & RxTx) != RxTx) {
874 dw32(MacMode, macmode | RxTx);
875 dr32(MacMode);
876 }
877}
878
879static void de_stop_hw (struct de_private *de)
880{
881
882 udelay(5);
883 dw32(IntrMask, 0);
884
885 de_stop_rxtx(de);
886
887 dw32(MacStatus, dr32(MacStatus));
888
889 udelay(10);
890
891 de->rx_tail = 0;
892 de->tx_head = de->tx_tail = 0;
893}
894
895static void de_link_up(struct de_private *de)
896{
897 if (!netif_carrier_ok(de->dev)) {
898 netif_carrier_on(de->dev);
899 if (netif_msg_link(de))
900 printk(KERN_INFO "%s: link up, media %s\n",
901 de->dev->name, media_name[de->media_type]);
902 }
903}
904
905static void de_link_down(struct de_private *de)
906{
907 if (netif_carrier_ok(de->dev)) {
908 netif_carrier_off(de->dev);
909 if (netif_msg_link(de))
910 printk(KERN_INFO "%s: link down\n", de->dev->name);
911 }
912}
913
914static void de_set_media (struct de_private *de)
915{
916 unsigned media = de->media_type;
917 u32 macmode = dr32(MacMode);
918
919 if (de_is_running(de))
920 BUG();
921
922 if (de->de21040)
923 dw32(CSR11, FULL_DUPLEX_MAGIC);
924 dw32(CSR13, 0); /* Reset phy */
925 dw32(CSR14, de->media[media].csr14);
926 dw32(CSR15, de->media[media].csr15);
927 dw32(CSR13, de->media[media].csr13);
928
929 /* must delay 10ms before writing to other registers,
930 * especially CSR6
931 */
932 mdelay(10);
933
934 if (media == DE_MEDIA_TP_FD)
935 macmode |= FullDuplex;
936 else
937 macmode &= ~FullDuplex;
938
939 if (netif_msg_link(de)) {
940 printk(KERN_INFO "%s: set link %s\n"
941 KERN_INFO "%s: mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x\n"
942 KERN_INFO "%s: set mode 0x%x, set sia 0x%x,0x%x,0x%x\n",
943 de->dev->name, media_name[media],
944 de->dev->name, dr32(MacMode), dr32(SIAStatus),
945 dr32(CSR13), dr32(CSR14), dr32(CSR15),
946 de->dev->name, macmode, de->media[media].csr13,
947 de->media[media].csr14, de->media[media].csr15);
948 }
949 if (macmode != dr32(MacMode))
950 dw32(MacMode, macmode);
951}
952
953static void de_next_media (struct de_private *de, u32 *media,
954 unsigned int n_media)
955{
956 unsigned int i;
957
958 for (i = 0; i < n_media; i++) {
959 if (de_ok_to_advertise(de, media[i])) {
960 de->media_type = media[i];
961 return;
962 }
963 }
964}
965
966static void de21040_media_timer (unsigned long data)
967{
968 struct de_private *de = (struct de_private *) data;
969 struct net_device *dev = de->dev;
970 u32 status = dr32(SIAStatus);
971 unsigned int carrier;
972 unsigned long flags;
973
974 carrier = (status & NetCxnErr) ? 0 : 1;
975
976 if (carrier) {
977 if (de->media_type != DE_MEDIA_AUI && (status & LinkFailStatus))
978 goto no_link_yet;
979
980 de->media_timer.expires = jiffies + DE_TIMER_LINK;
981 add_timer(&de->media_timer);
982 if (!netif_carrier_ok(dev))
983 de_link_up(de);
984 else
985 if (netif_msg_timer(de))
986 printk(KERN_INFO "%s: %s link ok, status %x\n",
987 dev->name, media_name[de->media_type],
988 status);
989 return;
990 }
991
992 de_link_down(de);
993
994 if (de->media_lock)
995 return;
996
997 if (de->media_type == DE_MEDIA_AUI) {
998 u32 next_state = DE_MEDIA_TP;
999 de_next_media(de, &next_state, 1);
1000 } else {
1001 u32 next_state = DE_MEDIA_AUI;
1002 de_next_media(de, &next_state, 1);
1003 }
1004
1005 spin_lock_irqsave(&de->lock, flags);
1006 de_stop_rxtx(de);
1007 spin_unlock_irqrestore(&de->lock, flags);
1008 de_set_media(de);
1009 de_start_rxtx(de);
1010
1011no_link_yet:
1012 de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1013 add_timer(&de->media_timer);
1014
1015 if (netif_msg_timer(de))
1016 printk(KERN_INFO "%s: no link, trying media %s, status %x\n",
1017 dev->name, media_name[de->media_type], status);
1018}
1019
1020static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media)
1021{
1022 switch (new_media) {
1023 case DE_MEDIA_TP_AUTO:
1024 if (!(de->media_advertise & ADVERTISED_Autoneg))
1025 return 0;
1026 if (!(de->media_advertise & (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full)))
1027 return 0;
1028 break;
1029 case DE_MEDIA_BNC:
1030 if (!(de->media_advertise & ADVERTISED_BNC))
1031 return 0;
1032 break;
1033 case DE_MEDIA_AUI:
1034 if (!(de->media_advertise & ADVERTISED_AUI))
1035 return 0;
1036 break;
1037 case DE_MEDIA_TP:
1038 if (!(de->media_advertise & ADVERTISED_10baseT_Half))
1039 return 0;
1040 break;
1041 case DE_MEDIA_TP_FD:
1042 if (!(de->media_advertise & ADVERTISED_10baseT_Full))
1043 return 0;
1044 break;
1045 }
1046
1047 return 1;
1048}
1049
1050static void de21041_media_timer (unsigned long data)
1051{
1052 struct de_private *de = (struct de_private *) data;
1053 struct net_device *dev = de->dev;
1054 u32 status = dr32(SIAStatus);
1055 unsigned int carrier;
1056 unsigned long flags;
1057
1058 carrier = (status & NetCxnErr) ? 0 : 1;
1059
1060 if (carrier) {
1061 if ((de->media_type == DE_MEDIA_TP_AUTO ||
1062 de->media_type == DE_MEDIA_TP ||
1063 de->media_type == DE_MEDIA_TP_FD) &&
1064 (status & LinkFailStatus))
1065 goto no_link_yet;
1066
1067 de->media_timer.expires = jiffies + DE_TIMER_LINK;
1068 add_timer(&de->media_timer);
1069 if (!netif_carrier_ok(dev))
1070 de_link_up(de);
1071 else
1072 if (netif_msg_timer(de))
1073 printk(KERN_INFO "%s: %s link ok, mode %x status %x\n",
1074 dev->name, media_name[de->media_type],
1075 dr32(MacMode), status);
1076 return;
1077 }
1078
1079 de_link_down(de);
1080
1081 /* if media type locked, don't switch media */
1082 if (de->media_lock)
1083 goto set_media;
1084
1085 /* if activity detected, use that as hint for new media type */
1086 if (status & NonselPortActive) {
1087 unsigned int have_media = 1;
1088
1089 /* if AUI/BNC selected, then activity is on TP port */
1090 if (de->media_type == DE_MEDIA_AUI ||
1091 de->media_type == DE_MEDIA_BNC) {
1092 if (de_ok_to_advertise(de, DE_MEDIA_TP_AUTO))
1093 de->media_type = DE_MEDIA_TP_AUTO;
1094 else
1095 have_media = 0;
1096 }
1097
1098 /* TP selected. If there is only TP and BNC, then it's BNC */
1099 else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_BNC) &&
1100 de_ok_to_advertise(de, DE_MEDIA_BNC))
1101 de->media_type = DE_MEDIA_BNC;
1102
1103 /* TP selected. If there is only TP and AUI, then it's AUI */
1104 else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_AUI) &&
1105 de_ok_to_advertise(de, DE_MEDIA_AUI))
1106 de->media_type = DE_MEDIA_AUI;
1107
1108 /* otherwise, ignore the hint */
1109 else
1110 have_media = 0;
1111
1112 if (have_media)
1113 goto set_media;
1114 }
1115
1116 /*
1117 * Absent or ambiguous activity hint, move to next advertised
1118 * media state. If de->media_type is left unchanged, this
1119 * simply resets the PHY and reloads the current media settings.
1120 */
1121 if (de->media_type == DE_MEDIA_AUI) {
1122 u32 next_states[] = { DE_MEDIA_BNC, DE_MEDIA_TP_AUTO };
1123 de_next_media(de, next_states, ARRAY_SIZE(next_states));
1124 } else if (de->media_type == DE_MEDIA_BNC) {
1125 u32 next_states[] = { DE_MEDIA_TP_AUTO, DE_MEDIA_AUI };
1126 de_next_media(de, next_states, ARRAY_SIZE(next_states));
1127 } else {
1128 u32 next_states[] = { DE_MEDIA_AUI, DE_MEDIA_BNC, DE_MEDIA_TP_AUTO };
1129 de_next_media(de, next_states, ARRAY_SIZE(next_states));
1130 }
1131
1132set_media:
1133 spin_lock_irqsave(&de->lock, flags);
1134 de_stop_rxtx(de);
1135 spin_unlock_irqrestore(&de->lock, flags);
1136 de_set_media(de);
1137 de_start_rxtx(de);
1138
1139no_link_yet:
1140 de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1141 add_timer(&de->media_timer);
1142
1143 if (netif_msg_timer(de))
1144 printk(KERN_INFO "%s: no link, trying media %s, status %x\n",
1145 dev->name, media_name[de->media_type], status);
1146}
1147
1148static void de_media_interrupt (struct de_private *de, u32 status)
1149{
1150 if (status & LinkPass) {
1151 de_link_up(de);
1152 mod_timer(&de->media_timer, jiffies + DE_TIMER_LINK);
1153 return;
1154 }
1155
1156 if (!(status & LinkFail))
1157 BUG();
1158
1159 if (netif_carrier_ok(de->dev)) {
1160 de_link_down(de);
1161 mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1162 }
1163}
1164
1165static int de_reset_mac (struct de_private *de)
1166{
1167 u32 status, tmp;
1168
1169 /*
1170 * Reset MAC. de4x5.c and tulip.c examined for "advice"
1171 * in this area.
1172 */
1173
1174 if (dr32(BusMode) == 0xffffffff)
1175 return -EBUSY;
1176
1177 /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
1178 dw32 (BusMode, CmdReset);
1179 mdelay (1);
1180
1181 dw32 (BusMode, de_bus_mode);
1182 mdelay (1);
1183
1184 for (tmp = 0; tmp < 5; tmp++) {
1185 dr32 (BusMode);
1186 mdelay (1);
1187 }
1188
1189 mdelay (1);
1190
1191 status = dr32(MacStatus);
1192 if (status & (RxState | TxState))
1193 return -EBUSY;
1194 if (status == 0xffffffff)
1195 return -ENODEV;
1196 return 0;
1197}
1198
1199static void de_adapter_wake (struct de_private *de)
1200{
1201 u32 pmctl;
1202
1203 if (de->de21040)
1204 return;
1205
1206 pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1207 if (pmctl & PM_Mask) {
1208 pmctl &= ~PM_Mask;
1209 pci_write_config_dword(de->pdev, PCIPM, pmctl);
1210
1211 /* de4x5.c delays, so we do too */
1212 msleep(10);
1213 }
1214}
1215
1216static void de_adapter_sleep (struct de_private *de)
1217{
1218 u32 pmctl;
1219
1220 if (de->de21040)
1221 return;
1222
1223 pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1224 pmctl |= PM_Sleep;
1225 pci_write_config_dword(de->pdev, PCIPM, pmctl);
1226}
1227
1228static int de_init_hw (struct de_private *de)
1229{
1230 struct net_device *dev = de->dev;
1231 u32 macmode;
1232 int rc;
1233
1234 de_adapter_wake(de);
1235
1236 macmode = dr32(MacMode) & ~MacModeClear;
1237
1238 rc = de_reset_mac(de);
1239 if (rc)
1240 return rc;
1241
1242 de_set_media(de); /* reset phy */
1243
1244 dw32(RxRingAddr, de->ring_dma);
1245 dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE));
1246
1247 dw32(MacMode, RxTx | macmode);
1248
1249 dr32(RxMissed); /* self-clearing */
1250
1251 dw32(IntrMask, de_intr_mask);
1252
1253 de_set_rx_mode(dev);
1254
1255 return 0;
1256}
1257
1258static int de_refill_rx (struct de_private *de)
1259{
1260 unsigned i;
1261
1262 for (i = 0; i < DE_RX_RING_SIZE; i++) {
1263 struct sk_buff *skb;
1264
1265 skb = dev_alloc_skb(de->rx_buf_sz);
1266 if (!skb)
1267 goto err_out;
1268
1269 skb->dev = de->dev;
1270
1271 de->rx_skb[i].mapping = pci_map_single(de->pdev,
David S. Miller689be432005-06-28 15:25:31 -07001272 skb->data, de->rx_buf_sz, PCI_DMA_FROMDEVICE);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001273 de->rx_skb[i].skb = skb;
1274
1275 de->rx_ring[i].opts1 = cpu_to_le32(DescOwn);
1276 if (i == (DE_RX_RING_SIZE - 1))
1277 de->rx_ring[i].opts2 =
1278 cpu_to_le32(RingEnd | de->rx_buf_sz);
1279 else
1280 de->rx_ring[i].opts2 = cpu_to_le32(de->rx_buf_sz);
1281 de->rx_ring[i].addr1 = cpu_to_le32(de->rx_skb[i].mapping);
1282 de->rx_ring[i].addr2 = 0;
1283 }
1284
1285 return 0;
1286
1287err_out:
1288 de_clean_rings(de);
1289 return -ENOMEM;
1290}
1291
1292static int de_init_rings (struct de_private *de)
1293{
1294 memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1295 de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1296
1297 de->rx_tail = 0;
1298 de->tx_head = de->tx_tail = 0;
1299
1300 return de_refill_rx (de);
1301}
1302
1303static int de_alloc_rings (struct de_private *de)
1304{
1305 de->rx_ring = pci_alloc_consistent(de->pdev, DE_RING_BYTES, &de->ring_dma);
1306 if (!de->rx_ring)
1307 return -ENOMEM;
1308 de->tx_ring = &de->rx_ring[DE_RX_RING_SIZE];
1309 return de_init_rings(de);
1310}
1311
1312static void de_clean_rings (struct de_private *de)
1313{
1314 unsigned i;
1315
1316 memset(de->rx_ring, 0, sizeof(struct de_desc) * DE_RX_RING_SIZE);
1317 de->rx_ring[DE_RX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1318 wmb();
1319 memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1320 de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1321 wmb();
1322
1323 for (i = 0; i < DE_RX_RING_SIZE; i++) {
1324 if (de->rx_skb[i].skb) {
1325 pci_unmap_single(de->pdev, de->rx_skb[i].mapping,
1326 de->rx_buf_sz, PCI_DMA_FROMDEVICE);
1327 dev_kfree_skb(de->rx_skb[i].skb);
1328 }
1329 }
1330
1331 for (i = 0; i < DE_TX_RING_SIZE; i++) {
1332 struct sk_buff *skb = de->tx_skb[i].skb;
1333 if ((skb) && (skb != DE_DUMMY_SKB)) {
1334 if (skb != DE_SETUP_SKB) {
1335 dev_kfree_skb(skb);
1336 de->net_stats.tx_dropped++;
1337 pci_unmap_single(de->pdev,
1338 de->tx_skb[i].mapping,
1339 skb->len, PCI_DMA_TODEVICE);
1340 } else {
1341 pci_unmap_single(de->pdev,
1342 de->tx_skb[i].mapping,
1343 sizeof(de->setup_frame),
1344 PCI_DMA_TODEVICE);
1345 }
1346 }
1347 }
1348
1349 memset(&de->rx_skb, 0, sizeof(struct ring_info) * DE_RX_RING_SIZE);
1350 memset(&de->tx_skb, 0, sizeof(struct ring_info) * DE_TX_RING_SIZE);
1351}
1352
1353static void de_free_rings (struct de_private *de)
1354{
1355 de_clean_rings(de);
1356 pci_free_consistent(de->pdev, DE_RING_BYTES, de->rx_ring, de->ring_dma);
1357 de->rx_ring = NULL;
1358 de->tx_ring = NULL;
1359}
1360
1361static int de_open (struct net_device *dev)
1362{
1363 struct de_private *de = dev->priv;
1364 int rc;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001365
1366 if (netif_msg_ifup(de))
1367 printk(KERN_DEBUG "%s: enabling interface\n", dev->name);
1368
1369 de->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1370
1371 rc = de_alloc_rings(de);
1372 if (rc) {
1373 printk(KERN_ERR "%s: ring allocation failure, err=%d\n",
1374 dev->name, rc);
1375 return rc;
1376 }
1377
Francois Romieu3f735b72006-03-08 22:41:15 +01001378 dw32(IntrMask, 0);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001379
1380 rc = request_irq(dev->irq, de_interrupt, SA_SHIRQ, dev->name, dev);
1381 if (rc) {
1382 printk(KERN_ERR "%s: IRQ %d request failure, err=%d\n",
1383 dev->name, dev->irq, rc);
Francois Romieu3f735b72006-03-08 22:41:15 +01001384 goto err_out_free;
1385 }
1386
1387 rc = de_init_hw(de);
1388 if (rc) {
1389 printk(KERN_ERR "%s: h/w init failure, err=%d\n",
1390 dev->name, rc);
1391 goto err_out_free_irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001392 }
1393
1394 netif_start_queue(dev);
1395 mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1396
1397 return 0;
1398
Francois Romieu3f735b72006-03-08 22:41:15 +01001399err_out_free_irq:
1400 free_irq(dev->irq, dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001401err_out_free:
1402 de_free_rings(de);
1403 return rc;
1404}
1405
1406static int de_close (struct net_device *dev)
1407{
1408 struct de_private *de = dev->priv;
1409 unsigned long flags;
1410
1411 if (netif_msg_ifdown(de))
1412 printk(KERN_DEBUG "%s: disabling interface\n", dev->name);
1413
1414 del_timer_sync(&de->media_timer);
1415
1416 spin_lock_irqsave(&de->lock, flags);
1417 de_stop_hw(de);
1418 netif_stop_queue(dev);
1419 netif_carrier_off(dev);
1420 spin_unlock_irqrestore(&de->lock, flags);
1421
1422 free_irq(dev->irq, dev);
1423
1424 de_free_rings(de);
1425 de_adapter_sleep(de);
1426 pci_disable_device(de->pdev);
1427 return 0;
1428}
1429
1430static void de_tx_timeout (struct net_device *dev)
1431{
1432 struct de_private *de = dev->priv;
1433
1434 printk(KERN_DEBUG "%s: NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
1435 dev->name, dr32(MacStatus), dr32(MacMode), dr32(SIAStatus),
1436 de->rx_tail, de->tx_head, de->tx_tail);
1437
1438 del_timer_sync(&de->media_timer);
1439
1440 disable_irq(dev->irq);
1441 spin_lock_irq(&de->lock);
1442
1443 de_stop_hw(de);
1444 netif_stop_queue(dev);
1445 netif_carrier_off(dev);
1446
1447 spin_unlock_irq(&de->lock);
1448 enable_irq(dev->irq);
1449
1450 /* Update the error counts. */
1451 __de_get_stats(de);
1452
1453 synchronize_irq(dev->irq);
1454 de_clean_rings(de);
1455
1456 de_init_hw(de);
1457
1458 netif_wake_queue(dev);
1459}
1460
1461static void __de_get_regs(struct de_private *de, u8 *buf)
1462{
1463 int i;
1464 u32 *rbuf = (u32 *)buf;
1465
1466 /* read all CSRs */
1467 for (i = 0; i < DE_NUM_REGS; i++)
1468 rbuf[i] = dr32(i * 8);
1469
1470 /* handle self-clearing RxMissed counter, CSR8 */
1471 de_rx_missed(de, rbuf[8]);
1472}
1473
1474static int __de_get_settings(struct de_private *de, struct ethtool_cmd *ecmd)
1475{
1476 ecmd->supported = de->media_supported;
1477 ecmd->transceiver = XCVR_INTERNAL;
1478 ecmd->phy_address = 0;
1479 ecmd->advertising = de->media_advertise;
1480
1481 switch (de->media_type) {
1482 case DE_MEDIA_AUI:
1483 ecmd->port = PORT_AUI;
1484 ecmd->speed = 5;
1485 break;
1486 case DE_MEDIA_BNC:
1487 ecmd->port = PORT_BNC;
1488 ecmd->speed = 2;
1489 break;
1490 default:
1491 ecmd->port = PORT_TP;
1492 ecmd->speed = SPEED_10;
1493 break;
1494 }
1495
1496 if (dr32(MacMode) & FullDuplex)
1497 ecmd->duplex = DUPLEX_FULL;
1498 else
1499 ecmd->duplex = DUPLEX_HALF;
1500
1501 if (de->media_lock)
1502 ecmd->autoneg = AUTONEG_DISABLE;
1503 else
1504 ecmd->autoneg = AUTONEG_ENABLE;
1505
1506 /* ignore maxtxpkt, maxrxpkt for now */
1507
1508 return 0;
1509}
1510
1511static int __de_set_settings(struct de_private *de, struct ethtool_cmd *ecmd)
1512{
1513 u32 new_media;
1514 unsigned int media_lock;
1515
1516 if (ecmd->speed != SPEED_10 && ecmd->speed != 5 && ecmd->speed != 2)
1517 return -EINVAL;
1518 if (de->de21040 && ecmd->speed == 2)
1519 return -EINVAL;
1520 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL)
1521 return -EINVAL;
1522 if (ecmd->port != PORT_TP && ecmd->port != PORT_AUI && ecmd->port != PORT_BNC)
1523 return -EINVAL;
1524 if (de->de21040 && ecmd->port == PORT_BNC)
1525 return -EINVAL;
1526 if (ecmd->transceiver != XCVR_INTERNAL)
1527 return -EINVAL;
1528 if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE)
1529 return -EINVAL;
1530 if (ecmd->advertising & ~de->media_supported)
1531 return -EINVAL;
1532 if (ecmd->autoneg == AUTONEG_ENABLE &&
1533 (!(ecmd->advertising & ADVERTISED_Autoneg)))
1534 return -EINVAL;
1535
1536 switch (ecmd->port) {
1537 case PORT_AUI:
1538 new_media = DE_MEDIA_AUI;
1539 if (!(ecmd->advertising & ADVERTISED_AUI))
1540 return -EINVAL;
1541 break;
1542 case PORT_BNC:
1543 new_media = DE_MEDIA_BNC;
1544 if (!(ecmd->advertising & ADVERTISED_BNC))
1545 return -EINVAL;
1546 break;
1547 default:
1548 if (ecmd->autoneg == AUTONEG_ENABLE)
1549 new_media = DE_MEDIA_TP_AUTO;
1550 else if (ecmd->duplex == DUPLEX_FULL)
1551 new_media = DE_MEDIA_TP_FD;
1552 else
1553 new_media = DE_MEDIA_TP;
1554 if (!(ecmd->advertising & ADVERTISED_TP))
1555 return -EINVAL;
1556 if (!(ecmd->advertising & (ADVERTISED_10baseT_Full | ADVERTISED_10baseT_Half)))
1557 return -EINVAL;
1558 break;
1559 }
1560
1561 media_lock = (ecmd->autoneg == AUTONEG_ENABLE) ? 0 : 1;
1562
1563 if ((new_media == de->media_type) &&
1564 (media_lock == de->media_lock) &&
1565 (ecmd->advertising == de->media_advertise))
1566 return 0; /* nothing to change */
1567
1568 de_link_down(de);
1569 de_stop_rxtx(de);
1570
1571 de->media_type = new_media;
1572 de->media_lock = media_lock;
1573 de->media_advertise = ecmd->advertising;
1574 de_set_media(de);
1575
1576 return 0;
1577}
1578
1579static void de_get_drvinfo (struct net_device *dev,struct ethtool_drvinfo *info)
1580{
1581 struct de_private *de = dev->priv;
1582
1583 strcpy (info->driver, DRV_NAME);
1584 strcpy (info->version, DRV_VERSION);
1585 strcpy (info->bus_info, pci_name(de->pdev));
1586 info->eedump_len = DE_EEPROM_SIZE;
1587}
1588
1589static int de_get_regs_len(struct net_device *dev)
1590{
1591 return DE_REGS_SIZE;
1592}
1593
1594static int de_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1595{
1596 struct de_private *de = dev->priv;
1597 int rc;
1598
1599 spin_lock_irq(&de->lock);
1600 rc = __de_get_settings(de, ecmd);
1601 spin_unlock_irq(&de->lock);
1602
1603 return rc;
1604}
1605
1606static int de_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1607{
1608 struct de_private *de = dev->priv;
1609 int rc;
1610
1611 spin_lock_irq(&de->lock);
1612 rc = __de_set_settings(de, ecmd);
1613 spin_unlock_irq(&de->lock);
1614
1615 return rc;
1616}
1617
1618static u32 de_get_msglevel(struct net_device *dev)
1619{
1620 struct de_private *de = dev->priv;
1621
1622 return de->msg_enable;
1623}
1624
1625static void de_set_msglevel(struct net_device *dev, u32 msglvl)
1626{
1627 struct de_private *de = dev->priv;
1628
1629 de->msg_enable = msglvl;
1630}
1631
1632static int de_get_eeprom(struct net_device *dev,
1633 struct ethtool_eeprom *eeprom, u8 *data)
1634{
1635 struct de_private *de = dev->priv;
1636
1637 if (!de->ee_data)
1638 return -EOPNOTSUPP;
1639 if ((eeprom->offset != 0) || (eeprom->magic != 0) ||
1640 (eeprom->len != DE_EEPROM_SIZE))
1641 return -EINVAL;
1642 memcpy(data, de->ee_data, eeprom->len);
1643
1644 return 0;
1645}
1646
1647static int de_nway_reset(struct net_device *dev)
1648{
1649 struct de_private *de = dev->priv;
1650 u32 status;
1651
1652 if (de->media_type != DE_MEDIA_TP_AUTO)
1653 return -EINVAL;
1654 if (netif_carrier_ok(de->dev))
1655 de_link_down(de);
1656
1657 status = dr32(SIAStatus);
1658 dw32(SIAStatus, (status & ~NWayState) | NWayRestart);
1659 if (netif_msg_link(de))
1660 printk(KERN_INFO "%s: link nway restart, status %x,%x\n",
1661 de->dev->name, status, dr32(SIAStatus));
1662 return 0;
1663}
1664
1665static void de_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1666 void *data)
1667{
1668 struct de_private *de = dev->priv;
1669
1670 regs->version = (DE_REGS_VER << 2) | de->de21040;
1671
1672 spin_lock_irq(&de->lock);
1673 __de_get_regs(de, data);
1674 spin_unlock_irq(&de->lock);
1675}
1676
1677static struct ethtool_ops de_ethtool_ops = {
1678 .get_link = ethtool_op_get_link,
1679 .get_tx_csum = ethtool_op_get_tx_csum,
1680 .get_sg = ethtool_op_get_sg,
1681 .get_drvinfo = de_get_drvinfo,
1682 .get_regs_len = de_get_regs_len,
1683 .get_settings = de_get_settings,
1684 .set_settings = de_set_settings,
1685 .get_msglevel = de_get_msglevel,
1686 .set_msglevel = de_set_msglevel,
1687 .get_eeprom = de_get_eeprom,
1688 .nway_reset = de_nway_reset,
1689 .get_regs = de_get_regs,
1690};
1691
1692static void __init de21040_get_mac_address (struct de_private *de)
1693{
1694 unsigned i;
1695
1696 dw32 (ROMCmd, 0); /* Reset the pointer with a dummy write. */
1697
1698 for (i = 0; i < 6; i++) {
1699 int value, boguscnt = 100000;
1700 do
1701 value = dr32(ROMCmd);
1702 while (value < 0 && --boguscnt > 0);
1703 de->dev->dev_addr[i] = value;
1704 udelay(1);
1705 if (boguscnt <= 0)
1706 printk(KERN_WARNING PFX "timeout reading 21040 MAC address byte %u\n", i);
1707 }
1708}
1709
1710static void __init de21040_get_media_info(struct de_private *de)
1711{
1712 unsigned int i;
1713
1714 de->media_type = DE_MEDIA_TP;
1715 de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full |
1716 SUPPORTED_10baseT_Half | SUPPORTED_AUI;
1717 de->media_advertise = de->media_supported;
1718
1719 for (i = 0; i < DE_MAX_MEDIA; i++) {
1720 switch (i) {
1721 case DE_MEDIA_AUI:
1722 case DE_MEDIA_TP:
1723 case DE_MEDIA_TP_FD:
1724 de->media[i].type = i;
1725 de->media[i].csr13 = t21040_csr13[i];
1726 de->media[i].csr14 = t21040_csr14[i];
1727 de->media[i].csr15 = t21040_csr15[i];
1728 break;
1729 default:
1730 de->media[i].type = DE_MEDIA_INVALID;
1731 break;
1732 }
1733 }
1734}
1735
1736/* Note: this routine returns extra data bits for size detection. */
1737static unsigned __init tulip_read_eeprom(void __iomem *regs, int location, int addr_len)
1738{
1739 int i;
1740 unsigned retval = 0;
1741 void __iomem *ee_addr = regs + ROMCmd;
1742 int read_cmd = location | (EE_READ_CMD << addr_len);
1743
1744 writel(EE_ENB & ~EE_CS, ee_addr);
1745 writel(EE_ENB, ee_addr);
1746
1747 /* Shift the read command bits out. */
1748 for (i = 4 + addr_len; i >= 0; i--) {
1749 short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1750 writel(EE_ENB | dataval, ee_addr);
1751 readl(ee_addr);
1752 writel(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
1753 readl(ee_addr);
1754 retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1755 }
1756 writel(EE_ENB, ee_addr);
1757 readl(ee_addr);
1758
1759 for (i = 16; i > 0; i--) {
1760 writel(EE_ENB | EE_SHIFT_CLK, ee_addr);
1761 readl(ee_addr);
1762 retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1763 writel(EE_ENB, ee_addr);
1764 readl(ee_addr);
1765 }
1766
1767 /* Terminate the EEPROM access. */
1768 writel(EE_ENB & ~EE_CS, ee_addr);
1769 return retval;
1770}
1771
1772static void __init de21041_get_srom_info (struct de_private *de)
1773{
1774 unsigned i, sa_offset = 0, ofs;
1775 u8 ee_data[DE_EEPROM_SIZE + 6] = {};
1776 unsigned ee_addr_size = tulip_read_eeprom(de->regs, 0xff, 8) & 0x40000 ? 8 : 6;
1777 struct de_srom_info_leaf *il;
1778 void *bufp;
1779
1780 /* download entire eeprom */
1781 for (i = 0; i < DE_EEPROM_WORDS; i++)
1782 ((u16 *)ee_data)[i] =
1783 le16_to_cpu(tulip_read_eeprom(de->regs, i, ee_addr_size));
1784
1785 /* DEC now has a specification but early board makers
1786 just put the address in the first EEPROM locations. */
1787 /* This does memcmp(eedata, eedata+16, 8) */
Ralf Baechlebc053d42005-10-10 14:50:46 +01001788
1789#ifndef CONFIG_MIPS_COBALT
1790
Linus Torvalds1da177e2005-04-16 15:20:36 -07001791 for (i = 0; i < 8; i ++)
1792 if (ee_data[i] != ee_data[16+i])
1793 sa_offset = 20;
1794
Ralf Baechlebc053d42005-10-10 14:50:46 +01001795#endif
1796
Linus Torvalds1da177e2005-04-16 15:20:36 -07001797 /* store MAC address */
1798 for (i = 0; i < 6; i ++)
1799 de->dev->dev_addr[i] = ee_data[i + sa_offset];
1800
1801 /* get offset of controller 0 info leaf. ignore 2nd byte. */
1802 ofs = ee_data[SROMC0InfoLeaf];
1803 if (ofs >= (sizeof(ee_data) - sizeof(struct de_srom_info_leaf) - sizeof(struct de_srom_media_block)))
1804 goto bad_srom;
1805
1806 /* get pointer to info leaf */
1807 il = (struct de_srom_info_leaf *) &ee_data[ofs];
1808
1809 /* paranoia checks */
1810 if (il->n_blocks == 0)
1811 goto bad_srom;
1812 if ((sizeof(ee_data) - ofs) <
1813 (sizeof(struct de_srom_info_leaf) + (sizeof(struct de_srom_media_block) * il->n_blocks)))
1814 goto bad_srom;
1815
1816 /* get default media type */
1817 switch (DE_UNALIGNED_16(&il->default_media)) {
1818 case 0x0001: de->media_type = DE_MEDIA_BNC; break;
1819 case 0x0002: de->media_type = DE_MEDIA_AUI; break;
1820 case 0x0204: de->media_type = DE_MEDIA_TP_FD; break;
1821 default: de->media_type = DE_MEDIA_TP_AUTO; break;
1822 }
1823
1824 if (netif_msg_probe(de))
1825 printk(KERN_INFO "de%d: SROM leaf offset %u, default media %s\n",
1826 de->board_idx, ofs,
1827 media_name[de->media_type]);
1828
1829 /* init SIA register values to defaults */
1830 for (i = 0; i < DE_MAX_MEDIA; i++) {
1831 de->media[i].type = DE_MEDIA_INVALID;
1832 de->media[i].csr13 = 0xffff;
1833 de->media[i].csr14 = 0xffff;
1834 de->media[i].csr15 = 0xffff;
1835 }
1836
1837 /* parse media blocks to see what medias are supported,
1838 * and if any custom CSR values are provided
1839 */
1840 bufp = ((void *)il) + sizeof(*il);
1841 for (i = 0; i < il->n_blocks; i++) {
1842 struct de_srom_media_block *ib = bufp;
1843 unsigned idx;
1844
1845 /* index based on media type in media block */
1846 switch(ib->opts & MediaBlockMask) {
1847 case 0: /* 10baseT */
1848 de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half
1849 | SUPPORTED_Autoneg;
1850 idx = DE_MEDIA_TP;
1851 de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1852 break;
1853 case 1: /* BNC */
1854 de->media_supported |= SUPPORTED_BNC;
1855 idx = DE_MEDIA_BNC;
1856 break;
1857 case 2: /* AUI */
1858 de->media_supported |= SUPPORTED_AUI;
1859 idx = DE_MEDIA_AUI;
1860 break;
1861 case 4: /* 10baseT-FD */
1862 de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full
1863 | SUPPORTED_Autoneg;
1864 idx = DE_MEDIA_TP_FD;
1865 de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1866 break;
1867 default:
1868 goto bad_srom;
1869 }
1870
1871 de->media[idx].type = idx;
1872
1873 if (netif_msg_probe(de))
1874 printk(KERN_INFO "de%d: media block #%u: %s",
1875 de->board_idx, i,
1876 media_name[de->media[idx].type]);
1877
1878 bufp += sizeof (ib->opts);
1879
1880 if (ib->opts & MediaCustomCSRs) {
1881 de->media[idx].csr13 = DE_UNALIGNED_16(&ib->csr13);
1882 de->media[idx].csr14 = DE_UNALIGNED_16(&ib->csr14);
1883 de->media[idx].csr15 = DE_UNALIGNED_16(&ib->csr15);
1884 bufp += sizeof(ib->csr13) + sizeof(ib->csr14) +
1885 sizeof(ib->csr15);
1886
1887 if (netif_msg_probe(de))
1888 printk(" (%x,%x,%x)\n",
1889 de->media[idx].csr13,
1890 de->media[idx].csr14,
1891 de->media[idx].csr15);
1892
1893 } else if (netif_msg_probe(de))
1894 printk("\n");
1895
1896 if (bufp > ((void *)&ee_data[DE_EEPROM_SIZE - 3]))
1897 break;
1898 }
1899
1900 de->media_advertise = de->media_supported;
1901
1902fill_defaults:
1903 /* fill in defaults, for cases where custom CSRs not used */
1904 for (i = 0; i < DE_MAX_MEDIA; i++) {
1905 if (de->media[i].csr13 == 0xffff)
1906 de->media[i].csr13 = t21041_csr13[i];
1907 if (de->media[i].csr14 == 0xffff)
1908 de->media[i].csr14 = t21041_csr14[i];
1909 if (de->media[i].csr15 == 0xffff)
1910 de->media[i].csr15 = t21041_csr15[i];
1911 }
1912
1913 de->ee_data = kmalloc(DE_EEPROM_SIZE, GFP_KERNEL);
1914 if (de->ee_data)
1915 memcpy(de->ee_data, &ee_data[0], DE_EEPROM_SIZE);
1916
1917 return;
1918
1919bad_srom:
1920 /* for error cases, it's ok to assume we support all these */
1921 for (i = 0; i < DE_MAX_MEDIA; i++)
1922 de->media[i].type = i;
1923 de->media_supported =
1924 SUPPORTED_10baseT_Half |
1925 SUPPORTED_10baseT_Full |
1926 SUPPORTED_Autoneg |
1927 SUPPORTED_TP |
1928 SUPPORTED_AUI |
1929 SUPPORTED_BNC;
1930 goto fill_defaults;
1931}
1932
1933static int __init de_init_one (struct pci_dev *pdev,
1934 const struct pci_device_id *ent)
1935{
1936 struct net_device *dev;
1937 struct de_private *de;
1938 int rc;
1939 void __iomem *regs;
Jeff Garzikafc70972005-08-31 06:11:16 -04001940 unsigned long pciaddr;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001941 static int board_idx = -1;
1942
1943 board_idx++;
1944
1945#ifndef MODULE
1946 if (board_idx == 0)
1947 printk("%s", version);
1948#endif
1949
1950 /* allocate a new ethernet device structure, and fill in defaults */
1951 dev = alloc_etherdev(sizeof(struct de_private));
1952 if (!dev)
1953 return -ENOMEM;
1954
1955 SET_MODULE_OWNER(dev);
1956 SET_NETDEV_DEV(dev, &pdev->dev);
1957 dev->open = de_open;
1958 dev->stop = de_close;
1959 dev->set_multicast_list = de_set_rx_mode;
1960 dev->hard_start_xmit = de_start_xmit;
1961 dev->get_stats = de_get_stats;
1962 dev->ethtool_ops = &de_ethtool_ops;
1963 dev->tx_timeout = de_tx_timeout;
1964 dev->watchdog_timeo = TX_TIMEOUT;
1965
1966 de = dev->priv;
1967 de->de21040 = ent->driver_data == 0 ? 1 : 0;
1968 de->pdev = pdev;
1969 de->dev = dev;
1970 de->msg_enable = (debug < 0 ? DE_DEF_MSG_ENABLE : debug);
1971 de->board_idx = board_idx;
1972 spin_lock_init (&de->lock);
1973 init_timer(&de->media_timer);
1974 if (de->de21040)
1975 de->media_timer.function = de21040_media_timer;
1976 else
1977 de->media_timer.function = de21041_media_timer;
1978 de->media_timer.data = (unsigned long) de;
1979
1980 netif_carrier_off(dev);
1981 netif_stop_queue(dev);
1982
1983 /* wake up device, assign resources */
1984 rc = pci_enable_device(pdev);
1985 if (rc)
1986 goto err_out_free;
1987
1988 /* reserve PCI resources to ensure driver atomicity */
1989 rc = pci_request_regions(pdev, DRV_NAME);
1990 if (rc)
1991 goto err_out_disable;
1992
1993 /* check for invalid IRQ value */
1994 if (pdev->irq < 2) {
1995 rc = -EIO;
1996 printk(KERN_ERR PFX "invalid irq (%d) for pci dev %s\n",
1997 pdev->irq, pci_name(pdev));
1998 goto err_out_res;
1999 }
2000
2001 dev->irq = pdev->irq;
2002
2003 /* obtain and check validity of PCI I/O address */
2004 pciaddr = pci_resource_start(pdev, 1);
2005 if (!pciaddr) {
2006 rc = -EIO;
2007 printk(KERN_ERR PFX "no MMIO resource for pci dev %s\n",
2008 pci_name(pdev));
2009 goto err_out_res;
2010 }
2011 if (pci_resource_len(pdev, 1) < DE_REGS_SIZE) {
2012 rc = -EIO;
2013 printk(KERN_ERR PFX "MMIO resource (%lx) too small on pci dev %s\n",
2014 pci_resource_len(pdev, 1), pci_name(pdev));
2015 goto err_out_res;
2016 }
2017
2018 /* remap CSR registers */
2019 regs = ioremap_nocache(pciaddr, DE_REGS_SIZE);
2020 if (!regs) {
2021 rc = -EIO;
2022 printk(KERN_ERR PFX "Cannot map PCI MMIO (%lx@%lx) on pci dev %s\n",
2023 pci_resource_len(pdev, 1), pciaddr, pci_name(pdev));
2024 goto err_out_res;
2025 }
2026 dev->base_addr = (unsigned long) regs;
2027 de->regs = regs;
2028
2029 de_adapter_wake(de);
2030
2031 /* make sure hardware is not running */
2032 rc = de_reset_mac(de);
2033 if (rc) {
2034 printk(KERN_ERR PFX "Cannot reset MAC, pci dev %s\n",
2035 pci_name(pdev));
2036 goto err_out_iomap;
2037 }
2038
2039 /* get MAC address, initialize default media type and
2040 * get list of supported media
2041 */
2042 if (de->de21040) {
2043 de21040_get_mac_address(de);
2044 de21040_get_media_info(de);
2045 } else {
2046 de21041_get_srom_info(de);
2047 }
2048
2049 /* register new network interface with kernel */
2050 rc = register_netdev(dev);
2051 if (rc)
2052 goto err_out_iomap;
2053
2054 /* print info about board and interface just registered */
2055 printk (KERN_INFO "%s: %s at 0x%lx, "
2056 "%02x:%02x:%02x:%02x:%02x:%02x, "
2057 "IRQ %d\n",
2058 dev->name,
2059 de->de21040 ? "21040" : "21041",
2060 dev->base_addr,
2061 dev->dev_addr[0], dev->dev_addr[1],
2062 dev->dev_addr[2], dev->dev_addr[3],
2063 dev->dev_addr[4], dev->dev_addr[5],
2064 dev->irq);
2065
2066 pci_set_drvdata(pdev, dev);
2067
2068 /* enable busmastering */
2069 pci_set_master(pdev);
2070
2071 /* put adapter to sleep */
2072 de_adapter_sleep(de);
2073
2074 return 0;
2075
2076err_out_iomap:
Jesper Juhlb4558ea2005-10-28 16:53:13 -04002077 kfree(de->ee_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002078 iounmap(regs);
2079err_out_res:
2080 pci_release_regions(pdev);
2081err_out_disable:
2082 pci_disable_device(pdev);
2083err_out_free:
2084 free_netdev(dev);
2085 return rc;
2086}
2087
2088static void __exit de_remove_one (struct pci_dev *pdev)
2089{
2090 struct net_device *dev = pci_get_drvdata(pdev);
2091 struct de_private *de = dev->priv;
2092
2093 if (!dev)
2094 BUG();
2095 unregister_netdev(dev);
Jesper Juhlb4558ea2005-10-28 16:53:13 -04002096 kfree(de->ee_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002097 iounmap(de->regs);
2098 pci_release_regions(pdev);
2099 pci_disable_device(pdev);
2100 pci_set_drvdata(pdev, NULL);
2101 free_netdev(dev);
2102}
2103
2104#ifdef CONFIG_PM
2105
Pavel Machek05adc3b2005-04-16 15:25:25 -07002106static int de_suspend (struct pci_dev *pdev, pm_message_t state)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002107{
2108 struct net_device *dev = pci_get_drvdata (pdev);
2109 struct de_private *de = dev->priv;
2110
2111 rtnl_lock();
2112 if (netif_running (dev)) {
2113 del_timer_sync(&de->media_timer);
2114
2115 disable_irq(dev->irq);
2116 spin_lock_irq(&de->lock);
2117
2118 de_stop_hw(de);
2119 netif_stop_queue(dev);
2120 netif_device_detach(dev);
2121 netif_carrier_off(dev);
2122
2123 spin_unlock_irq(&de->lock);
2124 enable_irq(dev->irq);
2125
2126 /* Update the error counts. */
2127 __de_get_stats(de);
2128
2129 synchronize_irq(dev->irq);
2130 de_clean_rings(de);
2131
2132 de_adapter_sleep(de);
2133 pci_disable_device(pdev);
2134 } else {
2135 netif_device_detach(dev);
2136 }
2137 rtnl_unlock();
2138 return 0;
2139}
2140
2141static int de_resume (struct pci_dev *pdev)
2142{
2143 struct net_device *dev = pci_get_drvdata (pdev);
2144 struct de_private *de = dev->priv;
2145
2146 rtnl_lock();
2147 if (netif_device_present(dev))
2148 goto out;
2149 if (netif_running(dev)) {
2150 pci_enable_device(pdev);
2151 de_init_hw(de);
2152 netif_device_attach(dev);
2153 } else {
2154 netif_device_attach(dev);
2155 }
2156out:
2157 rtnl_unlock();
2158 return 0;
2159}
2160
2161#endif /* CONFIG_PM */
2162
2163static struct pci_driver de_driver = {
2164 .name = DRV_NAME,
2165 .id_table = de_pci_tbl,
2166 .probe = de_init_one,
2167 .remove = __exit_p(de_remove_one),
2168#ifdef CONFIG_PM
2169 .suspend = de_suspend,
2170 .resume = de_resume,
2171#endif
2172};
2173
2174static int __init de_init (void)
2175{
2176#ifdef MODULE
2177 printk("%s", version);
2178#endif
2179 return pci_module_init (&de_driver);
2180}
2181
2182static void __exit de_exit (void)
2183{
2184 pci_unregister_driver (&de_driver);
2185}
2186
2187module_init(de_init);
2188module_exit(de_exit);