1 /* de2104x.c: A Linux PCI Ethernet driver for Intel/Digital 21040/1 chips. */
3 Copyright 2001,2003 Jeff Garzik <jgarzik@pobox.com>
5 Copyright 1994, 1995 Digital Equipment Corporation. [de4x5.c]
6 Written/copyright 1994-2001 by Donald Becker. [tulip.c]
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.
15 See the file COPYING in this distribution for more information.
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
30 #define DRV_NAME "de2104x"
31 #define DRV_VERSION "0.7"
32 #define DRV_RELDATE "Mar 17, 2004"
34 #include <linux/module.h>
35 #include <linux/kernel.h>
36 #include <linux/netdevice.h>
37 #include <linux/etherdevice.h>
38 #include <linux/init.h>
39 #include <linux/pci.h>
40 #include <linux/delay.h>
41 #include <linux/ethtool.h>
42 #include <linux/compiler.h>
43 #include <linux/rtnetlink.h>
44 #include <linux/crc32.h>
48 #include <asm/uaccess.h>
49 #include <asm/unaligned.h>
51 /* These identify the driver base version and may not be removed. */
52 static char version
[] =
53 KERN_INFO DRV_NAME
" PCI Ethernet driver v" DRV_VERSION
" (" DRV_RELDATE
")\n";
55 MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
56 MODULE_DESCRIPTION("Intel/Digital 21040/1 series PCI Ethernet driver");
57 MODULE_LICENSE("GPL");
58 MODULE_VERSION(DRV_VERSION
);
60 static int debug
= -1;
61 module_param (debug
, int, 0);
62 MODULE_PARM_DESC (debug
, "de2104x bitmapped message enable number");
64 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
65 #if defined(__alpha__) || defined(__arm__) || defined(__hppa__) \
66 || defined(CONFIG_SPARC) || defined(__ia64__) \
67 || defined(__sh__) || defined(__mips__)
68 static int rx_copybreak
= 1518;
70 static int rx_copybreak
= 100;
72 module_param (rx_copybreak
, int, 0);
73 MODULE_PARM_DESC (rx_copybreak
, "de2104x Breakpoint at which Rx packets are copied");
75 #define PFX DRV_NAME ": "
77 #define DE_DEF_MSG_ENABLE (NETIF_MSG_DRV | \
85 #define DE_RX_RING_SIZE 64
86 #define DE_TX_RING_SIZE 64
87 #define DE_RING_BYTES \
88 ((sizeof(struct de_desc) * DE_RX_RING_SIZE) + \
89 (sizeof(struct de_desc) * DE_TX_RING_SIZE))
90 #define NEXT_TX(N) (((N) + 1) & (DE_TX_RING_SIZE - 1))
91 #define NEXT_RX(N) (((N) + 1) & (DE_RX_RING_SIZE - 1))
92 #define TX_BUFFS_AVAIL(CP) \
93 (((CP)->tx_tail <= (CP)->tx_head) ? \
94 (CP)->tx_tail + (DE_TX_RING_SIZE - 1) - (CP)->tx_head : \
95 (CP)->tx_tail - (CP)->tx_head - 1)
97 #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
100 #define DE_SETUP_SKB ((struct sk_buff *) 1)
101 #define DE_DUMMY_SKB ((struct sk_buff *) 2)
102 #define DE_SETUP_FRAME_WORDS 96
103 #define DE_EEPROM_WORDS 256
104 #define DE_EEPROM_SIZE (DE_EEPROM_WORDS * sizeof(u16))
105 #define DE_MAX_MEDIA 5
107 #define DE_MEDIA_TP_AUTO 0
108 #define DE_MEDIA_BNC 1
109 #define DE_MEDIA_AUI 2
110 #define DE_MEDIA_TP 3
111 #define DE_MEDIA_TP_FD 4
112 #define DE_MEDIA_INVALID DE_MAX_MEDIA
113 #define DE_MEDIA_FIRST 0
114 #define DE_MEDIA_LAST (DE_MAX_MEDIA - 1)
115 #define DE_AUI_BNC (SUPPORTED_AUI | SUPPORTED_BNC)
117 #define DE_TIMER_LINK (60 * HZ)
118 #define DE_TIMER_NO_LINK (5 * HZ)
120 #define DE_NUM_REGS 16
121 #define DE_REGS_SIZE (DE_NUM_REGS * sizeof(u32))
122 #define DE_REGS_VER 1
124 /* Time in jiffies before concluding the transmitter is hung. */
125 #define TX_TIMEOUT (6*HZ)
127 /* This is a mysterious value that can be written to CSR11 in the 21040 (only)
128 to support a pre-NWay full-duplex signaling mechanism using short frames.
129 No one knows what it should be, but if left at its default value some
130 10base2(!) packets trigger a full-duplex-request interrupt. */
131 #define FULL_DUPLEX_MAGIC 0x6969
154 CacheAlign16
= 0x00008000,
155 BurstLen4
= 0x00000400,
158 NormalTxPoll
= (1 << 0),
159 NormalRxPoll
= (1 << 0),
161 /* Tx/Rx descriptor status bits */
164 RxErrLong
= (1 << 7),
166 RxErrFIFO
= (1 << 0),
167 RxErrRunt
= (1 << 11),
168 RxErrFrame
= (1 << 14),
170 FirstFrag
= (1 << 29),
171 LastFrag
= (1 << 30),
173 TxFIFOUnder
= (1 << 1),
174 TxLinkFail
= (1 << 2) | (1 << 10) | (1 << 11),
177 TxJabber
= (1 << 14),
178 SetupFrame
= (1 << 27),
189 TxState
= (1 << 22) | (1 << 21) | (1 << 20),
190 RxState
= (1 << 19) | (1 << 18) | (1 << 17),
191 LinkFail
= (1 << 12),
193 RxStopped
= (1 << 8),
194 TxStopped
= (1 << 1),
197 TxEnable
= (1 << 13),
199 RxTx
= TxEnable
| RxEnable
,
200 FullDuplex
= (1 << 9),
201 AcceptAllMulticast
= (1 << 7),
202 AcceptAllPhys
= (1 << 6),
204 MacModeClear
= (1<<12) | (1<<11) | (1<<10) | (1<<8) | (1<<3) |
205 RxTx
| BOCnt
| AcceptAllPhys
| AcceptAllMulticast
,
208 EE_SHIFT_CLK
= 0x02, /* EEPROM shift clock. */
209 EE_CS
= 0x01, /* EEPROM chip select. */
210 EE_DATA_WRITE
= 0x04, /* Data from the Tulip to EEPROM. */
213 EE_DATA_READ
= 0x08, /* Data from the EEPROM chip. */
214 EE_ENB
= (0x4800 | EE_CS
),
216 /* The EEPROM commands include the alway-set leading bit. */
220 RxMissedOver
= (1 << 16),
221 RxMissedMask
= 0xffff,
223 /* SROM-related bits */
225 MediaBlockMask
= 0x3f,
226 MediaCustomCSRs
= (1 << 6),
229 PM_Sleep
= (1 << 31),
230 PM_Snooze
= (1 << 30),
231 PM_Mask
= PM_Sleep
| PM_Snooze
,
234 NWayState
= (1 << 14) | (1 << 13) | (1 << 12),
235 NWayRestart
= (1 << 12),
236 NonselPortActive
= (1 << 9),
237 LinkFailStatus
= (1 << 2),
238 NetCxnErr
= (1 << 1),
241 static const u32 de_intr_mask
=
242 IntrOK
| IntrErr
| RxIntr
| RxEmpty
| TxIntr
| TxEmpty
|
243 LinkPass
| LinkFail
| PciErr
;
246 * Set the programmable burst length to 4 longwords for all:
247 * DMA errors result without these values. Cache align 16 long.
249 static const u32 de_bus_mode
= CacheAlign16
| BurstLen4
;
251 struct de_srom_media_block
{
256 } __attribute__((packed
));
258 struct de_srom_info_leaf
{
262 } __attribute__((packed
));
272 u16 type
; /* DE_MEDIA_xxx */
289 struct net_device
*dev
;
292 struct de_desc
*rx_ring
;
293 struct de_desc
*tx_ring
;
294 struct ring_info tx_skb
[DE_TX_RING_SIZE
];
295 struct ring_info rx_skb
[DE_RX_RING_SIZE
];
301 struct net_device_stats net_stats
;
303 struct pci_dev
*pdev
;
305 u16 setup_frame
[DE_SETUP_FRAME_WORDS
];
310 struct media_info media
[DE_MAX_MEDIA
];
311 struct timer_list media_timer
;
315 unsigned de21040
: 1;
316 unsigned media_lock
: 1;
320 static void de_set_rx_mode (struct net_device
*dev
);
321 static void de_tx (struct de_private
*de
);
322 static void de_clean_rings (struct de_private
*de
);
323 static void de_media_interrupt (struct de_private
*de
, u32 status
);
324 static void de21040_media_timer (unsigned long data
);
325 static void de21041_media_timer (unsigned long data
);
326 static unsigned int de_ok_to_advertise (struct de_private
*de
, u32 new_media
);
329 static struct pci_device_id de_pci_tbl
[] = {
330 { PCI_VENDOR_ID_DEC
, PCI_DEVICE_ID_DEC_TULIP
,
331 PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, 0 },
332 { PCI_VENDOR_ID_DEC
, PCI_DEVICE_ID_DEC_TULIP_PLUS
,
333 PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, 1 },
336 MODULE_DEVICE_TABLE(pci
, de_pci_tbl
);
338 static const char * const media_name
[DE_MAX_MEDIA
] = {
346 /* 21040 transceiver register settings:
347 * TP AUTO(unused), BNC(unused), AUI, TP, TP FD*/
348 static u16 t21040_csr13
[] = { 0, 0, 0x8F09, 0x8F01, 0x8F01, };
349 static u16 t21040_csr14
[] = { 0, 0, 0x0705, 0xFFFF, 0xFFFD, };
350 static u16 t21040_csr15
[] = { 0, 0, 0x0006, 0x0000, 0x0000, };
352 /* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/
353 static u16 t21041_csr13
[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, };
354 static u16 t21041_csr14
[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x6F3F, 0x6F3D, };
355 static u16 t21041_csr15
[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
358 #define dr32(reg) readl(de->regs + (reg))
359 #define dw32(reg,val) writel((val), de->regs + (reg))
362 static void de_rx_err_acct (struct de_private
*de
, unsigned rx_tail
,
365 if (netif_msg_rx_err (de
))
367 "%s: rx err, slot %d status 0x%x len %d\n",
368 de
->dev
->name
, rx_tail
, status
, len
);
370 if ((status
& 0x38000300) != 0x0300) {
371 /* Ingore earlier buffers. */
372 if ((status
& 0xffff) != 0x7fff) {
373 if (netif_msg_rx_err(de
))
374 printk(KERN_WARNING
"%s: Oversized Ethernet frame "
375 "spanned multiple buffers, status %8.8x!\n",
376 de
->dev
->name
, status
);
377 de
->net_stats
.rx_length_errors
++;
379 } else if (status
& RxError
) {
380 /* There was a fatal error. */
381 de
->net_stats
.rx_errors
++; /* end of a packet.*/
382 if (status
& 0x0890) de
->net_stats
.rx_length_errors
++;
383 if (status
& RxErrCRC
) de
->net_stats
.rx_crc_errors
++;
384 if (status
& RxErrFIFO
) de
->net_stats
.rx_fifo_errors
++;
388 static void de_rx (struct de_private
*de
)
390 unsigned rx_tail
= de
->rx_tail
;
391 unsigned rx_work
= DE_RX_RING_SIZE
;
398 struct sk_buff
*skb
, *copy_skb
;
399 unsigned copying_skb
, buflen
;
401 skb
= de
->rx_skb
[rx_tail
].skb
;
404 status
= le32_to_cpu(de
->rx_ring
[rx_tail
].opts1
);
405 if (status
& DescOwn
)
408 len
= ((status
>> 16) & 0x7ff) - 4;
409 mapping
= de
->rx_skb
[rx_tail
].mapping
;
411 if (unlikely(drop
)) {
412 de
->net_stats
.rx_dropped
++;
416 if (unlikely((status
& 0x38008300) != 0x0300)) {
417 de_rx_err_acct(de
, rx_tail
, status
, len
);
421 copying_skb
= (len
<= rx_copybreak
);
423 if (unlikely(netif_msg_rx_status(de
)))
424 printk(KERN_DEBUG
"%s: rx slot %d status 0x%x len %d copying? %d\n",
425 de
->dev
->name
, rx_tail
, status
, len
,
428 buflen
= copying_skb
? (len
+ RX_OFFSET
) : de
->rx_buf_sz
;
429 copy_skb
= dev_alloc_skb (buflen
);
430 if (unlikely(!copy_skb
)) {
431 de
->net_stats
.rx_dropped
++;
438 pci_unmap_single(de
->pdev
, mapping
,
439 buflen
, PCI_DMA_FROMDEVICE
);
443 de
->rx_skb
[rx_tail
].mapping
=
444 pci_map_single(de
->pdev
, copy_skb
->data
,
445 buflen
, PCI_DMA_FROMDEVICE
);
446 de
->rx_skb
[rx_tail
].skb
= copy_skb
;
448 pci_dma_sync_single_for_cpu(de
->pdev
, mapping
, len
, PCI_DMA_FROMDEVICE
);
449 skb_reserve(copy_skb
, RX_OFFSET
);
450 skb_copy_from_linear_data(skb
, skb_put(copy_skb
, len
),
452 pci_dma_sync_single_for_device(de
->pdev
, mapping
, len
, PCI_DMA_FROMDEVICE
);
454 /* We'll reuse the original ring buffer. */
458 skb
->protocol
= eth_type_trans (skb
, de
->dev
);
460 de
->net_stats
.rx_packets
++;
461 de
->net_stats
.rx_bytes
+= skb
->len
;
463 if (rc
== NET_RX_DROP
)
467 de
->rx_ring
[rx_tail
].opts1
= cpu_to_le32(DescOwn
);
468 if (rx_tail
== (DE_RX_RING_SIZE
- 1))
469 de
->rx_ring
[rx_tail
].opts2
=
470 cpu_to_le32(RingEnd
| de
->rx_buf_sz
);
472 de
->rx_ring
[rx_tail
].opts2
= cpu_to_le32(de
->rx_buf_sz
);
473 de
->rx_ring
[rx_tail
].addr1
= cpu_to_le32(mapping
);
474 rx_tail
= NEXT_RX(rx_tail
);
478 printk(KERN_WARNING
"%s: rx work limit reached\n", de
->dev
->name
);
480 de
->rx_tail
= rx_tail
;
483 static irqreturn_t
de_interrupt (int irq
, void *dev_instance
)
485 struct net_device
*dev
= dev_instance
;
486 struct de_private
*de
= netdev_priv(dev
);
489 status
= dr32(MacStatus
);
490 if ((!(status
& (IntrOK
|IntrErr
))) || (status
== 0xFFFF))
493 if (netif_msg_intr(de
))
494 printk(KERN_DEBUG
"%s: intr, status %08x mode %08x desc %u/%u/%u\n",
495 dev
->name
, status
, dr32(MacMode
), de
->rx_tail
, de
->tx_head
, de
->tx_tail
);
497 dw32(MacStatus
, status
);
499 if (status
& (RxIntr
| RxEmpty
)) {
501 if (status
& RxEmpty
)
502 dw32(RxPoll
, NormalRxPoll
);
505 spin_lock(&de
->lock
);
507 if (status
& (TxIntr
| TxEmpty
))
510 if (status
& (LinkPass
| LinkFail
))
511 de_media_interrupt(de
, status
);
513 spin_unlock(&de
->lock
);
515 if (status
& PciErr
) {
518 pci_read_config_word(de
->pdev
, PCI_STATUS
, &pci_status
);
519 pci_write_config_word(de
->pdev
, PCI_STATUS
, pci_status
);
520 printk(KERN_ERR
"%s: PCI bus error, status=%08x, PCI status=%04x\n",
521 dev
->name
, status
, pci_status
);
527 static void de_tx (struct de_private
*de
)
529 unsigned tx_head
= de
->tx_head
;
530 unsigned tx_tail
= de
->tx_tail
;
532 while (tx_tail
!= tx_head
) {
537 status
= le32_to_cpu(de
->tx_ring
[tx_tail
].opts1
);
538 if (status
& DescOwn
)
541 skb
= de
->tx_skb
[tx_tail
].skb
;
543 if (unlikely(skb
== DE_DUMMY_SKB
))
546 if (unlikely(skb
== DE_SETUP_SKB
)) {
547 pci_unmap_single(de
->pdev
, de
->tx_skb
[tx_tail
].mapping
,
548 sizeof(de
->setup_frame
), PCI_DMA_TODEVICE
);
552 pci_unmap_single(de
->pdev
, de
->tx_skb
[tx_tail
].mapping
,
553 skb
->len
, PCI_DMA_TODEVICE
);
555 if (status
& LastFrag
) {
556 if (status
& TxError
) {
557 if (netif_msg_tx_err(de
))
558 printk(KERN_DEBUG
"%s: tx err, status 0x%x\n",
559 de
->dev
->name
, status
);
560 de
->net_stats
.tx_errors
++;
562 de
->net_stats
.tx_window_errors
++;
563 if (status
& TxMaxCol
)
564 de
->net_stats
.tx_aborted_errors
++;
565 if (status
& TxLinkFail
)
566 de
->net_stats
.tx_carrier_errors
++;
567 if (status
& TxFIFOUnder
)
568 de
->net_stats
.tx_fifo_errors
++;
570 de
->net_stats
.tx_packets
++;
571 de
->net_stats
.tx_bytes
+= skb
->len
;
572 if (netif_msg_tx_done(de
))
573 printk(KERN_DEBUG
"%s: tx done, slot %d\n", de
->dev
->name
, tx_tail
);
575 dev_kfree_skb_irq(skb
);
579 de
->tx_skb
[tx_tail
].skb
= NULL
;
581 tx_tail
= NEXT_TX(tx_tail
);
584 de
->tx_tail
= tx_tail
;
586 if (netif_queue_stopped(de
->dev
) && (TX_BUFFS_AVAIL(de
) > (DE_TX_RING_SIZE
/ 4)))
587 netif_wake_queue(de
->dev
);
590 static int de_start_xmit (struct sk_buff
*skb
, struct net_device
*dev
)
592 struct de_private
*de
= netdev_priv(dev
);
593 unsigned int entry
, tx_free
;
594 u32 mapping
, len
, flags
= FirstFrag
| LastFrag
;
597 spin_lock_irq(&de
->lock
);
599 tx_free
= TX_BUFFS_AVAIL(de
);
601 netif_stop_queue(dev
);
602 spin_unlock_irq(&de
->lock
);
609 txd
= &de
->tx_ring
[entry
];
612 mapping
= pci_map_single(de
->pdev
, skb
->data
, len
, PCI_DMA_TODEVICE
);
613 if (entry
== (DE_TX_RING_SIZE
- 1))
615 if (!tx_free
|| (tx_free
== (DE_TX_RING_SIZE
/ 2)))
618 txd
->opts2
= cpu_to_le32(flags
);
619 txd
->addr1
= cpu_to_le32(mapping
);
621 de
->tx_skb
[entry
].skb
= skb
;
622 de
->tx_skb
[entry
].mapping
= mapping
;
625 txd
->opts1
= cpu_to_le32(DescOwn
);
628 de
->tx_head
= NEXT_TX(entry
);
629 if (netif_msg_tx_queued(de
))
630 printk(KERN_DEBUG
"%s: tx queued, slot %d, skblen %d\n",
631 dev
->name
, entry
, skb
->len
);
634 netif_stop_queue(dev
);
636 spin_unlock_irq(&de
->lock
);
638 /* Trigger an immediate transmit demand. */
639 dw32(TxPoll
, NormalTxPoll
);
640 dev
->trans_start
= jiffies
;
645 /* Set or clear the multicast filter for this adaptor.
646 Note that we only use exclusion around actually queueing the
647 new frame, not around filling de->setup_frame. This is non-deterministic
648 when re-entered but still correct. */
651 #define set_bit_le(i,p) do { ((char *)(p))[(i)/8] |= (1<<((i)%8)); } while(0)
653 static void build_setup_frame_hash(u16
*setup_frm
, struct net_device
*dev
)
655 struct de_private
*de
= netdev_priv(dev
);
657 struct dev_mc_list
*mclist
;
661 memset(hash_table
, 0, sizeof(hash_table
));
662 set_bit_le(255, hash_table
); /* Broadcast entry */
663 /* This should work on big-endian machines as well. */
664 for (i
= 0, mclist
= dev
->mc_list
; mclist
&& i
< dev
->mc_count
;
665 i
++, mclist
= mclist
->next
) {
666 int index
= ether_crc_le(ETH_ALEN
, mclist
->dmi_addr
) & 0x1ff;
668 set_bit_le(index
, hash_table
);
670 for (i
= 0; i
< 32; i
++) {
671 *setup_frm
++ = hash_table
[i
];
672 *setup_frm
++ = hash_table
[i
];
674 setup_frm
= &de
->setup_frame
[13*6];
677 /* Fill the final entry with our physical address. */
678 eaddrs
= (u16
*)dev
->dev_addr
;
679 *setup_frm
++ = eaddrs
[0]; *setup_frm
++ = eaddrs
[0];
680 *setup_frm
++ = eaddrs
[1]; *setup_frm
++ = eaddrs
[1];
681 *setup_frm
++ = eaddrs
[2]; *setup_frm
++ = eaddrs
[2];
684 static void build_setup_frame_perfect(u16
*setup_frm
, struct net_device
*dev
)
686 struct de_private
*de
= netdev_priv(dev
);
687 struct dev_mc_list
*mclist
;
691 /* We have <= 14 addresses so we can use the wonderful
692 16 address perfect filtering of the Tulip. */
693 for (i
= 0, mclist
= dev
->mc_list
; i
< dev
->mc_count
;
694 i
++, mclist
= mclist
->next
) {
695 eaddrs
= (u16
*)mclist
->dmi_addr
;
696 *setup_frm
++ = *eaddrs
; *setup_frm
++ = *eaddrs
++;
697 *setup_frm
++ = *eaddrs
; *setup_frm
++ = *eaddrs
++;
698 *setup_frm
++ = *eaddrs
; *setup_frm
++ = *eaddrs
++;
700 /* Fill the unused entries with the broadcast address. */
701 memset(setup_frm
, 0xff, (15-i
)*12);
702 setup_frm
= &de
->setup_frame
[15*6];
704 /* Fill the final entry with our physical address. */
705 eaddrs
= (u16
*)dev
->dev_addr
;
706 *setup_frm
++ = eaddrs
[0]; *setup_frm
++ = eaddrs
[0];
707 *setup_frm
++ = eaddrs
[1]; *setup_frm
++ = eaddrs
[1];
708 *setup_frm
++ = eaddrs
[2]; *setup_frm
++ = eaddrs
[2];
712 static void __de_set_rx_mode (struct net_device
*dev
)
714 struct de_private
*de
= netdev_priv(dev
);
719 struct de_desc
*dummy_txd
= NULL
;
721 macmode
= dr32(MacMode
) & ~(AcceptAllMulticast
| AcceptAllPhys
);
723 if (dev
->flags
& IFF_PROMISC
) { /* Set promiscuous. */
724 macmode
|= AcceptAllMulticast
| AcceptAllPhys
;
728 if ((dev
->mc_count
> 1000) || (dev
->flags
& IFF_ALLMULTI
)) {
729 /* Too many to filter well -- accept all multicasts. */
730 macmode
|= AcceptAllMulticast
;
734 /* Note that only the low-address shortword of setup_frame is valid!
735 The values are doubled for big-endian architectures. */
736 if (dev
->mc_count
> 14) /* Must use a multicast hash table. */
737 build_setup_frame_hash (de
->setup_frame
, dev
);
739 build_setup_frame_perfect (de
->setup_frame
, dev
);
742 * Now add this frame to the Tx list.
747 /* Avoid a chip errata by prefixing a dummy entry. */
749 de
->tx_skb
[entry
].skb
= DE_DUMMY_SKB
;
751 dummy_txd
= &de
->tx_ring
[entry
];
752 dummy_txd
->opts2
= (entry
== (DE_TX_RING_SIZE
- 1)) ?
753 cpu_to_le32(RingEnd
) : 0;
754 dummy_txd
->addr1
= 0;
756 /* Must set DescOwned later to avoid race with chip */
758 entry
= NEXT_TX(entry
);
761 de
->tx_skb
[entry
].skb
= DE_SETUP_SKB
;
762 de
->tx_skb
[entry
].mapping
= mapping
=
763 pci_map_single (de
->pdev
, de
->setup_frame
,
764 sizeof (de
->setup_frame
), PCI_DMA_TODEVICE
);
766 /* Put the setup frame on the Tx list. */
767 txd
= &de
->tx_ring
[entry
];
768 if (entry
== (DE_TX_RING_SIZE
- 1))
769 txd
->opts2
= cpu_to_le32(SetupFrame
| RingEnd
| sizeof (de
->setup_frame
));
771 txd
->opts2
= cpu_to_le32(SetupFrame
| sizeof (de
->setup_frame
));
772 txd
->addr1
= cpu_to_le32(mapping
);
775 txd
->opts1
= cpu_to_le32(DescOwn
);
779 dummy_txd
->opts1
= cpu_to_le32(DescOwn
);
783 de
->tx_head
= NEXT_TX(entry
);
785 if (TX_BUFFS_AVAIL(de
) == 0)
786 netif_stop_queue(dev
);
788 /* Trigger an immediate transmit demand. */
789 dw32(TxPoll
, NormalTxPoll
);
792 if (macmode
!= dr32(MacMode
))
793 dw32(MacMode
, macmode
);
796 static void de_set_rx_mode (struct net_device
*dev
)
799 struct de_private
*de
= netdev_priv(dev
);
801 spin_lock_irqsave (&de
->lock
, flags
);
802 __de_set_rx_mode(dev
);
803 spin_unlock_irqrestore (&de
->lock
, flags
);
806 static inline void de_rx_missed(struct de_private
*de
, u32 rx_missed
)
808 if (unlikely(rx_missed
& RxMissedOver
))
809 de
->net_stats
.rx_missed_errors
+= RxMissedMask
;
811 de
->net_stats
.rx_missed_errors
+= (rx_missed
& RxMissedMask
);
814 static void __de_get_stats(struct de_private
*de
)
816 u32 tmp
= dr32(RxMissed
); /* self-clearing */
818 de_rx_missed(de
, tmp
);
821 static struct net_device_stats
*de_get_stats(struct net_device
*dev
)
823 struct de_private
*de
= netdev_priv(dev
);
825 /* The chip only need report frame silently dropped. */
826 spin_lock_irq(&de
->lock
);
827 if (netif_running(dev
) && netif_device_present(dev
))
829 spin_unlock_irq(&de
->lock
);
831 return &de
->net_stats
;
834 static inline int de_is_running (struct de_private
*de
)
836 return (dr32(MacStatus
) & (RxState
| TxState
)) ? 1 : 0;
839 static void de_stop_rxtx (struct de_private
*de
)
842 unsigned int i
= 1300/100;
844 macmode
= dr32(MacMode
);
845 if (macmode
& RxTx
) {
846 dw32(MacMode
, macmode
& ~RxTx
);
850 /* wait until in-flight frame completes.
851 * Max time @ 10BT: 1500*8b/10Mbps == 1200us (+ 100us margin)
852 * Typically expect this loop to end in < 50 us on 100BT.
855 if (!de_is_running(de
))
860 printk(KERN_WARNING
"%s: timeout expired stopping DMA\n", de
->dev
->name
);
863 static inline void de_start_rxtx (struct de_private
*de
)
867 macmode
= dr32(MacMode
);
868 if ((macmode
& RxTx
) != RxTx
) {
869 dw32(MacMode
, macmode
| RxTx
);
874 static void de_stop_hw (struct de_private
*de
)
882 dw32(MacStatus
, dr32(MacStatus
));
887 de
->tx_head
= de
->tx_tail
= 0;
890 static void de_link_up(struct de_private
*de
)
892 if (!netif_carrier_ok(de
->dev
)) {
893 netif_carrier_on(de
->dev
);
894 if (netif_msg_link(de
))
895 printk(KERN_INFO
"%s: link up, media %s\n",
896 de
->dev
->name
, media_name
[de
->media_type
]);
900 static void de_link_down(struct de_private
*de
)
902 if (netif_carrier_ok(de
->dev
)) {
903 netif_carrier_off(de
->dev
);
904 if (netif_msg_link(de
))
905 printk(KERN_INFO
"%s: link down\n", de
->dev
->name
);
909 static void de_set_media (struct de_private
*de
)
911 unsigned media
= de
->media_type
;
912 u32 macmode
= dr32(MacMode
);
914 if (de_is_running(de
))
915 printk(KERN_WARNING
"%s: chip is running while changing media!\n", de
->dev
->name
);
918 dw32(CSR11
, FULL_DUPLEX_MAGIC
);
919 dw32(CSR13
, 0); /* Reset phy */
920 dw32(CSR14
, de
->media
[media
].csr14
);
921 dw32(CSR15
, de
->media
[media
].csr15
);
922 dw32(CSR13
, de
->media
[media
].csr13
);
924 /* must delay 10ms before writing to other registers,
929 if (media
== DE_MEDIA_TP_FD
)
930 macmode
|= FullDuplex
;
932 macmode
&= ~FullDuplex
;
934 if (netif_msg_link(de
)) {
935 printk(KERN_INFO
"%s: set link %s\n"
936 KERN_INFO
"%s: mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x\n"
937 KERN_INFO
"%s: set mode 0x%x, set sia 0x%x,0x%x,0x%x\n",
938 de
->dev
->name
, media_name
[media
],
939 de
->dev
->name
, dr32(MacMode
), dr32(SIAStatus
),
940 dr32(CSR13
), dr32(CSR14
), dr32(CSR15
),
941 de
->dev
->name
, macmode
, de
->media
[media
].csr13
,
942 de
->media
[media
].csr14
, de
->media
[media
].csr15
);
944 if (macmode
!= dr32(MacMode
))
945 dw32(MacMode
, macmode
);
948 static void de_next_media (struct de_private
*de
, u32
*media
,
949 unsigned int n_media
)
953 for (i
= 0; i
< n_media
; i
++) {
954 if (de_ok_to_advertise(de
, media
[i
])) {
955 de
->media_type
= media
[i
];
961 static void de21040_media_timer (unsigned long data
)
963 struct de_private
*de
= (struct de_private
*) data
;
964 struct net_device
*dev
= de
->dev
;
965 u32 status
= dr32(SIAStatus
);
966 unsigned int carrier
;
969 carrier
= (status
& NetCxnErr
) ? 0 : 1;
972 if (de
->media_type
!= DE_MEDIA_AUI
&& (status
& LinkFailStatus
))
975 de
->media_timer
.expires
= jiffies
+ DE_TIMER_LINK
;
976 add_timer(&de
->media_timer
);
977 if (!netif_carrier_ok(dev
))
980 if (netif_msg_timer(de
))
981 printk(KERN_INFO
"%s: %s link ok, status %x\n",
982 dev
->name
, media_name
[de
->media_type
],
992 if (de
->media_type
== DE_MEDIA_AUI
) {
993 u32 next_state
= DE_MEDIA_TP
;
994 de_next_media(de
, &next_state
, 1);
996 u32 next_state
= DE_MEDIA_AUI
;
997 de_next_media(de
, &next_state
, 1);
1000 spin_lock_irqsave(&de
->lock
, flags
);
1002 spin_unlock_irqrestore(&de
->lock
, flags
);
1007 de
->media_timer
.expires
= jiffies
+ DE_TIMER_NO_LINK
;
1008 add_timer(&de
->media_timer
);
1010 if (netif_msg_timer(de
))
1011 printk(KERN_INFO
"%s: no link, trying media %s, status %x\n",
1012 dev
->name
, media_name
[de
->media_type
], status
);
1015 static unsigned int de_ok_to_advertise (struct de_private
*de
, u32 new_media
)
1017 switch (new_media
) {
1018 case DE_MEDIA_TP_AUTO
:
1019 if (!(de
->media_advertise
& ADVERTISED_Autoneg
))
1021 if (!(de
->media_advertise
& (ADVERTISED_10baseT_Half
| ADVERTISED_10baseT_Full
)))
1025 if (!(de
->media_advertise
& ADVERTISED_BNC
))
1029 if (!(de
->media_advertise
& ADVERTISED_AUI
))
1033 if (!(de
->media_advertise
& ADVERTISED_10baseT_Half
))
1036 case DE_MEDIA_TP_FD
:
1037 if (!(de
->media_advertise
& ADVERTISED_10baseT_Full
))
1045 static void de21041_media_timer (unsigned long data
)
1047 struct de_private
*de
= (struct de_private
*) data
;
1048 struct net_device
*dev
= de
->dev
;
1049 u32 status
= dr32(SIAStatus
);
1050 unsigned int carrier
;
1051 unsigned long flags
;
1053 carrier
= (status
& NetCxnErr
) ? 0 : 1;
1056 if ((de
->media_type
== DE_MEDIA_TP_AUTO
||
1057 de
->media_type
== DE_MEDIA_TP
||
1058 de
->media_type
== DE_MEDIA_TP_FD
) &&
1059 (status
& LinkFailStatus
))
1062 de
->media_timer
.expires
= jiffies
+ DE_TIMER_LINK
;
1063 add_timer(&de
->media_timer
);
1064 if (!netif_carrier_ok(dev
))
1067 if (netif_msg_timer(de
))
1068 printk(KERN_INFO
"%s: %s link ok, mode %x status %x\n",
1069 dev
->name
, media_name
[de
->media_type
],
1070 dr32(MacMode
), status
);
1076 /* if media type locked, don't switch media */
1080 /* if activity detected, use that as hint for new media type */
1081 if (status
& NonselPortActive
) {
1082 unsigned int have_media
= 1;
1084 /* if AUI/BNC selected, then activity is on TP port */
1085 if (de
->media_type
== DE_MEDIA_AUI
||
1086 de
->media_type
== DE_MEDIA_BNC
) {
1087 if (de_ok_to_advertise(de
, DE_MEDIA_TP_AUTO
))
1088 de
->media_type
= DE_MEDIA_TP_AUTO
;
1093 /* TP selected. If there is only TP and BNC, then it's BNC */
1094 else if (((de
->media_supported
& DE_AUI_BNC
) == SUPPORTED_BNC
) &&
1095 de_ok_to_advertise(de
, DE_MEDIA_BNC
))
1096 de
->media_type
= DE_MEDIA_BNC
;
1098 /* TP selected. If there is only TP and AUI, then it's AUI */
1099 else if (((de
->media_supported
& DE_AUI_BNC
) == SUPPORTED_AUI
) &&
1100 de_ok_to_advertise(de
, DE_MEDIA_AUI
))
1101 de
->media_type
= DE_MEDIA_AUI
;
1103 /* otherwise, ignore the hint */
1112 * Absent or ambiguous activity hint, move to next advertised
1113 * media state. If de->media_type is left unchanged, this
1114 * simply resets the PHY and reloads the current media settings.
1116 if (de
->media_type
== DE_MEDIA_AUI
) {
1117 u32 next_states
[] = { DE_MEDIA_BNC
, DE_MEDIA_TP_AUTO
};
1118 de_next_media(de
, next_states
, ARRAY_SIZE(next_states
));
1119 } else if (de
->media_type
== DE_MEDIA_BNC
) {
1120 u32 next_states
[] = { DE_MEDIA_TP_AUTO
, DE_MEDIA_AUI
};
1121 de_next_media(de
, next_states
, ARRAY_SIZE(next_states
));
1123 u32 next_states
[] = { DE_MEDIA_AUI
, DE_MEDIA_BNC
, DE_MEDIA_TP_AUTO
};
1124 de_next_media(de
, next_states
, ARRAY_SIZE(next_states
));
1128 spin_lock_irqsave(&de
->lock
, flags
);
1130 spin_unlock_irqrestore(&de
->lock
, flags
);
1135 de
->media_timer
.expires
= jiffies
+ DE_TIMER_NO_LINK
;
1136 add_timer(&de
->media_timer
);
1138 if (netif_msg_timer(de
))
1139 printk(KERN_INFO
"%s: no link, trying media %s, status %x\n",
1140 dev
->name
, media_name
[de
->media_type
], status
);
1143 static void de_media_interrupt (struct de_private
*de
, u32 status
)
1145 if (status
& LinkPass
) {
1147 mod_timer(&de
->media_timer
, jiffies
+ DE_TIMER_LINK
);
1151 BUG_ON(!(status
& LinkFail
));
1153 if (netif_carrier_ok(de
->dev
)) {
1155 mod_timer(&de
->media_timer
, jiffies
+ DE_TIMER_NO_LINK
);
1159 static int de_reset_mac (struct de_private
*de
)
1164 * Reset MAC. de4x5.c and tulip.c examined for "advice"
1168 if (dr32(BusMode
) == 0xffffffff)
1171 /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
1172 dw32 (BusMode
, CmdReset
);
1175 dw32 (BusMode
, de_bus_mode
);
1178 for (tmp
= 0; tmp
< 5; tmp
++) {
1185 status
= dr32(MacStatus
);
1186 if (status
& (RxState
| TxState
))
1188 if (status
== 0xffffffff)
1193 static void de_adapter_wake (struct de_private
*de
)
1200 pci_read_config_dword(de
->pdev
, PCIPM
, &pmctl
);
1201 if (pmctl
& PM_Mask
) {
1203 pci_write_config_dword(de
->pdev
, PCIPM
, pmctl
);
1205 /* de4x5.c delays, so we do too */
1210 static void de_adapter_sleep (struct de_private
*de
)
1217 pci_read_config_dword(de
->pdev
, PCIPM
, &pmctl
);
1219 pci_write_config_dword(de
->pdev
, PCIPM
, pmctl
);
1222 static int de_init_hw (struct de_private
*de
)
1224 struct net_device
*dev
= de
->dev
;
1228 de_adapter_wake(de
);
1230 macmode
= dr32(MacMode
) & ~MacModeClear
;
1232 rc
= de_reset_mac(de
);
1236 de_set_media(de
); /* reset phy */
1238 dw32(RxRingAddr
, de
->ring_dma
);
1239 dw32(TxRingAddr
, de
->ring_dma
+ (sizeof(struct de_desc
) * DE_RX_RING_SIZE
));
1241 dw32(MacMode
, RxTx
| macmode
);
1243 dr32(RxMissed
); /* self-clearing */
1245 dw32(IntrMask
, de_intr_mask
);
1247 de_set_rx_mode(dev
);
1252 static int de_refill_rx (struct de_private
*de
)
1256 for (i
= 0; i
< DE_RX_RING_SIZE
; i
++) {
1257 struct sk_buff
*skb
;
1259 skb
= dev_alloc_skb(de
->rx_buf_sz
);
1265 de
->rx_skb
[i
].mapping
= pci_map_single(de
->pdev
,
1266 skb
->data
, de
->rx_buf_sz
, PCI_DMA_FROMDEVICE
);
1267 de
->rx_skb
[i
].skb
= skb
;
1269 de
->rx_ring
[i
].opts1
= cpu_to_le32(DescOwn
);
1270 if (i
== (DE_RX_RING_SIZE
- 1))
1271 de
->rx_ring
[i
].opts2
=
1272 cpu_to_le32(RingEnd
| de
->rx_buf_sz
);
1274 de
->rx_ring
[i
].opts2
= cpu_to_le32(de
->rx_buf_sz
);
1275 de
->rx_ring
[i
].addr1
= cpu_to_le32(de
->rx_skb
[i
].mapping
);
1276 de
->rx_ring
[i
].addr2
= 0;
1286 static int de_init_rings (struct de_private
*de
)
1288 memset(de
->tx_ring
, 0, sizeof(struct de_desc
) * DE_TX_RING_SIZE
);
1289 de
->tx_ring
[DE_TX_RING_SIZE
- 1].opts2
= cpu_to_le32(RingEnd
);
1292 de
->tx_head
= de
->tx_tail
= 0;
1294 return de_refill_rx (de
);
1297 static int de_alloc_rings (struct de_private
*de
)
1299 de
->rx_ring
= pci_alloc_consistent(de
->pdev
, DE_RING_BYTES
, &de
->ring_dma
);
1302 de
->tx_ring
= &de
->rx_ring
[DE_RX_RING_SIZE
];
1303 return de_init_rings(de
);
1306 static void de_clean_rings (struct de_private
*de
)
1310 memset(de
->rx_ring
, 0, sizeof(struct de_desc
) * DE_RX_RING_SIZE
);
1311 de
->rx_ring
[DE_RX_RING_SIZE
- 1].opts2
= cpu_to_le32(RingEnd
);
1313 memset(de
->tx_ring
, 0, sizeof(struct de_desc
) * DE_TX_RING_SIZE
);
1314 de
->tx_ring
[DE_TX_RING_SIZE
- 1].opts2
= cpu_to_le32(RingEnd
);
1317 for (i
= 0; i
< DE_RX_RING_SIZE
; i
++) {
1318 if (de
->rx_skb
[i
].skb
) {
1319 pci_unmap_single(de
->pdev
, de
->rx_skb
[i
].mapping
,
1320 de
->rx_buf_sz
, PCI_DMA_FROMDEVICE
);
1321 dev_kfree_skb(de
->rx_skb
[i
].skb
);
1325 for (i
= 0; i
< DE_TX_RING_SIZE
; i
++) {
1326 struct sk_buff
*skb
= de
->tx_skb
[i
].skb
;
1327 if ((skb
) && (skb
!= DE_DUMMY_SKB
)) {
1328 if (skb
!= DE_SETUP_SKB
) {
1329 de
->net_stats
.tx_dropped
++;
1330 pci_unmap_single(de
->pdev
,
1331 de
->tx_skb
[i
].mapping
,
1332 skb
->len
, PCI_DMA_TODEVICE
);
1335 pci_unmap_single(de
->pdev
,
1336 de
->tx_skb
[i
].mapping
,
1337 sizeof(de
->setup_frame
),
1343 memset(&de
->rx_skb
, 0, sizeof(struct ring_info
) * DE_RX_RING_SIZE
);
1344 memset(&de
->tx_skb
, 0, sizeof(struct ring_info
) * DE_TX_RING_SIZE
);
1347 static void de_free_rings (struct de_private
*de
)
1350 pci_free_consistent(de
->pdev
, DE_RING_BYTES
, de
->rx_ring
, de
->ring_dma
);
1355 static int de_open (struct net_device
*dev
)
1357 struct de_private
*de
= netdev_priv(dev
);
1360 if (netif_msg_ifup(de
))
1361 printk(KERN_DEBUG
"%s: enabling interface\n", dev
->name
);
1363 de
->rx_buf_sz
= (dev
->mtu
<= 1500 ? PKT_BUF_SZ
: dev
->mtu
+ 32);
1365 rc
= de_alloc_rings(de
);
1367 printk(KERN_ERR
"%s: ring allocation failure, err=%d\n",
1374 rc
= request_irq(dev
->irq
, de_interrupt
, IRQF_SHARED
, dev
->name
, dev
);
1376 printk(KERN_ERR
"%s: IRQ %d request failure, err=%d\n",
1377 dev
->name
, dev
->irq
, rc
);
1381 rc
= de_init_hw(de
);
1383 printk(KERN_ERR
"%s: h/w init failure, err=%d\n",
1385 goto err_out_free_irq
;
1388 netif_start_queue(dev
);
1389 mod_timer(&de
->media_timer
, jiffies
+ DE_TIMER_NO_LINK
);
1394 free_irq(dev
->irq
, dev
);
1400 static int de_close (struct net_device
*dev
)
1402 struct de_private
*de
= netdev_priv(dev
);
1403 unsigned long flags
;
1405 if (netif_msg_ifdown(de
))
1406 printk(KERN_DEBUG
"%s: disabling interface\n", dev
->name
);
1408 del_timer_sync(&de
->media_timer
);
1410 spin_lock_irqsave(&de
->lock
, flags
);
1412 netif_stop_queue(dev
);
1413 netif_carrier_off(dev
);
1414 spin_unlock_irqrestore(&de
->lock
, flags
);
1416 free_irq(dev
->irq
, dev
);
1419 de_adapter_sleep(de
);
1423 static void de_tx_timeout (struct net_device
*dev
)
1425 struct de_private
*de
= netdev_priv(dev
);
1427 printk(KERN_DEBUG
"%s: NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
1428 dev
->name
, dr32(MacStatus
), dr32(MacMode
), dr32(SIAStatus
),
1429 de
->rx_tail
, de
->tx_head
, de
->tx_tail
);
1431 del_timer_sync(&de
->media_timer
);
1433 disable_irq(dev
->irq
);
1434 spin_lock_irq(&de
->lock
);
1437 netif_stop_queue(dev
);
1438 netif_carrier_off(dev
);
1440 spin_unlock_irq(&de
->lock
);
1441 enable_irq(dev
->irq
);
1443 /* Update the error counts. */
1446 synchronize_irq(dev
->irq
);
1453 netif_wake_queue(dev
);
1456 static void __de_get_regs(struct de_private
*de
, u8
*buf
)
1459 u32
*rbuf
= (u32
*)buf
;
1462 for (i
= 0; i
< DE_NUM_REGS
; i
++)
1463 rbuf
[i
] = dr32(i
* 8);
1465 /* handle self-clearing RxMissed counter, CSR8 */
1466 de_rx_missed(de
, rbuf
[8]);
1469 static int __de_get_settings(struct de_private
*de
, struct ethtool_cmd
*ecmd
)
1471 ecmd
->supported
= de
->media_supported
;
1472 ecmd
->transceiver
= XCVR_INTERNAL
;
1473 ecmd
->phy_address
= 0;
1474 ecmd
->advertising
= de
->media_advertise
;
1476 switch (de
->media_type
) {
1478 ecmd
->port
= PORT_AUI
;
1482 ecmd
->port
= PORT_BNC
;
1486 ecmd
->port
= PORT_TP
;
1487 ecmd
->speed
= SPEED_10
;
1491 if (dr32(MacMode
) & FullDuplex
)
1492 ecmd
->duplex
= DUPLEX_FULL
;
1494 ecmd
->duplex
= DUPLEX_HALF
;
1497 ecmd
->autoneg
= AUTONEG_DISABLE
;
1499 ecmd
->autoneg
= AUTONEG_ENABLE
;
1501 /* ignore maxtxpkt, maxrxpkt for now */
1506 static int __de_set_settings(struct de_private
*de
, struct ethtool_cmd
*ecmd
)
1509 unsigned int media_lock
;
1511 if (ecmd
->speed
!= SPEED_10
&& ecmd
->speed
!= 5 && ecmd
->speed
!= 2)
1513 if (de
->de21040
&& ecmd
->speed
== 2)
1515 if (ecmd
->duplex
!= DUPLEX_HALF
&& ecmd
->duplex
!= DUPLEX_FULL
)
1517 if (ecmd
->port
!= PORT_TP
&& ecmd
->port
!= PORT_AUI
&& ecmd
->port
!= PORT_BNC
)
1519 if (de
->de21040
&& ecmd
->port
== PORT_BNC
)
1521 if (ecmd
->transceiver
!= XCVR_INTERNAL
)
1523 if (ecmd
->autoneg
!= AUTONEG_DISABLE
&& ecmd
->autoneg
!= AUTONEG_ENABLE
)
1525 if (ecmd
->advertising
& ~de
->media_supported
)
1527 if (ecmd
->autoneg
== AUTONEG_ENABLE
&&
1528 (!(ecmd
->advertising
& ADVERTISED_Autoneg
)))
1531 switch (ecmd
->port
) {
1533 new_media
= DE_MEDIA_AUI
;
1534 if (!(ecmd
->advertising
& ADVERTISED_AUI
))
1538 new_media
= DE_MEDIA_BNC
;
1539 if (!(ecmd
->advertising
& ADVERTISED_BNC
))
1543 if (ecmd
->autoneg
== AUTONEG_ENABLE
)
1544 new_media
= DE_MEDIA_TP_AUTO
;
1545 else if (ecmd
->duplex
== DUPLEX_FULL
)
1546 new_media
= DE_MEDIA_TP_FD
;
1548 new_media
= DE_MEDIA_TP
;
1549 if (!(ecmd
->advertising
& ADVERTISED_TP
))
1551 if (!(ecmd
->advertising
& (ADVERTISED_10baseT_Full
| ADVERTISED_10baseT_Half
)))
1556 media_lock
= (ecmd
->autoneg
== AUTONEG_ENABLE
) ? 0 : 1;
1558 if ((new_media
== de
->media_type
) &&
1559 (media_lock
== de
->media_lock
) &&
1560 (ecmd
->advertising
== de
->media_advertise
))
1561 return 0; /* nothing to change */
1566 de
->media_type
= new_media
;
1567 de
->media_lock
= media_lock
;
1568 de
->media_advertise
= ecmd
->advertising
;
1574 static void de_get_drvinfo (struct net_device
*dev
,struct ethtool_drvinfo
*info
)
1576 struct de_private
*de
= netdev_priv(dev
);
1578 strcpy (info
->driver
, DRV_NAME
);
1579 strcpy (info
->version
, DRV_VERSION
);
1580 strcpy (info
->bus_info
, pci_name(de
->pdev
));
1581 info
->eedump_len
= DE_EEPROM_SIZE
;
1584 static int de_get_regs_len(struct net_device
*dev
)
1586 return DE_REGS_SIZE
;
1589 static int de_get_settings(struct net_device
*dev
, struct ethtool_cmd
*ecmd
)
1591 struct de_private
*de
= netdev_priv(dev
);
1594 spin_lock_irq(&de
->lock
);
1595 rc
= __de_get_settings(de
, ecmd
);
1596 spin_unlock_irq(&de
->lock
);
1601 static int de_set_settings(struct net_device
*dev
, struct ethtool_cmd
*ecmd
)
1603 struct de_private
*de
= netdev_priv(dev
);
1606 spin_lock_irq(&de
->lock
);
1607 rc
= __de_set_settings(de
, ecmd
);
1608 spin_unlock_irq(&de
->lock
);
1613 static u32
de_get_msglevel(struct net_device
*dev
)
1615 struct de_private
*de
= netdev_priv(dev
);
1617 return de
->msg_enable
;
1620 static void de_set_msglevel(struct net_device
*dev
, u32 msglvl
)
1622 struct de_private
*de
= netdev_priv(dev
);
1624 de
->msg_enable
= msglvl
;
1627 static int de_get_eeprom(struct net_device
*dev
,
1628 struct ethtool_eeprom
*eeprom
, u8
*data
)
1630 struct de_private
*de
= netdev_priv(dev
);
1634 if ((eeprom
->offset
!= 0) || (eeprom
->magic
!= 0) ||
1635 (eeprom
->len
!= DE_EEPROM_SIZE
))
1637 memcpy(data
, de
->ee_data
, eeprom
->len
);
1642 static int de_nway_reset(struct net_device
*dev
)
1644 struct de_private
*de
= netdev_priv(dev
);
1647 if (de
->media_type
!= DE_MEDIA_TP_AUTO
)
1649 if (netif_carrier_ok(de
->dev
))
1652 status
= dr32(SIAStatus
);
1653 dw32(SIAStatus
, (status
& ~NWayState
) | NWayRestart
);
1654 if (netif_msg_link(de
))
1655 printk(KERN_INFO
"%s: link nway restart, status %x,%x\n",
1656 de
->dev
->name
, status
, dr32(SIAStatus
));
1660 static void de_get_regs(struct net_device
*dev
, struct ethtool_regs
*regs
,
1663 struct de_private
*de
= netdev_priv(dev
);
1665 regs
->version
= (DE_REGS_VER
<< 2) | de
->de21040
;
1667 spin_lock_irq(&de
->lock
);
1668 __de_get_regs(de
, data
);
1669 spin_unlock_irq(&de
->lock
);
1672 static const struct ethtool_ops de_ethtool_ops
= {
1673 .get_link
= ethtool_op_get_link
,
1674 .get_drvinfo
= de_get_drvinfo
,
1675 .get_regs_len
= de_get_regs_len
,
1676 .get_settings
= de_get_settings
,
1677 .set_settings
= de_set_settings
,
1678 .get_msglevel
= de_get_msglevel
,
1679 .set_msglevel
= de_set_msglevel
,
1680 .get_eeprom
= de_get_eeprom
,
1681 .nway_reset
= de_nway_reset
,
1682 .get_regs
= de_get_regs
,
1685 static void __devinit
de21040_get_mac_address (struct de_private
*de
)
1689 dw32 (ROMCmd
, 0); /* Reset the pointer with a dummy write. */
1692 for (i
= 0; i
< 6; i
++) {
1693 int value
, boguscnt
= 100000;
1695 value
= dr32(ROMCmd
);
1696 } while (value
< 0 && --boguscnt
> 0);
1697 de
->dev
->dev_addr
[i
] = value
;
1700 printk(KERN_WARNING PFX
"timeout reading 21040 MAC address byte %u\n", i
);
1704 static void __devinit
de21040_get_media_info(struct de_private
*de
)
1708 de
->media_type
= DE_MEDIA_TP
;
1709 de
->media_supported
|= SUPPORTED_TP
| SUPPORTED_10baseT_Full
|
1710 SUPPORTED_10baseT_Half
| SUPPORTED_AUI
;
1711 de
->media_advertise
= de
->media_supported
;
1713 for (i
= 0; i
< DE_MAX_MEDIA
; i
++) {
1717 case DE_MEDIA_TP_FD
:
1718 de
->media
[i
].type
= i
;
1719 de
->media
[i
].csr13
= t21040_csr13
[i
];
1720 de
->media
[i
].csr14
= t21040_csr14
[i
];
1721 de
->media
[i
].csr15
= t21040_csr15
[i
];
1724 de
->media
[i
].type
= DE_MEDIA_INVALID
;
1730 /* Note: this routine returns extra data bits for size detection. */
1731 static unsigned __devinit
tulip_read_eeprom(void __iomem
*regs
, int location
, int addr_len
)
1734 unsigned retval
= 0;
1735 void __iomem
*ee_addr
= regs
+ ROMCmd
;
1736 int read_cmd
= location
| (EE_READ_CMD
<< addr_len
);
1738 writel(EE_ENB
& ~EE_CS
, ee_addr
);
1739 writel(EE_ENB
, ee_addr
);
1741 /* Shift the read command bits out. */
1742 for (i
= 4 + addr_len
; i
>= 0; i
--) {
1743 short dataval
= (read_cmd
& (1 << i
)) ? EE_DATA_WRITE
: 0;
1744 writel(EE_ENB
| dataval
, ee_addr
);
1746 writel(EE_ENB
| dataval
| EE_SHIFT_CLK
, ee_addr
);
1748 retval
= (retval
<< 1) | ((readl(ee_addr
) & EE_DATA_READ
) ? 1 : 0);
1750 writel(EE_ENB
, ee_addr
);
1753 for (i
= 16; i
> 0; i
--) {
1754 writel(EE_ENB
| EE_SHIFT_CLK
, ee_addr
);
1756 retval
= (retval
<< 1) | ((readl(ee_addr
) & EE_DATA_READ
) ? 1 : 0);
1757 writel(EE_ENB
, ee_addr
);
1761 /* Terminate the EEPROM access. */
1762 writel(EE_ENB
& ~EE_CS
, ee_addr
);
1766 static void __devinit
de21041_get_srom_info (struct de_private
*de
)
1768 unsigned i
, sa_offset
= 0, ofs
;
1769 u8 ee_data
[DE_EEPROM_SIZE
+ 6] = {};
1770 unsigned ee_addr_size
= tulip_read_eeprom(de
->regs
, 0xff, 8) & 0x40000 ? 8 : 6;
1771 struct de_srom_info_leaf
*il
;
1774 /* download entire eeprom */
1775 for (i
= 0; i
< DE_EEPROM_WORDS
; i
++)
1776 ((__le16
*)ee_data
)[i
] =
1777 cpu_to_le16(tulip_read_eeprom(de
->regs
, i
, ee_addr_size
));
1779 /* DEC now has a specification but early board makers
1780 just put the address in the first EEPROM locations. */
1781 /* This does memcmp(eedata, eedata+16, 8) */
1783 #ifndef CONFIG_MIPS_COBALT
1785 for (i
= 0; i
< 8; i
++)
1786 if (ee_data
[i
] != ee_data
[16+i
])
1791 /* store MAC address */
1792 for (i
= 0; i
< 6; i
++)
1793 de
->dev
->dev_addr
[i
] = ee_data
[i
+ sa_offset
];
1795 /* get offset of controller 0 info leaf. ignore 2nd byte. */
1796 ofs
= ee_data
[SROMC0InfoLeaf
];
1797 if (ofs
>= (sizeof(ee_data
) - sizeof(struct de_srom_info_leaf
) - sizeof(struct de_srom_media_block
)))
1800 /* get pointer to info leaf */
1801 il
= (struct de_srom_info_leaf
*) &ee_data
[ofs
];
1803 /* paranoia checks */
1804 if (il
->n_blocks
== 0)
1806 if ((sizeof(ee_data
) - ofs
) <
1807 (sizeof(struct de_srom_info_leaf
) + (sizeof(struct de_srom_media_block
) * il
->n_blocks
)))
1810 /* get default media type */
1811 switch (get_unaligned(&il
->default_media
)) {
1812 case 0x0001: de
->media_type
= DE_MEDIA_BNC
; break;
1813 case 0x0002: de
->media_type
= DE_MEDIA_AUI
; break;
1814 case 0x0204: de
->media_type
= DE_MEDIA_TP_FD
; break;
1815 default: de
->media_type
= DE_MEDIA_TP_AUTO
; break;
1818 if (netif_msg_probe(de
))
1819 printk(KERN_INFO
"de%d: SROM leaf offset %u, default media %s\n",
1821 media_name
[de
->media_type
]);
1823 /* init SIA register values to defaults */
1824 for (i
= 0; i
< DE_MAX_MEDIA
; i
++) {
1825 de
->media
[i
].type
= DE_MEDIA_INVALID
;
1826 de
->media
[i
].csr13
= 0xffff;
1827 de
->media
[i
].csr14
= 0xffff;
1828 de
->media
[i
].csr15
= 0xffff;
1831 /* parse media blocks to see what medias are supported,
1832 * and if any custom CSR values are provided
1834 bufp
= ((void *)il
) + sizeof(*il
);
1835 for (i
= 0; i
< il
->n_blocks
; i
++) {
1836 struct de_srom_media_block
*ib
= bufp
;
1839 /* index based on media type in media block */
1840 switch(ib
->opts
& MediaBlockMask
) {
1841 case 0: /* 10baseT */
1842 de
->media_supported
|= SUPPORTED_TP
| SUPPORTED_10baseT_Half
1843 | SUPPORTED_Autoneg
;
1845 de
->media
[DE_MEDIA_TP_AUTO
].type
= DE_MEDIA_TP_AUTO
;
1848 de
->media_supported
|= SUPPORTED_BNC
;
1852 de
->media_supported
|= SUPPORTED_AUI
;
1855 case 4: /* 10baseT-FD */
1856 de
->media_supported
|= SUPPORTED_TP
| SUPPORTED_10baseT_Full
1857 | SUPPORTED_Autoneg
;
1858 idx
= DE_MEDIA_TP_FD
;
1859 de
->media
[DE_MEDIA_TP_AUTO
].type
= DE_MEDIA_TP_AUTO
;
1865 de
->media
[idx
].type
= idx
;
1867 if (netif_msg_probe(de
))
1868 printk(KERN_INFO
"de%d: media block #%u: %s",
1870 media_name
[de
->media
[idx
].type
]);
1872 bufp
+= sizeof (ib
->opts
);
1874 if (ib
->opts
& MediaCustomCSRs
) {
1875 de
->media
[idx
].csr13
= get_unaligned(&ib
->csr13
);
1876 de
->media
[idx
].csr14
= get_unaligned(&ib
->csr14
);
1877 de
->media
[idx
].csr15
= get_unaligned(&ib
->csr15
);
1878 bufp
+= sizeof(ib
->csr13
) + sizeof(ib
->csr14
) +
1881 if (netif_msg_probe(de
))
1882 printk(" (%x,%x,%x)\n",
1883 de
->media
[idx
].csr13
,
1884 de
->media
[idx
].csr14
,
1885 de
->media
[idx
].csr15
);
1887 } else if (netif_msg_probe(de
))
1890 if (bufp
> ((void *)&ee_data
[DE_EEPROM_SIZE
- 3]))
1894 de
->media_advertise
= de
->media_supported
;
1897 /* fill in defaults, for cases where custom CSRs not used */
1898 for (i
= 0; i
< DE_MAX_MEDIA
; i
++) {
1899 if (de
->media
[i
].csr13
== 0xffff)
1900 de
->media
[i
].csr13
= t21041_csr13
[i
];
1901 if (de
->media
[i
].csr14
== 0xffff)
1902 de
->media
[i
].csr14
= t21041_csr14
[i
];
1903 if (de
->media
[i
].csr15
== 0xffff)
1904 de
->media
[i
].csr15
= t21041_csr15
[i
];
1907 de
->ee_data
= kmemdup(&ee_data
[0], DE_EEPROM_SIZE
, GFP_KERNEL
);
1912 /* for error cases, it's ok to assume we support all these */
1913 for (i
= 0; i
< DE_MAX_MEDIA
; i
++)
1914 de
->media
[i
].type
= i
;
1915 de
->media_supported
=
1916 SUPPORTED_10baseT_Half
|
1917 SUPPORTED_10baseT_Full
|
1925 static const struct net_device_ops de_netdev_ops
= {
1926 .ndo_open
= de_open
,
1927 .ndo_stop
= de_close
,
1928 .ndo_set_multicast_list
= de_set_rx_mode
,
1929 .ndo_start_xmit
= de_start_xmit
,
1930 .ndo_get_stats
= de_get_stats
,
1931 .ndo_tx_timeout
= de_tx_timeout
,
1932 .ndo_change_mtu
= eth_change_mtu
,
1933 .ndo_set_mac_address
= eth_mac_addr
,
1934 .ndo_validate_addr
= eth_validate_addr
,
1937 static int __devinit
de_init_one (struct pci_dev
*pdev
,
1938 const struct pci_device_id
*ent
)
1940 struct net_device
*dev
;
1941 struct de_private
*de
;
1944 unsigned long pciaddr
;
1945 static int board_idx
= -1;
1951 printk("%s", version
);
1954 /* allocate a new ethernet device structure, and fill in defaults */
1955 dev
= alloc_etherdev(sizeof(struct de_private
));
1959 dev
->netdev_ops
= &de_netdev_ops
;
1960 SET_NETDEV_DEV(dev
, &pdev
->dev
);
1961 dev
->ethtool_ops
= &de_ethtool_ops
;
1962 dev
->watchdog_timeo
= TX_TIMEOUT
;
1964 de
= netdev_priv(dev
);
1965 de
->de21040
= ent
->driver_data
== 0 ? 1 : 0;
1968 de
->msg_enable
= (debug
< 0 ? DE_DEF_MSG_ENABLE
: debug
);
1969 de
->board_idx
= board_idx
;
1970 spin_lock_init (&de
->lock
);
1971 init_timer(&de
->media_timer
);
1973 de
->media_timer
.function
= de21040_media_timer
;
1975 de
->media_timer
.function
= de21041_media_timer
;
1976 de
->media_timer
.data
= (unsigned long) de
;
1978 netif_carrier_off(dev
);
1979 netif_stop_queue(dev
);
1981 /* wake up device, assign resources */
1982 rc
= pci_enable_device(pdev
);
1986 /* reserve PCI resources to ensure driver atomicity */
1987 rc
= pci_request_regions(pdev
, DRV_NAME
);
1989 goto err_out_disable
;
1991 /* check for invalid IRQ value */
1992 if (pdev
->irq
< 2) {
1994 printk(KERN_ERR PFX
"invalid irq (%d) for pci dev %s\n",
1995 pdev
->irq
, pci_name(pdev
));
1999 dev
->irq
= pdev
->irq
;
2001 /* obtain and check validity of PCI I/O address */
2002 pciaddr
= pci_resource_start(pdev
, 1);
2005 printk(KERN_ERR PFX
"no MMIO resource for pci dev %s\n",
2009 if (pci_resource_len(pdev
, 1) < DE_REGS_SIZE
) {
2011 printk(KERN_ERR PFX
"MMIO resource (%llx) too small on pci dev %s\n",
2012 (unsigned long long)pci_resource_len(pdev
, 1), pci_name(pdev
));
2016 /* remap CSR registers */
2017 regs
= ioremap_nocache(pciaddr
, DE_REGS_SIZE
);
2020 printk(KERN_ERR PFX
"Cannot map PCI MMIO (%llx@%lx) on pci dev %s\n",
2021 (unsigned long long)pci_resource_len(pdev
, 1),
2022 pciaddr
, pci_name(pdev
));
2025 dev
->base_addr
= (unsigned long) regs
;
2028 de_adapter_wake(de
);
2030 /* make sure hardware is not running */
2031 rc
= de_reset_mac(de
);
2033 printk(KERN_ERR PFX
"Cannot reset MAC, pci dev %s\n",
2038 /* get MAC address, initialize default media type and
2039 * get list of supported media
2042 de21040_get_mac_address(de
);
2043 de21040_get_media_info(de
);
2045 de21041_get_srom_info(de
);
2048 /* register new network interface with kernel */
2049 rc
= register_netdev(dev
);
2053 /* print info about board and interface just registered */
2054 printk (KERN_INFO
"%s: %s at 0x%lx, %pM, IRQ %d\n",
2056 de
->de21040
? "21040" : "21041",
2061 pci_set_drvdata(pdev
, dev
);
2063 /* enable busmastering */
2064 pci_set_master(pdev
);
2066 /* put adapter to sleep */
2067 de_adapter_sleep(de
);
2075 pci_release_regions(pdev
);
2077 pci_disable_device(pdev
);
2083 static void __devexit
de_remove_one (struct pci_dev
*pdev
)
2085 struct net_device
*dev
= pci_get_drvdata(pdev
);
2086 struct de_private
*de
= netdev_priv(dev
);
2089 unregister_netdev(dev
);
2092 pci_release_regions(pdev
);
2093 pci_disable_device(pdev
);
2094 pci_set_drvdata(pdev
, NULL
);
2100 static int de_suspend (struct pci_dev
*pdev
, pm_message_t state
)
2102 struct net_device
*dev
= pci_get_drvdata (pdev
);
2103 struct de_private
*de
= netdev_priv(dev
);
2106 if (netif_running (dev
)) {
2107 del_timer_sync(&de
->media_timer
);
2109 disable_irq(dev
->irq
);
2110 spin_lock_irq(&de
->lock
);
2113 netif_stop_queue(dev
);
2114 netif_device_detach(dev
);
2115 netif_carrier_off(dev
);
2117 spin_unlock_irq(&de
->lock
);
2118 enable_irq(dev
->irq
);
2120 /* Update the error counts. */
2123 synchronize_irq(dev
->irq
);
2126 de_adapter_sleep(de
);
2127 pci_disable_device(pdev
);
2129 netif_device_detach(dev
);
2135 static int de_resume (struct pci_dev
*pdev
)
2137 struct net_device
*dev
= pci_get_drvdata (pdev
);
2138 struct de_private
*de
= netdev_priv(dev
);
2142 if (netif_device_present(dev
))
2144 if (!netif_running(dev
))
2146 if ((retval
= pci_enable_device(pdev
))) {
2147 printk (KERN_ERR
"%s: pci_enable_device failed in resume\n",
2153 netif_device_attach(dev
);
2159 #endif /* CONFIG_PM */
2161 static struct pci_driver de_driver
= {
2163 .id_table
= de_pci_tbl
,
2164 .probe
= de_init_one
,
2165 .remove
= __devexit_p(de_remove_one
),
2167 .suspend
= de_suspend
,
2168 .resume
= de_resume
,
2172 static int __init
de_init (void)
2175 printk("%s", version
);
2177 return pci_register_driver(&de_driver
);
2180 static void __exit
de_exit (void)
2182 pci_unregister_driver (&de_driver
);
2185 module_init(de_init
);
2186 module_exit(de_exit
);