2 =========================================================================
3 r8169.c: A RealTek RTL-8169 Gigabit Ethernet driver for Linux kernel 2.4.x.
4 --------------------------------------------------------------------
7 Feb 4 2002 - created initially by ShuChen <shuchen@realtek.com.tw>.
8 May 20 2002 - Add link status force-mode and TBI mode support.
9 =========================================================================
10 1. The media can be forced in 5 modes.
11 Command: 'insmod r8169 media = SET_MEDIA'
12 Ex: 'insmod r8169 media = 0x04' will force PHY to operate in 100Mpbs Half-duplex.
22 =========================================================================
23 VERSION 1.1 <2002/10/4>
25 The bit4:0 of MII register 4 is called "selector field", and have to be
26 00001b to indicate support of IEEE std 802.3 during NWay process of
27 exchanging Link Code Word (FLP).
29 VERSION 1.2 <2002/11/30>
32 - Use ether_crc in stock kernel (linux/crc32.h)
33 - Copy mc_filter setup code from 8139cp
34 (includes an optimization, and avoids set_bit use)
38 #include <linux/module.h>
39 #include <linux/pci.h>
40 #include <linux/netdevice.h>
41 #include <linux/etherdevice.h>
42 #include <linux/delay.h>
43 #include <linux/crc32.h>
44 #include <linux/init.h>
48 #define RTL8169_VERSION "1.2"
49 #define MODULENAME "r8169"
50 #define RTL8169_DRIVER_NAME MODULENAME " Gigabit Ethernet driver " RTL8169_VERSION
51 #define PFX MODULENAME ": "
54 #define assert(expr) \
56 printk( "Assertion failed! %s,%s,%s,line=%d\n", \
57 #expr,__FILE__,__FUNCTION__,__LINE__); \
60 #define assert(expr) do {} while (0)
65 static int media
[MAX_UNITS
] = { -1, -1, -1, -1, -1, -1, -1, -1 };
67 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
68 static int max_interrupt_work
= 20;
70 /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
71 The RTL chips use a 64 element hash table based on the Ethernet CRC. */
72 static int multicast_filter_limit
= 32;
74 /* MAC address length*/
75 #define MAC_ADDR_LEN 6
77 /* max supported gigabit ethernet frame size -- must be at least (dev->mtu+14+4).*/
78 #define MAX_ETH_FRAME_SIZE 1536
80 #define TX_FIFO_THRESH 256 /* In bytes */
82 #define RX_FIFO_THRESH 7 /* 7 means NO threshold, Rx buffer level before first PCI xfer. */
83 #define RX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
84 #define TX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
85 #define EarlyTxThld 0x3F /* 0x3F means NO early transmit */
86 #define RxPacketMaxSize 0x0800 /* Maximum size supported is 16K-1 */
87 #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */
89 #define NUM_TX_DESC 64 /* Number of Tx descriptor registers */
90 #define NUM_RX_DESC 64 /* Number of Rx descriptor registers */
91 #define RX_BUF_SIZE 1536 /* Rx Buffer size */
93 #define RTL_MIN_IO_SIZE 0x80
94 #define TX_TIMEOUT (6*HZ)
96 /* write/read MMIO register */
97 #define RTL_W8(reg, val8) writeb ((val8), ioaddr + (reg))
98 #define RTL_W16(reg, val16) writew ((val16), ioaddr + (reg))
99 #define RTL_W32(reg, val32) writel ((val32), ioaddr + (reg))
100 #define RTL_R8(reg) readb (ioaddr + (reg))
101 #define RTL_R16(reg) readw (ioaddr + (reg))
102 #define RTL_R32(reg) ((unsigned long) readl (ioaddr + (reg)))
106 } board_info
[] __devinitdata
= {
108 "RealTek RTL8169 Gigabit Ethernet"},};
110 static struct pci_device_id rtl8169_pci_tbl
[] __devinitdata
= {
111 {0x10ec, 0x8169, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, 0},
115 MODULE_DEVICE_TABLE(pci
, rtl8169_pci_tbl
);
117 enum RTL8169_registers
{
118 MAC0
= 0, /* Ethernet hardware address. */
119 MAR0
= 8, /* Multicast filter. */
120 TxDescStartAddr
= 0x20,
121 TxHDescStartAddr
= 0x28,
146 RxDescStartAddr
= 0xE4,
149 FuncEventMask
= 0xF4,
150 FuncPresetState
= 0xF8,
151 FuncForceEvent
= 0xFC,
154 enum RTL8169_register_content
{
155 /*InterruptStatusBits */
159 TxDescUnavail
= 0x80,
182 Cfg9346_Unlock
= 0xC0,
187 AcceptBroadcast
= 0x08,
188 AcceptMulticast
= 0x04,
190 AcceptAllPhys
= 0x01,
197 TxInterFrameGapShift
= 24,
198 TxDMAShift
= 8, /* DMA burst value (0-7) is shift this many bits */
200 /*rtl8169_PHYstatus */
210 /*GIGABIT_PHY_registers */
213 PHY_AUTO_NEGO_REG
= 4,
214 PHY_1000_CTRL_REG
= 9,
216 /*GIGABIT_PHY_REG_BIT */
217 PHY_Restart_Auto_Nego
= 0x0200,
218 PHY_Enable_Auto_Nego
= 0x1000,
221 PHY_Auto_Neco_Comp
= 0x0020,
223 //PHY_AUTO_NEGO_REG = 4;
224 PHY_Cap_10_Half
= 0x0020,
225 PHY_Cap_10_Full
= 0x0040,
226 PHY_Cap_100_Half
= 0x0080,
227 PHY_Cap_100_Full
= 0x0100,
229 //PHY_1000_CTRL_REG = 9;
230 PHY_Cap_1000_Full
= 0x0200,
242 TBILinkOK
= 0x02000000,
245 const static struct {
247 u8 version
; /* depend on RTL8169 docs */
248 u32 RxConfigMask
; /* should clear the bits supported by this chip */
249 } rtl_chip_info
[] = {
251 "RTL-8169", 0x00, 0xff7e1880,},};
253 enum _DescStatusBit
{
274 struct rtl8169_private
{
275 void *mmio_addr
; /* memory map physical address */
276 struct pci_dev
*pci_dev
; /* Index of PCI device */
277 struct net_device_stats stats
; /* statistics of net device */
278 spinlock_t lock
; /* spin lock flag */
280 unsigned long cur_rx
; /* Index into the Rx descriptor buffer of next Rx pkt. */
281 unsigned long cur_tx
; /* Index into the Tx descriptor buffer of next Rx pkt. */
282 unsigned long dirty_tx
;
283 unsigned char *TxDescArrays
; /* Index of Tx Descriptor buffer */
284 unsigned char *RxDescArrays
; /* Index of Rx Descriptor buffer */
285 struct TxDesc
*TxDescArray
; /* Index of 256-alignment Tx Descriptor buffer */
286 struct RxDesc
*RxDescArray
; /* Index of 256-alignment Rx Descriptor buffer */
287 unsigned char *RxBufferRings
; /* Index of Rx Buffer */
288 unsigned char *RxBufferRing
[NUM_RX_DESC
]; /* Index of Rx Buffer array */
289 struct sk_buff
*Tx_skbuff
[NUM_TX_DESC
]; /* Index of Transmit data buffer */
292 MODULE_AUTHOR("Realtek");
293 MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver");
294 MODULE_PARM(media
, "1-" __MODULE_STRING(MAX_UNITS
) "i");
296 static int rtl8169_open(struct net_device
*dev
);
297 static int rtl8169_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
);
298 static irqreturn_t
rtl8169_interrupt(int irq
, void *dev_instance
,
299 struct pt_regs
*regs
);
300 static void rtl8169_init_ring(struct net_device
*dev
);
301 static void rtl8169_hw_start(struct net_device
*dev
);
302 static int rtl8169_close(struct net_device
*dev
);
303 static void rtl8169_set_rx_mode(struct net_device
*dev
);
304 static void rtl8169_tx_timeout(struct net_device
*dev
);
305 static struct net_device_stats
*rtl8169_get_stats(struct net_device
*netdev
);
307 static const u16 rtl8169_intr_mask
=
308 SYSErr
| PCSTimeout
| RxUnderrun
| RxOverflow
| RxFIFOOver
| TxErr
| TxOK
|
310 static const unsigned int rtl8169_rx_config
=
311 (RX_FIFO_THRESH
<< RxCfgFIFOShift
) | (RX_DMA_BURST
<< RxCfgDMAShift
);
314 mdio_write(void *ioaddr
, int RegAddr
, int value
)
318 RTL_W32(PHYAR
, 0x80000000 | (RegAddr
& 0xFF) << 16 | value
);
321 for (i
= 2000; i
> 0; i
--) {
322 // Check if the RTL8169 has completed writing to the specified MII register
323 if (!(RTL_R32(PHYAR
) & 0x80000000)) {
332 mdio_read(void *ioaddr
, int RegAddr
)
336 RTL_W32(PHYAR
, 0x0 | (RegAddr
& 0xFF) << 16);
339 for (i
= 2000; i
> 0; i
--) {
340 // Check if the RTL8169 has completed retrieving data from the specified MII register
341 if (RTL_R32(PHYAR
) & 0x80000000) {
342 value
= (int) (RTL_R32(PHYAR
) & 0xFFFF);
352 rtl8169_init_board(struct pci_dev
*pdev
, struct net_device
**dev_out
,
356 struct net_device
*dev
;
357 struct rtl8169_private
*tp
;
359 unsigned long mmio_start
, mmio_end
, mmio_flags
, mmio_len
;
362 assert(pdev
!= NULL
);
363 assert(ioaddr_out
!= NULL
);
368 // dev zeroed in alloc_etherdev
369 dev
= alloc_etherdev(sizeof (*tp
));
371 printk(KERN_ERR PFX
"unable to alloc new ethernet\n");
375 SET_MODULE_OWNER(dev
);
376 SET_NETDEV_DEV(dev
, &pdev
->dev
);
379 // enable device (incl. PCI PM wakeup and hotplug setup)
380 rc
= pci_enable_device(pdev
);
384 mmio_start
= pci_resource_start(pdev
, 1);
385 mmio_end
= pci_resource_end(pdev
, 1);
386 mmio_flags
= pci_resource_flags(pdev
, 1);
387 mmio_len
= pci_resource_len(pdev
, 1);
389 // make sure PCI base addr 1 is MMIO
390 if (!(mmio_flags
& IORESOURCE_MEM
)) {
392 "region #1 not an MMIO resource, aborting\n");
394 goto err_out_disable
;
396 // check for weird/broken PCI region reporting
397 if (mmio_len
< RTL_MIN_IO_SIZE
) {
398 printk(KERN_ERR PFX
"Invalid PCI region size(s), aborting\n");
400 goto err_out_disable
;
403 rc
= pci_request_regions(pdev
, dev
->name
);
405 goto err_out_disable
;
407 // enable PCI bus-mastering
408 pci_set_master(pdev
);
410 // ioremap MMIO region
411 ioaddr
= ioremap(mmio_start
, mmio_len
);
412 if (ioaddr
== NULL
) {
413 printk(KERN_ERR PFX
"cannot remap MMIO, aborting\n");
415 goto err_out_free_res
;
418 // Soft reset the chip.
419 RTL_W8(ChipCmd
, CmdReset
);
421 // Check that the chip has finished the reset.
422 for (i
= 1000; i
> 0; i
--)
423 if ((RTL_R8(ChipCmd
) & CmdReset
) == 0)
428 // identify chip attached to board
429 tmp
= RTL_R32(TxConfig
);
430 tmp
= ((tmp
& 0x7c000000) + ((tmp
& 0x00800000) << 2)) >> 24;
432 for (i
= ARRAY_SIZE(rtl_chip_info
) - 1; i
>= 0; i
--)
433 if (tmp
== rtl_chip_info
[i
].version
) {
437 //if unknown chip, assume array element #0, original RTL-8169 in this case
438 printk(KERN_DEBUG PFX
439 "PCI device %s: unknown chip version, assuming RTL-8169\n",
441 printk(KERN_DEBUG PFX
"PCI device %s: TxConfig = 0x%lx\n",
442 pdev
->slot_name
, (unsigned long) RTL_R32(TxConfig
));
446 *ioaddr_out
= ioaddr
;
451 pci_release_regions(pdev
);
454 pci_disable_device(pdev
);
462 rtl8169_init_one(struct pci_dev
*pdev
, const struct pci_device_id
*ent
)
464 struct net_device
*dev
= NULL
;
465 struct rtl8169_private
*tp
= NULL
;
467 static int board_idx
= -1;
468 static int printed_version
= 0;
470 int option
= -1, Cap10_100
= 0, Cap1000
= 0;
472 assert(pdev
!= NULL
);
477 if (!printed_version
) {
478 printk(KERN_INFO RTL8169_DRIVER_NAME
" loaded\n");
482 rc
= rtl8169_init_board(pdev
, &dev
, &ioaddr
);
487 assert(ioaddr
!= NULL
);
491 // Get MAC address. FIXME: read EEPROM
492 for (i
= 0; i
< MAC_ADDR_LEN
; i
++)
493 dev
->dev_addr
[i
] = RTL_R8(MAC0
+ i
);
495 dev
->open
= rtl8169_open
;
496 dev
->hard_start_xmit
= rtl8169_start_xmit
;
497 dev
->get_stats
= rtl8169_get_stats
;
498 dev
->stop
= rtl8169_close
;
499 dev
->tx_timeout
= rtl8169_tx_timeout
;
500 dev
->set_multicast_list
= rtl8169_set_rx_mode
;
501 dev
->watchdog_timeo
= TX_TIMEOUT
;
502 dev
->irq
= pdev
->irq
;
503 dev
->base_addr
= (unsigned long) ioaddr
;
504 // dev->do_ioctl = mii_ioctl;
506 tp
= dev
->priv
; // private data //
508 tp
->mmio_addr
= ioaddr
;
510 spin_lock_init(&tp
->lock
);
512 rc
= register_netdev(dev
);
515 pci_release_regions(pdev
);
516 pci_disable_device(pdev
);
521 printk(KERN_DEBUG
"%s: Identified chip type is '%s'.\n", dev
->name
,
522 rtl_chip_info
[tp
->chipset
].name
);
524 pci_set_drvdata(pdev
, dev
);
526 printk(KERN_INFO
"%s: %s at 0x%lx, "
527 "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x, "
530 board_info
[ent
->driver_data
].name
,
532 dev
->dev_addr
[0], dev
->dev_addr
[1],
533 dev
->dev_addr
[2], dev
->dev_addr
[3],
534 dev
->dev_addr
[4], dev
->dev_addr
[5], dev
->irq
);
536 // if TBI is not endbled
537 if (!(RTL_R8(PHYstatus
) & TBI_Enable
)) {
538 int val
= mdio_read(ioaddr
, PHY_AUTO_NEGO_REG
);
540 option
= (board_idx
>= MAX_UNITS
) ? 0 : media
[board_idx
];
541 // Force RTL8169 in 10/100/1000 Full/Half mode.
543 printk(KERN_INFO
"%s: Force-mode Enabled.\n",
545 Cap10_100
= 0, Cap1000
= 0;
548 Cap10_100
= PHY_Cap_10_Half
;
549 Cap1000
= PHY_Cap_Null
;
552 Cap10_100
= PHY_Cap_10_Full
;
553 Cap1000
= PHY_Cap_Null
;
556 Cap10_100
= PHY_Cap_100_Half
;
557 Cap1000
= PHY_Cap_Null
;
560 Cap10_100
= PHY_Cap_100_Full
;
561 Cap1000
= PHY_Cap_Null
;
564 Cap10_100
= PHY_Cap_Null
;
565 Cap1000
= PHY_Cap_1000_Full
;
570 mdio_write(ioaddr
, PHY_AUTO_NEGO_REG
, Cap10_100
| (val
& 0x1F)); //leave PHY_AUTO_NEGO_REG bit4:0 unchanged
571 mdio_write(ioaddr
, PHY_1000_CTRL_REG
, Cap1000
);
573 printk(KERN_INFO
"%s: Auto-negotiation Enabled.\n",
576 // enable 10/100 Full/Half Mode, leave PHY_AUTO_NEGO_REG bit4:0 unchanged
577 mdio_write(ioaddr
, PHY_AUTO_NEGO_REG
,
578 PHY_Cap_10_Half
| PHY_Cap_10_Full
|
579 PHY_Cap_100_Half
| PHY_Cap_100_Full
| (val
&
582 // enable 1000 Full Mode
583 mdio_write(ioaddr
, PHY_1000_CTRL_REG
,
588 // Enable auto-negotiation and restart auto-nigotiation
589 mdio_write(ioaddr
, PHY_CTRL_REG
,
590 PHY_Enable_Auto_Nego
| PHY_Restart_Auto_Nego
);
593 // wait for auto-negotiation process
594 for (i
= 10000; i
> 0; i
--) {
595 //check if auto-negotiation complete
596 if (mdio_read(ioaddr
, PHY_STAT_REG
) &
597 PHY_Auto_Neco_Comp
) {
599 option
= RTL_R8(PHYstatus
);
600 if (option
& _1000bpsF
) {
602 "%s: 1000Mbps Full-duplex operation.\n",
606 "%s: %sMbps %s-duplex operation.\n",
608 (option
& _100bps
) ? "100" :
610 (option
& FullDup
) ? "Full" :
617 } // end for-loop to wait for auto-negotiation process
622 "%s: 1000Mbps Full-duplex operation, TBI Link %s!\n",
624 (RTL_R32(TBICSR
) & TBILinkOK
) ? "OK" : "Failed");
631 static void __devexit
632 rtl8169_remove_one(struct pci_dev
*pdev
)
634 struct net_device
*dev
= pci_get_drvdata(pdev
);
635 struct rtl8169_private
*tp
= dev
->priv
;
640 unregister_netdev(dev
);
641 iounmap(tp
->mmio_addr
);
642 pci_release_regions(pdev
);
644 // poison memory before freeing
646 sizeof (struct net_device
) + sizeof (struct rtl8169_private
));
648 pci_disable_device(pdev
);
650 pci_set_drvdata(pdev
, NULL
);
654 rtl8169_open(struct net_device
*dev
)
656 struct rtl8169_private
*tp
= dev
->priv
;
659 u32 TxPhyAddr
, RxPhyAddr
;
662 request_irq(dev
->irq
, rtl8169_interrupt
, SA_SHIRQ
, dev
->name
, dev
);
668 kmalloc(NUM_TX_DESC
* sizeof (struct TxDesc
) + 256, GFP_KERNEL
);
669 // Tx Desscriptor needs 256 bytes alignment;
670 TxPhyAddr
= virt_to_bus(tp
->TxDescArrays
);
671 diff
= 256 - (TxPhyAddr
- ((TxPhyAddr
>> 8) << 8));
673 tp
->TxDescArray
= (struct TxDesc
*) (tp
->TxDescArrays
+ diff
);
676 kmalloc(NUM_RX_DESC
* sizeof (struct RxDesc
) + 256, GFP_KERNEL
);
677 // Rx Desscriptor needs 256 bytes alignment;
678 RxPhyAddr
= virt_to_bus(tp
->RxDescArrays
);
679 diff
= 256 - (RxPhyAddr
- ((RxPhyAddr
>> 8) << 8));
681 tp
->RxDescArray
= (struct RxDesc
*) (tp
->RxDescArrays
+ diff
);
683 if (tp
->TxDescArrays
== NULL
|| tp
->RxDescArrays
== NULL
) {
685 "Allocate RxDescArray or TxDescArray failed\n");
686 free_irq(dev
->irq
, dev
);
687 if (tp
->TxDescArrays
)
688 kfree(tp
->TxDescArrays
);
689 if (tp
->RxDescArrays
)
690 kfree(tp
->RxDescArrays
);
693 tp
->RxBufferRings
= kmalloc(RX_BUF_SIZE
* NUM_RX_DESC
, GFP_KERNEL
);
694 if (tp
->RxBufferRings
== NULL
) {
695 printk(KERN_INFO
"Allocate RxBufferRing failed\n");
698 rtl8169_init_ring(dev
);
699 rtl8169_hw_start(dev
);
706 rtl8169_hw_start(struct net_device
*dev
)
708 struct rtl8169_private
*tp
= dev
->priv
;
709 void *ioaddr
= tp
->mmio_addr
;
712 /* Soft reset the chip. */
713 RTL_W8(ChipCmd
, CmdReset
);
715 /* Check that the chip has finished the reset. */
716 for (i
= 1000; i
> 0; i
--) {
717 if ((RTL_R8(ChipCmd
) & CmdReset
) == 0)
723 RTL_W8(Cfg9346
, Cfg9346_Unlock
);
724 RTL_W8(ChipCmd
, CmdTxEnb
| CmdRxEnb
);
725 RTL_W8(EarlyTxThres
, EarlyTxThld
);
727 // For gigabit rtl8169
728 RTL_W16(RxMaxSize
, RxPacketMaxSize
);
730 // Set Rx Config register
731 i
= rtl8169_rx_config
| (RTL_R32(RxConfig
) & rtl_chip_info
[tp
->chipset
].
733 RTL_W32(RxConfig
, i
);
735 /* Set DMA burst size and Interframe Gap Time */
737 (TX_DMA_BURST
<< TxDMAShift
) | (InterFrameGap
<<
738 TxInterFrameGapShift
));
742 RTL_W32(TxDescStartAddr
, virt_to_bus(tp
->TxDescArray
));
743 RTL_W32(RxDescStartAddr
, virt_to_bus(tp
->RxDescArray
));
744 RTL_W8(Cfg9346
, Cfg9346_Lock
);
747 RTL_W32(RxMissed
, 0);
749 rtl8169_set_rx_mode(dev
);
751 /* no early-rx interrupts */
752 RTL_W16(MultiIntr
, RTL_R16(MultiIntr
) & 0xF000);
754 /* Enable all known interrupts by setting the interrupt mask. */
755 RTL_W16(IntrMask
, rtl8169_intr_mask
);
757 netif_start_queue(dev
);
762 rtl8169_init_ring(struct net_device
*dev
)
764 struct rtl8169_private
*tp
= dev
->priv
;
770 memset(tp
->TxDescArray
, 0x0, NUM_TX_DESC
* sizeof (struct TxDesc
));
771 memset(tp
->RxDescArray
, 0x0, NUM_RX_DESC
* sizeof (struct RxDesc
));
773 for (i
= 0; i
< NUM_TX_DESC
; i
++) {
774 tp
->Tx_skbuff
[i
] = NULL
;
776 for (i
= 0; i
< NUM_RX_DESC
; i
++) {
777 if (i
== (NUM_RX_DESC
- 1))
778 tp
->RxDescArray
[i
].status
=
779 (OWNbit
| EORbit
) + RX_BUF_SIZE
;
781 tp
->RxDescArray
[i
].status
= OWNbit
+ RX_BUF_SIZE
;
783 tp
->RxBufferRing
[i
] = &(tp
->RxBufferRings
[i
* RX_BUF_SIZE
]);
784 tp
->RxDescArray
[i
].buf_addr
= virt_to_bus(tp
->RxBufferRing
[i
]);
789 rtl8169_tx_clear(struct rtl8169_private
*tp
)
794 for (i
= 0; i
< NUM_TX_DESC
; i
++) {
795 if (tp
->Tx_skbuff
[i
] != NULL
) {
796 dev_kfree_skb(tp
->Tx_skbuff
[i
]);
797 tp
->Tx_skbuff
[i
] = NULL
;
798 tp
->stats
.tx_dropped
++;
804 rtl8169_tx_timeout(struct net_device
*dev
)
806 struct rtl8169_private
*tp
= dev
->priv
;
807 void *ioaddr
= tp
->mmio_addr
;
810 /* disable Tx, if not already */
811 tmp8
= RTL_R8(ChipCmd
);
813 RTL_W8(ChipCmd
, tmp8
& ~CmdTxEnb
);
815 /* Disable interrupts by clearing the interrupt mask. */
816 RTL_W16(IntrMask
, 0x0000);
818 /* Stop a shared interrupt from scavenging while we are. */
819 spin_lock_irq(&tp
->lock
);
820 rtl8169_tx_clear(tp
);
821 spin_unlock_irq(&tp
->lock
);
823 /* ...and finally, reset everything */
824 rtl8169_hw_start(dev
);
826 netif_wake_queue(dev
);
830 rtl8169_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
832 struct rtl8169_private
*tp
= dev
->priv
;
833 void *ioaddr
= tp
->mmio_addr
;
834 int entry
= tp
->cur_tx
% NUM_TX_DESC
;
836 if (skb
->len
< ETH_ZLEN
) {
837 skb
= skb_padto(skb
, ETH_ZLEN
);
842 spin_lock_irq(&tp
->lock
);
844 if ((tp
->TxDescArray
[entry
].status
& OWNbit
) == 0) {
845 tp
->Tx_skbuff
[entry
] = skb
;
846 tp
->TxDescArray
[entry
].buf_addr
= virt_to_bus(skb
->data
);
847 if (entry
!= (NUM_TX_DESC
- 1))
848 tp
->TxDescArray
[entry
].status
=
849 (OWNbit
| FSbit
| LSbit
) | ((skb
->len
> ETH_ZLEN
) ?
850 skb
->len
: ETH_ZLEN
);
852 tp
->TxDescArray
[entry
].status
=
853 (OWNbit
| EORbit
| FSbit
| LSbit
) |
854 ((skb
->len
> ETH_ZLEN
) ? skb
->len
: ETH_ZLEN
);
856 RTL_W8(TxPoll
, 0x40); //set polling bit
858 dev
->trans_start
= jiffies
;
863 spin_unlock_irq(&tp
->lock
);
865 if ((tp
->cur_tx
- NUM_TX_DESC
) == tp
->dirty_tx
) {
866 netif_stop_queue(dev
);
873 rtl8169_tx_interrupt(struct net_device
*dev
, struct rtl8169_private
*tp
,
876 unsigned long dirty_tx
, tx_left
= 0;
877 int entry
= tp
->cur_tx
% NUM_TX_DESC
;
881 assert(ioaddr
!= NULL
);
883 dirty_tx
= tp
->dirty_tx
;
884 tx_left
= tp
->cur_tx
- dirty_tx
;
886 while (tx_left
> 0) {
887 if ((tp
->TxDescArray
[entry
].status
& OWNbit
) == 0) {
888 dev_kfree_skb_irq(tp
->
889 Tx_skbuff
[dirty_tx
% NUM_TX_DESC
]);
890 tp
->Tx_skbuff
[dirty_tx
% NUM_TX_DESC
] = NULL
;
891 tp
->stats
.tx_packets
++;
898 if (tp
->dirty_tx
!= dirty_tx
) {
899 tp
->dirty_tx
= dirty_tx
;
900 if (netif_queue_stopped(dev
))
901 netif_wake_queue(dev
);
906 rtl8169_rx_interrupt(struct net_device
*dev
, struct rtl8169_private
*tp
,
915 assert(ioaddr
!= NULL
);
919 while ((tp
->RxDescArray
[cur_rx
].status
& OWNbit
) == 0) {
921 if (tp
->RxDescArray
[cur_rx
].status
& RxRES
) {
922 printk(KERN_INFO
"%s: Rx ERROR!!!\n", dev
->name
);
923 tp
->stats
.rx_errors
++;
924 if (tp
->RxDescArray
[cur_rx
].status
& (RxRWT
| RxRUNT
))
925 tp
->stats
.rx_length_errors
++;
926 if (tp
->RxDescArray
[cur_rx
].status
& RxCRC
)
927 tp
->stats
.rx_crc_errors
++;
930 (int) (tp
->RxDescArray
[cur_rx
].
931 status
& 0x00001FFF) - 4;
932 skb
= dev_alloc_skb(pkt_size
+ 2);
935 skb_reserve(skb
, 2); // 16 byte align the IP fields. //
936 eth_copy_and_sum(skb
, tp
->RxBufferRing
[cur_rx
],
938 skb_put(skb
, pkt_size
);
939 skb
->protocol
= eth_type_trans(skb
, dev
);
942 if (cur_rx
== (NUM_RX_DESC
- 1))
943 tp
->RxDescArray
[cur_rx
].status
=
944 (OWNbit
| EORbit
) + RX_BUF_SIZE
;
946 tp
->RxDescArray
[cur_rx
].status
=
947 OWNbit
+ RX_BUF_SIZE
;
949 tp
->RxDescArray
[cur_rx
].buf_addr
=
950 virt_to_bus(tp
->RxBufferRing
[cur_rx
]);
951 dev
->last_rx
= jiffies
;
952 tp
->stats
.rx_bytes
+= pkt_size
;
953 tp
->stats
.rx_packets
++;
956 "%s: Memory squeeze, deferring packet.\n",
958 /* We should check that some rx space is free.
959 If not, free one and mark stats->rx_dropped++. */
960 tp
->stats
.rx_dropped
++;
964 cur_rx
= (cur_rx
+ 1) % NUM_RX_DESC
;
971 /* The interrupt handler does all of the Rx thread work and cleans up after the Tx thread. */
973 rtl8169_interrupt(int irq
, void *dev_instance
, struct pt_regs
*regs
)
975 struct net_device
*dev
= (struct net_device
*) dev_instance
;
976 struct rtl8169_private
*tp
= dev
->priv
;
977 int boguscnt
= max_interrupt_work
;
978 void *ioaddr
= tp
->mmio_addr
;
983 status
= RTL_R16(IntrStatus
);
985 /* h/w no longer present (hotplug?) or major error, bail */
986 if (status
== 0xFFFF)
991 if (status & RxUnderrun)
992 link_changed = RTL_R16 (CSCR) & CSCR_LinkChangeBit;
995 (status
& RxFIFOOver
) ? (status
| RxOverflow
) : status
);
998 (SYSErr
| PCSTimeout
| RxUnderrun
| RxOverflow
| RxFIFOOver
999 | TxErr
| TxOK
| RxErr
| RxOK
)) == 0)
1003 if (status
& (RxOK
| RxUnderrun
| RxOverflow
| RxFIFOOver
)) {
1004 rtl8169_rx_interrupt(dev
, tp
, ioaddr
);
1007 if (status
& (TxOK
| TxErr
)) {
1008 spin_lock(&tp
->lock
);
1009 rtl8169_tx_interrupt(dev
, tp
, ioaddr
);
1010 spin_unlock(&tp
->lock
);
1014 } while (boguscnt
> 0);
1016 if (boguscnt
<= 0) {
1017 printk(KERN_WARNING
"%s: Too much work at interrupt!\n",
1019 /* Clear all interrupt sources. */
1020 RTL_W16(IntrStatus
, 0xffff);
1022 return IRQ_RETVAL(handled
);
1026 rtl8169_close(struct net_device
*dev
)
1028 struct rtl8169_private
*tp
= dev
->priv
;
1029 void *ioaddr
= tp
->mmio_addr
;
1032 netif_stop_queue(dev
);
1034 spin_lock_irq(&tp
->lock
);
1036 /* Stop the chip's Tx and Rx DMA processes. */
1037 RTL_W8(ChipCmd
, 0x00);
1039 /* Disable interrupts by clearing the interrupt mask. */
1040 RTL_W16(IntrMask
, 0x0000);
1042 /* Update the error counts. */
1043 tp
->stats
.rx_missed_errors
+= RTL_R32(RxMissed
);
1044 RTL_W32(RxMissed
, 0);
1046 spin_unlock_irq(&tp
->lock
);
1048 synchronize_irq(dev
->irq
);
1049 free_irq(dev
->irq
, dev
);
1051 rtl8169_tx_clear(tp
);
1052 kfree(tp
->TxDescArrays
);
1053 kfree(tp
->RxDescArrays
);
1054 tp
->TxDescArrays
= NULL
;
1055 tp
->RxDescArrays
= NULL
;
1056 tp
->TxDescArray
= NULL
;
1057 tp
->RxDescArray
= NULL
;
1058 kfree(tp
->RxBufferRings
);
1059 for (i
= 0; i
< NUM_RX_DESC
; i
++) {
1060 tp
->RxBufferRing
[i
] = NULL
;
1067 rtl8169_set_rx_mode(struct net_device
*dev
)
1069 struct rtl8169_private
*tp
= dev
->priv
;
1070 void *ioaddr
= tp
->mmio_addr
;
1071 unsigned long flags
;
1072 u32 mc_filter
[2]; /* Multicast hash filter */
1076 if (dev
->flags
& IFF_PROMISC
) {
1077 /* Unconditionally log net taps. */
1078 printk(KERN_NOTICE
"%s: Promiscuous mode enabled.\n",
1081 AcceptBroadcast
| AcceptMulticast
| AcceptMyPhys
|
1083 mc_filter
[1] = mc_filter
[0] = 0xffffffff;
1084 } else if ((dev
->mc_count
> multicast_filter_limit
)
1085 || (dev
->flags
& IFF_ALLMULTI
)) {
1086 /* Too many to filter perfectly -- accept all multicasts. */
1087 rx_mode
= AcceptBroadcast
| AcceptMulticast
| AcceptMyPhys
;
1088 mc_filter
[1] = mc_filter
[0] = 0xffffffff;
1090 struct dev_mc_list
*mclist
;
1091 rx_mode
= AcceptBroadcast
| AcceptMyPhys
;
1092 mc_filter
[1] = mc_filter
[0] = 0;
1093 for (i
= 0, mclist
= dev
->mc_list
; mclist
&& i
< dev
->mc_count
;
1094 i
++, mclist
= mclist
->next
) {
1095 int bit_nr
= ether_crc(ETH_ALEN
, mclist
->dmi_addr
) >> 26;
1096 mc_filter
[bit_nr
>> 5] |= 1 << (bit_nr
& 31);
1097 rx_mode
|= AcceptMulticast
;
1101 spin_lock_irqsave(&tp
->lock
, flags
);
1104 rtl8169_rx_config
| rx_mode
| (RTL_R32(RxConfig
) &
1105 rtl_chip_info
[tp
->chipset
].
1108 RTL_W32(RxConfig
, tmp
);
1109 RTL_W32(MAR0
+ 0, mc_filter
[0]);
1110 RTL_W32(MAR0
+ 4, mc_filter
[1]);
1112 spin_unlock_irqrestore(&tp
->lock
, flags
);
1115 struct net_device_stats
*
1116 rtl8169_get_stats(struct net_device
*dev
)
1118 struct rtl8169_private
*tp
= dev
->priv
;
1123 static struct pci_driver rtl8169_pci_driver
= {
1125 .id_table
= rtl8169_pci_tbl
,
1126 .probe
= rtl8169_init_one
,
1127 .remove
= __devexit_p(rtl8169_remove_one
),
1133 rtl8169_init_module(void)
1135 return pci_module_init(&rtl8169_pci_driver
);
1139 rtl8169_cleanup_module(void)
1141 pci_unregister_driver(&rtl8169_pci_driver
);
1144 module_init(rtl8169_init_module
);
1145 module_exit(rtl8169_cleanup_module
);