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/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>
49 #include <asm/uaccess.h>
50 #include <asm/unaligned.h>
52 /* These identify the driver base version and may not be removed. */
53 static char version
[] =
54 KERN_INFO DRV_NAME
" PCI Ethernet driver v" DRV_VERSION
" (" DRV_RELDATE
")\n";
56 MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
57 MODULE_DESCRIPTION("Intel/Digital 21040/1 series PCI Ethernet driver");
58 MODULE_LICENSE("GPL");
59 MODULE_VERSION(DRV_VERSION
);
61 static int debug
= -1;
62 module_param (debug
, int, 0);
63 MODULE_PARM_DESC (debug
, "de2104x bitmapped message enable number");
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__)
69 static int rx_copybreak
= 1518;
71 static int rx_copybreak
= 100;
73 module_param (rx_copybreak
, int, 0);
74 MODULE_PARM_DESC (rx_copybreak
, "de2104x Breakpoint at which Rx packets are copied");
76 #define PFX DRV_NAME ": "
78 #define DE_DEF_MSG_ENABLE (NETIF_MSG_DRV | \
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)
98 #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
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
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)
118 #define DE_TIMER_LINK (60 * HZ)
119 #define DE_TIMER_NO_LINK (5 * HZ)
121 #define DE_NUM_REGS 16
122 #define DE_REGS_SIZE (DE_NUM_REGS * sizeof(u32))
123 #define DE_REGS_VER 1
125 /* Time in jiffies before concluding the transmitter is hung. */
126 #define TX_TIMEOUT (6*HZ)
128 #define DE_UNALIGNED_16(a) (u16)(get_unaligned((u16 *)(a)))
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
157 CacheAlign16
= 0x00008000,
158 BurstLen4
= 0x00000400,
161 NormalTxPoll
= (1 << 0),
162 NormalRxPoll
= (1 << 0),
164 /* Tx/Rx descriptor status bits */
167 RxErrLong
= (1 << 7),
169 RxErrFIFO
= (1 << 0),
170 RxErrRunt
= (1 << 11),
171 RxErrFrame
= (1 << 14),
173 FirstFrag
= (1 << 29),
174 LastFrag
= (1 << 30),
176 TxFIFOUnder
= (1 << 1),
177 TxLinkFail
= (1 << 2) | (1 << 10) | (1 << 11),
180 TxJabber
= (1 << 14),
181 SetupFrame
= (1 << 27),
192 TxState
= (1 << 22) | (1 << 21) | (1 << 20),
193 RxState
= (1 << 19) | (1 << 18) | (1 << 17),
194 LinkFail
= (1 << 12),
196 RxStopped
= (1 << 8),
197 TxStopped
= (1 << 1),
200 TxEnable
= (1 << 13),
202 RxTx
= TxEnable
| RxEnable
,
203 FullDuplex
= (1 << 9),
204 AcceptAllMulticast
= (1 << 7),
205 AcceptAllPhys
= (1 << 6),
207 MacModeClear
= (1<<12) | (1<<11) | (1<<10) | (1<<8) | (1<<3) |
208 RxTx
| BOCnt
| AcceptAllPhys
| AcceptAllMulticast
,
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. */
216 EE_DATA_READ
= 0x08, /* Data from the EEPROM chip. */
217 EE_ENB
= (0x4800 | EE_CS
),
219 /* The EEPROM commands include the alway-set leading bit. */
223 RxMissedOver
= (1 << 16),
224 RxMissedMask
= 0xffff,
226 /* SROM-related bits */
228 MediaBlockMask
= 0x3f,
229 MediaCustomCSRs
= (1 << 6),
232 PM_Sleep
= (1 << 31),
233 PM_Snooze
= (1 << 30),
234 PM_Mask
= PM_Sleep
| PM_Snooze
,
237 NWayState
= (1 << 14) | (1 << 13) | (1 << 12),
238 NWayRestart
= (1 << 12),
239 NonselPortActive
= (1 << 9),
240 LinkFailStatus
= (1 << 2),
241 NetCxnErr
= (1 << 1),
244 static const u32 de_intr_mask
=
245 IntrOK
| IntrErr
| RxIntr
| RxEmpty
| TxIntr
| TxEmpty
|
246 LinkPass
| LinkFail
| PciErr
;
249 * Set the programmable burst length to 4 longwords for all:
250 * DMA errors result without these values. Cache align 16 long.
252 static const u32 de_bus_mode
= CacheAlign16
| BurstLen4
;
254 struct de_srom_media_block
{
259 } __attribute__((packed
));
261 struct de_srom_info_leaf
{
265 } __attribute__((packed
));
275 u16 type
; /* DE_MEDIA_xxx */
292 struct net_device
*dev
;
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
];
304 struct net_device_stats net_stats
;
306 struct pci_dev
*pdev
;
308 u16 setup_frame
[DE_SETUP_FRAME_WORDS
];
313 struct media_info media
[DE_MAX_MEDIA
];
314 struct timer_list media_timer
;
318 unsigned de21040
: 1;
319 unsigned media_lock
: 1;
323 static void de_set_rx_mode (struct net_device
*dev
);
324 static void de_tx (struct de_private
*de
);
325 static void de_clean_rings (struct de_private
*de
);
326 static void de_media_interrupt (struct de_private
*de
, u32 status
);
327 static void de21040_media_timer (unsigned long data
);
328 static void de21041_media_timer (unsigned long data
);
329 static unsigned int de_ok_to_advertise (struct de_private
*de
, u32 new_media
);
332 static 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 },
339 MODULE_DEVICE_TABLE(pci
, de_pci_tbl
);
341 static const char * const media_name
[DE_MAX_MEDIA
] = {
349 /* 21040 transceiver register settings:
350 * TP AUTO(unused), BNC(unused), AUI, TP, TP FD*/
351 static u16 t21040_csr13
[] = { 0, 0, 0x8F09, 0x8F01, 0x8F01, };
352 static u16 t21040_csr14
[] = { 0, 0, 0x0705, 0xFFFF, 0xFFFD, };
353 static u16 t21040_csr15
[] = { 0, 0, 0x0006, 0x0000, 0x0000, };
355 /* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/
356 static u16 t21041_csr13
[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, };
357 static u16 t21041_csr14
[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x6F3F, 0x6F3D, };
358 static u16 t21041_csr15
[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
361 #define dr32(reg) readl(de->regs + (reg))
362 #define dw32(reg,val) writel((val), de->regs + (reg))
365 static void de_rx_err_acct (struct de_private
*de
, unsigned rx_tail
,
368 if (netif_msg_rx_err (de
))
370 "%s: rx err, slot %d status 0x%x len %d\n",
371 de
->dev
->name
, rx_tail
, status
, len
);
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
++;
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
++;
391 static void de_rx (struct de_private
*de
)
393 unsigned rx_tail
= de
->rx_tail
;
394 unsigned rx_work
= DE_RX_RING_SIZE
;
401 struct sk_buff
*skb
, *copy_skb
;
402 unsigned copying_skb
, buflen
;
404 skb
= de
->rx_skb
[rx_tail
].skb
;
407 status
= le32_to_cpu(de
->rx_ring
[rx_tail
].opts1
);
408 if (status
& DescOwn
)
411 len
= ((status
>> 16) & 0x7ff) - 4;
412 mapping
= de
->rx_skb
[rx_tail
].mapping
;
414 if (unlikely(drop
)) {
415 de
->net_stats
.rx_dropped
++;
419 if (unlikely((status
& 0x38008300) != 0x0300)) {
420 de_rx_err_acct(de
, rx_tail
, status
, len
);
424 copying_skb
= (len
<= rx_copybreak
);
426 if (unlikely(netif_msg_rx_status(de
)))
427 printk(KERN_DEBUG
"%s: rx slot %d status 0x%x len %d copying? %d\n",
428 de
->dev
->name
, rx_tail
, status
, len
,
431 buflen
= copying_skb
? (len
+ RX_OFFSET
) : de
->rx_buf_sz
;
432 copy_skb
= dev_alloc_skb (buflen
);
433 if (unlikely(!copy_skb
)) {
434 de
->net_stats
.rx_dropped
++;
439 copy_skb
->dev
= de
->dev
;
442 pci_unmap_single(de
->pdev
, mapping
,
443 buflen
, PCI_DMA_FROMDEVICE
);
447 de
->rx_skb
[rx_tail
].mapping
=
448 pci_map_single(de
->pdev
, copy_skb
->data
,
449 buflen
, PCI_DMA_FROMDEVICE
);
450 de
->rx_skb
[rx_tail
].skb
= copy_skb
;
452 pci_dma_sync_single_for_cpu(de
->pdev
, mapping
, len
, PCI_DMA_FROMDEVICE
);
453 skb_reserve(copy_skb
, RX_OFFSET
);
454 memcpy(skb_put(copy_skb
, len
), skb
->data
, len
);
456 pci_dma_sync_single_for_device(de
->pdev
, mapping
, len
, PCI_DMA_FROMDEVICE
);
458 /* We'll reuse the original ring buffer. */
462 skb
->protocol
= eth_type_trans (skb
, de
->dev
);
464 de
->net_stats
.rx_packets
++;
465 de
->net_stats
.rx_bytes
+= skb
->len
;
466 de
->dev
->last_rx
= jiffies
;
468 if (rc
== NET_RX_DROP
)
472 de
->rx_ring
[rx_tail
].opts1
= cpu_to_le32(DescOwn
);
473 if (rx_tail
== (DE_RX_RING_SIZE
- 1))
474 de
->rx_ring
[rx_tail
].opts2
=
475 cpu_to_le32(RingEnd
| de
->rx_buf_sz
);
477 de
->rx_ring
[rx_tail
].opts2
= cpu_to_le32(de
->rx_buf_sz
);
478 de
->rx_ring
[rx_tail
].addr1
= cpu_to_le32(mapping
);
479 rx_tail
= NEXT_RX(rx_tail
);
483 printk(KERN_WARNING
"%s: rx work limit reached\n", de
->dev
->name
);
485 de
->rx_tail
= rx_tail
;
488 static irqreturn_t
de_interrupt (int irq
, void *dev_instance
, struct pt_regs
*regs
)
490 struct net_device
*dev
= dev_instance
;
491 struct de_private
*de
= dev
->priv
;
494 status
= dr32(MacStatus
);
495 if ((!(status
& (IntrOK
|IntrErr
))) || (status
== 0xFFFF))
498 if (netif_msg_intr(de
))
499 printk(KERN_DEBUG
"%s: intr, status %08x mode %08x desc %u/%u/%u\n",
500 dev
->name
, status
, dr32(MacMode
), de
->rx_tail
, de
->tx_head
, de
->tx_tail
);
502 dw32(MacStatus
, status
);
504 if (status
& (RxIntr
| RxEmpty
)) {
506 if (status
& RxEmpty
)
507 dw32(RxPoll
, NormalRxPoll
);
510 spin_lock(&de
->lock
);
512 if (status
& (TxIntr
| TxEmpty
))
515 if (status
& (LinkPass
| LinkFail
))
516 de_media_interrupt(de
, status
);
518 spin_unlock(&de
->lock
);
520 if (status
& PciErr
) {
523 pci_read_config_word(de
->pdev
, PCI_STATUS
, &pci_status
);
524 pci_write_config_word(de
->pdev
, PCI_STATUS
, pci_status
);
525 printk(KERN_ERR
"%s: PCI bus error, status=%08x, PCI status=%04x\n",
526 dev
->name
, status
, pci_status
);
532 static void de_tx (struct de_private
*de
)
534 unsigned tx_head
= de
->tx_head
;
535 unsigned tx_tail
= de
->tx_tail
;
537 while (tx_tail
!= tx_head
) {
542 status
= le32_to_cpu(de
->tx_ring
[tx_tail
].opts1
);
543 if (status
& DescOwn
)
546 skb
= de
->tx_skb
[tx_tail
].skb
;
548 if (unlikely(skb
== DE_DUMMY_SKB
))
551 if (unlikely(skb
== DE_SETUP_SKB
)) {
552 pci_unmap_single(de
->pdev
, de
->tx_skb
[tx_tail
].mapping
,
553 sizeof(de
->setup_frame
), PCI_DMA_TODEVICE
);
557 pci_unmap_single(de
->pdev
, de
->tx_skb
[tx_tail
].mapping
,
558 skb
->len
, PCI_DMA_TODEVICE
);
560 if (status
& LastFrag
) {
561 if (status
& TxError
) {
562 if (netif_msg_tx_err(de
))
563 printk(KERN_DEBUG
"%s: tx err, status 0x%x\n",
564 de
->dev
->name
, status
);
565 de
->net_stats
.tx_errors
++;
567 de
->net_stats
.tx_window_errors
++;
568 if (status
& TxMaxCol
)
569 de
->net_stats
.tx_aborted_errors
++;
570 if (status
& TxLinkFail
)
571 de
->net_stats
.tx_carrier_errors
++;
572 if (status
& TxFIFOUnder
)
573 de
->net_stats
.tx_fifo_errors
++;
575 de
->net_stats
.tx_packets
++;
576 de
->net_stats
.tx_bytes
+= skb
->len
;
577 if (netif_msg_tx_done(de
))
578 printk(KERN_DEBUG
"%s: tx done, slot %d\n", de
->dev
->name
, tx_tail
);
580 dev_kfree_skb_irq(skb
);
584 de
->tx_skb
[tx_tail
].skb
= NULL
;
586 tx_tail
= NEXT_TX(tx_tail
);
589 de
->tx_tail
= tx_tail
;
591 if (netif_queue_stopped(de
->dev
) && (TX_BUFFS_AVAIL(de
) > (DE_TX_RING_SIZE
/ 4)))
592 netif_wake_queue(de
->dev
);
595 static int de_start_xmit (struct sk_buff
*skb
, struct net_device
*dev
)
597 struct de_private
*de
= dev
->priv
;
598 unsigned int entry
, tx_free
;
599 u32 mapping
, len
, flags
= FirstFrag
| LastFrag
;
602 spin_lock_irq(&de
->lock
);
604 tx_free
= TX_BUFFS_AVAIL(de
);
606 netif_stop_queue(dev
);
607 spin_unlock_irq(&de
->lock
);
614 txd
= &de
->tx_ring
[entry
];
617 mapping
= pci_map_single(de
->pdev
, skb
->data
, len
, PCI_DMA_TODEVICE
);
618 if (entry
== (DE_TX_RING_SIZE
- 1))
620 if (!tx_free
|| (tx_free
== (DE_TX_RING_SIZE
/ 2)))
623 txd
->opts2
= cpu_to_le32(flags
);
624 txd
->addr1
= cpu_to_le32(mapping
);
626 de
->tx_skb
[entry
].skb
= skb
;
627 de
->tx_skb
[entry
].mapping
= mapping
;
630 txd
->opts1
= cpu_to_le32(DescOwn
);
633 de
->tx_head
= NEXT_TX(entry
);
634 if (netif_msg_tx_queued(de
))
635 printk(KERN_DEBUG
"%s: tx queued, slot %d, skblen %d\n",
636 dev
->name
, entry
, skb
->len
);
639 netif_stop_queue(dev
);
641 spin_unlock_irq(&de
->lock
);
643 /* Trigger an immediate transmit demand. */
644 dw32(TxPoll
, NormalTxPoll
);
645 dev
->trans_start
= jiffies
;
650 /* Set or clear the multicast filter for this adaptor.
651 Note that we only use exclusion around actually queueing the
652 new frame, not around filling de->setup_frame. This is non-deterministic
653 when re-entered but still correct. */
656 #define set_bit_le(i,p) do { ((char *)(p))[(i)/8] |= (1<<((i)%8)); } while(0)
658 static void build_setup_frame_hash(u16
*setup_frm
, struct net_device
*dev
)
660 struct de_private
*de
= dev
->priv
;
662 struct dev_mc_list
*mclist
;
666 memset(hash_table
, 0, sizeof(hash_table
));
667 set_bit_le(255, hash_table
); /* Broadcast entry */
668 /* This should work on big-endian machines as well. */
669 for (i
= 0, mclist
= dev
->mc_list
; mclist
&& i
< dev
->mc_count
;
670 i
++, mclist
= mclist
->next
) {
671 int index
= ether_crc_le(ETH_ALEN
, mclist
->dmi_addr
) & 0x1ff;
673 set_bit_le(index
, hash_table
);
675 for (i
= 0; i
< 32; i
++) {
676 *setup_frm
++ = hash_table
[i
];
677 *setup_frm
++ = hash_table
[i
];
679 setup_frm
= &de
->setup_frame
[13*6];
682 /* Fill the final entry with our physical address. */
683 eaddrs
= (u16
*)dev
->dev_addr
;
684 *setup_frm
++ = eaddrs
[0]; *setup_frm
++ = eaddrs
[0];
685 *setup_frm
++ = eaddrs
[1]; *setup_frm
++ = eaddrs
[1];
686 *setup_frm
++ = eaddrs
[2]; *setup_frm
++ = eaddrs
[2];
689 static void build_setup_frame_perfect(u16
*setup_frm
, struct net_device
*dev
)
691 struct de_private
*de
= dev
->priv
;
692 struct dev_mc_list
*mclist
;
696 /* We have <= 14 addresses so we can use the wonderful
697 16 address perfect filtering of the Tulip. */
698 for (i
= 0, mclist
= dev
->mc_list
; i
< dev
->mc_count
;
699 i
++, mclist
= mclist
->next
) {
700 eaddrs
= (u16
*)mclist
->dmi_addr
;
701 *setup_frm
++ = *eaddrs
; *setup_frm
++ = *eaddrs
++;
702 *setup_frm
++ = *eaddrs
; *setup_frm
++ = *eaddrs
++;
703 *setup_frm
++ = *eaddrs
; *setup_frm
++ = *eaddrs
++;
705 /* Fill the unused entries with the broadcast address. */
706 memset(setup_frm
, 0xff, (15-i
)*12);
707 setup_frm
= &de
->setup_frame
[15*6];
709 /* Fill the final entry with our physical address. */
710 eaddrs
= (u16
*)dev
->dev_addr
;
711 *setup_frm
++ = eaddrs
[0]; *setup_frm
++ = eaddrs
[0];
712 *setup_frm
++ = eaddrs
[1]; *setup_frm
++ = eaddrs
[1];
713 *setup_frm
++ = eaddrs
[2]; *setup_frm
++ = eaddrs
[2];
717 static void __de_set_rx_mode (struct net_device
*dev
)
719 struct de_private
*de
= dev
->priv
;
724 struct de_desc
*dummy_txd
= NULL
;
726 macmode
= dr32(MacMode
) & ~(AcceptAllMulticast
| AcceptAllPhys
);
728 if (dev
->flags
& IFF_PROMISC
) { /* Set promiscuous. */
729 macmode
|= AcceptAllMulticast
| AcceptAllPhys
;
733 if ((dev
->mc_count
> 1000) || (dev
->flags
& IFF_ALLMULTI
)) {
734 /* Too many to filter well -- accept all multicasts. */
735 macmode
|= AcceptAllMulticast
;
739 /* Note that only the low-address shortword of setup_frame is valid!
740 The values are doubled for big-endian architectures. */
741 if (dev
->mc_count
> 14) /* Must use a multicast hash table. */
742 build_setup_frame_hash (de
->setup_frame
, dev
);
744 build_setup_frame_perfect (de
->setup_frame
, dev
);
747 * Now add this frame to the Tx list.
752 /* Avoid a chip errata by prefixing a dummy entry. */
754 de
->tx_skb
[entry
].skb
= DE_DUMMY_SKB
;
756 dummy_txd
= &de
->tx_ring
[entry
];
757 dummy_txd
->opts2
= (entry
== (DE_TX_RING_SIZE
- 1)) ?
758 cpu_to_le32(RingEnd
) : 0;
759 dummy_txd
->addr1
= 0;
761 /* Must set DescOwned later to avoid race with chip */
763 entry
= NEXT_TX(entry
);
766 de
->tx_skb
[entry
].skb
= DE_SETUP_SKB
;
767 de
->tx_skb
[entry
].mapping
= mapping
=
768 pci_map_single (de
->pdev
, de
->setup_frame
,
769 sizeof (de
->setup_frame
), PCI_DMA_TODEVICE
);
771 /* Put the setup frame on the Tx list. */
772 txd
= &de
->tx_ring
[entry
];
773 if (entry
== (DE_TX_RING_SIZE
- 1))
774 txd
->opts2
= cpu_to_le32(SetupFrame
| RingEnd
| sizeof (de
->setup_frame
));
776 txd
->opts2
= cpu_to_le32(SetupFrame
| sizeof (de
->setup_frame
));
777 txd
->addr1
= cpu_to_le32(mapping
);
780 txd
->opts1
= cpu_to_le32(DescOwn
);
784 dummy_txd
->opts1
= cpu_to_le32(DescOwn
);
788 de
->tx_head
= NEXT_TX(entry
);
790 BUG_ON(TX_BUFFS_AVAIL(de
) < 0);
791 if (TX_BUFFS_AVAIL(de
) == 0)
792 netif_stop_queue(dev
);
794 /* Trigger an immediate transmit demand. */
795 dw32(TxPoll
, NormalTxPoll
);
798 if (macmode
!= dr32(MacMode
))
799 dw32(MacMode
, macmode
);
802 static void de_set_rx_mode (struct net_device
*dev
)
805 struct de_private
*de
= dev
->priv
;
807 spin_lock_irqsave (&de
->lock
, flags
);
808 __de_set_rx_mode(dev
);
809 spin_unlock_irqrestore (&de
->lock
, flags
);
812 static inline void de_rx_missed(struct de_private
*de
, u32 rx_missed
)
814 if (unlikely(rx_missed
& RxMissedOver
))
815 de
->net_stats
.rx_missed_errors
+= RxMissedMask
;
817 de
->net_stats
.rx_missed_errors
+= (rx_missed
& RxMissedMask
);
820 static void __de_get_stats(struct de_private
*de
)
822 u32 tmp
= dr32(RxMissed
); /* self-clearing */
824 de_rx_missed(de
, tmp
);
827 static struct net_device_stats
*de_get_stats(struct net_device
*dev
)
829 struct de_private
*de
= dev
->priv
;
831 /* The chip only need report frame silently dropped. */
832 spin_lock_irq(&de
->lock
);
833 if (netif_running(dev
) && netif_device_present(dev
))
835 spin_unlock_irq(&de
->lock
);
837 return &de
->net_stats
;
840 static inline int de_is_running (struct de_private
*de
)
842 return (dr32(MacStatus
) & (RxState
| TxState
)) ? 1 : 0;
845 static void de_stop_rxtx (struct de_private
*de
)
848 unsigned int work
= 1000;
850 macmode
= dr32(MacMode
);
851 if (macmode
& RxTx
) {
852 dw32(MacMode
, macmode
& ~RxTx
);
857 if (!de_is_running(de
))
862 printk(KERN_WARNING
"%s: timeout expired stopping DMA\n", de
->dev
->name
);
865 static inline void de_start_rxtx (struct de_private
*de
)
869 macmode
= dr32(MacMode
);
870 if ((macmode
& RxTx
) != RxTx
) {
871 dw32(MacMode
, macmode
| RxTx
);
876 static void de_stop_hw (struct de_private
*de
)
884 dw32(MacStatus
, dr32(MacStatus
));
889 de
->tx_head
= de
->tx_tail
= 0;
892 static void de_link_up(struct de_private
*de
)
894 if (!netif_carrier_ok(de
->dev
)) {
895 netif_carrier_on(de
->dev
);
896 if (netif_msg_link(de
))
897 printk(KERN_INFO
"%s: link up, media %s\n",
898 de
->dev
->name
, media_name
[de
->media_type
]);
902 static void de_link_down(struct de_private
*de
)
904 if (netif_carrier_ok(de
->dev
)) {
905 netif_carrier_off(de
->dev
);
906 if (netif_msg_link(de
))
907 printk(KERN_INFO
"%s: link down\n", de
->dev
->name
);
911 static void de_set_media (struct de_private
*de
)
913 unsigned media
= de
->media_type
;
914 u32 macmode
= dr32(MacMode
);
916 BUG_ON(de_is_running(de
));
919 dw32(CSR11
, FULL_DUPLEX_MAGIC
);
920 dw32(CSR13
, 0); /* Reset phy */
921 dw32(CSR14
, de
->media
[media
].csr14
);
922 dw32(CSR15
, de
->media
[media
].csr15
);
923 dw32(CSR13
, de
->media
[media
].csr13
);
925 /* must delay 10ms before writing to other registers,
930 if (media
== DE_MEDIA_TP_FD
)
931 macmode
|= FullDuplex
;
933 macmode
&= ~FullDuplex
;
935 if (netif_msg_link(de
)) {
936 printk(KERN_INFO
"%s: set link %s\n"
937 KERN_INFO
"%s: mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x\n"
938 KERN_INFO
"%s: set mode 0x%x, set sia 0x%x,0x%x,0x%x\n",
939 de
->dev
->name
, media_name
[media
],
940 de
->dev
->name
, dr32(MacMode
), dr32(SIAStatus
),
941 dr32(CSR13
), dr32(CSR14
), dr32(CSR15
),
942 de
->dev
->name
, macmode
, de
->media
[media
].csr13
,
943 de
->media
[media
].csr14
, de
->media
[media
].csr15
);
945 if (macmode
!= dr32(MacMode
))
946 dw32(MacMode
, macmode
);
949 static void de_next_media (struct de_private
*de
, u32
*media
,
950 unsigned int n_media
)
954 for (i
= 0; i
< n_media
; i
++) {
955 if (de_ok_to_advertise(de
, media
[i
])) {
956 de
->media_type
= media
[i
];
962 static void de21040_media_timer (unsigned long data
)
964 struct de_private
*de
= (struct de_private
*) data
;
965 struct net_device
*dev
= de
->dev
;
966 u32 status
= dr32(SIAStatus
);
967 unsigned int carrier
;
970 carrier
= (status
& NetCxnErr
) ? 0 : 1;
973 if (de
->media_type
!= DE_MEDIA_AUI
&& (status
& LinkFailStatus
))
976 de
->media_timer
.expires
= jiffies
+ DE_TIMER_LINK
;
977 add_timer(&de
->media_timer
);
978 if (!netif_carrier_ok(dev
))
981 if (netif_msg_timer(de
))
982 printk(KERN_INFO
"%s: %s link ok, status %x\n",
983 dev
->name
, media_name
[de
->media_type
],
993 if (de
->media_type
== DE_MEDIA_AUI
) {
994 u32 next_state
= DE_MEDIA_TP
;
995 de_next_media(de
, &next_state
, 1);
997 u32 next_state
= DE_MEDIA_AUI
;
998 de_next_media(de
, &next_state
, 1);
1001 spin_lock_irqsave(&de
->lock
, flags
);
1003 spin_unlock_irqrestore(&de
->lock
, flags
);
1008 de
->media_timer
.expires
= jiffies
+ DE_TIMER_NO_LINK
;
1009 add_timer(&de
->media_timer
);
1011 if (netif_msg_timer(de
))
1012 printk(KERN_INFO
"%s: no link, trying media %s, status %x\n",
1013 dev
->name
, media_name
[de
->media_type
], status
);
1016 static unsigned int de_ok_to_advertise (struct de_private
*de
, u32 new_media
)
1018 switch (new_media
) {
1019 case DE_MEDIA_TP_AUTO
:
1020 if (!(de
->media_advertise
& ADVERTISED_Autoneg
))
1022 if (!(de
->media_advertise
& (ADVERTISED_10baseT_Half
| ADVERTISED_10baseT_Full
)))
1026 if (!(de
->media_advertise
& ADVERTISED_BNC
))
1030 if (!(de
->media_advertise
& ADVERTISED_AUI
))
1034 if (!(de
->media_advertise
& ADVERTISED_10baseT_Half
))
1037 case DE_MEDIA_TP_FD
:
1038 if (!(de
->media_advertise
& ADVERTISED_10baseT_Full
))
1046 static void de21041_media_timer (unsigned long data
)
1048 struct de_private
*de
= (struct de_private
*) data
;
1049 struct net_device
*dev
= de
->dev
;
1050 u32 status
= dr32(SIAStatus
);
1051 unsigned int carrier
;
1052 unsigned long flags
;
1054 carrier
= (status
& NetCxnErr
) ? 0 : 1;
1057 if ((de
->media_type
== DE_MEDIA_TP_AUTO
||
1058 de
->media_type
== DE_MEDIA_TP
||
1059 de
->media_type
== DE_MEDIA_TP_FD
) &&
1060 (status
& LinkFailStatus
))
1063 de
->media_timer
.expires
= jiffies
+ DE_TIMER_LINK
;
1064 add_timer(&de
->media_timer
);
1065 if (!netif_carrier_ok(dev
))
1068 if (netif_msg_timer(de
))
1069 printk(KERN_INFO
"%s: %s link ok, mode %x status %x\n",
1070 dev
->name
, media_name
[de
->media_type
],
1071 dr32(MacMode
), status
);
1077 /* if media type locked, don't switch media */
1081 /* if activity detected, use that as hint for new media type */
1082 if (status
& NonselPortActive
) {
1083 unsigned int have_media
= 1;
1085 /* if AUI/BNC selected, then activity is on TP port */
1086 if (de
->media_type
== DE_MEDIA_AUI
||
1087 de
->media_type
== DE_MEDIA_BNC
) {
1088 if (de_ok_to_advertise(de
, DE_MEDIA_TP_AUTO
))
1089 de
->media_type
= DE_MEDIA_TP_AUTO
;
1094 /* TP selected. If there is only TP and BNC, then it's BNC */
1095 else if (((de
->media_supported
& DE_AUI_BNC
) == SUPPORTED_BNC
) &&
1096 de_ok_to_advertise(de
, DE_MEDIA_BNC
))
1097 de
->media_type
= DE_MEDIA_BNC
;
1099 /* TP selected. If there is only TP and AUI, then it's AUI */
1100 else if (((de
->media_supported
& DE_AUI_BNC
) == SUPPORTED_AUI
) &&
1101 de_ok_to_advertise(de
, DE_MEDIA_AUI
))
1102 de
->media_type
= DE_MEDIA_AUI
;
1104 /* otherwise, ignore the hint */
1113 * Absent or ambiguous activity hint, move to next advertised
1114 * media state. If de->media_type is left unchanged, this
1115 * simply resets the PHY and reloads the current media settings.
1117 if (de
->media_type
== DE_MEDIA_AUI
) {
1118 u32 next_states
[] = { DE_MEDIA_BNC
, DE_MEDIA_TP_AUTO
};
1119 de_next_media(de
, next_states
, ARRAY_SIZE(next_states
));
1120 } else if (de
->media_type
== DE_MEDIA_BNC
) {
1121 u32 next_states
[] = { DE_MEDIA_TP_AUTO
, DE_MEDIA_AUI
};
1122 de_next_media(de
, next_states
, ARRAY_SIZE(next_states
));
1124 u32 next_states
[] = { DE_MEDIA_AUI
, DE_MEDIA_BNC
, DE_MEDIA_TP_AUTO
};
1125 de_next_media(de
, next_states
, ARRAY_SIZE(next_states
));
1129 spin_lock_irqsave(&de
->lock
, flags
);
1131 spin_unlock_irqrestore(&de
->lock
, flags
);
1136 de
->media_timer
.expires
= jiffies
+ DE_TIMER_NO_LINK
;
1137 add_timer(&de
->media_timer
);
1139 if (netif_msg_timer(de
))
1140 printk(KERN_INFO
"%s: no link, trying media %s, status %x\n",
1141 dev
->name
, media_name
[de
->media_type
], status
);
1144 static void de_media_interrupt (struct de_private
*de
, u32 status
)
1146 if (status
& LinkPass
) {
1148 mod_timer(&de
->media_timer
, jiffies
+ DE_TIMER_LINK
);
1152 BUG_ON(!(status
& LinkFail
));
1154 if (netif_carrier_ok(de
->dev
)) {
1156 mod_timer(&de
->media_timer
, jiffies
+ DE_TIMER_NO_LINK
);
1160 static int de_reset_mac (struct de_private
*de
)
1165 * Reset MAC. de4x5.c and tulip.c examined for "advice"
1169 if (dr32(BusMode
) == 0xffffffff)
1172 /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
1173 dw32 (BusMode
, CmdReset
);
1176 dw32 (BusMode
, de_bus_mode
);
1179 for (tmp
= 0; tmp
< 5; tmp
++) {
1186 status
= dr32(MacStatus
);
1187 if (status
& (RxState
| TxState
))
1189 if (status
== 0xffffffff)
1194 static void de_adapter_wake (struct de_private
*de
)
1201 pci_read_config_dword(de
->pdev
, PCIPM
, &pmctl
);
1202 if (pmctl
& PM_Mask
) {
1204 pci_write_config_dword(de
->pdev
, PCIPM
, pmctl
);
1206 /* de4x5.c delays, so we do too */
1211 static void de_adapter_sleep (struct de_private
*de
)
1218 pci_read_config_dword(de
->pdev
, PCIPM
, &pmctl
);
1220 pci_write_config_dword(de
->pdev
, PCIPM
, pmctl
);
1223 static int de_init_hw (struct de_private
*de
)
1225 struct net_device
*dev
= de
->dev
;
1229 de_adapter_wake(de
);
1231 macmode
= dr32(MacMode
) & ~MacModeClear
;
1233 rc
= de_reset_mac(de
);
1237 de_set_media(de
); /* reset phy */
1239 dw32(RxRingAddr
, de
->ring_dma
);
1240 dw32(TxRingAddr
, de
->ring_dma
+ (sizeof(struct de_desc
) * DE_RX_RING_SIZE
));
1242 dw32(MacMode
, RxTx
| macmode
);
1244 dr32(RxMissed
); /* self-clearing */
1246 dw32(IntrMask
, de_intr_mask
);
1248 de_set_rx_mode(dev
);
1253 static int de_refill_rx (struct de_private
*de
)
1257 for (i
= 0; i
< DE_RX_RING_SIZE
; i
++) {
1258 struct sk_buff
*skb
;
1260 skb
= dev_alloc_skb(de
->rx_buf_sz
);
1266 de
->rx_skb
[i
].mapping
= pci_map_single(de
->pdev
,
1267 skb
->data
, de
->rx_buf_sz
, PCI_DMA_FROMDEVICE
);
1268 de
->rx_skb
[i
].skb
= skb
;
1270 de
->rx_ring
[i
].opts1
= cpu_to_le32(DescOwn
);
1271 if (i
== (DE_RX_RING_SIZE
- 1))
1272 de
->rx_ring
[i
].opts2
=
1273 cpu_to_le32(RingEnd
| de
->rx_buf_sz
);
1275 de
->rx_ring
[i
].opts2
= cpu_to_le32(de
->rx_buf_sz
);
1276 de
->rx_ring
[i
].addr1
= cpu_to_le32(de
->rx_skb
[i
].mapping
);
1277 de
->rx_ring
[i
].addr2
= 0;
1287 static int de_init_rings (struct de_private
*de
)
1289 memset(de
->tx_ring
, 0, sizeof(struct de_desc
) * DE_TX_RING_SIZE
);
1290 de
->tx_ring
[DE_TX_RING_SIZE
- 1].opts2
= cpu_to_le32(RingEnd
);
1293 de
->tx_head
= de
->tx_tail
= 0;
1295 return de_refill_rx (de
);
1298 static int de_alloc_rings (struct de_private
*de
)
1300 de
->rx_ring
= pci_alloc_consistent(de
->pdev
, DE_RING_BYTES
, &de
->ring_dma
);
1303 de
->tx_ring
= &de
->rx_ring
[DE_RX_RING_SIZE
];
1304 return de_init_rings(de
);
1307 static void de_clean_rings (struct de_private
*de
)
1311 memset(de
->rx_ring
, 0, sizeof(struct de_desc
) * DE_RX_RING_SIZE
);
1312 de
->rx_ring
[DE_RX_RING_SIZE
- 1].opts2
= cpu_to_le32(RingEnd
);
1314 memset(de
->tx_ring
, 0, sizeof(struct de_desc
) * DE_TX_RING_SIZE
);
1315 de
->tx_ring
[DE_TX_RING_SIZE
- 1].opts2
= cpu_to_le32(RingEnd
);
1318 for (i
= 0; i
< DE_RX_RING_SIZE
; i
++) {
1319 if (de
->rx_skb
[i
].skb
) {
1320 pci_unmap_single(de
->pdev
, de
->rx_skb
[i
].mapping
,
1321 de
->rx_buf_sz
, PCI_DMA_FROMDEVICE
);
1322 dev_kfree_skb(de
->rx_skb
[i
].skb
);
1326 for (i
= 0; i
< DE_TX_RING_SIZE
; i
++) {
1327 struct sk_buff
*skb
= de
->tx_skb
[i
].skb
;
1328 if ((skb
) && (skb
!= DE_DUMMY_SKB
)) {
1329 if (skb
!= DE_SETUP_SKB
) {
1330 de
->net_stats
.tx_dropped
++;
1331 pci_unmap_single(de
->pdev
,
1332 de
->tx_skb
[i
].mapping
,
1333 skb
->len
, PCI_DMA_TODEVICE
);
1336 pci_unmap_single(de
->pdev
,
1337 de
->tx_skb
[i
].mapping
,
1338 sizeof(de
->setup_frame
),
1344 memset(&de
->rx_skb
, 0, sizeof(struct ring_info
) * DE_RX_RING_SIZE
);
1345 memset(&de
->tx_skb
, 0, sizeof(struct ring_info
) * DE_TX_RING_SIZE
);
1348 static void de_free_rings (struct de_private
*de
)
1351 pci_free_consistent(de
->pdev
, DE_RING_BYTES
, de
->rx_ring
, de
->ring_dma
);
1356 static int de_open (struct net_device
*dev
)
1358 struct de_private
*de
= dev
->priv
;
1361 if (netif_msg_ifup(de
))
1362 printk(KERN_DEBUG
"%s: enabling interface\n", dev
->name
);
1364 de
->rx_buf_sz
= (dev
->mtu
<= 1500 ? PKT_BUF_SZ
: dev
->mtu
+ 32);
1366 rc
= de_alloc_rings(de
);
1368 printk(KERN_ERR
"%s: ring allocation failure, err=%d\n",
1375 rc
= request_irq(dev
->irq
, de_interrupt
, SA_SHIRQ
, dev
->name
, dev
);
1377 printk(KERN_ERR
"%s: IRQ %d request failure, err=%d\n",
1378 dev
->name
, dev
->irq
, rc
);
1382 rc
= de_init_hw(de
);
1384 printk(KERN_ERR
"%s: h/w init failure, err=%d\n",
1386 goto err_out_free_irq
;
1389 netif_start_queue(dev
);
1390 mod_timer(&de
->media_timer
, jiffies
+ DE_TIMER_NO_LINK
);
1395 free_irq(dev
->irq
, dev
);
1401 static int de_close (struct net_device
*dev
)
1403 struct de_private
*de
= dev
->priv
;
1404 unsigned long flags
;
1406 if (netif_msg_ifdown(de
))
1407 printk(KERN_DEBUG
"%s: disabling interface\n", dev
->name
);
1409 del_timer_sync(&de
->media_timer
);
1411 spin_lock_irqsave(&de
->lock
, flags
);
1413 netif_stop_queue(dev
);
1414 netif_carrier_off(dev
);
1415 spin_unlock_irqrestore(&de
->lock
, flags
);
1417 free_irq(dev
->irq
, dev
);
1420 de_adapter_sleep(de
);
1421 pci_disable_device(de
->pdev
);
1425 static void de_tx_timeout (struct net_device
*dev
)
1427 struct de_private
*de
= dev
->priv
;
1429 printk(KERN_DEBUG
"%s: NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
1430 dev
->name
, dr32(MacStatus
), dr32(MacMode
), dr32(SIAStatus
),
1431 de
->rx_tail
, de
->tx_head
, de
->tx_tail
);
1433 del_timer_sync(&de
->media_timer
);
1435 disable_irq(dev
->irq
);
1436 spin_lock_irq(&de
->lock
);
1439 netif_stop_queue(dev
);
1440 netif_carrier_off(dev
);
1442 spin_unlock_irq(&de
->lock
);
1443 enable_irq(dev
->irq
);
1445 /* Update the error counts. */
1448 synchronize_irq(dev
->irq
);
1455 netif_wake_queue(dev
);
1458 static void __de_get_regs(struct de_private
*de
, u8
*buf
)
1461 u32
*rbuf
= (u32
*)buf
;
1464 for (i
= 0; i
< DE_NUM_REGS
; i
++)
1465 rbuf
[i
] = dr32(i
* 8);
1467 /* handle self-clearing RxMissed counter, CSR8 */
1468 de_rx_missed(de
, rbuf
[8]);
1471 static int __de_get_settings(struct de_private
*de
, struct ethtool_cmd
*ecmd
)
1473 ecmd
->supported
= de
->media_supported
;
1474 ecmd
->transceiver
= XCVR_INTERNAL
;
1475 ecmd
->phy_address
= 0;
1476 ecmd
->advertising
= de
->media_advertise
;
1478 switch (de
->media_type
) {
1480 ecmd
->port
= PORT_AUI
;
1484 ecmd
->port
= PORT_BNC
;
1488 ecmd
->port
= PORT_TP
;
1489 ecmd
->speed
= SPEED_10
;
1493 if (dr32(MacMode
) & FullDuplex
)
1494 ecmd
->duplex
= DUPLEX_FULL
;
1496 ecmd
->duplex
= DUPLEX_HALF
;
1499 ecmd
->autoneg
= AUTONEG_DISABLE
;
1501 ecmd
->autoneg
= AUTONEG_ENABLE
;
1503 /* ignore maxtxpkt, maxrxpkt for now */
1508 static int __de_set_settings(struct de_private
*de
, struct ethtool_cmd
*ecmd
)
1511 unsigned int media_lock
;
1513 if (ecmd
->speed
!= SPEED_10
&& ecmd
->speed
!= 5 && ecmd
->speed
!= 2)
1515 if (de
->de21040
&& ecmd
->speed
== 2)
1517 if (ecmd
->duplex
!= DUPLEX_HALF
&& ecmd
->duplex
!= DUPLEX_FULL
)
1519 if (ecmd
->port
!= PORT_TP
&& ecmd
->port
!= PORT_AUI
&& ecmd
->port
!= PORT_BNC
)
1521 if (de
->de21040
&& ecmd
->port
== PORT_BNC
)
1523 if (ecmd
->transceiver
!= XCVR_INTERNAL
)
1525 if (ecmd
->autoneg
!= AUTONEG_DISABLE
&& ecmd
->autoneg
!= AUTONEG_ENABLE
)
1527 if (ecmd
->advertising
& ~de
->media_supported
)
1529 if (ecmd
->autoneg
== AUTONEG_ENABLE
&&
1530 (!(ecmd
->advertising
& ADVERTISED_Autoneg
)))
1533 switch (ecmd
->port
) {
1535 new_media
= DE_MEDIA_AUI
;
1536 if (!(ecmd
->advertising
& ADVERTISED_AUI
))
1540 new_media
= DE_MEDIA_BNC
;
1541 if (!(ecmd
->advertising
& ADVERTISED_BNC
))
1545 if (ecmd
->autoneg
== AUTONEG_ENABLE
)
1546 new_media
= DE_MEDIA_TP_AUTO
;
1547 else if (ecmd
->duplex
== DUPLEX_FULL
)
1548 new_media
= DE_MEDIA_TP_FD
;
1550 new_media
= DE_MEDIA_TP
;
1551 if (!(ecmd
->advertising
& ADVERTISED_TP
))
1553 if (!(ecmd
->advertising
& (ADVERTISED_10baseT_Full
| ADVERTISED_10baseT_Half
)))
1558 media_lock
= (ecmd
->autoneg
== AUTONEG_ENABLE
) ? 0 : 1;
1560 if ((new_media
== de
->media_type
) &&
1561 (media_lock
== de
->media_lock
) &&
1562 (ecmd
->advertising
== de
->media_advertise
))
1563 return 0; /* nothing to change */
1568 de
->media_type
= new_media
;
1569 de
->media_lock
= media_lock
;
1570 de
->media_advertise
= ecmd
->advertising
;
1576 static void de_get_drvinfo (struct net_device
*dev
,struct ethtool_drvinfo
*info
)
1578 struct de_private
*de
= dev
->priv
;
1580 strcpy (info
->driver
, DRV_NAME
);
1581 strcpy (info
->version
, DRV_VERSION
);
1582 strcpy (info
->bus_info
, pci_name(de
->pdev
));
1583 info
->eedump_len
= DE_EEPROM_SIZE
;
1586 static int de_get_regs_len(struct net_device
*dev
)
1588 return DE_REGS_SIZE
;
1591 static int de_get_settings(struct net_device
*dev
, struct ethtool_cmd
*ecmd
)
1593 struct de_private
*de
= dev
->priv
;
1596 spin_lock_irq(&de
->lock
);
1597 rc
= __de_get_settings(de
, ecmd
);
1598 spin_unlock_irq(&de
->lock
);
1603 static int de_set_settings(struct net_device
*dev
, struct ethtool_cmd
*ecmd
)
1605 struct de_private
*de
= dev
->priv
;
1608 spin_lock_irq(&de
->lock
);
1609 rc
= __de_set_settings(de
, ecmd
);
1610 spin_unlock_irq(&de
->lock
);
1615 static u32
de_get_msglevel(struct net_device
*dev
)
1617 struct de_private
*de
= dev
->priv
;
1619 return de
->msg_enable
;
1622 static void de_set_msglevel(struct net_device
*dev
, u32 msglvl
)
1624 struct de_private
*de
= dev
->priv
;
1626 de
->msg_enable
= msglvl
;
1629 static int de_get_eeprom(struct net_device
*dev
,
1630 struct ethtool_eeprom
*eeprom
, u8
*data
)
1632 struct de_private
*de
= dev
->priv
;
1636 if ((eeprom
->offset
!= 0) || (eeprom
->magic
!= 0) ||
1637 (eeprom
->len
!= DE_EEPROM_SIZE
))
1639 memcpy(data
, de
->ee_data
, eeprom
->len
);
1644 static int de_nway_reset(struct net_device
*dev
)
1646 struct de_private
*de
= dev
->priv
;
1649 if (de
->media_type
!= DE_MEDIA_TP_AUTO
)
1651 if (netif_carrier_ok(de
->dev
))
1654 status
= dr32(SIAStatus
);
1655 dw32(SIAStatus
, (status
& ~NWayState
) | NWayRestart
);
1656 if (netif_msg_link(de
))
1657 printk(KERN_INFO
"%s: link nway restart, status %x,%x\n",
1658 de
->dev
->name
, status
, dr32(SIAStatus
));
1662 static void de_get_regs(struct net_device
*dev
, struct ethtool_regs
*regs
,
1665 struct de_private
*de
= dev
->priv
;
1667 regs
->version
= (DE_REGS_VER
<< 2) | de
->de21040
;
1669 spin_lock_irq(&de
->lock
);
1670 __de_get_regs(de
, data
);
1671 spin_unlock_irq(&de
->lock
);
1674 static struct ethtool_ops de_ethtool_ops
= {
1675 .get_link
= ethtool_op_get_link
,
1676 .get_tx_csum
= ethtool_op_get_tx_csum
,
1677 .get_sg
= ethtool_op_get_sg
,
1678 .get_drvinfo
= de_get_drvinfo
,
1679 .get_regs_len
= de_get_regs_len
,
1680 .get_settings
= de_get_settings
,
1681 .set_settings
= de_set_settings
,
1682 .get_msglevel
= de_get_msglevel
,
1683 .set_msglevel
= de_set_msglevel
,
1684 .get_eeprom
= de_get_eeprom
,
1685 .nway_reset
= de_nway_reset
,
1686 .get_regs
= de_get_regs
,
1689 static void __init
de21040_get_mac_address (struct de_private
*de
)
1693 dw32 (ROMCmd
, 0); /* Reset the pointer with a dummy write. */
1695 for (i
= 0; i
< 6; i
++) {
1696 int value
, boguscnt
= 100000;
1698 value
= dr32(ROMCmd
);
1699 while (value
< 0 && --boguscnt
> 0);
1700 de
->dev
->dev_addr
[i
] = value
;
1703 printk(KERN_WARNING PFX
"timeout reading 21040 MAC address byte %u\n", i
);
1707 static void __init
de21040_get_media_info(struct de_private
*de
)
1711 de
->media_type
= DE_MEDIA_TP
;
1712 de
->media_supported
|= SUPPORTED_TP
| SUPPORTED_10baseT_Full
|
1713 SUPPORTED_10baseT_Half
| SUPPORTED_AUI
;
1714 de
->media_advertise
= de
->media_supported
;
1716 for (i
= 0; i
< DE_MAX_MEDIA
; i
++) {
1720 case DE_MEDIA_TP_FD
:
1721 de
->media
[i
].type
= i
;
1722 de
->media
[i
].csr13
= t21040_csr13
[i
];
1723 de
->media
[i
].csr14
= t21040_csr14
[i
];
1724 de
->media
[i
].csr15
= t21040_csr15
[i
];
1727 de
->media
[i
].type
= DE_MEDIA_INVALID
;
1733 /* Note: this routine returns extra data bits for size detection. */
1734 static unsigned __init
tulip_read_eeprom(void __iomem
*regs
, int location
, int addr_len
)
1737 unsigned retval
= 0;
1738 void __iomem
*ee_addr
= regs
+ ROMCmd
;
1739 int read_cmd
= location
| (EE_READ_CMD
<< addr_len
);
1741 writel(EE_ENB
& ~EE_CS
, ee_addr
);
1742 writel(EE_ENB
, ee_addr
);
1744 /* Shift the read command bits out. */
1745 for (i
= 4 + addr_len
; i
>= 0; i
--) {
1746 short dataval
= (read_cmd
& (1 << i
)) ? EE_DATA_WRITE
: 0;
1747 writel(EE_ENB
| dataval
, ee_addr
);
1749 writel(EE_ENB
| dataval
| EE_SHIFT_CLK
, ee_addr
);
1751 retval
= (retval
<< 1) | ((readl(ee_addr
) & EE_DATA_READ
) ? 1 : 0);
1753 writel(EE_ENB
, ee_addr
);
1756 for (i
= 16; i
> 0; i
--) {
1757 writel(EE_ENB
| EE_SHIFT_CLK
, ee_addr
);
1759 retval
= (retval
<< 1) | ((readl(ee_addr
) & EE_DATA_READ
) ? 1 : 0);
1760 writel(EE_ENB
, ee_addr
);
1764 /* Terminate the EEPROM access. */
1765 writel(EE_ENB
& ~EE_CS
, ee_addr
);
1769 static void __init
de21041_get_srom_info (struct de_private
*de
)
1771 unsigned i
, sa_offset
= 0, ofs
;
1772 u8 ee_data
[DE_EEPROM_SIZE
+ 6] = {};
1773 unsigned ee_addr_size
= tulip_read_eeprom(de
->regs
, 0xff, 8) & 0x40000 ? 8 : 6;
1774 struct de_srom_info_leaf
*il
;
1777 /* download entire eeprom */
1778 for (i
= 0; i
< DE_EEPROM_WORDS
; i
++)
1779 ((u16
*)ee_data
)[i
] =
1780 le16_to_cpu(tulip_read_eeprom(de
->regs
, i
, ee_addr_size
));
1782 /* DEC now has a specification but early board makers
1783 just put the address in the first EEPROM locations. */
1784 /* This does memcmp(eedata, eedata+16, 8) */
1786 #ifndef CONFIG_MIPS_COBALT
1788 for (i
= 0; i
< 8; i
++)
1789 if (ee_data
[i
] != ee_data
[16+i
])
1794 /* store MAC address */
1795 for (i
= 0; i
< 6; i
++)
1796 de
->dev
->dev_addr
[i
] = ee_data
[i
+ sa_offset
];
1798 /* get offset of controller 0 info leaf. ignore 2nd byte. */
1799 ofs
= ee_data
[SROMC0InfoLeaf
];
1800 if (ofs
>= (sizeof(ee_data
) - sizeof(struct de_srom_info_leaf
) - sizeof(struct de_srom_media_block
)))
1803 /* get pointer to info leaf */
1804 il
= (struct de_srom_info_leaf
*) &ee_data
[ofs
];
1806 /* paranoia checks */
1807 if (il
->n_blocks
== 0)
1809 if ((sizeof(ee_data
) - ofs
) <
1810 (sizeof(struct de_srom_info_leaf
) + (sizeof(struct de_srom_media_block
) * il
->n_blocks
)))
1813 /* get default media type */
1814 switch (DE_UNALIGNED_16(&il
->default_media
)) {
1815 case 0x0001: de
->media_type
= DE_MEDIA_BNC
; break;
1816 case 0x0002: de
->media_type
= DE_MEDIA_AUI
; break;
1817 case 0x0204: de
->media_type
= DE_MEDIA_TP_FD
; break;
1818 default: de
->media_type
= DE_MEDIA_TP_AUTO
; break;
1821 if (netif_msg_probe(de
))
1822 printk(KERN_INFO
"de%d: SROM leaf offset %u, default media %s\n",
1824 media_name
[de
->media_type
]);
1826 /* init SIA register values to defaults */
1827 for (i
= 0; i
< DE_MAX_MEDIA
; i
++) {
1828 de
->media
[i
].type
= DE_MEDIA_INVALID
;
1829 de
->media
[i
].csr13
= 0xffff;
1830 de
->media
[i
].csr14
= 0xffff;
1831 de
->media
[i
].csr15
= 0xffff;
1834 /* parse media blocks to see what medias are supported,
1835 * and if any custom CSR values are provided
1837 bufp
= ((void *)il
) + sizeof(*il
);
1838 for (i
= 0; i
< il
->n_blocks
; i
++) {
1839 struct de_srom_media_block
*ib
= bufp
;
1842 /* index based on media type in media block */
1843 switch(ib
->opts
& MediaBlockMask
) {
1844 case 0: /* 10baseT */
1845 de
->media_supported
|= SUPPORTED_TP
| SUPPORTED_10baseT_Half
1846 | SUPPORTED_Autoneg
;
1848 de
->media
[DE_MEDIA_TP_AUTO
].type
= DE_MEDIA_TP_AUTO
;
1851 de
->media_supported
|= SUPPORTED_BNC
;
1855 de
->media_supported
|= SUPPORTED_AUI
;
1858 case 4: /* 10baseT-FD */
1859 de
->media_supported
|= SUPPORTED_TP
| SUPPORTED_10baseT_Full
1860 | SUPPORTED_Autoneg
;
1861 idx
= DE_MEDIA_TP_FD
;
1862 de
->media
[DE_MEDIA_TP_AUTO
].type
= DE_MEDIA_TP_AUTO
;
1868 de
->media
[idx
].type
= idx
;
1870 if (netif_msg_probe(de
))
1871 printk(KERN_INFO
"de%d: media block #%u: %s",
1873 media_name
[de
->media
[idx
].type
]);
1875 bufp
+= sizeof (ib
->opts
);
1877 if (ib
->opts
& MediaCustomCSRs
) {
1878 de
->media
[idx
].csr13
= DE_UNALIGNED_16(&ib
->csr13
);
1879 de
->media
[idx
].csr14
= DE_UNALIGNED_16(&ib
->csr14
);
1880 de
->media
[idx
].csr15
= DE_UNALIGNED_16(&ib
->csr15
);
1881 bufp
+= sizeof(ib
->csr13
) + sizeof(ib
->csr14
) +
1884 if (netif_msg_probe(de
))
1885 printk(" (%x,%x,%x)\n",
1886 de
->media
[idx
].csr13
,
1887 de
->media
[idx
].csr14
,
1888 de
->media
[idx
].csr15
);
1890 } else if (netif_msg_probe(de
))
1893 if (bufp
> ((void *)&ee_data
[DE_EEPROM_SIZE
- 3]))
1897 de
->media_advertise
= de
->media_supported
;
1900 /* fill in defaults, for cases where custom CSRs not used */
1901 for (i
= 0; i
< DE_MAX_MEDIA
; i
++) {
1902 if (de
->media
[i
].csr13
== 0xffff)
1903 de
->media
[i
].csr13
= t21041_csr13
[i
];
1904 if (de
->media
[i
].csr14
== 0xffff)
1905 de
->media
[i
].csr14
= t21041_csr14
[i
];
1906 if (de
->media
[i
].csr15
== 0xffff)
1907 de
->media
[i
].csr15
= t21041_csr15
[i
];
1910 de
->ee_data
= kmalloc(DE_EEPROM_SIZE
, GFP_KERNEL
);
1912 memcpy(de
->ee_data
, &ee_data
[0], DE_EEPROM_SIZE
);
1917 /* for error cases, it's ok to assume we support all these */
1918 for (i
= 0; i
< DE_MAX_MEDIA
; i
++)
1919 de
->media
[i
].type
= i
;
1920 de
->media_supported
=
1921 SUPPORTED_10baseT_Half
|
1922 SUPPORTED_10baseT_Full
|
1930 static int __init
de_init_one (struct pci_dev
*pdev
,
1931 const struct pci_device_id
*ent
)
1933 struct net_device
*dev
;
1934 struct de_private
*de
;
1937 unsigned long pciaddr
;
1938 static int board_idx
= -1;
1944 printk("%s", version
);
1947 /* allocate a new ethernet device structure, and fill in defaults */
1948 dev
= alloc_etherdev(sizeof(struct de_private
));
1952 SET_MODULE_OWNER(dev
);
1953 SET_NETDEV_DEV(dev
, &pdev
->dev
);
1954 dev
->open
= de_open
;
1955 dev
->stop
= de_close
;
1956 dev
->set_multicast_list
= de_set_rx_mode
;
1957 dev
->hard_start_xmit
= de_start_xmit
;
1958 dev
->get_stats
= de_get_stats
;
1959 dev
->ethtool_ops
= &de_ethtool_ops
;
1960 dev
->tx_timeout
= de_tx_timeout
;
1961 dev
->watchdog_timeo
= TX_TIMEOUT
;
1964 de
->de21040
= ent
->driver_data
== 0 ? 1 : 0;
1967 de
->msg_enable
= (debug
< 0 ? DE_DEF_MSG_ENABLE
: debug
);
1968 de
->board_idx
= board_idx
;
1969 spin_lock_init (&de
->lock
);
1970 init_timer(&de
->media_timer
);
1972 de
->media_timer
.function
= de21040_media_timer
;
1974 de
->media_timer
.function
= de21041_media_timer
;
1975 de
->media_timer
.data
= (unsigned long) de
;
1977 netif_carrier_off(dev
);
1978 netif_stop_queue(dev
);
1980 /* wake up device, assign resources */
1981 rc
= pci_enable_device(pdev
);
1985 /* reserve PCI resources to ensure driver atomicity */
1986 rc
= pci_request_regions(pdev
, DRV_NAME
);
1988 goto err_out_disable
;
1990 /* check for invalid IRQ value */
1991 if (pdev
->irq
< 2) {
1993 printk(KERN_ERR PFX
"invalid irq (%d) for pci dev %s\n",
1994 pdev
->irq
, pci_name(pdev
));
1998 dev
->irq
= pdev
->irq
;
2000 /* obtain and check validity of PCI I/O address */
2001 pciaddr
= pci_resource_start(pdev
, 1);
2004 printk(KERN_ERR PFX
"no MMIO resource for pci dev %s\n",
2008 if (pci_resource_len(pdev
, 1) < DE_REGS_SIZE
) {
2010 printk(KERN_ERR PFX
"MMIO resource (%lx) too small on pci dev %s\n",
2011 pci_resource_len(pdev
, 1), pci_name(pdev
));
2015 /* remap CSR registers */
2016 regs
= ioremap_nocache(pciaddr
, DE_REGS_SIZE
);
2019 printk(KERN_ERR PFX
"Cannot map PCI MMIO (%lx@%lx) on pci dev %s\n",
2020 pci_resource_len(pdev
, 1), pciaddr
, pci_name(pdev
));
2023 dev
->base_addr
= (unsigned long) regs
;
2026 de_adapter_wake(de
);
2028 /* make sure hardware is not running */
2029 rc
= de_reset_mac(de
);
2031 printk(KERN_ERR PFX
"Cannot reset MAC, pci dev %s\n",
2036 /* get MAC address, initialize default media type and
2037 * get list of supported media
2040 de21040_get_mac_address(de
);
2041 de21040_get_media_info(de
);
2043 de21041_get_srom_info(de
);
2046 /* register new network interface with kernel */
2047 rc
= register_netdev(dev
);
2051 /* print info about board and interface just registered */
2052 printk (KERN_INFO
"%s: %s at 0x%lx, "
2053 "%02x:%02x:%02x:%02x:%02x:%02x, "
2056 de
->de21040
? "21040" : "21041",
2058 dev
->dev_addr
[0], dev
->dev_addr
[1],
2059 dev
->dev_addr
[2], dev
->dev_addr
[3],
2060 dev
->dev_addr
[4], dev
->dev_addr
[5],
2063 pci_set_drvdata(pdev
, dev
);
2065 /* enable busmastering */
2066 pci_set_master(pdev
);
2068 /* put adapter to sleep */
2069 de_adapter_sleep(de
);
2077 pci_release_regions(pdev
);
2079 pci_disable_device(pdev
);
2085 static void __exit
de_remove_one (struct pci_dev
*pdev
)
2087 struct net_device
*dev
= pci_get_drvdata(pdev
);
2088 struct de_private
*de
= dev
->priv
;
2091 unregister_netdev(dev
);
2094 pci_release_regions(pdev
);
2095 pci_disable_device(pdev
);
2096 pci_set_drvdata(pdev
, NULL
);
2102 static int de_suspend (struct pci_dev
*pdev
, pm_message_t state
)
2104 struct net_device
*dev
= pci_get_drvdata (pdev
);
2105 struct de_private
*de
= dev
->priv
;
2108 if (netif_running (dev
)) {
2109 del_timer_sync(&de
->media_timer
);
2111 disable_irq(dev
->irq
);
2112 spin_lock_irq(&de
->lock
);
2115 netif_stop_queue(dev
);
2116 netif_device_detach(dev
);
2117 netif_carrier_off(dev
);
2119 spin_unlock_irq(&de
->lock
);
2120 enable_irq(dev
->irq
);
2122 /* Update the error counts. */
2125 synchronize_irq(dev
->irq
);
2128 de_adapter_sleep(de
);
2129 pci_disable_device(pdev
);
2131 netif_device_detach(dev
);
2137 static int de_resume (struct pci_dev
*pdev
)
2139 struct net_device
*dev
= pci_get_drvdata (pdev
);
2140 struct de_private
*de
= dev
->priv
;
2143 if (netif_device_present(dev
))
2145 if (netif_running(dev
)) {
2146 pci_enable_device(pdev
);
2148 netif_device_attach(dev
);
2150 netif_device_attach(dev
);
2157 #endif /* CONFIG_PM */
2159 static struct pci_driver de_driver
= {
2161 .id_table
= de_pci_tbl
,
2162 .probe
= de_init_one
,
2163 .remove
= __exit_p(de_remove_one
),
2165 .suspend
= de_suspend
,
2166 .resume
= de_resume
,
2170 static int __init
de_init (void)
2173 printk("%s", version
);
2175 return pci_module_init (&de_driver
);
2178 static void __exit
de_exit (void)
2180 pci_unregister_driver (&de_driver
);
2183 module_init(de_init
);
2184 module_exit(de_exit
);