1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
93
94#define DRV_NAME "8139too"
95#define DRV_VERSION "0.9.28"
96
97
98#include <linux/module.h>
99#include <linux/kernel.h>
100#include <linux/compiler.h>
101#include <linux/pci.h>
102#include <linux/init.h>
103#include <linux/netdevice.h>
104#include <linux/etherdevice.h>
105#include <linux/rtnetlink.h>
106#include <linux/delay.h>
107#include <linux/ethtool.h>
108#include <linux/mii.h>
109#include <linux/completion.h>
110#include <linux/crc32.h>
111#include <linux/io.h>
112#include <linux/uaccess.h>
113#include <linux/gfp.h>
114#include <asm/irq.h>
115
116#define RTL8139_DRIVER_NAME DRV_NAME " Fast Ethernet driver " DRV_VERSION
117
118
119#define RTL8139_DEF_MSG_ENABLE (NETIF_MSG_DRV | \
120 NETIF_MSG_PROBE | \
121 NETIF_MSG_LINK)
122
123
124
125#define RTL8139_DEBUG 0
126
127
128#undef RTL8139_NDEBUG
129
130
131#ifdef RTL8139_NDEBUG
132# define assert(expr) do {} while (0)
133#else
134# define assert(expr) \
135 if (unlikely(!(expr))) { \
136 pr_err("Assertion failed! %s,%s,%s,line=%d\n", \
137 #expr, __FILE__, __func__, __LINE__); \
138 }
139#endif
140
141
142
143
144#define MAX_UNITS 8
145static int media[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
146static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
147
148
149#ifdef CONFIG_8139TOO_PIO
150static int use_io = 1;
151#else
152static int use_io = 0;
153#endif
154
155
156
157static int multicast_filter_limit = 32;
158
159
160static int debug = -1;
161
162
163
164
165
166#if defined(CONFIG_SH_DREAMCAST)
167#define RX_BUF_IDX 0
168#else
169#define RX_BUF_IDX 2
170#endif
171#define RX_BUF_LEN (8192 << RX_BUF_IDX)
172#define RX_BUF_PAD 16
173#define RX_BUF_WRAP_PAD 2048
174
175#if RX_BUF_LEN == 65536
176#define RX_BUF_TOT_LEN RX_BUF_LEN
177#else
178#define RX_BUF_TOT_LEN (RX_BUF_LEN + RX_BUF_PAD + RX_BUF_WRAP_PAD)
179#endif
180
181
182#define NUM_TX_DESC 4
183
184
185#define MAX_ETH_FRAME_SIZE 1536
186
187
188#define TX_BUF_SIZE MAX_ETH_FRAME_SIZE
189#define TX_BUF_TOT_LEN (TX_BUF_SIZE * NUM_TX_DESC)
190
191
192
193#define TX_FIFO_THRESH 256
194
195
196#define RX_FIFO_THRESH 7
197#define RX_DMA_BURST 7
198#define TX_DMA_BURST 6
199#define TX_RETRY 8
200
201
202
203#define TX_TIMEOUT (6*HZ)
204
205
206enum {
207 HAS_MII_XCVR = 0x010000,
208 HAS_CHIP_XCVR = 0x020000,
209 HAS_LNK_CHNG = 0x040000,
210};
211
212#define RTL_NUM_STATS 4
213#define RTL_REGS_VER 1
214#define RTL_MIN_IO_SIZE 0x80
215#define RTL8139B_IO_SIZE 256
216
217#define RTL8129_CAPS HAS_MII_XCVR
218#define RTL8139_CAPS (HAS_CHIP_XCVR|HAS_LNK_CHNG)
219
220typedef enum {
221 RTL8139 = 0,
222 RTL8129,
223} board_t;
224
225
226
227static const struct {
228 const char *name;
229 u32 hw_flags;
230} board_info[] __devinitdata = {
231 { "RealTek RTL8139", RTL8139_CAPS },
232 { "RealTek RTL8129", RTL8129_CAPS },
233};
234
235
236static DEFINE_PCI_DEVICE_TABLE(rtl8139_pci_tbl) = {
237 {0x10ec, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
238 {0x10ec, 0x8138, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
239 {0x1113, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
240 {0x1500, 0x1360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
241 {0x4033, 0x1360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
242 {0x1186, 0x1300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
243 {0x1186, 0x1340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
244 {0x13d1, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
245 {0x1259, 0xa117, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
246 {0x1259, 0xa11e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
247 {0x14ea, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
248 {0x14ea, 0xab07, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
249 {0x11db, 0x1234, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
250 {0x1432, 0x9130, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
251 {0x02ac, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
252 {0x018a, 0x0106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
253 {0x126c, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
254 {0x1743, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
255 {0x021b, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
256
257#ifdef CONFIG_SH_SECUREEDGE5410
258
259 {0x10ec, 0x8129, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
260#endif
261#ifdef CONFIG_8139TOO_8129
262 {0x10ec, 0x8129, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8129 },
263#endif
264
265
266
267
268
269 {PCI_ANY_ID, 0x8139, 0x10ec, 0x8139, 0, 0, RTL8139 },
270 {PCI_ANY_ID, 0x8139, 0x1186, 0x1300, 0, 0, RTL8139 },
271 {PCI_ANY_ID, 0x8139, 0x13d1, 0xab06, 0, 0, RTL8139 },
272
273 {0,}
274};
275MODULE_DEVICE_TABLE (pci, rtl8139_pci_tbl);
276
277static struct {
278 const char str[ETH_GSTRING_LEN];
279} ethtool_stats_keys[] = {
280 { "early_rx" },
281 { "tx_buf_mapped" },
282 { "tx_timeouts" },
283 { "rx_lost_in_ring" },
284};
285
286
287
288
289enum RTL8139_registers {
290 MAC0 = 0,
291 MAR0 = 8,
292 TxStatus0 = 0x10,
293 TxAddr0 = 0x20,
294 RxBuf = 0x30,
295 ChipCmd = 0x37,
296 RxBufPtr = 0x38,
297 RxBufAddr = 0x3A,
298 IntrMask = 0x3C,
299 IntrStatus = 0x3E,
300 TxConfig = 0x40,
301 RxConfig = 0x44,
302 Timer = 0x48,
303 RxMissed = 0x4C,
304 Cfg9346 = 0x50,
305 Config0 = 0x51,
306 Config1 = 0x52,
307 TimerInt = 0x54,
308 MediaStatus = 0x58,
309 Config3 = 0x59,
310 Config4 = 0x5A,
311 HltClk = 0x5B,
312 MultiIntr = 0x5C,
313 TxSummary = 0x60,
314 BasicModeCtrl = 0x62,
315 BasicModeStatus = 0x64,
316 NWayAdvert = 0x66,
317 NWayLPAR = 0x68,
318 NWayExpansion = 0x6A,
319
320 FIFOTMS = 0x70,
321 CSCR = 0x74,
322 PARA78 = 0x78,
323 FlashReg = 0xD4,
324 PARA7c = 0x7c,
325 Config5 = 0xD8,
326};
327
328enum ClearBitMasks {
329 MultiIntrClear = 0xF000,
330 ChipCmdClear = 0xE2,
331 Config1Clear = (1<<7)|(1<<6)|(1<<3)|(1<<2)|(1<<1),
332};
333
334enum ChipCmdBits {
335 CmdReset = 0x10,
336 CmdRxEnb = 0x08,
337 CmdTxEnb = 0x04,
338 RxBufEmpty = 0x01,
339};
340
341
342enum IntrStatusBits {
343 PCIErr = 0x8000,
344 PCSTimeout = 0x4000,
345 RxFIFOOver = 0x40,
346 RxUnderrun = 0x20,
347 RxOverflow = 0x10,
348 TxErr = 0x08,
349 TxOK = 0x04,
350 RxErr = 0x02,
351 RxOK = 0x01,
352
353 RxAckBits = RxFIFOOver | RxOverflow | RxOK,
354};
355
356enum TxStatusBits {
357 TxHostOwns = 0x2000,
358 TxUnderrun = 0x4000,
359 TxStatOK = 0x8000,
360 TxOutOfWindow = 0x20000000,
361 TxAborted = 0x40000000,
362 TxCarrierLost = 0x80000000,
363};
364enum RxStatusBits {
365 RxMulticast = 0x8000,
366 RxPhysical = 0x4000,
367 RxBroadcast = 0x2000,
368 RxBadSymbol = 0x0020,
369 RxRunt = 0x0010,
370 RxTooLong = 0x0008,
371 RxCRCErr = 0x0004,
372 RxBadAlign = 0x0002,
373 RxStatusOK = 0x0001,
374};
375
376
377enum rx_mode_bits {
378 AcceptErr = 0x20,
379 AcceptRunt = 0x10,
380 AcceptBroadcast = 0x08,
381 AcceptMulticast = 0x04,
382 AcceptMyPhys = 0x02,
383 AcceptAllPhys = 0x01,
384};
385
386
387enum tx_config_bits {
388
389 TxIFGShift = 24,
390 TxIFG84 = (0 << TxIFGShift),
391 TxIFG88 = (1 << TxIFGShift),
392 TxIFG92 = (2 << TxIFGShift),
393 TxIFG96 = (3 << TxIFGShift),
394
395 TxLoopBack = (1 << 18) | (1 << 17),
396 TxCRC = (1 << 16),
397 TxClearAbt = (1 << 0),
398 TxDMAShift = 8,
399 TxRetryShift = 4,
400
401 TxVersionMask = 0x7C800000,
402};
403
404
405enum Config1Bits {
406 Cfg1_PM_Enable = 0x01,
407 Cfg1_VPD_Enable = 0x02,
408 Cfg1_PIO = 0x04,
409 Cfg1_MMIO = 0x08,
410 LWAKE = 0x10,
411 Cfg1_Driver_Load = 0x20,
412 Cfg1_LED0 = 0x40,
413 Cfg1_LED1 = 0x80,
414 SLEEP = (1 << 1),
415 PWRDN = (1 << 0),
416};
417
418
419enum Config3Bits {
420 Cfg3_FBtBEn = (1 << 0),
421 Cfg3_FuncRegEn = (1 << 1),
422 Cfg3_CLKRUN_En = (1 << 2),
423 Cfg3_CardB_En = (1 << 3),
424 Cfg3_LinkUp = (1 << 4),
425 Cfg3_Magic = (1 << 5),
426 Cfg3_PARM_En = (1 << 6),
427 Cfg3_GNTSel = (1 << 7),
428};
429
430
431enum Config4Bits {
432 LWPTN = (1 << 2),
433};
434
435
436enum Config5Bits {
437 Cfg5_PME_STS = (1 << 0),
438 Cfg5_LANWake = (1 << 1),
439 Cfg5_LDPS = (1 << 2),
440 Cfg5_FIFOAddrPtr= (1 << 3),
441 Cfg5_UWF = (1 << 4),
442 Cfg5_MWF = (1 << 5),
443 Cfg5_BWF = (1 << 6),
444};
445
446enum RxConfigBits {
447
448 RxCfgFIFOShift = 13,
449 RxCfgFIFONone = (7 << RxCfgFIFOShift),
450
451
452 RxCfgDMAShift = 8,
453 RxCfgDMAUnlimited = (7 << RxCfgDMAShift),
454
455
456 RxCfgRcv8K = 0,
457 RxCfgRcv16K = (1 << 11),
458 RxCfgRcv32K = (1 << 12),
459 RxCfgRcv64K = (1 << 11) | (1 << 12),
460
461
462 RxNoWrap = (1 << 7),
463};
464
465
466
467enum CSCRBits {
468 CSCR_LinkOKBit = 0x0400,
469 CSCR_LinkChangeBit = 0x0800,
470 CSCR_LinkStatusBits = 0x0f000,
471 CSCR_LinkDownOffCmd = 0x003c0,
472 CSCR_LinkDownCmd = 0x0f3c0,
473};
474
475enum Cfg9346Bits {
476 Cfg9346_Lock = 0x00,
477 Cfg9346_Unlock = 0xC0,
478};
479
480typedef enum {
481 CH_8139 = 0,
482 CH_8139_K,
483 CH_8139A,
484 CH_8139A_G,
485 CH_8139B,
486 CH_8130,
487 CH_8139C,
488 CH_8100,
489 CH_8100B_8139D,
490 CH_8101,
491} chip_t;
492
493enum chip_flags {
494 HasHltClk = (1 << 0),
495 HasLWake = (1 << 1),
496};
497
498#define HW_REVID(b30, b29, b28, b27, b26, b23, b22) \
499 (b30<<30 | b29<<29 | b28<<28 | b27<<27 | b26<<26 | b23<<23 | b22<<22)
500#define HW_REVID_MASK HW_REVID(1, 1, 1, 1, 1, 1, 1)
501
502
503static const struct {
504 const char *name;
505 u32 version;
506 u32 flags;
507} rtl_chip_info[] = {
508 { "RTL-8139",
509 HW_REVID(1, 0, 0, 0, 0, 0, 0),
510 HasHltClk,
511 },
512
513 { "RTL-8139 rev K",
514 HW_REVID(1, 1, 0, 0, 0, 0, 0),
515 HasHltClk,
516 },
517
518 { "RTL-8139A",
519 HW_REVID(1, 1, 1, 0, 0, 0, 0),
520 HasHltClk,
521 },
522
523 { "RTL-8139A rev G",
524 HW_REVID(1, 1, 1, 0, 0, 1, 0),
525 HasHltClk,
526 },
527
528 { "RTL-8139B",
529 HW_REVID(1, 1, 1, 1, 0, 0, 0),
530 HasLWake,
531 },
532
533 { "RTL-8130",
534 HW_REVID(1, 1, 1, 1, 1, 0, 0),
535 HasLWake,
536 },
537
538 { "RTL-8139C",
539 HW_REVID(1, 1, 1, 0, 1, 0, 0),
540 HasLWake,
541 },
542
543 { "RTL-8100",
544 HW_REVID(1, 1, 1, 1, 0, 1, 0),
545 HasLWake,
546 },
547
548 { "RTL-8100B/8139D",
549 HW_REVID(1, 1, 1, 0, 1, 0, 1),
550 HasHltClk
551 | HasLWake,
552 },
553
554 { "RTL-8101",
555 HW_REVID(1, 1, 1, 0, 1, 1, 1),
556 HasLWake,
557 },
558};
559
560struct rtl_extra_stats {
561 unsigned long early_rx;
562 unsigned long tx_buf_mapped;
563 unsigned long tx_timeouts;
564 unsigned long rx_lost_in_ring;
565};
566
567struct rtl8139_private {
568 void __iomem *mmio_addr;
569 int drv_flags;
570 struct pci_dev *pci_dev;
571 u32 msg_enable;
572 struct napi_struct napi;
573 struct net_device *dev;
574
575 unsigned char *rx_ring;
576 unsigned int cur_rx;
577 dma_addr_t rx_ring_dma;
578
579 unsigned int tx_flag;
580 unsigned long cur_tx;
581 unsigned long dirty_tx;
582 unsigned char *tx_buf[NUM_TX_DESC];
583 unsigned char *tx_bufs;
584 dma_addr_t tx_bufs_dma;
585
586 signed char phys[4];
587
588
589 char twistie, twist_row, twist_col;
590
591 unsigned int watchdog_fired : 1;
592 unsigned int default_port : 4;
593 unsigned int have_thread : 1;
594
595 spinlock_t lock;
596 spinlock_t rx_lock;
597
598 chip_t chipset;
599 u32 rx_config;
600 struct rtl_extra_stats xstats;
601
602 struct delayed_work thread;
603
604 struct mii_if_info mii;
605 unsigned int regs_len;
606 unsigned long fifo_copy_timeout;
607};
608
609MODULE_AUTHOR ("Jeff Garzik <jgarzik@pobox.com>");
610MODULE_DESCRIPTION ("RealTek RTL-8139 Fast Ethernet driver");
611MODULE_LICENSE("GPL");
612MODULE_VERSION(DRV_VERSION);
613
614module_param(use_io, int, 0);
615MODULE_PARM_DESC(use_io, "Force use of I/O access mode. 0=MMIO 1=PIO");
616module_param(multicast_filter_limit, int, 0);
617module_param_array(media, int, NULL, 0);
618module_param_array(full_duplex, int, NULL, 0);
619module_param(debug, int, 0);
620MODULE_PARM_DESC (debug, "8139too bitmapped message enable number");
621MODULE_PARM_DESC (multicast_filter_limit, "8139too maximum number of filtered multicast addresses");
622MODULE_PARM_DESC (media, "8139too: Bits 4+9: force full duplex, bit 5: 100Mbps");
623MODULE_PARM_DESC (full_duplex, "8139too: Force full duplex for board(s) (1)");
624
625static int read_eeprom (void __iomem *ioaddr, int location, int addr_len);
626static int rtl8139_open (struct net_device *dev);
627static int mdio_read (struct net_device *dev, int phy_id, int location);
628static void mdio_write (struct net_device *dev, int phy_id, int location,
629 int val);
630static void rtl8139_start_thread(struct rtl8139_private *tp);
631static void rtl8139_tx_timeout (struct net_device *dev);
632static void rtl8139_init_ring (struct net_device *dev);
633static netdev_tx_t rtl8139_start_xmit (struct sk_buff *skb,
634 struct net_device *dev);
635#ifdef CONFIG_NET_POLL_CONTROLLER
636static void rtl8139_poll_controller(struct net_device *dev);
637#endif
638static int rtl8139_set_mac_address(struct net_device *dev, void *p);
639static int rtl8139_poll(struct napi_struct *napi, int budget);
640static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance);
641static int rtl8139_close (struct net_device *dev);
642static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
643static struct net_device_stats *rtl8139_get_stats (struct net_device *dev);
644static void rtl8139_set_rx_mode (struct net_device *dev);
645static void __set_rx_mode (struct net_device *dev);
646static void rtl8139_hw_start (struct net_device *dev);
647static void rtl8139_thread (struct work_struct *work);
648static void rtl8139_tx_timeout_task(struct work_struct *work);
649static const struct ethtool_ops rtl8139_ethtool_ops;
650
651
652
653#define RTL_W8_F(reg, val8) do { iowrite8 ((val8), ioaddr + (reg)); ioread8 (ioaddr + (reg)); } while (0)
654#define RTL_W16_F(reg, val16) do { iowrite16 ((val16), ioaddr + (reg)); ioread16 (ioaddr + (reg)); } while (0)
655#define RTL_W32_F(reg, val32) do { iowrite32 ((val32), ioaddr + (reg)); ioread32 (ioaddr + (reg)); } while (0)
656
657
658#define RTL_W8(reg, val8) iowrite8 ((val8), ioaddr + (reg))
659#define RTL_W16(reg, val16) iowrite16 ((val16), ioaddr + (reg))
660#define RTL_W32(reg, val32) iowrite32 ((val32), ioaddr + (reg))
661
662
663#define RTL_R8(reg) ioread8 (ioaddr + (reg))
664#define RTL_R16(reg) ioread16 (ioaddr + (reg))
665#define RTL_R32(reg) ioread32 (ioaddr + (reg))
666
667
668static const u16 rtl8139_intr_mask =
669 PCIErr | PCSTimeout | RxUnderrun | RxOverflow | RxFIFOOver |
670 TxErr | TxOK | RxErr | RxOK;
671
672static const u16 rtl8139_norx_intr_mask =
673 PCIErr | PCSTimeout | RxUnderrun |
674 TxErr | TxOK | RxErr ;
675
676#if RX_BUF_IDX == 0
677static const unsigned int rtl8139_rx_config =
678 RxCfgRcv8K | RxNoWrap |
679 (RX_FIFO_THRESH << RxCfgFIFOShift) |
680 (RX_DMA_BURST << RxCfgDMAShift);
681#elif RX_BUF_IDX == 1
682static const unsigned int rtl8139_rx_config =
683 RxCfgRcv16K | RxNoWrap |
684 (RX_FIFO_THRESH << RxCfgFIFOShift) |
685 (RX_DMA_BURST << RxCfgDMAShift);
686#elif RX_BUF_IDX == 2
687static const unsigned int rtl8139_rx_config =
688 RxCfgRcv32K | RxNoWrap |
689 (RX_FIFO_THRESH << RxCfgFIFOShift) |
690 (RX_DMA_BURST << RxCfgDMAShift);
691#elif RX_BUF_IDX == 3
692static const unsigned int rtl8139_rx_config =
693 RxCfgRcv64K |
694 (RX_FIFO_THRESH << RxCfgFIFOShift) |
695 (RX_DMA_BURST << RxCfgDMAShift);
696#else
697#error "Invalid configuration for 8139_RXBUF_IDX"
698#endif
699
700static const unsigned int rtl8139_tx_config =
701 TxIFG96 | (TX_DMA_BURST << TxDMAShift) | (TX_RETRY << TxRetryShift);
702
703static void __rtl8139_cleanup_dev (struct net_device *dev)
704{
705 struct rtl8139_private *tp = netdev_priv(dev);
706 struct pci_dev *pdev;
707
708 assert (dev != NULL);
709 assert (tp->pci_dev != NULL);
710 pdev = tp->pci_dev;
711
712 if (tp->mmio_addr)
713 pci_iounmap (pdev, tp->mmio_addr);
714
715
716 pci_release_regions (pdev);
717
718 free_netdev(dev);
719 pci_set_drvdata (pdev, NULL);
720}
721
722
723static void rtl8139_chip_reset (void __iomem *ioaddr)
724{
725 int i;
726
727
728 RTL_W8 (ChipCmd, CmdReset);
729
730
731 for (i = 1000; i > 0; i--) {
732 barrier();
733 if ((RTL_R8 (ChipCmd) & CmdReset) == 0)
734 break;
735 udelay (10);
736 }
737}
738
739
740static __devinit struct net_device * rtl8139_init_board (struct pci_dev *pdev)
741{
742 void __iomem *ioaddr;
743 struct net_device *dev;
744 struct rtl8139_private *tp;
745 u8 tmp8;
746 int rc, disable_dev_on_err = 0;
747 unsigned int i;
748 unsigned long pio_start, pio_end, pio_flags, pio_len;
749 unsigned long mmio_start, mmio_end, mmio_flags, mmio_len;
750 u32 version;
751
752 assert (pdev != NULL);
753
754
755 dev = alloc_etherdev (sizeof (*tp));
756 if (dev == NULL) {
757 dev_err(&pdev->dev, "Unable to alloc new net device\n");
758 return ERR_PTR(-ENOMEM);
759 }
760 SET_NETDEV_DEV(dev, &pdev->dev);
761
762 tp = netdev_priv(dev);
763 tp->pci_dev = pdev;
764
765
766 rc = pci_enable_device (pdev);
767 if (rc)
768 goto err_out;
769
770 pio_start = pci_resource_start (pdev, 0);
771 pio_end = pci_resource_end (pdev, 0);
772 pio_flags = pci_resource_flags (pdev, 0);
773 pio_len = pci_resource_len (pdev, 0);
774
775 mmio_start = pci_resource_start (pdev, 1);
776 mmio_end = pci_resource_end (pdev, 1);
777 mmio_flags = pci_resource_flags (pdev, 1);
778 mmio_len = pci_resource_len (pdev, 1);
779
780
781
782 pr_debug("PIO region size == 0x%02lX\n", pio_len);
783 pr_debug("MMIO region size == 0x%02lX\n", mmio_len);
784
785retry:
786 if (use_io) {
787
788 if (!(pio_flags & IORESOURCE_IO)) {
789 dev_err(&pdev->dev, "region #0 not a PIO resource, aborting\n");
790 rc = -ENODEV;
791 goto err_out;
792 }
793
794 if (pio_len < RTL_MIN_IO_SIZE) {
795 dev_err(&pdev->dev, "Invalid PCI I/O region size(s), aborting\n");
796 rc = -ENODEV;
797 goto err_out;
798 }
799 } else {
800
801 if (!(mmio_flags & IORESOURCE_MEM)) {
802 dev_err(&pdev->dev, "region #1 not an MMIO resource, aborting\n");
803 rc = -ENODEV;
804 goto err_out;
805 }
806 if (mmio_len < RTL_MIN_IO_SIZE) {
807 dev_err(&pdev->dev, "Invalid PCI mem region size(s), aborting\n");
808 rc = -ENODEV;
809 goto err_out;
810 }
811 }
812
813 rc = pci_request_regions (pdev, DRV_NAME);
814 if (rc)
815 goto err_out;
816 disable_dev_on_err = 1;
817
818
819 pci_set_master (pdev);
820
821 if (use_io) {
822 ioaddr = pci_iomap(pdev, 0, 0);
823 if (!ioaddr) {
824 dev_err(&pdev->dev, "cannot map PIO, aborting\n");
825 rc = -EIO;
826 goto err_out;
827 }
828 dev->base_addr = pio_start;
829 tp->regs_len = pio_len;
830 } else {
831
832 ioaddr = pci_iomap(pdev, 1, 0);
833 if (ioaddr == NULL) {
834 dev_err(&pdev->dev, "cannot remap MMIO, trying PIO\n");
835 pci_release_regions(pdev);
836 use_io = 1;
837 goto retry;
838 }
839 dev->base_addr = (long) ioaddr;
840 tp->regs_len = mmio_len;
841 }
842 tp->mmio_addr = ioaddr;
843
844
845 RTL_W8 (HltClk, 'R');
846
847
848 if (RTL_R32 (TxConfig) == 0xFFFFFFFF) {
849 dev_err(&pdev->dev, "Chip not responding, ignoring board\n");
850 rc = -EIO;
851 goto err_out;
852 }
853
854
855 version = RTL_R32 (TxConfig) & HW_REVID_MASK;
856 for (i = 0; i < ARRAY_SIZE (rtl_chip_info); i++)
857 if (version == rtl_chip_info[i].version) {
858 tp->chipset = i;
859 goto match;
860 }
861
862
863 i = 0;
864 dev_dbg(&pdev->dev, "unknown chip version, assuming RTL-8139\n");
865 dev_dbg(&pdev->dev, "TxConfig = 0x%x\n", RTL_R32 (TxConfig));
866 tp->chipset = 0;
867
868match:
869 pr_debug("chipset id (%d) == index %d, '%s'\n",
870 version, i, rtl_chip_info[i].name);
871
872 if (tp->chipset >= CH_8139B) {
873 u8 new_tmp8 = tmp8 = RTL_R8 (Config1);
874 pr_debug("PCI PM wakeup\n");
875 if ((rtl_chip_info[tp->chipset].flags & HasLWake) &&
876 (tmp8 & LWAKE))
877 new_tmp8 &= ~LWAKE;
878 new_tmp8 |= Cfg1_PM_Enable;
879 if (new_tmp8 != tmp8) {
880 RTL_W8 (Cfg9346, Cfg9346_Unlock);
881 RTL_W8 (Config1, tmp8);
882 RTL_W8 (Cfg9346, Cfg9346_Lock);
883 }
884 if (rtl_chip_info[tp->chipset].flags & HasLWake) {
885 tmp8 = RTL_R8 (Config4);
886 if (tmp8 & LWPTN) {
887 RTL_W8 (Cfg9346, Cfg9346_Unlock);
888 RTL_W8 (Config4, tmp8 & ~LWPTN);
889 RTL_W8 (Cfg9346, Cfg9346_Lock);
890 }
891 }
892 } else {
893 pr_debug("Old chip wakeup\n");
894 tmp8 = RTL_R8 (Config1);
895 tmp8 &= ~(SLEEP | PWRDN);
896 RTL_W8 (Config1, tmp8);
897 }
898
899 rtl8139_chip_reset (ioaddr);
900
901 return dev;
902
903err_out:
904 __rtl8139_cleanup_dev (dev);
905 if (disable_dev_on_err)
906 pci_disable_device (pdev);
907 return ERR_PTR(rc);
908}
909
910static const struct net_device_ops rtl8139_netdev_ops = {
911 .ndo_open = rtl8139_open,
912 .ndo_stop = rtl8139_close,
913 .ndo_get_stats = rtl8139_get_stats,
914 .ndo_change_mtu = eth_change_mtu,
915 .ndo_validate_addr = eth_validate_addr,
916 .ndo_set_mac_address = rtl8139_set_mac_address,
917 .ndo_start_xmit = rtl8139_start_xmit,
918 .ndo_set_multicast_list = rtl8139_set_rx_mode,
919 .ndo_do_ioctl = netdev_ioctl,
920 .ndo_tx_timeout = rtl8139_tx_timeout,
921#ifdef CONFIG_NET_POLL_CONTROLLER
922 .ndo_poll_controller = rtl8139_poll_controller,
923#endif
924};
925
926static int __devinit rtl8139_init_one (struct pci_dev *pdev,
927 const struct pci_device_id *ent)
928{
929 struct net_device *dev = NULL;
930 struct rtl8139_private *tp;
931 int i, addr_len, option;
932 void __iomem *ioaddr;
933 static int board_idx = -1;
934
935 assert (pdev != NULL);
936 assert (ent != NULL);
937
938 board_idx++;
939
940
941
942
943#ifndef MODULE
944 {
945 static int printed_version;
946 if (!printed_version++)
947 pr_info(RTL8139_DRIVER_NAME "\n");
948 }
949#endif
950
951 if (pdev->vendor == PCI_VENDOR_ID_REALTEK &&
952 pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pdev->revision >= 0x20) {
953 dev_info(&pdev->dev,
954 "This (id %04x:%04x rev %02x) is an enhanced 8139C+ chip, use 8139cp\n",
955 pdev->vendor, pdev->device, pdev->revision);
956 return -ENODEV;
957 }
958
959 if (pdev->vendor == PCI_VENDOR_ID_REALTEK &&
960 pdev->device == PCI_DEVICE_ID_REALTEK_8139 &&
961 pdev->subsystem_vendor == PCI_VENDOR_ID_ATHEROS &&
962 pdev->subsystem_device == PCI_DEVICE_ID_REALTEK_8139) {
963 pr_info("OQO Model 2 detected. Forcing PIO\n");
964 use_io = 1;
965 }
966
967 dev = rtl8139_init_board (pdev);
968 if (IS_ERR(dev))
969 return PTR_ERR(dev);
970
971 assert (dev != NULL);
972 tp = netdev_priv(dev);
973 tp->dev = dev;
974
975 ioaddr = tp->mmio_addr;
976 assert (ioaddr != NULL);
977
978 addr_len = read_eeprom (ioaddr, 0, 8) == 0x8129 ? 8 : 6;
979 for (i = 0; i < 3; i++)
980 ((__le16 *) (dev->dev_addr))[i] =
981 cpu_to_le16(read_eeprom (ioaddr, i + 7, addr_len));
982 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
983
984
985 dev->netdev_ops = &rtl8139_netdev_ops;
986 dev->ethtool_ops = &rtl8139_ethtool_ops;
987 dev->watchdog_timeo = TX_TIMEOUT;
988 netif_napi_add(dev, &tp->napi, rtl8139_poll, 64);
989
990
991
992
993
994 dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_HIGHDMA;
995
996 dev->irq = pdev->irq;
997
998
999 tp = netdev_priv(dev);
1000
1001
1002 tp->drv_flags = board_info[ent->driver_data].hw_flags;
1003 tp->mmio_addr = ioaddr;
1004 tp->msg_enable =
1005 (debug < 0 ? RTL8139_DEF_MSG_ENABLE : ((1 << debug) - 1));
1006 spin_lock_init (&tp->lock);
1007 spin_lock_init (&tp->rx_lock);
1008 INIT_DELAYED_WORK(&tp->thread, rtl8139_thread);
1009 tp->mii.dev = dev;
1010 tp->mii.mdio_read = mdio_read;
1011 tp->mii.mdio_write = mdio_write;
1012 tp->mii.phy_id_mask = 0x3f;
1013 tp->mii.reg_num_mask = 0x1f;
1014
1015
1016 pr_debug("about to register device named %s (%p)...\n",
1017 dev->name, dev);
1018 i = register_netdev (dev);
1019 if (i) goto err_out;
1020
1021 pci_set_drvdata (pdev, dev);
1022
1023 netdev_info(dev, "%s at 0x%lx, %pM, IRQ %d\n",
1024 board_info[ent->driver_data].name,
1025 dev->base_addr, dev->dev_addr, dev->irq);
1026
1027 netdev_dbg(dev, "Identified 8139 chip type '%s'\n",
1028 rtl_chip_info[tp->chipset].name);
1029
1030
1031
1032
1033#ifdef CONFIG_8139TOO_8129
1034 if (tp->drv_flags & HAS_MII_XCVR) {
1035 int phy, phy_idx = 0;
1036 for (phy = 0; phy < 32 && phy_idx < sizeof(tp->phys); phy++) {
1037 int mii_status = mdio_read(dev, phy, 1);
1038 if (mii_status != 0xffff && mii_status != 0x0000) {
1039 u16 advertising = mdio_read(dev, phy, 4);
1040 tp->phys[phy_idx++] = phy;
1041 netdev_info(dev, "MII transceiver %d status 0x%04x advertising %04x\n",
1042 phy, mii_status, advertising);
1043 }
1044 }
1045 if (phy_idx == 0) {
1046 netdev_info(dev, "No MII transceivers found! Assuming SYM transceiver\n");
1047 tp->phys[0] = 32;
1048 }
1049 } else
1050#endif
1051 tp->phys[0] = 32;
1052 tp->mii.phy_id = tp->phys[0];
1053
1054
1055 option = (board_idx >= MAX_UNITS) ? 0 : media[board_idx];
1056 if (option > 0) {
1057 tp->mii.full_duplex = (option & 0x210) ? 1 : 0;
1058 tp->default_port = option & 0xFF;
1059 if (tp->default_port)
1060 tp->mii.force_media = 1;
1061 }
1062 if (board_idx < MAX_UNITS && full_duplex[board_idx] > 0)
1063 tp->mii.full_duplex = full_duplex[board_idx];
1064 if (tp->mii.full_duplex) {
1065 netdev_info(dev, "Media type forced to Full Duplex\n");
1066
1067
1068 tp->mii.force_media = 1;
1069 }
1070 if (tp->default_port) {
1071 netdev_info(dev, " Forcing %dMbps %s-duplex operation\n",
1072 (option & 0x20 ? 100 : 10),
1073 (option & 0x10 ? "full" : "half"));
1074 mdio_write(dev, tp->phys[0], 0,
1075 ((option & 0x20) ? 0x2000 : 0) |
1076 ((option & 0x10) ? 0x0100 : 0));
1077 }
1078
1079
1080 if (rtl_chip_info[tp->chipset].flags & HasHltClk)
1081 RTL_W8 (HltClk, 'H');
1082
1083 return 0;
1084
1085err_out:
1086 __rtl8139_cleanup_dev (dev);
1087 pci_disable_device (pdev);
1088 return i;
1089}
1090
1091
1092static void __devexit rtl8139_remove_one (struct pci_dev *pdev)
1093{
1094 struct net_device *dev = pci_get_drvdata (pdev);
1095 struct rtl8139_private *tp = netdev_priv(dev);
1096
1097 assert (dev != NULL);
1098
1099 cancel_delayed_work_sync(&tp->thread);
1100
1101 unregister_netdev (dev);
1102
1103 __rtl8139_cleanup_dev (dev);
1104 pci_disable_device (pdev);
1105}
1106
1107
1108
1109
1110
1111#define EE_SHIFT_CLK 0x04
1112#define EE_CS 0x08
1113#define EE_DATA_WRITE 0x02
1114#define EE_WRITE_0 0x00
1115#define EE_WRITE_1 0x02
1116#define EE_DATA_READ 0x01
1117#define EE_ENB (0x80 | EE_CS)
1118
1119
1120
1121
1122
1123#define eeprom_delay() (void)RTL_R32(Cfg9346)
1124
1125
1126#define EE_WRITE_CMD (5)
1127#define EE_READ_CMD (6)
1128#define EE_ERASE_CMD (7)
1129
1130static int __devinit read_eeprom (void __iomem *ioaddr, int location, int addr_len)
1131{
1132 int i;
1133 unsigned retval = 0;
1134 int read_cmd = location | (EE_READ_CMD << addr_len);
1135
1136 RTL_W8 (Cfg9346, EE_ENB & ~EE_CS);
1137 RTL_W8 (Cfg9346, EE_ENB);
1138 eeprom_delay ();
1139
1140
1141 for (i = 4 + addr_len; i >= 0; i--) {
1142 int dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1143 RTL_W8 (Cfg9346, EE_ENB | dataval);
1144 eeprom_delay ();
1145 RTL_W8 (Cfg9346, EE_ENB | dataval | EE_SHIFT_CLK);
1146 eeprom_delay ();
1147 }
1148 RTL_W8 (Cfg9346, EE_ENB);
1149 eeprom_delay ();
1150
1151 for (i = 16; i > 0; i--) {
1152 RTL_W8 (Cfg9346, EE_ENB | EE_SHIFT_CLK);
1153 eeprom_delay ();
1154 retval =
1155 (retval << 1) | ((RTL_R8 (Cfg9346) & EE_DATA_READ) ? 1 :
1156 0);
1157 RTL_W8 (Cfg9346, EE_ENB);
1158 eeprom_delay ();
1159 }
1160
1161
1162 RTL_W8 (Cfg9346, ~EE_CS);
1163 eeprom_delay ();
1164
1165 return retval;
1166}
1167
1168
1169
1170
1171
1172
1173
1174#define MDIO_DIR 0x80
1175#define MDIO_DATA_OUT 0x04
1176#define MDIO_DATA_IN 0x02
1177#define MDIO_CLK 0x01
1178#define MDIO_WRITE0 (MDIO_DIR)
1179#define MDIO_WRITE1 (MDIO_DIR | MDIO_DATA_OUT)
1180
1181#define mdio_delay() RTL_R8(Config4)
1182
1183
1184static const char mii_2_8139_map[8] = {
1185 BasicModeCtrl,
1186 BasicModeStatus,
1187 0,
1188 0,
1189 NWayAdvert,
1190 NWayLPAR,
1191 NWayExpansion,
1192 0
1193};
1194
1195
1196#ifdef CONFIG_8139TOO_8129
1197
1198static void mdio_sync (void __iomem *ioaddr)
1199{
1200 int i;
1201
1202 for (i = 32; i >= 0; i--) {
1203 RTL_W8 (Config4, MDIO_WRITE1);
1204 mdio_delay ();
1205 RTL_W8 (Config4, MDIO_WRITE1 | MDIO_CLK);
1206 mdio_delay ();
1207 }
1208}
1209#endif
1210
1211static int mdio_read (struct net_device *dev, int phy_id, int location)
1212{
1213 struct rtl8139_private *tp = netdev_priv(dev);
1214 int retval = 0;
1215#ifdef CONFIG_8139TOO_8129
1216 void __iomem *ioaddr = tp->mmio_addr;
1217 int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
1218 int i;
1219#endif
1220
1221 if (phy_id > 31) {
1222 void __iomem *ioaddr = tp->mmio_addr;
1223 return location < 8 && mii_2_8139_map[location] ?
1224 RTL_R16 (mii_2_8139_map[location]) : 0;
1225 }
1226
1227#ifdef CONFIG_8139TOO_8129
1228 mdio_sync (ioaddr);
1229
1230 for (i = 15; i >= 0; i--) {
1231 int dataval = (mii_cmd & (1 << i)) ? MDIO_DATA_OUT : 0;
1232
1233 RTL_W8 (Config4, MDIO_DIR | dataval);
1234 mdio_delay ();
1235 RTL_W8 (Config4, MDIO_DIR | dataval | MDIO_CLK);
1236 mdio_delay ();
1237 }
1238
1239
1240 for (i = 19; i > 0; i--) {
1241 RTL_W8 (Config4, 0);
1242 mdio_delay ();
1243 retval = (retval << 1) | ((RTL_R8 (Config4) & MDIO_DATA_IN) ? 1 : 0);
1244 RTL_W8 (Config4, MDIO_CLK);
1245 mdio_delay ();
1246 }
1247#endif
1248
1249 return (retval >> 1) & 0xffff;
1250}
1251
1252
1253static void mdio_write (struct net_device *dev, int phy_id, int location,
1254 int value)
1255{
1256 struct rtl8139_private *tp = netdev_priv(dev);
1257#ifdef CONFIG_8139TOO_8129
1258 void __iomem *ioaddr = tp->mmio_addr;
1259 int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value;
1260 int i;
1261#endif
1262
1263 if (phy_id > 31) {
1264 void __iomem *ioaddr = tp->mmio_addr;
1265 if (location == 0) {
1266 RTL_W8 (Cfg9346, Cfg9346_Unlock);
1267 RTL_W16 (BasicModeCtrl, value);
1268 RTL_W8 (Cfg9346, Cfg9346_Lock);
1269 } else if (location < 8 && mii_2_8139_map[location])
1270 RTL_W16 (mii_2_8139_map[location], value);
1271 return;
1272 }
1273
1274#ifdef CONFIG_8139TOO_8129
1275 mdio_sync (ioaddr);
1276
1277
1278 for (i = 31; i >= 0; i--) {
1279 int dataval =
1280 (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
1281 RTL_W8 (Config4, dataval);
1282 mdio_delay ();
1283 RTL_W8 (Config4, dataval | MDIO_CLK);
1284 mdio_delay ();
1285 }
1286
1287 for (i = 2; i > 0; i--) {
1288 RTL_W8 (Config4, 0);
1289 mdio_delay ();
1290 RTL_W8 (Config4, MDIO_CLK);
1291 mdio_delay ();
1292 }
1293#endif
1294}
1295
1296
1297static int rtl8139_open (struct net_device *dev)
1298{
1299 struct rtl8139_private *tp = netdev_priv(dev);
1300 int retval;
1301 void __iomem *ioaddr = tp->mmio_addr;
1302
1303 retval = request_irq (dev->irq, rtl8139_interrupt, IRQF_SHARED, dev->name, dev);
1304 if (retval)
1305 return retval;
1306
1307 tp->tx_bufs = dma_alloc_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
1308 &tp->tx_bufs_dma, GFP_KERNEL);
1309 tp->rx_ring = dma_alloc_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
1310 &tp->rx_ring_dma, GFP_KERNEL);
1311 if (tp->tx_bufs == NULL || tp->rx_ring == NULL) {
1312 free_irq(dev->irq, dev);
1313
1314 if (tp->tx_bufs)
1315 dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
1316 tp->tx_bufs, tp->tx_bufs_dma);
1317 if (tp->rx_ring)
1318 dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
1319 tp->rx_ring, tp->rx_ring_dma);
1320
1321 return -ENOMEM;
1322
1323 }
1324
1325 napi_enable(&tp->napi);
1326
1327 tp->mii.full_duplex = tp->mii.force_media;
1328 tp->tx_flag = (TX_FIFO_THRESH << 11) & 0x003f0000;
1329
1330 rtl8139_init_ring (dev);
1331 rtl8139_hw_start (dev);
1332 netif_start_queue (dev);
1333
1334 netif_dbg(tp, ifup, dev,
1335 "%s() ioaddr %#llx IRQ %d GP Pins %02x %s-duplex\n",
1336 __func__,
1337 (unsigned long long)pci_resource_start (tp->pci_dev, 1),
1338 dev->irq, RTL_R8 (MediaStatus),
1339 tp->mii.full_duplex ? "full" : "half");
1340
1341 rtl8139_start_thread(tp);
1342
1343 return 0;
1344}
1345
1346
1347static void rtl_check_media (struct net_device *dev, unsigned int init_media)
1348{
1349 struct rtl8139_private *tp = netdev_priv(dev);
1350
1351 if (tp->phys[0] >= 0) {
1352 mii_check_media(&tp->mii, netif_msg_link(tp), init_media);
1353 }
1354}
1355
1356
1357static void rtl8139_hw_start (struct net_device *dev)
1358{
1359 struct rtl8139_private *tp = netdev_priv(dev);
1360 void __iomem *ioaddr = tp->mmio_addr;
1361 u32 i;
1362 u8 tmp;
1363
1364
1365 if (rtl_chip_info[tp->chipset].flags & HasHltClk)
1366 RTL_W8 (HltClk, 'R');
1367
1368 rtl8139_chip_reset (ioaddr);
1369
1370
1371 RTL_W8_F (Cfg9346, Cfg9346_Unlock);
1372
1373 RTL_W32_F (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0)));
1374 RTL_W32_F (MAC0 + 4, le16_to_cpu (*(__le16 *) (dev->dev_addr + 4)));
1375
1376 tp->cur_rx = 0;
1377
1378
1379 RTL_W32_F (RxBuf, tp->rx_ring_dma);
1380
1381
1382 RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
1383
1384 tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys;
1385 RTL_W32 (RxConfig, tp->rx_config);
1386 RTL_W32 (TxConfig, rtl8139_tx_config);
1387
1388 rtl_check_media (dev, 1);
1389
1390 if (tp->chipset >= CH_8139B) {
1391
1392
1393
1394 RTL_W8 (Config3, RTL_R8 (Config3) & ~Cfg3_Magic);
1395 }
1396
1397 netdev_dbg(dev, "init buffer addresses\n");
1398
1399
1400 RTL_W8 (Cfg9346, Cfg9346_Lock);
1401
1402
1403 for (i = 0; i < NUM_TX_DESC; i++)
1404 RTL_W32_F (TxAddr0 + (i * 4), tp->tx_bufs_dma + (tp->tx_buf[i] - tp->tx_bufs));
1405
1406 RTL_W32 (RxMissed, 0);
1407
1408 rtl8139_set_rx_mode (dev);
1409
1410
1411 RTL_W16 (MultiIntr, RTL_R16 (MultiIntr) & MultiIntrClear);
1412
1413
1414 tmp = RTL_R8 (ChipCmd);
1415 if ((!(tmp & CmdRxEnb)) || (!(tmp & CmdTxEnb)))
1416 RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
1417
1418
1419 RTL_W16 (IntrMask, rtl8139_intr_mask);
1420}
1421
1422
1423
1424static void rtl8139_init_ring (struct net_device *dev)
1425{
1426 struct rtl8139_private *tp = netdev_priv(dev);
1427 int i;
1428
1429 tp->cur_rx = 0;
1430 tp->cur_tx = 0;
1431 tp->dirty_tx = 0;
1432
1433 for (i = 0; i < NUM_TX_DESC; i++)
1434 tp->tx_buf[i] = &tp->tx_bufs[i * TX_BUF_SIZE];
1435}
1436
1437
1438
1439static int next_tick = 3 * HZ;
1440
1441#ifndef CONFIG_8139TOO_TUNE_TWISTER
1442static inline void rtl8139_tune_twister (struct net_device *dev,
1443 struct rtl8139_private *tp) {}
1444#else
1445enum TwisterParamVals {
1446 PARA78_default = 0x78fa8388,
1447 PARA7c_default = 0xcb38de43,
1448 PARA7c_xxx = 0xcb38de43,
1449};
1450
1451static const unsigned long param[4][4] = {
1452 {0xcb39de43, 0xcb39ce43, 0xfb38de03, 0xcb38de43},
1453 {0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
1454 {0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
1455 {0xbb39de43, 0xbb39ce43, 0xbb39ce83, 0xbb39ce83}
1456};
1457
1458static void rtl8139_tune_twister (struct net_device *dev,
1459 struct rtl8139_private *tp)
1460{
1461 int linkcase;
1462 void __iomem *ioaddr = tp->mmio_addr;
1463
1464
1465
1466
1467
1468 switch (tp->twistie) {
1469 case 1:
1470 if (RTL_R16 (CSCR) & CSCR_LinkOKBit) {
1471
1472 RTL_W16 (CSCR, CSCR_LinkDownOffCmd);
1473 tp->twistie = 2;
1474 next_tick = HZ / 10;
1475 } else {
1476
1477 RTL_W16 (CSCR, CSCR_LinkDownCmd);
1478 RTL_W32 (FIFOTMS, 0x20);
1479 RTL_W32 (PARA78, PARA78_default);
1480 RTL_W32 (PARA7c, PARA7c_default);
1481 tp->twistie = 0;
1482 }
1483 break;
1484 case 2:
1485
1486 linkcase = RTL_R16 (CSCR) & CSCR_LinkStatusBits;
1487 if (linkcase == 0x7000)
1488 tp->twist_row = 3;
1489 else if (linkcase == 0x3000)
1490 tp->twist_row = 2;
1491 else if (linkcase == 0x1000)
1492 tp->twist_row = 1;
1493 else
1494 tp->twist_row = 0;
1495 tp->twist_col = 0;
1496 tp->twistie = 3;
1497 next_tick = HZ / 10;
1498 break;
1499 case 3:
1500
1501 if (tp->twist_col == 0)
1502 RTL_W16 (FIFOTMS, 0);
1503 RTL_W32 (PARA7c, param[(int) tp->twist_row]
1504 [(int) tp->twist_col]);
1505 next_tick = HZ / 10;
1506 if (++tp->twist_col >= 4) {
1507
1508
1509 tp->twistie =
1510 (tp->twist_row == 3) ? 4 : 0;
1511 }
1512 break;
1513 case 4:
1514
1515 if ((RTL_R16 (CSCR) &
1516 CSCR_LinkStatusBits) == 0x7000) {
1517 tp->twistie = 0;
1518 break;
1519 } else {
1520 RTL_W32 (PARA7c, 0xfb38de03);
1521 tp->twistie = 5;
1522 next_tick = HZ / 10;
1523 }
1524 break;
1525 case 5:
1526
1527 RTL_W32 (FIFOTMS, 0x20);
1528 RTL_W32 (PARA78, PARA78_default);
1529 RTL_W32 (PARA7c, PARA7c_default);
1530 RTL_W32 (FIFOTMS, 0x00);
1531 tp->twist_row = 2;
1532 tp->twist_col = 0;
1533 tp->twistie = 3;
1534 next_tick = HZ / 10;
1535 break;
1536
1537 default:
1538
1539 break;
1540 }
1541}
1542#endif
1543
1544static inline void rtl8139_thread_iter (struct net_device *dev,
1545 struct rtl8139_private *tp,
1546 void __iomem *ioaddr)
1547{
1548 int mii_lpa;
1549
1550 mii_lpa = mdio_read (dev, tp->phys[0], MII_LPA);
1551
1552 if (!tp->mii.force_media && mii_lpa != 0xffff) {
1553 int duplex = ((mii_lpa & LPA_100FULL) ||
1554 (mii_lpa & 0x01C0) == 0x0040);
1555 if (tp->mii.full_duplex != duplex) {
1556 tp->mii.full_duplex = duplex;
1557
1558 if (mii_lpa) {
1559 netdev_info(dev, "Setting %s-duplex based on MII #%d link partner ability of %04x\n",
1560 tp->mii.full_duplex ? "full" : "half",
1561 tp->phys[0], mii_lpa);
1562 } else {
1563 netdev_info(dev, "media is unconnected, link down, or incompatible connection\n");
1564 }
1565#if 0
1566 RTL_W8 (Cfg9346, Cfg9346_Unlock);
1567 RTL_W8 (Config1, tp->mii.full_duplex ? 0x60 : 0x20);
1568 RTL_W8 (Cfg9346, Cfg9346_Lock);
1569#endif
1570 }
1571 }
1572
1573 next_tick = HZ * 60;
1574
1575 rtl8139_tune_twister (dev, tp);
1576
1577 netdev_dbg(dev, "Media selection tick, Link partner %04x\n",
1578 RTL_R16(NWayLPAR));
1579 netdev_dbg(dev, "Other registers are IntMask %04x IntStatus %04x\n",
1580 RTL_R16(IntrMask), RTL_R16(IntrStatus));
1581 netdev_dbg(dev, "Chip config %02x %02x\n",
1582 RTL_R8(Config0), RTL_R8(Config1));
1583}
1584
1585static void rtl8139_thread (struct work_struct *work)
1586{
1587 struct rtl8139_private *tp =
1588 container_of(work, struct rtl8139_private, thread.work);
1589 struct net_device *dev = tp->mii.dev;
1590 unsigned long thr_delay = next_tick;
1591
1592 rtnl_lock();
1593
1594 if (!netif_running(dev))
1595 goto out_unlock;
1596
1597 if (tp->watchdog_fired) {
1598 tp->watchdog_fired = 0;
1599 rtl8139_tx_timeout_task(work);
1600 } else
1601 rtl8139_thread_iter(dev, tp, tp->mmio_addr);
1602
1603 if (tp->have_thread)
1604 schedule_delayed_work(&tp->thread, thr_delay);
1605out_unlock:
1606 rtnl_unlock ();
1607}
1608
1609static void rtl8139_start_thread(struct rtl8139_private *tp)
1610{
1611 tp->twistie = 0;
1612 if (tp->chipset == CH_8139_K)
1613 tp->twistie = 1;
1614 else if (tp->drv_flags & HAS_LNK_CHNG)
1615 return;
1616
1617 tp->have_thread = 1;
1618 tp->watchdog_fired = 0;
1619
1620 schedule_delayed_work(&tp->thread, next_tick);
1621}
1622
1623static inline void rtl8139_tx_clear (struct rtl8139_private *tp)
1624{
1625 tp->cur_tx = 0;
1626 tp->dirty_tx = 0;
1627
1628
1629}
1630
1631static void rtl8139_tx_timeout_task (struct work_struct *work)
1632{
1633 struct rtl8139_private *tp =
1634 container_of(work, struct rtl8139_private, thread.work);
1635 struct net_device *dev = tp->mii.dev;
1636 void __iomem *ioaddr = tp->mmio_addr;
1637 int i;
1638 u8 tmp8;
1639
1640 netdev_dbg(dev, "Transmit timeout, status %02x %04x %04x media %02x\n",
1641 RTL_R8(ChipCmd), RTL_R16(IntrStatus),
1642 RTL_R16(IntrMask), RTL_R8(MediaStatus));
1643
1644 netdev_dbg(dev, "Tx queue start entry %ld dirty entry %ld\n",
1645 tp->cur_tx, tp->dirty_tx);
1646 for (i = 0; i < NUM_TX_DESC; i++)
1647 netdev_dbg(dev, "Tx descriptor %d is %08x%s\n",
1648 i, RTL_R32(TxStatus0 + (i * 4)),
1649 i == tp->dirty_tx % NUM_TX_DESC ?
1650 " (queue head)" : "");
1651
1652 tp->xstats.tx_timeouts++;
1653
1654
1655 tmp8 = RTL_R8 (ChipCmd);
1656 if (tmp8 & CmdTxEnb)
1657 RTL_W8 (ChipCmd, CmdRxEnb);
1658
1659 spin_lock_bh(&tp->rx_lock);
1660
1661 RTL_W16 (IntrMask, 0x0000);
1662
1663
1664 spin_lock_irq(&tp->lock);
1665 rtl8139_tx_clear (tp);
1666 spin_unlock_irq(&tp->lock);
1667
1668
1669 if (netif_running(dev)) {
1670 rtl8139_hw_start (dev);
1671 netif_wake_queue (dev);
1672 }
1673 spin_unlock_bh(&tp->rx_lock);
1674}
1675
1676static void rtl8139_tx_timeout (struct net_device *dev)
1677{
1678 struct rtl8139_private *tp = netdev_priv(dev);
1679
1680 tp->watchdog_fired = 1;
1681 if (!tp->have_thread) {
1682 INIT_DELAYED_WORK(&tp->thread, rtl8139_thread);
1683 schedule_delayed_work(&tp->thread, next_tick);
1684 }
1685}
1686
1687static netdev_tx_t rtl8139_start_xmit (struct sk_buff *skb,
1688 struct net_device *dev)
1689{
1690 struct rtl8139_private *tp = netdev_priv(dev);
1691 void __iomem *ioaddr = tp->mmio_addr;
1692 unsigned int entry;
1693 unsigned int len = skb->len;
1694 unsigned long flags;
1695
1696
1697 entry = tp->cur_tx % NUM_TX_DESC;
1698
1699
1700 if (likely(len < TX_BUF_SIZE)) {
1701 if (len < ETH_ZLEN)
1702 memset(tp->tx_buf[entry], 0, ETH_ZLEN);
1703 skb_copy_and_csum_dev(skb, tp->tx_buf[entry]);
1704 dev_kfree_skb(skb);
1705 } else {
1706 dev_kfree_skb(skb);
1707 dev->stats.tx_dropped++;
1708 return NETDEV_TX_OK;
1709 }
1710
1711 spin_lock_irqsave(&tp->lock, flags);
1712
1713
1714
1715
1716
1717 wmb();
1718 RTL_W32_F (TxStatus0 + (entry * sizeof (u32)),
1719 tp->tx_flag | max(len, (unsigned int)ETH_ZLEN));
1720
1721 tp->cur_tx++;
1722
1723 if ((tp->cur_tx - NUM_TX_DESC) == tp->dirty_tx)
1724 netif_stop_queue (dev);
1725 spin_unlock_irqrestore(&tp->lock, flags);
1726
1727 netif_dbg(tp, tx_queued, dev, "Queued Tx packet size %u to slot %d\n",
1728 len, entry);
1729
1730 return NETDEV_TX_OK;
1731}
1732
1733
1734static void rtl8139_tx_interrupt (struct net_device *dev,
1735 struct rtl8139_private *tp,
1736 void __iomem *ioaddr)
1737{
1738 unsigned long dirty_tx, tx_left;
1739
1740 assert (dev != NULL);
1741 assert (ioaddr != NULL);
1742
1743 dirty_tx = tp->dirty_tx;
1744 tx_left = tp->cur_tx - dirty_tx;
1745 while (tx_left > 0) {
1746 int entry = dirty_tx % NUM_TX_DESC;
1747 int txstatus;
1748
1749 txstatus = RTL_R32 (TxStatus0 + (entry * sizeof (u32)));
1750
1751 if (!(txstatus & (TxStatOK | TxUnderrun | TxAborted)))
1752 break;
1753
1754
1755 if (txstatus & (TxOutOfWindow | TxAborted)) {
1756
1757 netif_dbg(tp, tx_err, dev, "Transmit error, Tx status %08x\n",
1758 txstatus);
1759 dev->stats.tx_errors++;
1760 if (txstatus & TxAborted) {
1761 dev->stats.tx_aborted_errors++;
1762 RTL_W32 (TxConfig, TxClearAbt);
1763 RTL_W16 (IntrStatus, TxErr);
1764 wmb();
1765 }
1766 if (txstatus & TxCarrierLost)
1767 dev->stats.tx_carrier_errors++;
1768 if (txstatus & TxOutOfWindow)
1769 dev->stats.tx_window_errors++;
1770 } else {
1771 if (txstatus & TxUnderrun) {
1772
1773 if (tp->tx_flag < 0x00300000)
1774 tp->tx_flag += 0x00020000;
1775 dev->stats.tx_fifo_errors++;
1776 }
1777 dev->stats.collisions += (txstatus >> 24) & 15;
1778 dev->stats.tx_bytes += txstatus & 0x7ff;
1779 dev->stats.tx_packets++;
1780 }
1781
1782 dirty_tx++;
1783 tx_left--;
1784 }
1785
1786#ifndef RTL8139_NDEBUG
1787 if (tp->cur_tx - dirty_tx > NUM_TX_DESC) {
1788 netdev_err(dev, "Out-of-sync dirty pointer, %ld vs. %ld\n",
1789 dirty_tx, tp->cur_tx);
1790 dirty_tx += NUM_TX_DESC;
1791 }
1792#endif
1793
1794
1795 if (tp->dirty_tx != dirty_tx) {
1796 tp->dirty_tx = dirty_tx;
1797 mb();
1798 netif_wake_queue (dev);
1799 }
1800}
1801
1802
1803
1804static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
1805 struct rtl8139_private *tp, void __iomem *ioaddr)
1806{
1807 u8 tmp8;
1808#ifdef CONFIG_8139_OLD_RX_RESET
1809 int tmp_work;
1810#endif
1811
1812 netif_dbg(tp, rx_err, dev, "Ethernet frame had errors, status %08x\n",
1813 rx_status);
1814 dev->stats.rx_errors++;
1815 if (!(rx_status & RxStatusOK)) {
1816 if (rx_status & RxTooLong) {
1817 netdev_dbg(dev, "Oversized Ethernet frame, status %04x!\n",
1818 rx_status);
1819
1820 }
1821 if (rx_status & (RxBadSymbol | RxBadAlign))
1822 dev->stats.rx_frame_errors++;
1823 if (rx_status & (RxRunt | RxTooLong))
1824 dev->stats.rx_length_errors++;
1825 if (rx_status & RxCRCErr)
1826 dev->stats.rx_crc_errors++;
1827 } else {
1828 tp->xstats.rx_lost_in_ring++;
1829 }
1830
1831#ifndef CONFIG_8139_OLD_RX_RESET
1832 tmp8 = RTL_R8 (ChipCmd);
1833 RTL_W8 (ChipCmd, tmp8 & ~CmdRxEnb);
1834 RTL_W8 (ChipCmd, tmp8);
1835 RTL_W32 (RxConfig, tp->rx_config);
1836 tp->cur_rx = 0;
1837#else
1838
1839
1840
1841 RTL_W8_F (ChipCmd, CmdTxEnb);
1842 tmp_work = 200;
1843 while (--tmp_work > 0) {
1844 udelay(1);
1845 tmp8 = RTL_R8 (ChipCmd);
1846 if (!(tmp8 & CmdRxEnb))
1847 break;
1848 }
1849 if (tmp_work <= 0)
1850 netdev_warn(dev, "rx stop wait too long\n");
1851
1852 tmp_work = 200;
1853 while (--tmp_work > 0) {
1854 RTL_W8_F (ChipCmd, CmdRxEnb | CmdTxEnb);
1855 udelay(1);
1856 tmp8 = RTL_R8 (ChipCmd);
1857 if ((tmp8 & CmdRxEnb) && (tmp8 & CmdTxEnb))
1858 break;
1859 }
1860 if (tmp_work <= 0)
1861 netdev_warn(dev, "tx/rx enable wait too long\n");
1862
1863
1864 RTL_W8_F (Cfg9346, Cfg9346_Unlock);
1865
1866 RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
1867
1868 tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys;
1869 RTL_W32 (RxConfig, tp->rx_config);
1870 tp->cur_rx = 0;
1871
1872 netdev_dbg(dev, "init buffer addresses\n");
1873
1874
1875 RTL_W8 (Cfg9346, Cfg9346_Lock);
1876
1877
1878 RTL_W32_F (RxBuf, tp->rx_ring_dma);
1879
1880
1881 __set_rx_mode (dev);
1882#endif
1883}
1884
1885#if RX_BUF_IDX == 3
1886static inline void wrap_copy(struct sk_buff *skb, const unsigned char *ring,
1887 u32 offset, unsigned int size)
1888{
1889 u32 left = RX_BUF_LEN - offset;
1890
1891 if (size > left) {
1892 skb_copy_to_linear_data(skb, ring + offset, left);
1893 skb_copy_to_linear_data_offset(skb, left, ring, size - left);
1894 } else
1895 skb_copy_to_linear_data(skb, ring + offset, size);
1896}
1897#endif
1898
1899static void rtl8139_isr_ack(struct rtl8139_private *tp)
1900{
1901 void __iomem *ioaddr = tp->mmio_addr;
1902 u16 status;
1903
1904 status = RTL_R16 (IntrStatus) & RxAckBits;
1905
1906
1907 if (likely(status != 0)) {
1908 if (unlikely(status & (RxFIFOOver | RxOverflow))) {
1909 tp->dev->stats.rx_errors++;
1910 if (status & RxFIFOOver)
1911 tp->dev->stats.rx_fifo_errors++;
1912 }
1913 RTL_W16_F (IntrStatus, RxAckBits);
1914 }
1915}
1916
1917static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
1918 int budget)
1919{
1920 void __iomem *ioaddr = tp->mmio_addr;
1921 int received = 0;
1922 unsigned char *rx_ring = tp->rx_ring;
1923 unsigned int cur_rx = tp->cur_rx;
1924 unsigned int rx_size = 0;
1925
1926 netdev_dbg(dev, "In %s(), current %04x BufAddr %04x, free to %04x, Cmd %02x\n",
1927 __func__, (u16)cur_rx,
1928 RTL_R16(RxBufAddr), RTL_R16(RxBufPtr), RTL_R8(ChipCmd));
1929
1930 while (netif_running(dev) && received < budget &&
1931 (RTL_R8 (ChipCmd) & RxBufEmpty) == 0) {
1932 u32 ring_offset = cur_rx % RX_BUF_LEN;
1933 u32 rx_status;
1934 unsigned int pkt_size;
1935 struct sk_buff *skb;
1936
1937 rmb();
1938
1939
1940 rx_status = le32_to_cpu (*(__le32 *) (rx_ring + ring_offset));
1941 rx_size = rx_status >> 16;
1942 pkt_size = rx_size - 4;
1943
1944 netif_dbg(tp, rx_status, dev, "%s() status %04x, size %04x, cur %04x\n",
1945 __func__, rx_status, rx_size, cur_rx);
1946#if RTL8139_DEBUG > 2
1947 print_hex_dump(KERN_DEBUG, "Frame contents: ",
1948 DUMP_PREFIX_OFFSET, 16, 1,
1949 &rx_ring[ring_offset], 70, true);
1950#endif
1951
1952
1953
1954
1955
1956 if (unlikely(rx_size == 0xfff0)) {
1957 if (!tp->fifo_copy_timeout)
1958 tp->fifo_copy_timeout = jiffies + 2;
1959 else if (time_after(jiffies, tp->fifo_copy_timeout)) {
1960 netdev_dbg(dev, "hung FIFO. Reset\n");
1961 rx_size = 0;
1962 goto no_early_rx;
1963 }
1964 netif_dbg(tp, intr, dev, "fifo copy in progress\n");
1965 tp->xstats.early_rx++;
1966 break;
1967 }
1968
1969no_early_rx:
1970 tp->fifo_copy_timeout = 0;
1971
1972
1973
1974
1975
1976
1977 if (unlikely((rx_size > (MAX_ETH_FRAME_SIZE+4)) ||
1978 (rx_size < 8) ||
1979 (!(rx_status & RxStatusOK)))) {
1980 rtl8139_rx_err (rx_status, dev, tp, ioaddr);
1981 received = -1;
1982 goto out;
1983 }
1984
1985
1986
1987
1988 skb = netdev_alloc_skb_ip_align(dev, pkt_size);
1989 if (likely(skb)) {
1990#if RX_BUF_IDX == 3
1991 wrap_copy(skb, rx_ring, ring_offset+4, pkt_size);
1992#else
1993 skb_copy_to_linear_data (skb, &rx_ring[ring_offset + 4], pkt_size);
1994#endif
1995 skb_put (skb, pkt_size);
1996
1997 skb->protocol = eth_type_trans (skb, dev);
1998
1999 dev->stats.rx_bytes += pkt_size;
2000 dev->stats.rx_packets++;
2001
2002 netif_receive_skb (skb);
2003 } else {
2004 if (net_ratelimit())
2005 netdev_warn(dev, "Memory squeeze, dropping packet\n");
2006 dev->stats.rx_dropped++;
2007 }
2008 received++;
2009
2010 cur_rx = (cur_rx + rx_size + 4 + 3) & ~3;
2011 RTL_W16 (RxBufPtr, (u16) (cur_rx - 16));
2012
2013 rtl8139_isr_ack(tp);
2014 }
2015
2016 if (unlikely(!received || rx_size == 0xfff0))
2017 rtl8139_isr_ack(tp);
2018
2019 netdev_dbg(dev, "Done %s(), current %04x BufAddr %04x, free to %04x, Cmd %02x\n",
2020 __func__, cur_rx,
2021 RTL_R16(RxBufAddr), RTL_R16(RxBufPtr), RTL_R8(ChipCmd));
2022
2023 tp->cur_rx = cur_rx;
2024
2025
2026
2027
2028
2029 if (tp->fifo_copy_timeout)
2030 received = budget;
2031
2032out:
2033 return received;
2034}
2035
2036
2037static void rtl8139_weird_interrupt (struct net_device *dev,
2038 struct rtl8139_private *tp,
2039 void __iomem *ioaddr,
2040 int status, int link_changed)
2041{
2042 netdev_dbg(dev, "Abnormal interrupt, status %08x\n", status);
2043
2044 assert (dev != NULL);
2045 assert (tp != NULL);
2046 assert (ioaddr != NULL);
2047
2048
2049 dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
2050 RTL_W32 (RxMissed, 0);
2051
2052 if ((status & RxUnderrun) && link_changed &&
2053 (tp->drv_flags & HAS_LNK_CHNG)) {
2054 rtl_check_media(dev, 0);
2055 status &= ~RxUnderrun;
2056 }
2057
2058 if (status & (RxUnderrun | RxErr))
2059 dev->stats.rx_errors++;
2060
2061 if (status & PCSTimeout)
2062 dev->stats.rx_length_errors++;
2063 if (status & RxUnderrun)
2064 dev->stats.rx_fifo_errors++;
2065 if (status & PCIErr) {
2066 u16 pci_cmd_status;
2067 pci_read_config_word (tp->pci_dev, PCI_STATUS, &pci_cmd_status);
2068 pci_write_config_word (tp->pci_dev, PCI_STATUS, pci_cmd_status);
2069
2070 netdev_err(dev, "PCI Bus error %04x\n", pci_cmd_status);
2071 }
2072}
2073
2074static int rtl8139_poll(struct napi_struct *napi, int budget)
2075{
2076 struct rtl8139_private *tp = container_of(napi, struct rtl8139_private, napi);
2077 struct net_device *dev = tp->dev;
2078 void __iomem *ioaddr = tp->mmio_addr;
2079 int work_done;
2080
2081 spin_lock(&tp->rx_lock);
2082 work_done = 0;
2083 if (likely(RTL_R16(IntrStatus) & RxAckBits))
2084 work_done += rtl8139_rx(dev, tp, budget);
2085
2086 if (work_done < budget) {
2087 unsigned long flags;
2088
2089
2090
2091
2092 spin_lock_irqsave(&tp->lock, flags);
2093 __napi_complete(napi);
2094 RTL_W16_F(IntrMask, rtl8139_intr_mask);
2095 spin_unlock_irqrestore(&tp->lock, flags);
2096 }
2097 spin_unlock(&tp->rx_lock);
2098
2099 return work_done;
2100}
2101
2102
2103
2104static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance)
2105{
2106 struct net_device *dev = (struct net_device *) dev_instance;
2107 struct rtl8139_private *tp = netdev_priv(dev);
2108 void __iomem *ioaddr = tp->mmio_addr;
2109 u16 status, ackstat;
2110 int link_changed = 0;
2111 int handled = 0;
2112
2113 spin_lock (&tp->lock);
2114 status = RTL_R16 (IntrStatus);
2115
2116
2117 if (unlikely((status & rtl8139_intr_mask) == 0))
2118 goto out;
2119
2120 handled = 1;
2121
2122
2123 if (unlikely(status == 0xFFFF))
2124 goto out;
2125
2126
2127 if (unlikely(!netif_running(dev))) {
2128 RTL_W16 (IntrMask, 0);
2129 goto out;
2130 }
2131
2132
2133
2134 if (unlikely(status & RxUnderrun))
2135 link_changed = RTL_R16 (CSCR) & CSCR_LinkChangeBit;
2136
2137 ackstat = status & ~(RxAckBits | TxErr);
2138 if (ackstat)
2139 RTL_W16 (IntrStatus, ackstat);
2140
2141
2142
2143 if (status & RxAckBits){
2144 if (napi_schedule_prep(&tp->napi)) {
2145 RTL_W16_F (IntrMask, rtl8139_norx_intr_mask);
2146 __napi_schedule(&tp->napi);
2147 }
2148 }
2149
2150
2151 if (unlikely(status & (PCIErr | PCSTimeout | RxUnderrun | RxErr)))
2152 rtl8139_weird_interrupt (dev, tp, ioaddr,
2153 status, link_changed);
2154
2155 if (status & (TxOK | TxErr)) {
2156 rtl8139_tx_interrupt (dev, tp, ioaddr);
2157 if (status & TxErr)
2158 RTL_W16 (IntrStatus, TxErr);
2159 }
2160 out:
2161 spin_unlock (&tp->lock);
2162
2163 netdev_dbg(dev, "exiting interrupt, intr_status=%#4.4x\n",
2164 RTL_R16(IntrStatus));
2165 return IRQ_RETVAL(handled);
2166}
2167
2168#ifdef CONFIG_NET_POLL_CONTROLLER
2169
2170
2171
2172
2173static void rtl8139_poll_controller(struct net_device *dev)
2174{
2175 disable_irq(dev->irq);
2176 rtl8139_interrupt(dev->irq, dev);
2177 enable_irq(dev->irq);
2178}
2179#endif
2180
2181static int rtl8139_set_mac_address(struct net_device *dev, void *p)
2182{
2183 struct rtl8139_private *tp = netdev_priv(dev);
2184 void __iomem *ioaddr = tp->mmio_addr;
2185 struct sockaddr *addr = p;
2186
2187 if (!is_valid_ether_addr(addr->sa_data))
2188 return -EADDRNOTAVAIL;
2189
2190 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
2191
2192 spin_lock_irq(&tp->lock);
2193
2194 RTL_W8_F(Cfg9346, Cfg9346_Unlock);
2195 RTL_W32_F(MAC0 + 0, cpu_to_le32 (*(u32 *) (dev->dev_addr + 0)));
2196 RTL_W32_F(MAC0 + 4, cpu_to_le32 (*(u32 *) (dev->dev_addr + 4)));
2197 RTL_W8_F(Cfg9346, Cfg9346_Lock);
2198
2199 spin_unlock_irq(&tp->lock);
2200
2201 return 0;
2202}
2203
2204static int rtl8139_close (struct net_device *dev)
2205{
2206 struct rtl8139_private *tp = netdev_priv(dev);
2207 void __iomem *ioaddr = tp->mmio_addr;
2208 unsigned long flags;
2209
2210 netif_stop_queue(dev);
2211 napi_disable(&tp->napi);
2212
2213 netif_dbg(tp, ifdown, dev, "Shutting down ethercard, status was 0x%04x\n",
2214 RTL_R16(IntrStatus));
2215
2216 spin_lock_irqsave (&tp->lock, flags);
2217
2218
2219 RTL_W8 (ChipCmd, 0);
2220
2221
2222 RTL_W16 (IntrMask, 0);
2223
2224
2225 dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
2226 RTL_W32 (RxMissed, 0);
2227
2228 spin_unlock_irqrestore (&tp->lock, flags);
2229
2230 free_irq (dev->irq, dev);
2231
2232 rtl8139_tx_clear (tp);
2233
2234 dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
2235 tp->rx_ring, tp->rx_ring_dma);
2236 dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
2237 tp->tx_bufs, tp->tx_bufs_dma);
2238 tp->rx_ring = NULL;
2239 tp->tx_bufs = NULL;
2240
2241
2242 RTL_W8 (Cfg9346, Cfg9346_Unlock);
2243
2244 if (rtl_chip_info[tp->chipset].flags & HasHltClk)
2245 RTL_W8 (HltClk, 'H');
2246
2247 return 0;
2248}
2249
2250
2251
2252
2253
2254static void rtl8139_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2255{
2256 struct rtl8139_private *tp = netdev_priv(dev);
2257 void __iomem *ioaddr = tp->mmio_addr;
2258
2259 spin_lock_irq(&tp->lock);
2260 if (rtl_chip_info[tp->chipset].flags & HasLWake) {
2261 u8 cfg3 = RTL_R8 (Config3);
2262 u8 cfg5 = RTL_R8 (Config5);
2263
2264 wol->supported = WAKE_PHY | WAKE_MAGIC
2265 | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST;
2266
2267 wol->wolopts = 0;
2268 if (cfg3 & Cfg3_LinkUp)
2269 wol->wolopts |= WAKE_PHY;
2270 if (cfg3 & Cfg3_Magic)
2271 wol->wolopts |= WAKE_MAGIC;
2272
2273
2274 if (cfg5 & Cfg5_UWF)
2275 wol->wolopts |= WAKE_UCAST;
2276 if (cfg5 & Cfg5_MWF)
2277 wol->wolopts |= WAKE_MCAST;
2278 if (cfg5 & Cfg5_BWF)
2279 wol->wolopts |= WAKE_BCAST;
2280 }
2281 spin_unlock_irq(&tp->lock);
2282}
2283
2284
2285
2286
2287
2288static int rtl8139_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2289{
2290 struct rtl8139_private *tp = netdev_priv(dev);
2291 void __iomem *ioaddr = tp->mmio_addr;
2292 u32 support;
2293 u8 cfg3, cfg5;
2294
2295 support = ((rtl_chip_info[tp->chipset].flags & HasLWake)
2296 ? (WAKE_PHY | WAKE_MAGIC
2297 | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST)
2298 : 0);
2299 if (wol->wolopts & ~support)
2300 return -EINVAL;
2301
2302 spin_lock_irq(&tp->lock);
2303 cfg3 = RTL_R8 (Config3) & ~(Cfg3_LinkUp | Cfg3_Magic);
2304 if (wol->wolopts & WAKE_PHY)
2305 cfg3 |= Cfg3_LinkUp;
2306 if (wol->wolopts & WAKE_MAGIC)
2307 cfg3 |= Cfg3_Magic;
2308 RTL_W8 (Cfg9346, Cfg9346_Unlock);
2309 RTL_W8 (Config3, cfg3);
2310 RTL_W8 (Cfg9346, Cfg9346_Lock);
2311
2312 cfg5 = RTL_R8 (Config5) & ~(Cfg5_UWF | Cfg5_MWF | Cfg5_BWF);
2313
2314
2315
2316 if (wol->wolopts & WAKE_UCAST)
2317 cfg5 |= Cfg5_UWF;
2318 if (wol->wolopts & WAKE_MCAST)
2319 cfg5 |= Cfg5_MWF;
2320 if (wol->wolopts & WAKE_BCAST)
2321 cfg5 |= Cfg5_BWF;
2322 RTL_W8 (Config5, cfg5);
2323 spin_unlock_irq(&tp->lock);
2324
2325 return 0;
2326}
2327
2328static void rtl8139_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
2329{
2330 struct rtl8139_private *tp = netdev_priv(dev);
2331 strcpy(info->driver, DRV_NAME);
2332 strcpy(info->version, DRV_VERSION);
2333 strcpy(info->bus_info, pci_name(tp->pci_dev));
2334 info->regdump_len = tp->regs_len;
2335}
2336
2337static int rtl8139_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
2338{
2339 struct rtl8139_private *tp = netdev_priv(dev);
2340 spin_lock_irq(&tp->lock);
2341 mii_ethtool_gset(&tp->mii, cmd);
2342 spin_unlock_irq(&tp->lock);
2343 return 0;
2344}
2345
2346static int rtl8139_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
2347{
2348 struct rtl8139_private *tp = netdev_priv(dev);
2349 int rc;
2350 spin_lock_irq(&tp->lock);
2351 rc = mii_ethtool_sset(&tp->mii, cmd);
2352 spin_unlock_irq(&tp->lock);
2353 return rc;
2354}
2355
2356static int rtl8139_nway_reset(struct net_device *dev)
2357{
2358 struct rtl8139_private *tp = netdev_priv(dev);
2359 return mii_nway_restart(&tp->mii);
2360}
2361
2362static u32 rtl8139_get_link(struct net_device *dev)
2363{
2364 struct rtl8139_private *tp = netdev_priv(dev);
2365 return mii_link_ok(&tp->mii);
2366}
2367
2368static u32 rtl8139_get_msglevel(struct net_device *dev)
2369{
2370 struct rtl8139_private *tp = netdev_priv(dev);
2371 return tp->msg_enable;
2372}
2373
2374static void rtl8139_set_msglevel(struct net_device *dev, u32 datum)
2375{
2376 struct rtl8139_private *tp = netdev_priv(dev);
2377 tp->msg_enable = datum;
2378}
2379
2380static int rtl8139_get_regs_len(struct net_device *dev)
2381{
2382 struct rtl8139_private *tp;
2383
2384 if (use_io)
2385 return 0;
2386 tp = netdev_priv(dev);
2387 return tp->regs_len;
2388}
2389
2390static void rtl8139_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *regbuf)
2391{
2392 struct rtl8139_private *tp;
2393
2394
2395 if (use_io)
2396 return;
2397 tp = netdev_priv(dev);
2398
2399 regs->version = RTL_REGS_VER;
2400
2401 spin_lock_irq(&tp->lock);
2402 memcpy_fromio(regbuf, tp->mmio_addr, regs->len);
2403 spin_unlock_irq(&tp->lock);
2404}
2405
2406static int rtl8139_get_sset_count(struct net_device *dev, int sset)
2407{
2408 switch (sset) {
2409 case ETH_SS_STATS:
2410 return RTL_NUM_STATS;
2411 default:
2412 return -EOPNOTSUPP;
2413 }
2414}
2415
2416static void rtl8139_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data)
2417{
2418 struct rtl8139_private *tp = netdev_priv(dev);
2419
2420 data[0] = tp->xstats.early_rx;
2421 data[1] = tp->xstats.tx_buf_mapped;
2422 data[2] = tp->xstats.tx_timeouts;
2423 data[3] = tp->xstats.rx_lost_in_ring;
2424}
2425
2426static void rtl8139_get_strings(struct net_device *dev, u32 stringset, u8 *data)
2427{
2428 memcpy(data, ethtool_stats_keys, sizeof(ethtool_stats_keys));
2429}
2430
2431static const struct ethtool_ops rtl8139_ethtool_ops = {
2432 .get_drvinfo = rtl8139_get_drvinfo,
2433 .get_settings = rtl8139_get_settings,
2434 .set_settings = rtl8139_set_settings,
2435 .get_regs_len = rtl8139_get_regs_len,
2436 .get_regs = rtl8139_get_regs,
2437 .nway_reset = rtl8139_nway_reset,
2438 .get_link = rtl8139_get_link,
2439 .get_msglevel = rtl8139_get_msglevel,
2440 .set_msglevel = rtl8139_set_msglevel,
2441 .get_wol = rtl8139_get_wol,
2442 .set_wol = rtl8139_set_wol,
2443 .get_strings = rtl8139_get_strings,
2444 .get_sset_count = rtl8139_get_sset_count,
2445 .get_ethtool_stats = rtl8139_get_ethtool_stats,
2446};
2447
2448static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
2449{
2450 struct rtl8139_private *tp = netdev_priv(dev);
2451 int rc;
2452
2453 if (!netif_running(dev))
2454 return -EINVAL;
2455
2456 spin_lock_irq(&tp->lock);
2457 rc = generic_mii_ioctl(&tp->mii, if_mii(rq), cmd, NULL);
2458 spin_unlock_irq(&tp->lock);
2459
2460 return rc;
2461}
2462
2463
2464static struct net_device_stats *rtl8139_get_stats (struct net_device *dev)
2465{
2466 struct rtl8139_private *tp = netdev_priv(dev);
2467 void __iomem *ioaddr = tp->mmio_addr;
2468 unsigned long flags;
2469
2470 if (netif_running(dev)) {
2471 spin_lock_irqsave (&tp->lock, flags);
2472 dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
2473 RTL_W32 (RxMissed, 0);
2474 spin_unlock_irqrestore (&tp->lock, flags);
2475 }
2476
2477 return &dev->stats;
2478}
2479
2480
2481
2482
2483static void __set_rx_mode (struct net_device *dev)
2484{
2485 struct rtl8139_private *tp = netdev_priv(dev);
2486 void __iomem *ioaddr = tp->mmio_addr;
2487 u32 mc_filter[2];
2488 int rx_mode;
2489 u32 tmp;
2490
2491 netdev_dbg(dev, "rtl8139_set_rx_mode(%04x) done -- Rx config %08x\n",
2492 dev->flags, RTL_R32(RxConfig));
2493
2494
2495 if (dev->flags & IFF_PROMISC) {
2496 rx_mode =
2497 AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
2498 AcceptAllPhys;
2499 mc_filter[1] = mc_filter[0] = 0xffffffff;
2500 } else if ((netdev_mc_count(dev) > multicast_filter_limit) ||
2501 (dev->flags & IFF_ALLMULTI)) {
2502
2503 rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
2504 mc_filter[1] = mc_filter[0] = 0xffffffff;
2505 } else {
2506 struct netdev_hw_addr *ha;
2507 rx_mode = AcceptBroadcast | AcceptMyPhys;
2508 mc_filter[1] = mc_filter[0] = 0;
2509 netdev_for_each_mc_addr(ha, dev) {
2510 int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
2511
2512 mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
2513 rx_mode |= AcceptMulticast;
2514 }
2515 }
2516
2517
2518 tmp = rtl8139_rx_config | rx_mode;
2519 if (tp->rx_config != tmp) {
2520 RTL_W32_F (RxConfig, tmp);
2521 tp->rx_config = tmp;
2522 }
2523 RTL_W32_F (MAR0 + 0, mc_filter[0]);
2524 RTL_W32_F (MAR0 + 4, mc_filter[1]);
2525}
2526
2527static void rtl8139_set_rx_mode (struct net_device *dev)
2528{
2529 unsigned long flags;
2530 struct rtl8139_private *tp = netdev_priv(dev);
2531
2532 spin_lock_irqsave (&tp->lock, flags);
2533 __set_rx_mode(dev);
2534 spin_unlock_irqrestore (&tp->lock, flags);
2535}
2536
2537#ifdef CONFIG_PM
2538
2539static int rtl8139_suspend (struct pci_dev *pdev, pm_message_t state)
2540{
2541 struct net_device *dev = pci_get_drvdata (pdev);
2542 struct rtl8139_private *tp = netdev_priv(dev);
2543 void __iomem *ioaddr = tp->mmio_addr;
2544 unsigned long flags;
2545
2546 pci_save_state (pdev);
2547
2548 if (!netif_running (dev))
2549 return 0;
2550
2551 netif_device_detach (dev);
2552
2553 spin_lock_irqsave (&tp->lock, flags);
2554
2555
2556 RTL_W16 (IntrMask, 0);
2557 RTL_W8 (ChipCmd, 0);
2558
2559
2560 dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
2561 RTL_W32 (RxMissed, 0);
2562
2563 spin_unlock_irqrestore (&tp->lock, flags);
2564
2565 pci_set_power_state (pdev, PCI_D3hot);
2566
2567 return 0;
2568}
2569
2570
2571static int rtl8139_resume (struct pci_dev *pdev)
2572{
2573 struct net_device *dev = pci_get_drvdata (pdev);
2574
2575 pci_restore_state (pdev);
2576 if (!netif_running (dev))
2577 return 0;
2578 pci_set_power_state (pdev, PCI_D0);
2579 rtl8139_init_ring (dev);
2580 rtl8139_hw_start (dev);
2581 netif_device_attach (dev);
2582 return 0;
2583}
2584
2585#endif
2586
2587
2588static struct pci_driver rtl8139_pci_driver = {
2589 .name = DRV_NAME,
2590 .id_table = rtl8139_pci_tbl,
2591 .probe = rtl8139_init_one,
2592 .remove = __devexit_p(rtl8139_remove_one),
2593#ifdef CONFIG_PM
2594 .suspend = rtl8139_suspend,
2595 .resume = rtl8139_resume,
2596#endif
2597};
2598
2599
2600static int __init rtl8139_init_module (void)
2601{
2602
2603
2604
2605#ifdef MODULE
2606 pr_info(RTL8139_DRIVER_NAME "\n");
2607#endif
2608
2609 return pci_register_driver(&rtl8139_pci_driver);
2610}
2611
2612
2613static void __exit rtl8139_cleanup_module (void)
2614{
2615 pci_unregister_driver (&rtl8139_pci_driver);
2616}
2617
2618
2619module_init(rtl8139_init_module);
2620module_exit(rtl8139_cleanup_module);
2621