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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
151
152#include <linux/module.h>
153#include <linux/moduleparam.h>
154#include <linux/kernel.h>
155#include <linux/types.h>
156#include <linux/sched.h>
157#include <linux/slab.h>
158#include <linux/delay.h>
159#include <linux/init.h>
160#include <linux/pci.h>
161#include <linux/dma-mapping.h>
162#include <linux/dmapool.h>
163#include <linux/netdevice.h>
164#include <linux/etherdevice.h>
165#include <linux/mii.h>
166#include <linux/if_vlan.h>
167#include <linux/skbuff.h>
168#include <linux/ethtool.h>
169#include <linux/string.h>
170#include <linux/firmware.h>
171#include <linux/rtnetlink.h>
172#include <asm/unaligned.h>
173
174
175#define DRV_NAME "e100"
176#define DRV_EXT "-NAPI"
177#define DRV_VERSION "3.5.24-k2"DRV_EXT
178#define DRV_DESCRIPTION "Intel(R) PRO/100 Network Driver"
179#define DRV_COPYRIGHT "Copyright(c) 1999-2006 Intel Corporation"
180
181#define E100_WATCHDOG_PERIOD (2 * HZ)
182#define E100_NAPI_WEIGHT 16
183
184#define FIRMWARE_D101M "e100/d101m_ucode.bin"
185#define FIRMWARE_D101S "e100/d101s_ucode.bin"
186#define FIRMWARE_D102E "e100/d102e_ucode.bin"
187
188MODULE_DESCRIPTION(DRV_DESCRIPTION);
189MODULE_AUTHOR(DRV_COPYRIGHT);
190MODULE_LICENSE("GPL");
191MODULE_VERSION(DRV_VERSION);
192MODULE_FIRMWARE(FIRMWARE_D101M);
193MODULE_FIRMWARE(FIRMWARE_D101S);
194MODULE_FIRMWARE(FIRMWARE_D102E);
195
196static int debug = 3;
197static int eeprom_bad_csum_allow = 0;
198static int use_io = 0;
199module_param(debug, int, 0);
200module_param(eeprom_bad_csum_allow, int, 0);
201module_param(use_io, int, 0);
202MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
203MODULE_PARM_DESC(eeprom_bad_csum_allow, "Allow bad eeprom checksums");
204MODULE_PARM_DESC(use_io, "Force use of i/o access mode");
205
206#define INTEL_8255X_ETHERNET_DEVICE(device_id, ich) {\
207 PCI_VENDOR_ID_INTEL, device_id, PCI_ANY_ID, PCI_ANY_ID, \
208 PCI_CLASS_NETWORK_ETHERNET << 8, 0xFFFF00, ich }
209static DEFINE_PCI_DEVICE_TABLE(e100_id_table) = {
210 INTEL_8255X_ETHERNET_DEVICE(0x1029, 0),
211 INTEL_8255X_ETHERNET_DEVICE(0x1030, 0),
212 INTEL_8255X_ETHERNET_DEVICE(0x1031, 3),
213 INTEL_8255X_ETHERNET_DEVICE(0x1032, 3),
214 INTEL_8255X_ETHERNET_DEVICE(0x1033, 3),
215 INTEL_8255X_ETHERNET_DEVICE(0x1034, 3),
216 INTEL_8255X_ETHERNET_DEVICE(0x1038, 3),
217 INTEL_8255X_ETHERNET_DEVICE(0x1039, 4),
218 INTEL_8255X_ETHERNET_DEVICE(0x103A, 4),
219 INTEL_8255X_ETHERNET_DEVICE(0x103B, 4),
220 INTEL_8255X_ETHERNET_DEVICE(0x103C, 4),
221 INTEL_8255X_ETHERNET_DEVICE(0x103D, 4),
222 INTEL_8255X_ETHERNET_DEVICE(0x103E, 4),
223 INTEL_8255X_ETHERNET_DEVICE(0x1050, 5),
224 INTEL_8255X_ETHERNET_DEVICE(0x1051, 5),
225 INTEL_8255X_ETHERNET_DEVICE(0x1052, 5),
226 INTEL_8255X_ETHERNET_DEVICE(0x1053, 5),
227 INTEL_8255X_ETHERNET_DEVICE(0x1054, 5),
228 INTEL_8255X_ETHERNET_DEVICE(0x1055, 5),
229 INTEL_8255X_ETHERNET_DEVICE(0x1056, 5),
230 INTEL_8255X_ETHERNET_DEVICE(0x1057, 5),
231 INTEL_8255X_ETHERNET_DEVICE(0x1059, 0),
232 INTEL_8255X_ETHERNET_DEVICE(0x1064, 6),
233 INTEL_8255X_ETHERNET_DEVICE(0x1065, 6),
234 INTEL_8255X_ETHERNET_DEVICE(0x1066, 6),
235 INTEL_8255X_ETHERNET_DEVICE(0x1067, 6),
236 INTEL_8255X_ETHERNET_DEVICE(0x1068, 6),
237 INTEL_8255X_ETHERNET_DEVICE(0x1069, 6),
238 INTEL_8255X_ETHERNET_DEVICE(0x106A, 6),
239 INTEL_8255X_ETHERNET_DEVICE(0x106B, 6),
240 INTEL_8255X_ETHERNET_DEVICE(0x1091, 7),
241 INTEL_8255X_ETHERNET_DEVICE(0x1092, 7),
242 INTEL_8255X_ETHERNET_DEVICE(0x1093, 7),
243 INTEL_8255X_ETHERNET_DEVICE(0x1094, 7),
244 INTEL_8255X_ETHERNET_DEVICE(0x1095, 7),
245 INTEL_8255X_ETHERNET_DEVICE(0x10fe, 7),
246 INTEL_8255X_ETHERNET_DEVICE(0x1209, 0),
247 INTEL_8255X_ETHERNET_DEVICE(0x1229, 0),
248 INTEL_8255X_ETHERNET_DEVICE(0x2449, 2),
249 INTEL_8255X_ETHERNET_DEVICE(0x2459, 2),
250 INTEL_8255X_ETHERNET_DEVICE(0x245D, 2),
251 INTEL_8255X_ETHERNET_DEVICE(0x27DC, 7),
252 { 0, }
253};
254MODULE_DEVICE_TABLE(pci, e100_id_table);
255
256enum mac {
257 mac_82557_D100_A = 0,
258 mac_82557_D100_B = 1,
259 mac_82557_D100_C = 2,
260 mac_82558_D101_A4 = 4,
261 mac_82558_D101_B0 = 5,
262 mac_82559_D101M = 8,
263 mac_82559_D101S = 9,
264 mac_82550_D102 = 12,
265 mac_82550_D102_C = 13,
266 mac_82551_E = 14,
267 mac_82551_F = 15,
268 mac_82551_10 = 16,
269 mac_unknown = 0xFF,
270};
271
272enum phy {
273 phy_100a = 0x000003E0,
274 phy_100c = 0x035002A8,
275 phy_82555_tx = 0x015002A8,
276 phy_nsc_tx = 0x5C002000,
277 phy_82562_et = 0x033002A8,
278 phy_82562_em = 0x032002A8,
279 phy_82562_ek = 0x031002A8,
280 phy_82562_eh = 0x017002A8,
281 phy_82552_v = 0xd061004d,
282 phy_unknown = 0xFFFFFFFF,
283};
284
285
286struct csr {
287 struct {
288 u8 status;
289 u8 stat_ack;
290 u8 cmd_lo;
291 u8 cmd_hi;
292 u32 gen_ptr;
293 } scb;
294 u32 port;
295 u16 flash_ctrl;
296 u8 eeprom_ctrl_lo;
297 u8 eeprom_ctrl_hi;
298 u32 mdi_ctrl;
299 u32 rx_dma_count;
300};
301
302enum scb_status {
303 rus_no_res = 0x08,
304 rus_ready = 0x10,
305 rus_mask = 0x3C,
306};
307
308enum ru_state {
309 RU_SUSPENDED = 0,
310 RU_RUNNING = 1,
311 RU_UNINITIALIZED = -1,
312};
313
314enum scb_stat_ack {
315 stat_ack_not_ours = 0x00,
316 stat_ack_sw_gen = 0x04,
317 stat_ack_rnr = 0x10,
318 stat_ack_cu_idle = 0x20,
319 stat_ack_frame_rx = 0x40,
320 stat_ack_cu_cmd_done = 0x80,
321 stat_ack_not_present = 0xFF,
322 stat_ack_rx = (stat_ack_sw_gen | stat_ack_rnr | stat_ack_frame_rx),
323 stat_ack_tx = (stat_ack_cu_idle | stat_ack_cu_cmd_done),
324};
325
326enum scb_cmd_hi {
327 irq_mask_none = 0x00,
328 irq_mask_all = 0x01,
329 irq_sw_gen = 0x02,
330};
331
332enum scb_cmd_lo {
333 cuc_nop = 0x00,
334 ruc_start = 0x01,
335 ruc_load_base = 0x06,
336 cuc_start = 0x10,
337 cuc_resume = 0x20,
338 cuc_dump_addr = 0x40,
339 cuc_dump_stats = 0x50,
340 cuc_load_base = 0x60,
341 cuc_dump_reset = 0x70,
342};
343
344enum cuc_dump {
345 cuc_dump_complete = 0x0000A005,
346 cuc_dump_reset_complete = 0x0000A007,
347};
348
349enum port {
350 software_reset = 0x0000,
351 selftest = 0x0001,
352 selective_reset = 0x0002,
353};
354
355enum eeprom_ctrl_lo {
356 eesk = 0x01,
357 eecs = 0x02,
358 eedi = 0x04,
359 eedo = 0x08,
360};
361
362enum mdi_ctrl {
363 mdi_write = 0x04000000,
364 mdi_read = 0x08000000,
365 mdi_ready = 0x10000000,
366};
367
368enum eeprom_op {
369 op_write = 0x05,
370 op_read = 0x06,
371 op_ewds = 0x10,
372 op_ewen = 0x13,
373};
374
375enum eeprom_offsets {
376 eeprom_cnfg_mdix = 0x03,
377 eeprom_phy_iface = 0x06,
378 eeprom_id = 0x0A,
379 eeprom_config_asf = 0x0D,
380 eeprom_smbus_addr = 0x90,
381};
382
383enum eeprom_cnfg_mdix {
384 eeprom_mdix_enabled = 0x0080,
385};
386
387enum eeprom_phy_iface {
388 NoSuchPhy = 0,
389 I82553AB,
390 I82553C,
391 I82503,
392 DP83840,
393 S80C240,
394 S80C24,
395 I82555,
396 DP83840A = 10,
397};
398
399enum eeprom_id {
400 eeprom_id_wol = 0x0020,
401};
402
403enum eeprom_config_asf {
404 eeprom_asf = 0x8000,
405 eeprom_gcl = 0x4000,
406};
407
408enum cb_status {
409 cb_complete = 0x8000,
410 cb_ok = 0x2000,
411};
412
413enum cb_command {
414 cb_nop = 0x0000,
415 cb_iaaddr = 0x0001,
416 cb_config = 0x0002,
417 cb_multi = 0x0003,
418 cb_tx = 0x0004,
419 cb_ucode = 0x0005,
420 cb_dump = 0x0006,
421 cb_tx_sf = 0x0008,
422 cb_cid = 0x1f00,
423 cb_i = 0x2000,
424 cb_s = 0x4000,
425 cb_el = 0x8000,
426};
427
428struct rfd {
429 __le16 status;
430 __le16 command;
431 __le32 link;
432 __le32 rbd;
433 __le16 actual_size;
434 __le16 size;
435};
436
437struct rx {
438 struct rx *next, *prev;
439 struct sk_buff *skb;
440 dma_addr_t dma_addr;
441};
442
443#if defined(__BIG_ENDIAN_BITFIELD)
444#define X(a,b) b,a
445#else
446#define X(a,b) a,b
447#endif
448struct config {
449 u8 X(byte_count:6, pad0:2);
450 u8 X(X(rx_fifo_limit:4, tx_fifo_limit:3), pad1:1);
451 u8 adaptive_ifs;
452 u8 X(X(X(X(mwi_enable:1, type_enable:1), read_align_enable:1),
453 term_write_cache_line:1), pad3:4);
454 u8 X(rx_dma_max_count:7, pad4:1);
455 u8 X(tx_dma_max_count:7, dma_max_count_enable:1);
456 u8 X(X(X(X(X(X(X(late_scb_update:1, direct_rx_dma:1),
457 tno_intr:1), cna_intr:1), standard_tcb:1), standard_stat_counter:1),
458 rx_discard_overruns:1), rx_save_bad_frames:1);
459 u8 X(X(X(X(X(rx_discard_short_frames:1, tx_underrun_retry:2),
460 pad7:2), rx_extended_rfd:1), tx_two_frames_in_fifo:1),
461 tx_dynamic_tbd:1);
462 u8 X(X(mii_mode:1, pad8:6), csma_disabled:1);
463 u8 X(X(X(X(X(rx_tcpudp_checksum:1, pad9:3), vlan_arp_tco:1),
464 link_status_wake:1), arp_wake:1), mcmatch_wake:1);
465 u8 X(X(X(pad10:3, no_source_addr_insertion:1), preamble_length:2),
466 loopback:2);
467 u8 X(linear_priority:3, pad11:5);
468 u8 X(X(linear_priority_mode:1, pad12:3), ifs:4);
469 u8 ip_addr_lo;
470 u8 ip_addr_hi;
471 u8 X(X(X(X(X(X(X(promiscuous_mode:1, broadcast_disabled:1),
472 wait_after_win:1), pad15_1:1), ignore_ul_bit:1), crc_16_bit:1),
473 pad15_2:1), crs_or_cdt:1);
474 u8 fc_delay_lo;
475 u8 fc_delay_hi;
476 u8 X(X(X(X(X(rx_stripping:1, tx_padding:1), rx_crc_transfer:1),
477 rx_long_ok:1), fc_priority_threshold:3), pad18:1);
478 u8 X(X(X(X(X(X(X(addr_wake:1, magic_packet_disable:1),
479 fc_disable:1), fc_restop:1), fc_restart:1), fc_reject:1),
480 full_duplex_force:1), full_duplex_pin:1);
481 u8 X(X(X(pad20_1:5, fc_priority_location:1), multi_ia:1), pad20_2:1);
482 u8 X(X(pad21_1:3, multicast_all:1), pad21_2:4);
483 u8 X(X(rx_d102_mode:1, rx_vlan_drop:1), pad22:6);
484 u8 pad_d102[9];
485};
486
487#define E100_MAX_MULTICAST_ADDRS 64
488struct multi {
489 __le16 count;
490 u8 addr[E100_MAX_MULTICAST_ADDRS * ETH_ALEN + 2];
491};
492
493
494#define UCODE_SIZE 134
495struct cb {
496 __le16 status;
497 __le16 command;
498 __le32 link;
499 union {
500 u8 iaaddr[ETH_ALEN];
501 __le32 ucode[UCODE_SIZE];
502 struct config config;
503 struct multi multi;
504 struct {
505 u32 tbd_array;
506 u16 tcb_byte_count;
507 u8 threshold;
508 u8 tbd_count;
509 struct {
510 __le32 buf_addr;
511 __le16 size;
512 u16 eol;
513 } tbd;
514 } tcb;
515 __le32 dump_buffer_addr;
516 } u;
517 struct cb *next, *prev;
518 dma_addr_t dma_addr;
519 struct sk_buff *skb;
520};
521
522enum loopback {
523 lb_none = 0, lb_mac = 1, lb_phy = 3,
524};
525
526struct stats {
527 __le32 tx_good_frames, tx_max_collisions, tx_late_collisions,
528 tx_underruns, tx_lost_crs, tx_deferred, tx_single_collisions,
529 tx_multiple_collisions, tx_total_collisions;
530 __le32 rx_good_frames, rx_crc_errors, rx_alignment_errors,
531 rx_resource_errors, rx_overrun_errors, rx_cdt_errors,
532 rx_short_frame_errors;
533 __le32 fc_xmt_pause, fc_rcv_pause, fc_rcv_unsupported;
534 __le16 xmt_tco_frames, rcv_tco_frames;
535 __le32 complete;
536};
537
538struct mem {
539 struct {
540 u32 signature;
541 u32 result;
542 } selftest;
543 struct stats stats;
544 u8 dump_buf[596];
545};
546
547struct param_range {
548 u32 min;
549 u32 max;
550 u32 count;
551};
552
553struct params {
554 struct param_range rfds;
555 struct param_range cbs;
556};
557
558struct nic {
559
560 u32 msg_enable ____cacheline_aligned;
561 struct net_device *netdev;
562 struct pci_dev *pdev;
563 u16 (*mdio_ctrl)(struct nic *nic, u32 addr, u32 dir, u32 reg, u16 data);
564
565 struct rx *rxs ____cacheline_aligned;
566 struct rx *rx_to_use;
567 struct rx *rx_to_clean;
568 struct rfd blank_rfd;
569 enum ru_state ru_running;
570
571 spinlock_t cb_lock ____cacheline_aligned;
572 spinlock_t cmd_lock;
573 struct csr __iomem *csr;
574 enum scb_cmd_lo cuc_cmd;
575 unsigned int cbs_avail;
576 struct napi_struct napi;
577 struct cb *cbs;
578 struct cb *cb_to_use;
579 struct cb *cb_to_send;
580 struct cb *cb_to_clean;
581 __le16 tx_command;
582
583
584 enum {
585 ich = (1 << 0),
586 promiscuous = (1 << 1),
587 multicast_all = (1 << 2),
588 wol_magic = (1 << 3),
589 ich_10h_workaround = (1 << 4),
590 } flags ____cacheline_aligned;
591
592 enum mac mac;
593 enum phy phy;
594 struct params params;
595 struct timer_list watchdog;
596 struct mii_if_info mii;
597 struct work_struct tx_timeout_task;
598 enum loopback loopback;
599
600 struct mem *mem;
601 dma_addr_t dma_addr;
602
603 struct pci_pool *cbs_pool;
604 dma_addr_t cbs_dma_addr;
605 u8 adaptive_ifs;
606 u8 tx_threshold;
607 u32 tx_frames;
608 u32 tx_collisions;
609 u32 tx_deferred;
610 u32 tx_single_collisions;
611 u32 tx_multiple_collisions;
612 u32 tx_fc_pause;
613 u32 tx_tco_frames;
614
615 u32 rx_fc_pause;
616 u32 rx_fc_unsupported;
617 u32 rx_tco_frames;
618 u32 rx_over_length_errors;
619
620 u16 eeprom_wc;
621 __le16 eeprom[256];
622 spinlock_t mdio_lock;
623 const struct firmware *fw;
624};
625
626static inline void e100_write_flush(struct nic *nic)
627{
628
629
630 (void)ioread8(&nic->csr->scb.status);
631}
632
633static void e100_enable_irq(struct nic *nic)
634{
635 unsigned long flags;
636
637 spin_lock_irqsave(&nic->cmd_lock, flags);
638 iowrite8(irq_mask_none, &nic->csr->scb.cmd_hi);
639 e100_write_flush(nic);
640 spin_unlock_irqrestore(&nic->cmd_lock, flags);
641}
642
643static void e100_disable_irq(struct nic *nic)
644{
645 unsigned long flags;
646
647 spin_lock_irqsave(&nic->cmd_lock, flags);
648 iowrite8(irq_mask_all, &nic->csr->scb.cmd_hi);
649 e100_write_flush(nic);
650 spin_unlock_irqrestore(&nic->cmd_lock, flags);
651}
652
653static void e100_hw_reset(struct nic *nic)
654{
655
656
657 iowrite32(selective_reset, &nic->csr->port);
658 e100_write_flush(nic); udelay(20);
659
660
661 iowrite32(software_reset, &nic->csr->port);
662 e100_write_flush(nic); udelay(20);
663
664
665 e100_disable_irq(nic);
666}
667
668static int e100_self_test(struct nic *nic)
669{
670 u32 dma_addr = nic->dma_addr + offsetof(struct mem, selftest);
671
672
673
674
675 nic->mem->selftest.signature = 0;
676 nic->mem->selftest.result = 0xFFFFFFFF;
677
678 iowrite32(selftest | dma_addr, &nic->csr->port);
679 e100_write_flush(nic);
680
681 msleep(10);
682
683
684 e100_disable_irq(nic);
685
686
687 if (nic->mem->selftest.result != 0) {
688 netif_err(nic, hw, nic->netdev,
689 "Self-test failed: result=0x%08X\n",
690 nic->mem->selftest.result);
691 return -ETIMEDOUT;
692 }
693 if (nic->mem->selftest.signature == 0) {
694 netif_err(nic, hw, nic->netdev, "Self-test failed: timed out\n");
695 return -ETIMEDOUT;
696 }
697
698 return 0;
699}
700
701static void e100_eeprom_write(struct nic *nic, u16 addr_len, u16 addr, __le16 data)
702{
703 u32 cmd_addr_data[3];
704 u8 ctrl;
705 int i, j;
706
707
708 cmd_addr_data[0] = op_ewen << (addr_len - 2);
709 cmd_addr_data[1] = (((op_write << addr_len) | addr) << 16) |
710 le16_to_cpu(data);
711 cmd_addr_data[2] = op_ewds << (addr_len - 2);
712
713
714 for (j = 0; j < 3; j++) {
715
716
717 iowrite8(eecs | eesk, &nic->csr->eeprom_ctrl_lo);
718 e100_write_flush(nic); udelay(4);
719
720 for (i = 31; i >= 0; i--) {
721 ctrl = (cmd_addr_data[j] & (1 << i)) ?
722 eecs | eedi : eecs;
723 iowrite8(ctrl, &nic->csr->eeprom_ctrl_lo);
724 e100_write_flush(nic); udelay(4);
725
726 iowrite8(ctrl | eesk, &nic->csr->eeprom_ctrl_lo);
727 e100_write_flush(nic); udelay(4);
728 }
729
730 msleep(10);
731
732
733 iowrite8(0, &nic->csr->eeprom_ctrl_lo);
734 e100_write_flush(nic); udelay(4);
735 }
736};
737
738
739static __le16 e100_eeprom_read(struct nic *nic, u16 *addr_len, u16 addr)
740{
741 u32 cmd_addr_data;
742 u16 data = 0;
743 u8 ctrl;
744 int i;
745
746 cmd_addr_data = ((op_read << *addr_len) | addr) << 16;
747
748
749 iowrite8(eecs | eesk, &nic->csr->eeprom_ctrl_lo);
750 e100_write_flush(nic); udelay(4);
751
752
753 for (i = 31; i >= 0; i--) {
754 ctrl = (cmd_addr_data & (1 << i)) ? eecs | eedi : eecs;
755 iowrite8(ctrl, &nic->csr->eeprom_ctrl_lo);
756 e100_write_flush(nic); udelay(4);
757
758 iowrite8(ctrl | eesk, &nic->csr->eeprom_ctrl_lo);
759 e100_write_flush(nic); udelay(4);
760
761
762
763 ctrl = ioread8(&nic->csr->eeprom_ctrl_lo);
764 if (!(ctrl & eedo) && i > 16) {
765 *addr_len -= (i - 16);
766 i = 17;
767 }
768
769 data = (data << 1) | (ctrl & eedo ? 1 : 0);
770 }
771
772
773 iowrite8(0, &nic->csr->eeprom_ctrl_lo);
774 e100_write_flush(nic); udelay(4);
775
776 return cpu_to_le16(data);
777};
778
779
780static int e100_eeprom_load(struct nic *nic)
781{
782 u16 addr, addr_len = 8, checksum = 0;
783
784
785 e100_eeprom_read(nic, &addr_len, 0);
786 nic->eeprom_wc = 1 << addr_len;
787
788 for (addr = 0; addr < nic->eeprom_wc; addr++) {
789 nic->eeprom[addr] = e100_eeprom_read(nic, &addr_len, addr);
790 if (addr < nic->eeprom_wc - 1)
791 checksum += le16_to_cpu(nic->eeprom[addr]);
792 }
793
794
795
796 if (cpu_to_le16(0xBABA - checksum) != nic->eeprom[nic->eeprom_wc - 1]) {
797 netif_err(nic, probe, nic->netdev, "EEPROM corrupted\n");
798 if (!eeprom_bad_csum_allow)
799 return -EAGAIN;
800 }
801
802 return 0;
803}
804
805
806static int e100_eeprom_save(struct nic *nic, u16 start, u16 count)
807{
808 u16 addr, addr_len = 8, checksum = 0;
809
810
811 e100_eeprom_read(nic, &addr_len, 0);
812 nic->eeprom_wc = 1 << addr_len;
813
814 if (start + count >= nic->eeprom_wc)
815 return -EINVAL;
816
817 for (addr = start; addr < start + count; addr++)
818 e100_eeprom_write(nic, addr_len, addr, nic->eeprom[addr]);
819
820
821
822 for (addr = 0; addr < nic->eeprom_wc - 1; addr++)
823 checksum += le16_to_cpu(nic->eeprom[addr]);
824 nic->eeprom[nic->eeprom_wc - 1] = cpu_to_le16(0xBABA - checksum);
825 e100_eeprom_write(nic, addr_len, nic->eeprom_wc - 1,
826 nic->eeprom[nic->eeprom_wc - 1]);
827
828 return 0;
829}
830
831#define E100_WAIT_SCB_TIMEOUT 20000
832#define E100_WAIT_SCB_FAST 20
833static int e100_exec_cmd(struct nic *nic, u8 cmd, dma_addr_t dma_addr)
834{
835 unsigned long flags;
836 unsigned int i;
837 int err = 0;
838
839 spin_lock_irqsave(&nic->cmd_lock, flags);
840
841
842 for (i = 0; i < E100_WAIT_SCB_TIMEOUT; i++) {
843 if (likely(!ioread8(&nic->csr->scb.cmd_lo)))
844 break;
845 cpu_relax();
846 if (unlikely(i > E100_WAIT_SCB_FAST))
847 udelay(5);
848 }
849 if (unlikely(i == E100_WAIT_SCB_TIMEOUT)) {
850 err = -EAGAIN;
851 goto err_unlock;
852 }
853
854 if (unlikely(cmd != cuc_resume))
855 iowrite32(dma_addr, &nic->csr->scb.gen_ptr);
856 iowrite8(cmd, &nic->csr->scb.cmd_lo);
857
858err_unlock:
859 spin_unlock_irqrestore(&nic->cmd_lock, flags);
860
861 return err;
862}
863
864static int e100_exec_cb(struct nic *nic, struct sk_buff *skb,
865 void (*cb_prepare)(struct nic *, struct cb *, struct sk_buff *))
866{
867 struct cb *cb;
868 unsigned long flags;
869 int err = 0;
870
871 spin_lock_irqsave(&nic->cb_lock, flags);
872
873 if (unlikely(!nic->cbs_avail)) {
874 err = -ENOMEM;
875 goto err_unlock;
876 }
877
878 cb = nic->cb_to_use;
879 nic->cb_to_use = cb->next;
880 nic->cbs_avail--;
881 cb->skb = skb;
882
883 if (unlikely(!nic->cbs_avail))
884 err = -ENOSPC;
885
886 cb_prepare(nic, cb, skb);
887
888
889
890 cb->command |= cpu_to_le16(cb_s);
891 wmb();
892 cb->prev->command &= cpu_to_le16(~cb_s);
893
894 while (nic->cb_to_send != nic->cb_to_use) {
895 if (unlikely(e100_exec_cmd(nic, nic->cuc_cmd,
896 nic->cb_to_send->dma_addr))) {
897
898
899
900
901
902 if (err == -ENOSPC) {
903
904 schedule_work(&nic->tx_timeout_task);
905 }
906 break;
907 } else {
908 nic->cuc_cmd = cuc_resume;
909 nic->cb_to_send = nic->cb_to_send->next;
910 }
911 }
912
913err_unlock:
914 spin_unlock_irqrestore(&nic->cb_lock, flags);
915
916 return err;
917}
918
919static int mdio_read(struct net_device *netdev, int addr, int reg)
920{
921 struct nic *nic = netdev_priv(netdev);
922 return nic->mdio_ctrl(nic, addr, mdi_read, reg, 0);
923}
924
925static void mdio_write(struct net_device *netdev, int addr, int reg, int data)
926{
927 struct nic *nic = netdev_priv(netdev);
928
929 nic->mdio_ctrl(nic, addr, mdi_write, reg, data);
930}
931
932
933static u16 mdio_ctrl_hw(struct nic *nic, u32 addr, u32 dir, u32 reg, u16 data)
934{
935 u32 data_out = 0;
936 unsigned int i;
937 unsigned long flags;
938
939
940
941
942
943
944
945
946 spin_lock_irqsave(&nic->mdio_lock, flags);
947 for (i = 100; i; --i) {
948 if (ioread32(&nic->csr->mdi_ctrl) & mdi_ready)
949 break;
950 udelay(20);
951 }
952 if (unlikely(!i)) {
953 netdev_err(nic->netdev, "e100.mdio_ctrl won't go Ready\n");
954 spin_unlock_irqrestore(&nic->mdio_lock, flags);
955 return 0;
956 }
957 iowrite32((reg << 16) | (addr << 21) | dir | data, &nic->csr->mdi_ctrl);
958
959 for (i = 0; i < 100; i++) {
960 udelay(20);
961 if ((data_out = ioread32(&nic->csr->mdi_ctrl)) & mdi_ready)
962 break;
963 }
964 spin_unlock_irqrestore(&nic->mdio_lock, flags);
965 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
966 "%s:addr=%d, reg=%d, data_in=0x%04X, data_out=0x%04X\n",
967 dir == mdi_read ? "READ" : "WRITE",
968 addr, reg, data, data_out);
969 return (u16)data_out;
970}
971
972
973static u16 mdio_ctrl_phy_82552_v(struct nic *nic,
974 u32 addr,
975 u32 dir,
976 u32 reg,
977 u16 data)
978{
979 if ((reg == MII_BMCR) && (dir == mdi_write)) {
980 if (data & (BMCR_ANRESTART | BMCR_ANENABLE)) {
981 u16 advert = mdio_read(nic->netdev, nic->mii.phy_id,
982 MII_ADVERTISE);
983
984
985
986
987
988 if (advert & ADVERTISE_100FULL)
989 data |= BMCR_SPEED100 | BMCR_FULLDPLX;
990 else if (advert & ADVERTISE_100HALF)
991 data |= BMCR_SPEED100;
992 }
993 }
994 return mdio_ctrl_hw(nic, addr, dir, reg, data);
995}
996
997
998
999
1000
1001
1002
1003static u16 mdio_ctrl_phy_mii_emulated(struct nic *nic,
1004 u32 addr,
1005 u32 dir,
1006 u32 reg,
1007 u16 data)
1008{
1009
1010
1011
1012
1013 if (dir == mdi_read) {
1014 switch (reg) {
1015 case MII_BMCR:
1016
1017 return BMCR_ANENABLE |
1018 BMCR_FULLDPLX;
1019 case MII_BMSR:
1020 return BMSR_LSTATUS |
1021 BMSR_ANEGCAPABLE |
1022 BMSR_10FULL;
1023 case MII_ADVERTISE:
1024
1025 return ADVERTISE_10HALF |
1026 ADVERTISE_10FULL;
1027 default:
1028 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1029 "%s:addr=%d, reg=%d, data=0x%04X: unimplemented emulation!\n",
1030 dir == mdi_read ? "READ" : "WRITE",
1031 addr, reg, data);
1032 return 0xFFFF;
1033 }
1034 } else {
1035 switch (reg) {
1036 default:
1037 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1038 "%s:addr=%d, reg=%d, data=0x%04X: unimplemented emulation!\n",
1039 dir == mdi_read ? "READ" : "WRITE",
1040 addr, reg, data);
1041 return 0xFFFF;
1042 }
1043 }
1044}
1045static inline int e100_phy_supports_mii(struct nic *nic)
1046{
1047
1048
1049
1050 return (nic->mdio_ctrl != mdio_ctrl_phy_mii_emulated);
1051}
1052
1053static void e100_get_defaults(struct nic *nic)
1054{
1055 struct param_range rfds = { .min = 16, .max = 256, .count = 256 };
1056 struct param_range cbs = { .min = 64, .max = 256, .count = 128 };
1057
1058
1059 nic->mac = (nic->flags & ich) ? mac_82559_D101M : nic->pdev->revision;
1060 if (nic->mac == mac_unknown)
1061 nic->mac = mac_82557_D100_A;
1062
1063 nic->params.rfds = rfds;
1064 nic->params.cbs = cbs;
1065
1066
1067 nic->tx_threshold = 0xE0;
1068
1069
1070 nic->tx_command = cpu_to_le16(cb_tx | cb_tx_sf |
1071 ((nic->mac >= mac_82558_D101_A4) ? cb_cid : cb_i));
1072
1073
1074 nic->blank_rfd.command = 0;
1075 nic->blank_rfd.rbd = cpu_to_le32(0xFFFFFFFF);
1076 nic->blank_rfd.size = cpu_to_le16(VLAN_ETH_FRAME_LEN);
1077
1078
1079 nic->mii.phy_id_mask = 0x1F;
1080 nic->mii.reg_num_mask = 0x1F;
1081 nic->mii.dev = nic->netdev;
1082 nic->mii.mdio_read = mdio_read;
1083 nic->mii.mdio_write = mdio_write;
1084}
1085
1086static void e100_configure(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1087{
1088 struct config *config = &cb->u.config;
1089 u8 *c = (u8 *)config;
1090
1091 cb->command = cpu_to_le16(cb_config);
1092
1093 memset(config, 0, sizeof(struct config));
1094
1095 config->byte_count = 0x16;
1096 config->rx_fifo_limit = 0x8;
1097 config->direct_rx_dma = 0x1;
1098 config->standard_tcb = 0x1;
1099 config->standard_stat_counter = 0x1;
1100 config->rx_discard_short_frames = 0x1;
1101 config->tx_underrun_retry = 0x3;
1102 if (e100_phy_supports_mii(nic))
1103 config->mii_mode = 1;
1104 config->pad10 = 0x6;
1105 config->no_source_addr_insertion = 0x1;
1106 config->preamble_length = 0x2;
1107 config->ifs = 0x6;
1108 config->ip_addr_hi = 0xF2;
1109 config->pad15_1 = 0x1;
1110 config->pad15_2 = 0x1;
1111 config->crs_or_cdt = 0x0;
1112 config->fc_delay_hi = 0x40;
1113 config->tx_padding = 0x1;
1114 config->fc_priority_threshold = 0x7;
1115 config->pad18 = 0x1;
1116 config->full_duplex_pin = 0x1;
1117 config->pad20_1 = 0x1F;
1118 config->fc_priority_location = 0x1;
1119 config->pad21_1 = 0x5;
1120
1121 config->adaptive_ifs = nic->adaptive_ifs;
1122 config->loopback = nic->loopback;
1123
1124 if (nic->mii.force_media && nic->mii.full_duplex)
1125 config->full_duplex_force = 0x1;
1126
1127 if (nic->flags & promiscuous || nic->loopback) {
1128 config->rx_save_bad_frames = 0x1;
1129 config->rx_discard_short_frames = 0x0;
1130 config->promiscuous_mode = 0x1;
1131 }
1132
1133 if (nic->flags & multicast_all)
1134 config->multicast_all = 0x1;
1135
1136
1137 if (netif_running(nic->netdev) || !(nic->flags & wol_magic))
1138 config->magic_packet_disable = 0x1;
1139
1140 if (nic->mac >= mac_82558_D101_A4) {
1141 config->fc_disable = 0x1;
1142 config->mwi_enable = 0x1;
1143 config->standard_tcb = 0x0;
1144 config->rx_long_ok = 0x1;
1145 if (nic->mac >= mac_82559_D101M) {
1146 config->tno_intr = 0x1;
1147
1148 if (nic->mac >= mac_82551_10) {
1149 config->byte_count = 0x20;
1150 config->rx_d102_mode = 0x1;
1151 }
1152 } else {
1153 config->standard_stat_counter = 0x0;
1154 }
1155 }
1156
1157 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1158 "[00-07]=%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",
1159 c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]);
1160 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1161 "[08-15]=%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",
1162 c[8], c[9], c[10], c[11], c[12], c[13], c[14], c[15]);
1163 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1164 "[16-23]=%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",
1165 c[16], c[17], c[18], c[19], c[20], c[21], c[22], c[23]);
1166}
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223#define BUNDLESMALL 1
1224#define BUNDLEMAX (u16)6
1225#define INTDELAY (u16)1536
1226
1227
1228static const struct firmware *e100_request_firmware(struct nic *nic)
1229{
1230 const char *fw_name;
1231 const struct firmware *fw = nic->fw;
1232 u8 timer, bundle, min_size;
1233 int err = 0;
1234
1235
1236 if (nic->flags & ich)
1237 return NULL;
1238
1239
1240 if (nic->mac == mac_82559_D101M)
1241 fw_name = FIRMWARE_D101M;
1242 else if (nic->mac == mac_82559_D101S)
1243 fw_name = FIRMWARE_D101S;
1244 else if (nic->mac == mac_82551_F || nic->mac == mac_82551_10)
1245 fw_name = FIRMWARE_D102E;
1246 else
1247 return NULL;
1248
1249
1250
1251
1252
1253
1254 if (!fw)
1255 err = request_firmware(&fw, fw_name, &nic->pdev->dev);
1256
1257 if (err) {
1258 netif_err(nic, probe, nic->netdev,
1259 "Failed to load firmware \"%s\": %d\n",
1260 fw_name, err);
1261 return ERR_PTR(err);
1262 }
1263
1264
1265
1266 if (fw->size != UCODE_SIZE * 4 + 3) {
1267 netif_err(nic, probe, nic->netdev,
1268 "Firmware \"%s\" has wrong size %zu\n",
1269 fw_name, fw->size);
1270 release_firmware(fw);
1271 return ERR_PTR(-EINVAL);
1272 }
1273
1274
1275 timer = fw->data[UCODE_SIZE * 4];
1276 bundle = fw->data[UCODE_SIZE * 4 + 1];
1277 min_size = fw->data[UCODE_SIZE * 4 + 2];
1278
1279 if (timer >= UCODE_SIZE || bundle >= UCODE_SIZE ||
1280 min_size >= UCODE_SIZE) {
1281 netif_err(nic, probe, nic->netdev,
1282 "\"%s\" has bogus offset values (0x%x,0x%x,0x%x)\n",
1283 fw_name, timer, bundle, min_size);
1284 release_firmware(fw);
1285 return ERR_PTR(-EINVAL);
1286 }
1287
1288
1289
1290 nic->fw = fw;
1291 return fw;
1292}
1293
1294static void e100_setup_ucode(struct nic *nic, struct cb *cb,
1295 struct sk_buff *skb)
1296{
1297 const struct firmware *fw = (void *)skb;
1298 u8 timer, bundle, min_size;
1299
1300
1301
1302 cb->skb = NULL;
1303
1304
1305 memcpy(cb->u.ucode, fw->data, UCODE_SIZE * 4);
1306
1307
1308 timer = fw->data[UCODE_SIZE * 4];
1309 bundle = fw->data[UCODE_SIZE * 4 + 1];
1310 min_size = fw->data[UCODE_SIZE * 4 + 2];
1311
1312
1313 cb->u.ucode[timer] &= cpu_to_le32(0xFFFF0000);
1314 cb->u.ucode[timer] |= cpu_to_le32(INTDELAY);
1315 cb->u.ucode[bundle] &= cpu_to_le32(0xFFFF0000);
1316 cb->u.ucode[bundle] |= cpu_to_le32(BUNDLEMAX);
1317 cb->u.ucode[min_size] &= cpu_to_le32(0xFFFF0000);
1318 cb->u.ucode[min_size] |= cpu_to_le32((BUNDLESMALL) ? 0xFFFF : 0xFF80);
1319
1320 cb->command = cpu_to_le16(cb_ucode | cb_el);
1321}
1322
1323static inline int e100_load_ucode_wait(struct nic *nic)
1324{
1325 const struct firmware *fw;
1326 int err = 0, counter = 50;
1327 struct cb *cb = nic->cb_to_clean;
1328
1329 fw = e100_request_firmware(nic);
1330
1331 if (!fw || IS_ERR(fw))
1332 return PTR_ERR(fw);
1333
1334 if ((err = e100_exec_cb(nic, (void *)fw, e100_setup_ucode)))
1335 netif_err(nic, probe, nic->netdev,
1336 "ucode cmd failed with error %d\n", err);
1337
1338
1339 nic->cuc_cmd = cuc_start;
1340
1341
1342 e100_write_flush(nic);
1343 udelay(10);
1344
1345
1346 while (!(cb->status & cpu_to_le16(cb_complete))) {
1347 msleep(10);
1348 if (!--counter) break;
1349 }
1350
1351
1352 iowrite8(~0, &nic->csr->scb.stat_ack);
1353
1354
1355 if (!counter || !(cb->status & cpu_to_le16(cb_ok))) {
1356 netif_err(nic, probe, nic->netdev, "ucode load failed\n");
1357 err = -EPERM;
1358 }
1359
1360 return err;
1361}
1362
1363static void e100_setup_iaaddr(struct nic *nic, struct cb *cb,
1364 struct sk_buff *skb)
1365{
1366 cb->command = cpu_to_le16(cb_iaaddr);
1367 memcpy(cb->u.iaaddr, nic->netdev->dev_addr, ETH_ALEN);
1368}
1369
1370static void e100_dump(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1371{
1372 cb->command = cpu_to_le16(cb_dump);
1373 cb->u.dump_buffer_addr = cpu_to_le32(nic->dma_addr +
1374 offsetof(struct mem, dump_buf));
1375}
1376
1377static int e100_phy_check_without_mii(struct nic *nic)
1378{
1379 u8 phy_type;
1380 int without_mii;
1381
1382 phy_type = (nic->eeprom[eeprom_phy_iface] >> 8) & 0x0f;
1383
1384 switch (phy_type) {
1385 case NoSuchPhy:
1386 case I82503:
1387 case S80C24:
1388
1389
1390
1391
1392
1393
1394 netif_info(nic, probe, nic->netdev,
1395 "found MII-less i82503 or 80c24 or other PHY\n");
1396
1397 nic->mdio_ctrl = mdio_ctrl_phy_mii_emulated;
1398 nic->mii.phy_id = 0;
1399
1400
1401
1402
1403
1404 without_mii = 1;
1405 break;
1406 default:
1407 without_mii = 0;
1408 break;
1409 }
1410 return without_mii;
1411}
1412
1413#define NCONFIG_AUTO_SWITCH 0x0080
1414#define MII_NSC_CONG MII_RESV1
1415#define NSC_CONG_ENABLE 0x0100
1416#define NSC_CONG_TXREADY 0x0400
1417#define ADVERTISE_FC_SUPPORTED 0x0400
1418static int e100_phy_init(struct nic *nic)
1419{
1420 struct net_device *netdev = nic->netdev;
1421 u32 addr;
1422 u16 bmcr, stat, id_lo, id_hi, cong;
1423
1424
1425 for (addr = 0; addr < 32; addr++) {
1426 nic->mii.phy_id = (addr == 0) ? 1 : (addr == 1) ? 0 : addr;
1427 bmcr = mdio_read(netdev, nic->mii.phy_id, MII_BMCR);
1428 stat = mdio_read(netdev, nic->mii.phy_id, MII_BMSR);
1429 stat = mdio_read(netdev, nic->mii.phy_id, MII_BMSR);
1430 if (!((bmcr == 0xFFFF) || ((stat == 0) && (bmcr == 0))))
1431 break;
1432 }
1433 if (addr == 32) {
1434
1435
1436
1437
1438 if (e100_phy_check_without_mii(nic))
1439 return 0;
1440 else {
1441
1442 netif_err(nic, hw, nic->netdev,
1443 "Failed to locate any known PHY, aborting\n");
1444 return -EAGAIN;
1445 }
1446 } else
1447 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1448 "phy_addr = %d\n", nic->mii.phy_id);
1449
1450
1451 id_lo = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID1);
1452 id_hi = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID2);
1453 nic->phy = (u32)id_hi << 16 | (u32)id_lo;
1454 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1455 "phy ID = 0x%08X\n", nic->phy);
1456
1457
1458 for (addr = 0; addr < 32; addr++) {
1459 if (addr != nic->mii.phy_id) {
1460 mdio_write(netdev, addr, MII_BMCR, BMCR_ISOLATE);
1461 } else if (nic->phy != phy_82552_v) {
1462 bmcr = mdio_read(netdev, addr, MII_BMCR);
1463 mdio_write(netdev, addr, MII_BMCR,
1464 bmcr & ~BMCR_ISOLATE);
1465 }
1466 }
1467
1468
1469
1470
1471
1472 if (nic->phy == phy_82552_v)
1473 mdio_write(netdev, nic->mii.phy_id, MII_BMCR,
1474 bmcr & ~BMCR_ISOLATE);
1475
1476
1477#define NCS_PHY_MODEL_MASK 0xFFF0FFFF
1478 if ((nic->phy & NCS_PHY_MODEL_MASK) == phy_nsc_tx) {
1479
1480 cong = mdio_read(netdev, nic->mii.phy_id, MII_NSC_CONG);
1481 cong |= NSC_CONG_TXREADY;
1482 cong &= ~NSC_CONG_ENABLE;
1483 mdio_write(netdev, nic->mii.phy_id, MII_NSC_CONG, cong);
1484 }
1485
1486 if (nic->phy == phy_82552_v) {
1487 u16 advert = mdio_read(netdev, nic->mii.phy_id, MII_ADVERTISE);
1488
1489
1490 nic->mdio_ctrl = mdio_ctrl_phy_82552_v;
1491
1492
1493 advert |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
1494 mdio_write(netdev, nic->mii.phy_id, MII_ADVERTISE, advert);
1495
1496
1497 bmcr = mdio_read(netdev, nic->mii.phy_id, MII_BMCR);
1498 bmcr |= BMCR_RESET;
1499 mdio_write(netdev, nic->mii.phy_id, MII_BMCR, bmcr);
1500 } else if ((nic->mac >= mac_82550_D102) || ((nic->flags & ich) &&
1501 (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000) &&
1502 !(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled))) {
1503
1504 mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG,
1505 nic->mii.force_media ? 0 : NCONFIG_AUTO_SWITCH);
1506 }
1507
1508 return 0;
1509}
1510
1511static int e100_hw_init(struct nic *nic)
1512{
1513 int err = 0;
1514
1515 e100_hw_reset(nic);
1516
1517 netif_err(nic, hw, nic->netdev, "e100_hw_init\n");
1518 if (!in_interrupt() && (err = e100_self_test(nic)))
1519 return err;
1520
1521 if ((err = e100_phy_init(nic)))
1522 return err;
1523 if ((err = e100_exec_cmd(nic, cuc_load_base, 0)))
1524 return err;
1525 if ((err = e100_exec_cmd(nic, ruc_load_base, 0)))
1526 return err;
1527 if ((err = e100_load_ucode_wait(nic)))
1528 return err;
1529 if ((err = e100_exec_cb(nic, NULL, e100_configure)))
1530 return err;
1531 if ((err = e100_exec_cb(nic, NULL, e100_setup_iaaddr)))
1532 return err;
1533 if ((err = e100_exec_cmd(nic, cuc_dump_addr,
1534 nic->dma_addr + offsetof(struct mem, stats))))
1535 return err;
1536 if ((err = e100_exec_cmd(nic, cuc_dump_reset, 0)))
1537 return err;
1538
1539 e100_disable_irq(nic);
1540
1541 return 0;
1542}
1543
1544static void e100_multi(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1545{
1546 struct net_device *netdev = nic->netdev;
1547 struct netdev_hw_addr *ha;
1548 u16 i, count = min(netdev_mc_count(netdev), E100_MAX_MULTICAST_ADDRS);
1549
1550 cb->command = cpu_to_le16(cb_multi);
1551 cb->u.multi.count = cpu_to_le16(count * ETH_ALEN);
1552 i = 0;
1553 netdev_for_each_mc_addr(ha, netdev) {
1554 if (i == count)
1555 break;
1556 memcpy(&cb->u.multi.addr[i++ * ETH_ALEN], &ha->addr,
1557 ETH_ALEN);
1558 }
1559}
1560
1561static void e100_set_multicast_list(struct net_device *netdev)
1562{
1563 struct nic *nic = netdev_priv(netdev);
1564
1565 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1566 "mc_count=%d, flags=0x%04X\n",
1567 netdev_mc_count(netdev), netdev->flags);
1568
1569 if (netdev->flags & IFF_PROMISC)
1570 nic->flags |= promiscuous;
1571 else
1572 nic->flags &= ~promiscuous;
1573
1574 if (netdev->flags & IFF_ALLMULTI ||
1575 netdev_mc_count(netdev) > E100_MAX_MULTICAST_ADDRS)
1576 nic->flags |= multicast_all;
1577 else
1578 nic->flags &= ~multicast_all;
1579
1580 e100_exec_cb(nic, NULL, e100_configure);
1581 e100_exec_cb(nic, NULL, e100_multi);
1582}
1583
1584static void e100_update_stats(struct nic *nic)
1585{
1586 struct net_device *dev = nic->netdev;
1587 struct net_device_stats *ns = &dev->stats;
1588 struct stats *s = &nic->mem->stats;
1589 __le32 *complete = (nic->mac < mac_82558_D101_A4) ? &s->fc_xmt_pause :
1590 (nic->mac < mac_82559_D101M) ? (__le32 *)&s->xmt_tco_frames :
1591 &s->complete;
1592
1593
1594
1595
1596
1597 if (*complete == cpu_to_le32(cuc_dump_reset_complete)) {
1598 *complete = 0;
1599 nic->tx_frames = le32_to_cpu(s->tx_good_frames);
1600 nic->tx_collisions = le32_to_cpu(s->tx_total_collisions);
1601 ns->tx_aborted_errors += le32_to_cpu(s->tx_max_collisions);
1602 ns->tx_window_errors += le32_to_cpu(s->tx_late_collisions);
1603 ns->tx_carrier_errors += le32_to_cpu(s->tx_lost_crs);
1604 ns->tx_fifo_errors += le32_to_cpu(s->tx_underruns);
1605 ns->collisions += nic->tx_collisions;
1606 ns->tx_errors += le32_to_cpu(s->tx_max_collisions) +
1607 le32_to_cpu(s->tx_lost_crs);
1608 ns->rx_length_errors += le32_to_cpu(s->rx_short_frame_errors) +
1609 nic->rx_over_length_errors;
1610 ns->rx_crc_errors += le32_to_cpu(s->rx_crc_errors);
1611 ns->rx_frame_errors += le32_to_cpu(s->rx_alignment_errors);
1612 ns->rx_over_errors += le32_to_cpu(s->rx_overrun_errors);
1613 ns->rx_fifo_errors += le32_to_cpu(s->rx_overrun_errors);
1614 ns->rx_missed_errors += le32_to_cpu(s->rx_resource_errors);
1615 ns->rx_errors += le32_to_cpu(s->rx_crc_errors) +
1616 le32_to_cpu(s->rx_alignment_errors) +
1617 le32_to_cpu(s->rx_short_frame_errors) +
1618 le32_to_cpu(s->rx_cdt_errors);
1619 nic->tx_deferred += le32_to_cpu(s->tx_deferred);
1620 nic->tx_single_collisions +=
1621 le32_to_cpu(s->tx_single_collisions);
1622 nic->tx_multiple_collisions +=
1623 le32_to_cpu(s->tx_multiple_collisions);
1624 if (nic->mac >= mac_82558_D101_A4) {
1625 nic->tx_fc_pause += le32_to_cpu(s->fc_xmt_pause);
1626 nic->rx_fc_pause += le32_to_cpu(s->fc_rcv_pause);
1627 nic->rx_fc_unsupported +=
1628 le32_to_cpu(s->fc_rcv_unsupported);
1629 if (nic->mac >= mac_82559_D101M) {
1630 nic->tx_tco_frames +=
1631 le16_to_cpu(s->xmt_tco_frames);
1632 nic->rx_tco_frames +=
1633 le16_to_cpu(s->rcv_tco_frames);
1634 }
1635 }
1636 }
1637
1638
1639 if (e100_exec_cmd(nic, cuc_dump_reset, 0))
1640 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
1641 "exec cuc_dump_reset failed\n");
1642}
1643
1644static void e100_adjust_adaptive_ifs(struct nic *nic, int speed, int duplex)
1645{
1646
1647
1648
1649 if (duplex == DUPLEX_HALF) {
1650 u32 prev = nic->adaptive_ifs;
1651 u32 min_frames = (speed == SPEED_100) ? 1000 : 100;
1652
1653 if ((nic->tx_frames / 32 < nic->tx_collisions) &&
1654 (nic->tx_frames > min_frames)) {
1655 if (nic->adaptive_ifs < 60)
1656 nic->adaptive_ifs += 5;
1657 } else if (nic->tx_frames < min_frames) {
1658 if (nic->adaptive_ifs >= 5)
1659 nic->adaptive_ifs -= 5;
1660 }
1661 if (nic->adaptive_ifs != prev)
1662 e100_exec_cb(nic, NULL, e100_configure);
1663 }
1664}
1665
1666static void e100_watchdog(unsigned long data)
1667{
1668 struct nic *nic = (struct nic *)data;
1669 struct ethtool_cmd cmd = { .cmd = ETHTOOL_GSET };
1670 u32 speed;
1671
1672 netif_printk(nic, timer, KERN_DEBUG, nic->netdev,
1673 "right now = %ld\n", jiffies);
1674
1675
1676
1677 mii_ethtool_gset(&nic->mii, &cmd);
1678 speed = ethtool_cmd_speed(&cmd);
1679
1680 if (mii_link_ok(&nic->mii) && !netif_carrier_ok(nic->netdev)) {
1681 netdev_info(nic->netdev, "NIC Link is Up %u Mbps %s Duplex\n",
1682 speed == SPEED_100 ? 100 : 10,
1683 cmd.duplex == DUPLEX_FULL ? "Full" : "Half");
1684 } else if (!mii_link_ok(&nic->mii) && netif_carrier_ok(nic->netdev)) {
1685 netdev_info(nic->netdev, "NIC Link is Down\n");
1686 }
1687
1688 mii_check_link(&nic->mii);
1689
1690
1691
1692
1693
1694
1695 spin_lock_irq(&nic->cmd_lock);
1696 iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi);
1697 e100_write_flush(nic);
1698 spin_unlock_irq(&nic->cmd_lock);
1699
1700 e100_update_stats(nic);
1701 e100_adjust_adaptive_ifs(nic, speed, cmd.duplex);
1702
1703 if (nic->mac <= mac_82557_D100_C)
1704
1705 e100_set_multicast_list(nic->netdev);
1706
1707 if (nic->flags & ich && speed == SPEED_10 && cmd.duplex == DUPLEX_HALF)
1708
1709 nic->flags |= ich_10h_workaround;
1710 else
1711 nic->flags &= ~ich_10h_workaround;
1712
1713 mod_timer(&nic->watchdog,
1714 round_jiffies(jiffies + E100_WATCHDOG_PERIOD));
1715}
1716
1717static void e100_xmit_prepare(struct nic *nic, struct cb *cb,
1718 struct sk_buff *skb)
1719{
1720 cb->command = nic->tx_command;
1721
1722 if ((nic->cbs_avail & ~15) == nic->cbs_avail)
1723 cb->command |= cpu_to_le16(cb_i);
1724 cb->u.tcb.tbd_array = cb->dma_addr + offsetof(struct cb, u.tcb.tbd);
1725 cb->u.tcb.tcb_byte_count = 0;
1726 cb->u.tcb.threshold = nic->tx_threshold;
1727 cb->u.tcb.tbd_count = 1;
1728 cb->u.tcb.tbd.buf_addr = cpu_to_le32(pci_map_single(nic->pdev,
1729 skb->data, skb->len, PCI_DMA_TODEVICE));
1730
1731 cb->u.tcb.tbd.size = cpu_to_le16(skb->len);
1732}
1733
1734static netdev_tx_t e100_xmit_frame(struct sk_buff *skb,
1735 struct net_device *netdev)
1736{
1737 struct nic *nic = netdev_priv(netdev);
1738 int err;
1739
1740 if (nic->flags & ich_10h_workaround) {
1741
1742
1743
1744 if (e100_exec_cmd(nic, cuc_nop, 0))
1745 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
1746 "exec cuc_nop failed\n");
1747 udelay(1);
1748 }
1749
1750 err = e100_exec_cb(nic, skb, e100_xmit_prepare);
1751
1752 switch (err) {
1753 case -ENOSPC:
1754
1755 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
1756 "No space for CB\n");
1757 netif_stop_queue(netdev);
1758 break;
1759 case -ENOMEM:
1760
1761 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
1762 "Out of Tx resources, returning skb\n");
1763 netif_stop_queue(netdev);
1764 return NETDEV_TX_BUSY;
1765 }
1766
1767 return NETDEV_TX_OK;
1768}
1769
1770static int e100_tx_clean(struct nic *nic)
1771{
1772 struct net_device *dev = nic->netdev;
1773 struct cb *cb;
1774 int tx_cleaned = 0;
1775
1776 spin_lock(&nic->cb_lock);
1777
1778
1779 for (cb = nic->cb_to_clean;
1780 cb->status & cpu_to_le16(cb_complete);
1781 cb = nic->cb_to_clean = cb->next) {
1782 rmb();
1783 netif_printk(nic, tx_done, KERN_DEBUG, nic->netdev,
1784 "cb[%d]->status = 0x%04X\n",
1785 (int)(((void*)cb - (void*)nic->cbs)/sizeof(struct cb)),
1786 cb->status);
1787
1788 if (likely(cb->skb != NULL)) {
1789 dev->stats.tx_packets++;
1790 dev->stats.tx_bytes += cb->skb->len;
1791
1792 pci_unmap_single(nic->pdev,
1793 le32_to_cpu(cb->u.tcb.tbd.buf_addr),
1794 le16_to_cpu(cb->u.tcb.tbd.size),
1795 PCI_DMA_TODEVICE);
1796 dev_kfree_skb_any(cb->skb);
1797 cb->skb = NULL;
1798 tx_cleaned = 1;
1799 }
1800 cb->status = 0;
1801 nic->cbs_avail++;
1802 }
1803
1804 spin_unlock(&nic->cb_lock);
1805
1806
1807 if (unlikely(tx_cleaned && netif_queue_stopped(nic->netdev)))
1808 netif_wake_queue(nic->netdev);
1809
1810 return tx_cleaned;
1811}
1812
1813static void e100_clean_cbs(struct nic *nic)
1814{
1815 if (nic->cbs) {
1816 while (nic->cbs_avail != nic->params.cbs.count) {
1817 struct cb *cb = nic->cb_to_clean;
1818 if (cb->skb) {
1819 pci_unmap_single(nic->pdev,
1820 le32_to_cpu(cb->u.tcb.tbd.buf_addr),
1821 le16_to_cpu(cb->u.tcb.tbd.size),
1822 PCI_DMA_TODEVICE);
1823 dev_kfree_skb(cb->skb);
1824 }
1825 nic->cb_to_clean = nic->cb_to_clean->next;
1826 nic->cbs_avail++;
1827 }
1828 pci_pool_free(nic->cbs_pool, nic->cbs, nic->cbs_dma_addr);
1829 nic->cbs = NULL;
1830 nic->cbs_avail = 0;
1831 }
1832 nic->cuc_cmd = cuc_start;
1833 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean =
1834 nic->cbs;
1835}
1836
1837static int e100_alloc_cbs(struct nic *nic)
1838{
1839 struct cb *cb;
1840 unsigned int i, count = nic->params.cbs.count;
1841
1842 nic->cuc_cmd = cuc_start;
1843 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = NULL;
1844 nic->cbs_avail = 0;
1845
1846 nic->cbs = pci_pool_alloc(nic->cbs_pool, GFP_KERNEL,
1847 &nic->cbs_dma_addr);
1848 if (!nic->cbs)
1849 return -ENOMEM;
1850 memset(nic->cbs, 0, count * sizeof(struct cb));
1851
1852 for (cb = nic->cbs, i = 0; i < count; cb++, i++) {
1853 cb->next = (i + 1 < count) ? cb + 1 : nic->cbs;
1854 cb->prev = (i == 0) ? nic->cbs + count - 1 : cb - 1;
1855
1856 cb->dma_addr = nic->cbs_dma_addr + i * sizeof(struct cb);
1857 cb->link = cpu_to_le32(nic->cbs_dma_addr +
1858 ((i+1) % count) * sizeof(struct cb));
1859 }
1860
1861 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = nic->cbs;
1862 nic->cbs_avail = count;
1863
1864 return 0;
1865}
1866
1867static inline void e100_start_receiver(struct nic *nic, struct rx *rx)
1868{
1869 if (!nic->rxs) return;
1870 if (RU_SUSPENDED != nic->ru_running) return;
1871
1872
1873 if (!rx) rx = nic->rxs;
1874
1875
1876 if (rx->skb) {
1877 e100_exec_cmd(nic, ruc_start, rx->dma_addr);
1878 nic->ru_running = RU_RUNNING;
1879 }
1880}
1881
1882#define RFD_BUF_LEN (sizeof(struct rfd) + VLAN_ETH_FRAME_LEN)
1883static int e100_rx_alloc_skb(struct nic *nic, struct rx *rx)
1884{
1885 if (!(rx->skb = netdev_alloc_skb_ip_align(nic->netdev, RFD_BUF_LEN)))
1886 return -ENOMEM;
1887
1888
1889 skb_copy_to_linear_data(rx->skb, &nic->blank_rfd, sizeof(struct rfd));
1890 rx->dma_addr = pci_map_single(nic->pdev, rx->skb->data,
1891 RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL);
1892
1893 if (pci_dma_mapping_error(nic->pdev, rx->dma_addr)) {
1894 dev_kfree_skb_any(rx->skb);
1895 rx->skb = NULL;
1896 rx->dma_addr = 0;
1897 return -ENOMEM;
1898 }
1899
1900
1901
1902
1903 if (rx->prev->skb) {
1904 struct rfd *prev_rfd = (struct rfd *)rx->prev->skb->data;
1905 put_unaligned_le32(rx->dma_addr, &prev_rfd->link);
1906 pci_dma_sync_single_for_device(nic->pdev, rx->prev->dma_addr,
1907 sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL);
1908 }
1909
1910 return 0;
1911}
1912
1913static int e100_rx_indicate(struct nic *nic, struct rx *rx,
1914 unsigned int *work_done, unsigned int work_to_do)
1915{
1916 struct net_device *dev = nic->netdev;
1917 struct sk_buff *skb = rx->skb;
1918 struct rfd *rfd = (struct rfd *)skb->data;
1919 u16 rfd_status, actual_size;
1920
1921 if (unlikely(work_done && *work_done >= work_to_do))
1922 return -EAGAIN;
1923
1924
1925 pci_dma_sync_single_for_cpu(nic->pdev, rx->dma_addr,
1926 sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL);
1927 rfd_status = le16_to_cpu(rfd->status);
1928
1929 netif_printk(nic, rx_status, KERN_DEBUG, nic->netdev,
1930 "status=0x%04X\n", rfd_status);
1931 rmb();
1932
1933
1934 if (unlikely(!(rfd_status & cb_complete))) {
1935
1936
1937
1938
1939
1940 if ((le16_to_cpu(rfd->command) & cb_el) &&
1941 (RU_RUNNING == nic->ru_running))
1942
1943 if (ioread8(&nic->csr->scb.status) & rus_no_res)
1944 nic->ru_running = RU_SUSPENDED;
1945 pci_dma_sync_single_for_device(nic->pdev, rx->dma_addr,
1946 sizeof(struct rfd),
1947 PCI_DMA_FROMDEVICE);
1948 return -ENODATA;
1949 }
1950
1951
1952 actual_size = le16_to_cpu(rfd->actual_size) & 0x3FFF;
1953 if (unlikely(actual_size > RFD_BUF_LEN - sizeof(struct rfd)))
1954 actual_size = RFD_BUF_LEN - sizeof(struct rfd);
1955
1956
1957 pci_unmap_single(nic->pdev, rx->dma_addr,
1958 RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL);
1959
1960
1961
1962
1963
1964
1965
1966 if ((le16_to_cpu(rfd->command) & cb_el) &&
1967 (RU_RUNNING == nic->ru_running)) {
1968
1969 if (ioread8(&nic->csr->scb.status) & rus_no_res)
1970 nic->ru_running = RU_SUSPENDED;
1971 }
1972
1973
1974 skb_reserve(skb, sizeof(struct rfd));
1975 skb_put(skb, actual_size);
1976 skb->protocol = eth_type_trans(skb, nic->netdev);
1977
1978 if (unlikely(!(rfd_status & cb_ok))) {
1979
1980 dev_kfree_skb_any(skb);
1981 } else if (actual_size > ETH_DATA_LEN + VLAN_ETH_HLEN) {
1982
1983 nic->rx_over_length_errors++;
1984 dev_kfree_skb_any(skb);
1985 } else {
1986 dev->stats.rx_packets++;
1987 dev->stats.rx_bytes += actual_size;
1988 netif_receive_skb(skb);
1989 if (work_done)
1990 (*work_done)++;
1991 }
1992
1993 rx->skb = NULL;
1994
1995 return 0;
1996}
1997
1998static void e100_rx_clean(struct nic *nic, unsigned int *work_done,
1999 unsigned int work_to_do)
2000{
2001 struct rx *rx;
2002 int restart_required = 0, err = 0;
2003 struct rx *old_before_last_rx, *new_before_last_rx;
2004 struct rfd *old_before_last_rfd, *new_before_last_rfd;
2005
2006
2007 for (rx = nic->rx_to_clean; rx->skb; rx = nic->rx_to_clean = rx->next) {
2008 err = e100_rx_indicate(nic, rx, work_done, work_to_do);
2009
2010 if (-EAGAIN == err || -ENODATA == err)
2011 break;
2012 }
2013
2014
2015
2016
2017
2018
2019
2020
2021 if (-EAGAIN != err && RU_SUSPENDED == nic->ru_running)
2022 restart_required = 1;
2023
2024 old_before_last_rx = nic->rx_to_use->prev->prev;
2025 old_before_last_rfd = (struct rfd *)old_before_last_rx->skb->data;
2026
2027
2028 for (rx = nic->rx_to_use; !rx->skb; rx = nic->rx_to_use = rx->next) {
2029 if (unlikely(e100_rx_alloc_skb(nic, rx)))
2030 break;
2031 }
2032
2033 new_before_last_rx = nic->rx_to_use->prev->prev;
2034 if (new_before_last_rx != old_before_last_rx) {
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044 new_before_last_rfd =
2045 (struct rfd *)new_before_last_rx->skb->data;
2046 new_before_last_rfd->size = 0;
2047 new_before_last_rfd->command |= cpu_to_le16(cb_el);
2048 pci_dma_sync_single_for_device(nic->pdev,
2049 new_before_last_rx->dma_addr, sizeof(struct rfd),
2050 PCI_DMA_BIDIRECTIONAL);
2051
2052
2053
2054
2055 old_before_last_rfd->command &= ~cpu_to_le16(cb_el);
2056 pci_dma_sync_single_for_device(nic->pdev,
2057 old_before_last_rx->dma_addr, sizeof(struct rfd),
2058 PCI_DMA_BIDIRECTIONAL);
2059 old_before_last_rfd->size = cpu_to_le16(VLAN_ETH_FRAME_LEN);
2060 pci_dma_sync_single_for_device(nic->pdev,
2061 old_before_last_rx->dma_addr, sizeof(struct rfd),
2062 PCI_DMA_BIDIRECTIONAL);
2063 }
2064
2065 if (restart_required) {
2066
2067 iowrite8(stat_ack_rnr, &nic->csr->scb.stat_ack);
2068 e100_start_receiver(nic, nic->rx_to_clean);
2069 if (work_done)
2070 (*work_done)++;
2071 }
2072}
2073
2074static void e100_rx_clean_list(struct nic *nic)
2075{
2076 struct rx *rx;
2077 unsigned int i, count = nic->params.rfds.count;
2078
2079 nic->ru_running = RU_UNINITIALIZED;
2080
2081 if (nic->rxs) {
2082 for (rx = nic->rxs, i = 0; i < count; rx++, i++) {
2083 if (rx->skb) {
2084 pci_unmap_single(nic->pdev, rx->dma_addr,
2085 RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL);
2086 dev_kfree_skb(rx->skb);
2087 }
2088 }
2089 kfree(nic->rxs);
2090 nic->rxs = NULL;
2091 }
2092
2093 nic->rx_to_use = nic->rx_to_clean = NULL;
2094}
2095
2096static int e100_rx_alloc_list(struct nic *nic)
2097{
2098 struct rx *rx;
2099 unsigned int i, count = nic->params.rfds.count;
2100 struct rfd *before_last;
2101
2102 nic->rx_to_use = nic->rx_to_clean = NULL;
2103 nic->ru_running = RU_UNINITIALIZED;
2104
2105 if (!(nic->rxs = kcalloc(count, sizeof(struct rx), GFP_ATOMIC)))
2106 return -ENOMEM;
2107
2108 for (rx = nic->rxs, i = 0; i < count; rx++, i++) {
2109 rx->next = (i + 1 < count) ? rx + 1 : nic->rxs;
2110 rx->prev = (i == 0) ? nic->rxs + count - 1 : rx - 1;
2111 if (e100_rx_alloc_skb(nic, rx)) {
2112 e100_rx_clean_list(nic);
2113 return -ENOMEM;
2114 }
2115 }
2116
2117
2118
2119
2120
2121
2122
2123 rx = nic->rxs->prev->prev;
2124 before_last = (struct rfd *)rx->skb->data;
2125 before_last->command |= cpu_to_le16(cb_el);
2126 before_last->size = 0;
2127 pci_dma_sync_single_for_device(nic->pdev, rx->dma_addr,
2128 sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL);
2129
2130 nic->rx_to_use = nic->rx_to_clean = nic->rxs;
2131 nic->ru_running = RU_SUSPENDED;
2132
2133 return 0;
2134}
2135
2136static irqreturn_t e100_intr(int irq, void *dev_id)
2137{
2138 struct net_device *netdev = dev_id;
2139 struct nic *nic = netdev_priv(netdev);
2140 u8 stat_ack = ioread8(&nic->csr->scb.stat_ack);
2141
2142 netif_printk(nic, intr, KERN_DEBUG, nic->netdev,
2143 "stat_ack = 0x%02X\n", stat_ack);
2144
2145 if (stat_ack == stat_ack_not_ours ||
2146 stat_ack == stat_ack_not_present)
2147 return IRQ_NONE;
2148
2149
2150 iowrite8(stat_ack, &nic->csr->scb.stat_ack);
2151
2152
2153 if (stat_ack & stat_ack_rnr)
2154 nic->ru_running = RU_SUSPENDED;
2155
2156 if (likely(napi_schedule_prep(&nic->napi))) {
2157 e100_disable_irq(nic);
2158 __napi_schedule(&nic->napi);
2159 }
2160
2161 return IRQ_HANDLED;
2162}
2163
2164static int e100_poll(struct napi_struct *napi, int budget)
2165{
2166 struct nic *nic = container_of(napi, struct nic, napi);
2167 unsigned int work_done = 0;
2168
2169 e100_rx_clean(nic, &work_done, budget);
2170 e100_tx_clean(nic);
2171
2172
2173 if (work_done < budget) {
2174 napi_complete(napi);
2175 e100_enable_irq(nic);
2176 }
2177
2178 return work_done;
2179}
2180
2181#ifdef CONFIG_NET_POLL_CONTROLLER
2182static void e100_netpoll(struct net_device *netdev)
2183{
2184 struct nic *nic = netdev_priv(netdev);
2185
2186 e100_disable_irq(nic);
2187 e100_intr(nic->pdev->irq, netdev);
2188 e100_tx_clean(nic);
2189 e100_enable_irq(nic);
2190}
2191#endif
2192
2193static int e100_set_mac_address(struct net_device *netdev, void *p)
2194{
2195 struct nic *nic = netdev_priv(netdev);
2196 struct sockaddr *addr = p;
2197
2198 if (!is_valid_ether_addr(addr->sa_data))
2199 return -EADDRNOTAVAIL;
2200
2201 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
2202 e100_exec_cb(nic, NULL, e100_setup_iaaddr);
2203
2204 return 0;
2205}
2206
2207static int e100_change_mtu(struct net_device *netdev, int new_mtu)
2208{
2209 if (new_mtu < ETH_ZLEN || new_mtu > ETH_DATA_LEN)
2210 return -EINVAL;
2211 netdev->mtu = new_mtu;
2212 return 0;
2213}
2214
2215static int e100_asf(struct nic *nic)
2216{
2217
2218 return (nic->pdev->device >= 0x1050) && (nic->pdev->device <= 0x1057) &&
2219 (nic->eeprom[eeprom_config_asf] & eeprom_asf) &&
2220 !(nic->eeprom[eeprom_config_asf] & eeprom_gcl) &&
2221 ((nic->eeprom[eeprom_smbus_addr] & 0xFF) != 0xFE);
2222}
2223
2224static int e100_up(struct nic *nic)
2225{
2226 int err;
2227
2228 if ((err = e100_rx_alloc_list(nic)))
2229 return err;
2230 if ((err = e100_alloc_cbs(nic)))
2231 goto err_rx_clean_list;
2232 if ((err = e100_hw_init(nic)))
2233 goto err_clean_cbs;
2234 e100_set_multicast_list(nic->netdev);
2235 e100_start_receiver(nic, NULL);
2236 mod_timer(&nic->watchdog, jiffies);
2237 if ((err = request_irq(nic->pdev->irq, e100_intr, IRQF_SHARED,
2238 nic->netdev->name, nic->netdev)))
2239 goto err_no_irq;
2240 netif_wake_queue(nic->netdev);
2241 napi_enable(&nic->napi);
2242
2243
2244 e100_enable_irq(nic);
2245 return 0;
2246
2247err_no_irq:
2248 del_timer_sync(&nic->watchdog);
2249err_clean_cbs:
2250 e100_clean_cbs(nic);
2251err_rx_clean_list:
2252 e100_rx_clean_list(nic);
2253 return err;
2254}
2255
2256static void e100_down(struct nic *nic)
2257{
2258
2259 napi_disable(&nic->napi);
2260 netif_stop_queue(nic->netdev);
2261 e100_hw_reset(nic);
2262 free_irq(nic->pdev->irq, nic->netdev);
2263 del_timer_sync(&nic->watchdog);
2264 netif_carrier_off(nic->netdev);
2265 e100_clean_cbs(nic);
2266 e100_rx_clean_list(nic);
2267}
2268
2269static void e100_tx_timeout(struct net_device *netdev)
2270{
2271 struct nic *nic = netdev_priv(netdev);
2272
2273
2274
2275 schedule_work(&nic->tx_timeout_task);
2276}
2277
2278static void e100_tx_timeout_task(struct work_struct *work)
2279{
2280 struct nic *nic = container_of(work, struct nic, tx_timeout_task);
2281 struct net_device *netdev = nic->netdev;
2282
2283 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
2284 "scb.status=0x%02X\n", ioread8(&nic->csr->scb.status));
2285
2286 rtnl_lock();
2287 if (netif_running(netdev)) {
2288 e100_down(netdev_priv(netdev));
2289 e100_up(netdev_priv(netdev));
2290 }
2291 rtnl_unlock();
2292}
2293
2294static int e100_loopback_test(struct nic *nic, enum loopback loopback_mode)
2295{
2296 int err;
2297 struct sk_buff *skb;
2298
2299
2300
2301
2302
2303
2304 if ((err = e100_rx_alloc_list(nic)))
2305 return err;
2306 if ((err = e100_alloc_cbs(nic)))
2307 goto err_clean_rx;
2308
2309
2310 if (nic->flags & ich && loopback_mode == lb_phy)
2311 loopback_mode = lb_mac;
2312
2313 nic->loopback = loopback_mode;
2314 if ((err = e100_hw_init(nic)))
2315 goto err_loopback_none;
2316
2317 if (loopback_mode == lb_phy)
2318 mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR,
2319 BMCR_LOOPBACK);
2320
2321 e100_start_receiver(nic, NULL);
2322
2323 if (!(skb = netdev_alloc_skb(nic->netdev, ETH_DATA_LEN))) {
2324 err = -ENOMEM;
2325 goto err_loopback_none;
2326 }
2327 skb_put(skb, ETH_DATA_LEN);
2328 memset(skb->data, 0xFF, ETH_DATA_LEN);
2329 e100_xmit_frame(skb, nic->netdev);
2330
2331 msleep(10);
2332
2333 pci_dma_sync_single_for_cpu(nic->pdev, nic->rx_to_clean->dma_addr,
2334 RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL);
2335
2336 if (memcmp(nic->rx_to_clean->skb->data + sizeof(struct rfd),
2337 skb->data, ETH_DATA_LEN))
2338 err = -EAGAIN;
2339
2340err_loopback_none:
2341 mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR, 0);
2342 nic->loopback = lb_none;
2343 e100_clean_cbs(nic);
2344 e100_hw_reset(nic);
2345err_clean_rx:
2346 e100_rx_clean_list(nic);
2347 return err;
2348}
2349
2350#define MII_LED_CONTROL 0x1B
2351#define E100_82552_LED_OVERRIDE 0x19
2352#define E100_82552_LED_ON 0x000F
2353#define E100_82552_LED_OFF 0x000A
2354
2355static int e100_get_settings(struct net_device *netdev, struct ethtool_cmd *cmd)
2356{
2357 struct nic *nic = netdev_priv(netdev);
2358 return mii_ethtool_gset(&nic->mii, cmd);
2359}
2360
2361static int e100_set_settings(struct net_device *netdev, struct ethtool_cmd *cmd)
2362{
2363 struct nic *nic = netdev_priv(netdev);
2364 int err;
2365
2366 mdio_write(netdev, nic->mii.phy_id, MII_BMCR, BMCR_RESET);
2367 err = mii_ethtool_sset(&nic->mii, cmd);
2368 e100_exec_cb(nic, NULL, e100_configure);
2369
2370 return err;
2371}
2372
2373static void e100_get_drvinfo(struct net_device *netdev,
2374 struct ethtool_drvinfo *info)
2375{
2376 struct nic *nic = netdev_priv(netdev);
2377 strcpy(info->driver, DRV_NAME);
2378 strcpy(info->version, DRV_VERSION);
2379 strcpy(info->fw_version, "N/A");
2380 strcpy(info->bus_info, pci_name(nic->pdev));
2381}
2382
2383#define E100_PHY_REGS 0x1C
2384static int e100_get_regs_len(struct net_device *netdev)
2385{
2386 struct nic *nic = netdev_priv(netdev);
2387 return 1 + E100_PHY_REGS + sizeof(nic->mem->dump_buf);
2388}
2389
2390static void e100_get_regs(struct net_device *netdev,
2391 struct ethtool_regs *regs, void *p)
2392{
2393 struct nic *nic = netdev_priv(netdev);
2394 u32 *buff = p;
2395 int i;
2396
2397 regs->version = (1 << 24) | nic->pdev->revision;
2398 buff[0] = ioread8(&nic->csr->scb.cmd_hi) << 24 |
2399 ioread8(&nic->csr->scb.cmd_lo) << 16 |
2400 ioread16(&nic->csr->scb.status);
2401 for (i = E100_PHY_REGS; i >= 0; i--)
2402 buff[1 + E100_PHY_REGS - i] =
2403 mdio_read(netdev, nic->mii.phy_id, i);
2404 memset(nic->mem->dump_buf, 0, sizeof(nic->mem->dump_buf));
2405 e100_exec_cb(nic, NULL, e100_dump);
2406 msleep(10);
2407 memcpy(&buff[2 + E100_PHY_REGS], nic->mem->dump_buf,
2408 sizeof(nic->mem->dump_buf));
2409}
2410
2411static void e100_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
2412{
2413 struct nic *nic = netdev_priv(netdev);
2414 wol->supported = (nic->mac >= mac_82558_D101_A4) ? WAKE_MAGIC : 0;
2415 wol->wolopts = (nic->flags & wol_magic) ? WAKE_MAGIC : 0;
2416}
2417
2418static int e100_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
2419{
2420 struct nic *nic = netdev_priv(netdev);
2421
2422 if ((wol->wolopts && wol->wolopts != WAKE_MAGIC) ||
2423 !device_can_wakeup(&nic->pdev->dev))
2424 return -EOPNOTSUPP;
2425
2426 if (wol->wolopts)
2427 nic->flags |= wol_magic;
2428 else
2429 nic->flags &= ~wol_magic;
2430
2431 device_set_wakeup_enable(&nic->pdev->dev, wol->wolopts);
2432
2433 e100_exec_cb(nic, NULL, e100_configure);
2434
2435 return 0;
2436}
2437
2438static u32 e100_get_msglevel(struct net_device *netdev)
2439{
2440 struct nic *nic = netdev_priv(netdev);
2441 return nic->msg_enable;
2442}
2443
2444static void e100_set_msglevel(struct net_device *netdev, u32 value)
2445{
2446 struct nic *nic = netdev_priv(netdev);
2447 nic->msg_enable = value;
2448}
2449
2450static int e100_nway_reset(struct net_device *netdev)
2451{
2452 struct nic *nic = netdev_priv(netdev);
2453 return mii_nway_restart(&nic->mii);
2454}
2455
2456static u32 e100_get_link(struct net_device *netdev)
2457{
2458 struct nic *nic = netdev_priv(netdev);
2459 return mii_link_ok(&nic->mii);
2460}
2461
2462static int e100_get_eeprom_len(struct net_device *netdev)
2463{
2464 struct nic *nic = netdev_priv(netdev);
2465 return nic->eeprom_wc << 1;
2466}
2467
2468#define E100_EEPROM_MAGIC 0x1234
2469static int e100_get_eeprom(struct net_device *netdev,
2470 struct ethtool_eeprom *eeprom, u8 *bytes)
2471{
2472 struct nic *nic = netdev_priv(netdev);
2473
2474 eeprom->magic = E100_EEPROM_MAGIC;
2475 memcpy(bytes, &((u8 *)nic->eeprom)[eeprom->offset], eeprom->len);
2476
2477 return 0;
2478}
2479
2480static int e100_set_eeprom(struct net_device *netdev,
2481 struct ethtool_eeprom *eeprom, u8 *bytes)
2482{
2483 struct nic *nic = netdev_priv(netdev);
2484
2485 if (eeprom->magic != E100_EEPROM_MAGIC)
2486 return -EINVAL;
2487
2488 memcpy(&((u8 *)nic->eeprom)[eeprom->offset], bytes, eeprom->len);
2489
2490 return e100_eeprom_save(nic, eeprom->offset >> 1,
2491 (eeprom->len >> 1) + 1);
2492}
2493
2494static void e100_get_ringparam(struct net_device *netdev,
2495 struct ethtool_ringparam *ring)
2496{
2497 struct nic *nic = netdev_priv(netdev);
2498 struct param_range *rfds = &nic->params.rfds;
2499 struct param_range *cbs = &nic->params.cbs;
2500
2501 ring->rx_max_pending = rfds->max;
2502 ring->tx_max_pending = cbs->max;
2503 ring->rx_mini_max_pending = 0;
2504 ring->rx_jumbo_max_pending = 0;
2505 ring->rx_pending = rfds->count;
2506 ring->tx_pending = cbs->count;
2507 ring->rx_mini_pending = 0;
2508 ring->rx_jumbo_pending = 0;
2509}
2510
2511static int e100_set_ringparam(struct net_device *netdev,
2512 struct ethtool_ringparam *ring)
2513{
2514 struct nic *nic = netdev_priv(netdev);
2515 struct param_range *rfds = &nic->params.rfds;
2516 struct param_range *cbs = &nic->params.cbs;
2517
2518 if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending))
2519 return -EINVAL;
2520
2521 if (netif_running(netdev))
2522 e100_down(nic);
2523 rfds->count = max(ring->rx_pending, rfds->min);
2524 rfds->count = min(rfds->count, rfds->max);
2525 cbs->count = max(ring->tx_pending, cbs->min);
2526 cbs->count = min(cbs->count, cbs->max);
2527 netif_info(nic, drv, nic->netdev, "Ring Param settings: rx: %d, tx %d\n",
2528 rfds->count, cbs->count);
2529 if (netif_running(netdev))
2530 e100_up(nic);
2531
2532 return 0;
2533}
2534
2535static const char e100_gstrings_test[][ETH_GSTRING_LEN] = {
2536 "Link test (on/offline)",
2537 "Eeprom test (on/offline)",
2538 "Self test (offline)",
2539 "Mac loopback (offline)",
2540 "Phy loopback (offline)",
2541};
2542#define E100_TEST_LEN ARRAY_SIZE(e100_gstrings_test)
2543
2544static void e100_diag_test(struct net_device *netdev,
2545 struct ethtool_test *test, u64 *data)
2546{
2547 struct ethtool_cmd cmd;
2548 struct nic *nic = netdev_priv(netdev);
2549 int i, err;
2550
2551 memset(data, 0, E100_TEST_LEN * sizeof(u64));
2552 data[0] = !mii_link_ok(&nic->mii);
2553 data[1] = e100_eeprom_load(nic);
2554 if (test->flags & ETH_TEST_FL_OFFLINE) {
2555
2556
2557 err = mii_ethtool_gset(&nic->mii, &cmd);
2558
2559 if (netif_running(netdev))
2560 e100_down(nic);
2561 data[2] = e100_self_test(nic);
2562 data[3] = e100_loopback_test(nic, lb_mac);
2563 data[4] = e100_loopback_test(nic, lb_phy);
2564
2565
2566 err = mii_ethtool_sset(&nic->mii, &cmd);
2567
2568 if (netif_running(netdev))
2569 e100_up(nic);
2570 }
2571 for (i = 0; i < E100_TEST_LEN; i++)
2572 test->flags |= data[i] ? ETH_TEST_FL_FAILED : 0;
2573
2574 msleep_interruptible(4 * 1000);
2575}
2576
2577static int e100_set_phys_id(struct net_device *netdev,
2578 enum ethtool_phys_id_state state)
2579{
2580 struct nic *nic = netdev_priv(netdev);
2581 enum led_state {
2582 led_on = 0x01,
2583 led_off = 0x04,
2584 led_on_559 = 0x05,
2585 led_on_557 = 0x07,
2586 };
2587 u16 led_reg = (nic->phy == phy_82552_v) ? E100_82552_LED_OVERRIDE :
2588 MII_LED_CONTROL;
2589 u16 leds = 0;
2590
2591 switch (state) {
2592 case ETHTOOL_ID_ACTIVE:
2593 return 2;
2594
2595 case ETHTOOL_ID_ON:
2596 leds = (nic->phy == phy_82552_v) ? E100_82552_LED_ON :
2597 (nic->mac < mac_82559_D101M) ? led_on_557 : led_on_559;
2598 break;
2599
2600 case ETHTOOL_ID_OFF:
2601 leds = (nic->phy == phy_82552_v) ? E100_82552_LED_OFF : led_off;
2602 break;
2603
2604 case ETHTOOL_ID_INACTIVE:
2605 break;
2606 }
2607
2608 mdio_write(netdev, nic->mii.phy_id, led_reg, leds);
2609 return 0;
2610}
2611
2612static const char e100_gstrings_stats[][ETH_GSTRING_LEN] = {
2613 "rx_packets", "tx_packets", "rx_bytes", "tx_bytes", "rx_errors",
2614 "tx_errors", "rx_dropped", "tx_dropped", "multicast", "collisions",
2615 "rx_length_errors", "rx_over_errors", "rx_crc_errors",
2616 "rx_frame_errors", "rx_fifo_errors", "rx_missed_errors",
2617 "tx_aborted_errors", "tx_carrier_errors", "tx_fifo_errors",
2618 "tx_heartbeat_errors", "tx_window_errors",
2619
2620 "tx_deferred", "tx_single_collisions", "tx_multi_collisions",
2621 "tx_flow_control_pause", "rx_flow_control_pause",
2622 "rx_flow_control_unsupported", "tx_tco_packets", "rx_tco_packets",
2623};
2624#define E100_NET_STATS_LEN 21
2625#define E100_STATS_LEN ARRAY_SIZE(e100_gstrings_stats)
2626
2627static int e100_get_sset_count(struct net_device *netdev, int sset)
2628{
2629 switch (sset) {
2630 case ETH_SS_TEST:
2631 return E100_TEST_LEN;
2632 case ETH_SS_STATS:
2633 return E100_STATS_LEN;
2634 default:
2635 return -EOPNOTSUPP;
2636 }
2637}
2638
2639static void e100_get_ethtool_stats(struct net_device *netdev,
2640 struct ethtool_stats *stats, u64 *data)
2641{
2642 struct nic *nic = netdev_priv(netdev);
2643 int i;
2644
2645 for (i = 0; i < E100_NET_STATS_LEN; i++)
2646 data[i] = ((unsigned long *)&netdev->stats)[i];
2647
2648 data[i++] = nic->tx_deferred;
2649 data[i++] = nic->tx_single_collisions;
2650 data[i++] = nic->tx_multiple_collisions;
2651 data[i++] = nic->tx_fc_pause;
2652 data[i++] = nic->rx_fc_pause;
2653 data[i++] = nic->rx_fc_unsupported;
2654 data[i++] = nic->tx_tco_frames;
2655 data[i++] = nic->rx_tco_frames;
2656}
2657
2658static void e100_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
2659{
2660 switch (stringset) {
2661 case ETH_SS_TEST:
2662 memcpy(data, *e100_gstrings_test, sizeof(e100_gstrings_test));
2663 break;
2664 case ETH_SS_STATS:
2665 memcpy(data, *e100_gstrings_stats, sizeof(e100_gstrings_stats));
2666 break;
2667 }
2668}
2669
2670static const struct ethtool_ops e100_ethtool_ops = {
2671 .get_settings = e100_get_settings,
2672 .set_settings = e100_set_settings,
2673 .get_drvinfo = e100_get_drvinfo,
2674 .get_regs_len = e100_get_regs_len,
2675 .get_regs = e100_get_regs,
2676 .get_wol = e100_get_wol,
2677 .set_wol = e100_set_wol,
2678 .get_msglevel = e100_get_msglevel,
2679 .set_msglevel = e100_set_msglevel,
2680 .nway_reset = e100_nway_reset,
2681 .get_link = e100_get_link,
2682 .get_eeprom_len = e100_get_eeprom_len,
2683 .get_eeprom = e100_get_eeprom,
2684 .set_eeprom = e100_set_eeprom,
2685 .get_ringparam = e100_get_ringparam,
2686 .set_ringparam = e100_set_ringparam,
2687 .self_test = e100_diag_test,
2688 .get_strings = e100_get_strings,
2689 .set_phys_id = e100_set_phys_id,
2690 .get_ethtool_stats = e100_get_ethtool_stats,
2691 .get_sset_count = e100_get_sset_count,
2692};
2693
2694static int e100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
2695{
2696 struct nic *nic = netdev_priv(netdev);
2697
2698 return generic_mii_ioctl(&nic->mii, if_mii(ifr), cmd, NULL);
2699}
2700
2701static int e100_alloc(struct nic *nic)
2702{
2703 nic->mem = pci_alloc_consistent(nic->pdev, sizeof(struct mem),
2704 &nic->dma_addr);
2705 return nic->mem ? 0 : -ENOMEM;
2706}
2707
2708static void e100_free(struct nic *nic)
2709{
2710 if (nic->mem) {
2711 pci_free_consistent(nic->pdev, sizeof(struct mem),
2712 nic->mem, nic->dma_addr);
2713 nic->mem = NULL;
2714 }
2715}
2716
2717static int e100_open(struct net_device *netdev)
2718{
2719 struct nic *nic = netdev_priv(netdev);
2720 int err = 0;
2721
2722 netif_carrier_off(netdev);
2723 if ((err = e100_up(nic)))
2724 netif_err(nic, ifup, nic->netdev, "Cannot open interface, aborting\n");
2725 return err;
2726}
2727
2728static int e100_close(struct net_device *netdev)
2729{
2730 e100_down(netdev_priv(netdev));
2731 return 0;
2732}
2733
2734static const struct net_device_ops e100_netdev_ops = {
2735 .ndo_open = e100_open,
2736 .ndo_stop = e100_close,
2737 .ndo_start_xmit = e100_xmit_frame,
2738 .ndo_validate_addr = eth_validate_addr,
2739 .ndo_set_multicast_list = e100_set_multicast_list,
2740 .ndo_set_mac_address = e100_set_mac_address,
2741 .ndo_change_mtu = e100_change_mtu,
2742 .ndo_do_ioctl = e100_do_ioctl,
2743 .ndo_tx_timeout = e100_tx_timeout,
2744#ifdef CONFIG_NET_POLL_CONTROLLER
2745 .ndo_poll_controller = e100_netpoll,
2746#endif
2747};
2748
2749static int __devinit e100_probe(struct pci_dev *pdev,
2750 const struct pci_device_id *ent)
2751{
2752 struct net_device *netdev;
2753 struct nic *nic;
2754 int err;
2755
2756 if (!(netdev = alloc_etherdev(sizeof(struct nic)))) {
2757 if (((1 << debug) - 1) & NETIF_MSG_PROBE)
2758 pr_err("Etherdev alloc failed, aborting\n");
2759 return -ENOMEM;
2760 }
2761
2762 netdev->netdev_ops = &e100_netdev_ops;
2763 SET_ETHTOOL_OPS(netdev, &e100_ethtool_ops);
2764 netdev->watchdog_timeo = E100_WATCHDOG_PERIOD;
2765 strncpy(netdev->name, pci_name(pdev), sizeof(netdev->name) - 1);
2766
2767 nic = netdev_priv(netdev);
2768 netif_napi_add(netdev, &nic->napi, e100_poll, E100_NAPI_WEIGHT);
2769 nic->netdev = netdev;
2770 nic->pdev = pdev;
2771 nic->msg_enable = (1 << debug) - 1;
2772 nic->mdio_ctrl = mdio_ctrl_hw;
2773 pci_set_drvdata(pdev, netdev);
2774
2775 if ((err = pci_enable_device(pdev))) {
2776 netif_err(nic, probe, nic->netdev, "Cannot enable PCI device, aborting\n");
2777 goto err_out_free_dev;
2778 }
2779
2780 if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
2781 netif_err(nic, probe, nic->netdev, "Cannot find proper PCI device base address, aborting\n");
2782 err = -ENODEV;
2783 goto err_out_disable_pdev;
2784 }
2785
2786 if ((err = pci_request_regions(pdev, DRV_NAME))) {
2787 netif_err(nic, probe, nic->netdev, "Cannot obtain PCI resources, aborting\n");
2788 goto err_out_disable_pdev;
2789 }
2790
2791 if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) {
2792 netif_err(nic, probe, nic->netdev, "No usable DMA configuration, aborting\n");
2793 goto err_out_free_res;
2794 }
2795
2796 SET_NETDEV_DEV(netdev, &pdev->dev);
2797
2798 if (use_io)
2799 netif_info(nic, probe, nic->netdev, "using i/o access mode\n");
2800
2801 nic->csr = pci_iomap(pdev, (use_io ? 1 : 0), sizeof(struct csr));
2802 if (!nic->csr) {
2803 netif_err(nic, probe, nic->netdev, "Cannot map device registers, aborting\n");
2804 err = -ENOMEM;
2805 goto err_out_free_res;
2806 }
2807
2808 if (ent->driver_data)
2809 nic->flags |= ich;
2810 else
2811 nic->flags &= ~ich;
2812
2813 e100_get_defaults(nic);
2814
2815
2816 spin_lock_init(&nic->cb_lock);
2817 spin_lock_init(&nic->cmd_lock);
2818 spin_lock_init(&nic->mdio_lock);
2819
2820
2821
2822
2823 e100_hw_reset(nic);
2824
2825 pci_set_master(pdev);
2826
2827 init_timer(&nic->watchdog);
2828 nic->watchdog.function = e100_watchdog;
2829 nic->watchdog.data = (unsigned long)nic;
2830
2831 INIT_WORK(&nic->tx_timeout_task, e100_tx_timeout_task);
2832
2833 if ((err = e100_alloc(nic))) {
2834 netif_err(nic, probe, nic->netdev, "Cannot alloc driver memory, aborting\n");
2835 goto err_out_iounmap;
2836 }
2837
2838 if ((err = e100_eeprom_load(nic)))
2839 goto err_out_free;
2840
2841 e100_phy_init(nic);
2842
2843 memcpy(netdev->dev_addr, nic->eeprom, ETH_ALEN);
2844 memcpy(netdev->perm_addr, nic->eeprom, ETH_ALEN);
2845 if (!is_valid_ether_addr(netdev->perm_addr)) {
2846 if (!eeprom_bad_csum_allow) {
2847 netif_err(nic, probe, nic->netdev, "Invalid MAC address from EEPROM, aborting\n");
2848 err = -EAGAIN;
2849 goto err_out_free;
2850 } else {
2851 netif_err(nic, probe, nic->netdev, "Invalid MAC address from EEPROM, you MUST configure one.\n");
2852 }
2853 }
2854
2855
2856 if ((nic->mac >= mac_82558_D101_A4) &&
2857 (nic->eeprom[eeprom_id] & eeprom_id_wol)) {
2858 nic->flags |= wol_magic;
2859 device_set_wakeup_enable(&pdev->dev, true);
2860 }
2861
2862
2863 pci_pme_active(pdev, false);
2864
2865 strcpy(netdev->name, "eth%d");
2866 if ((err = register_netdev(netdev))) {
2867 netif_err(nic, probe, nic->netdev, "Cannot register net device, aborting\n");
2868 goto err_out_free;
2869 }
2870 nic->cbs_pool = pci_pool_create(netdev->name,
2871 nic->pdev,
2872 nic->params.cbs.max * sizeof(struct cb),
2873 sizeof(u32),
2874 0);
2875 netif_info(nic, probe, nic->netdev,
2876 "addr 0x%llx, irq %d, MAC addr %pM\n",
2877 (unsigned long long)pci_resource_start(pdev, use_io ? 1 : 0),
2878 pdev->irq, netdev->dev_addr);
2879
2880 return 0;
2881
2882err_out_free:
2883 e100_free(nic);
2884err_out_iounmap:
2885 pci_iounmap(pdev, nic->csr);
2886err_out_free_res:
2887 pci_release_regions(pdev);
2888err_out_disable_pdev:
2889 pci_disable_device(pdev);
2890err_out_free_dev:
2891 pci_set_drvdata(pdev, NULL);
2892 free_netdev(netdev);
2893 return err;
2894}
2895
2896static void __devexit e100_remove(struct pci_dev *pdev)
2897{
2898 struct net_device *netdev = pci_get_drvdata(pdev);
2899
2900 if (netdev) {
2901 struct nic *nic = netdev_priv(netdev);
2902 unregister_netdev(netdev);
2903 e100_free(nic);
2904 pci_iounmap(pdev, nic->csr);
2905 pci_pool_destroy(nic->cbs_pool);
2906 free_netdev(netdev);
2907 pci_release_regions(pdev);
2908 pci_disable_device(pdev);
2909 pci_set_drvdata(pdev, NULL);
2910 }
2911}
2912
2913#define E100_82552_SMARTSPEED 0x14
2914#define E100_82552_REV_ANEG 0x0200
2915#define E100_82552_ANEG_NOW 0x0400
2916static void __e100_shutdown(struct pci_dev *pdev, bool *enable_wake)
2917{
2918 struct net_device *netdev = pci_get_drvdata(pdev);
2919 struct nic *nic = netdev_priv(netdev);
2920
2921 if (netif_running(netdev))
2922 e100_down(nic);
2923 netif_device_detach(netdev);
2924
2925 pci_save_state(pdev);
2926
2927 if ((nic->flags & wol_magic) | e100_asf(nic)) {
2928
2929 if (nic->phy == phy_82552_v) {
2930 u16 smartspeed = mdio_read(netdev, nic->mii.phy_id,
2931 E100_82552_SMARTSPEED);
2932
2933 mdio_write(netdev, nic->mii.phy_id,
2934 E100_82552_SMARTSPEED, smartspeed |
2935 E100_82552_REV_ANEG | E100_82552_ANEG_NOW);
2936 }
2937 *enable_wake = true;
2938 } else {
2939 *enable_wake = false;
2940 }
2941
2942 pci_disable_device(pdev);
2943}
2944
2945static int __e100_power_off(struct pci_dev *pdev, bool wake)
2946{
2947 if (wake)
2948 return pci_prepare_to_sleep(pdev);
2949
2950 pci_wake_from_d3(pdev, false);
2951 pci_set_power_state(pdev, PCI_D3hot);
2952
2953 return 0;
2954}
2955
2956#ifdef CONFIG_PM
2957static int e100_suspend(struct pci_dev *pdev, pm_message_t state)
2958{
2959 bool wake;
2960 __e100_shutdown(pdev, &wake);
2961 return __e100_power_off(pdev, wake);
2962}
2963
2964static int e100_resume(struct pci_dev *pdev)
2965{
2966 struct net_device *netdev = pci_get_drvdata(pdev);
2967 struct nic *nic = netdev_priv(netdev);
2968
2969 pci_set_power_state(pdev, PCI_D0);
2970 pci_restore_state(pdev);
2971
2972 pci_enable_wake(pdev, 0, 0);
2973
2974
2975 if (nic->phy == phy_82552_v) {
2976 u16 smartspeed = mdio_read(netdev, nic->mii.phy_id,
2977 E100_82552_SMARTSPEED);
2978
2979 mdio_write(netdev, nic->mii.phy_id,
2980 E100_82552_SMARTSPEED,
2981 smartspeed & ~(E100_82552_REV_ANEG));
2982 }
2983
2984 netif_device_attach(netdev);
2985 if (netif_running(netdev))
2986 e100_up(nic);
2987
2988 return 0;
2989}
2990#endif
2991
2992static void e100_shutdown(struct pci_dev *pdev)
2993{
2994 bool wake;
2995 __e100_shutdown(pdev, &wake);
2996 if (system_state == SYSTEM_POWER_OFF)
2997 __e100_power_off(pdev, wake);
2998}
2999
3000
3001
3002
3003
3004
3005
3006static pci_ers_result_t e100_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
3007{
3008 struct net_device *netdev = pci_get_drvdata(pdev);
3009 struct nic *nic = netdev_priv(netdev);
3010
3011 netif_device_detach(netdev);
3012
3013 if (state == pci_channel_io_perm_failure)
3014 return PCI_ERS_RESULT_DISCONNECT;
3015
3016 if (netif_running(netdev))
3017 e100_down(nic);
3018 pci_disable_device(pdev);
3019
3020
3021 return PCI_ERS_RESULT_NEED_RESET;
3022}
3023
3024
3025
3026
3027
3028
3029
3030static pci_ers_result_t e100_io_slot_reset(struct pci_dev *pdev)
3031{
3032 struct net_device *netdev = pci_get_drvdata(pdev);
3033 struct nic *nic = netdev_priv(netdev);
3034
3035 if (pci_enable_device(pdev)) {
3036 pr_err("Cannot re-enable PCI device after reset\n");
3037 return PCI_ERS_RESULT_DISCONNECT;
3038 }
3039 pci_set_master(pdev);
3040
3041
3042 if (0 != PCI_FUNC(pdev->devfn))
3043 return PCI_ERS_RESULT_RECOVERED;
3044 e100_hw_reset(nic);
3045 e100_phy_init(nic);
3046
3047 return PCI_ERS_RESULT_RECOVERED;
3048}
3049
3050
3051
3052
3053
3054
3055
3056
3057static void e100_io_resume(struct pci_dev *pdev)
3058{
3059 struct net_device *netdev = pci_get_drvdata(pdev);
3060 struct nic *nic = netdev_priv(netdev);
3061
3062
3063 pci_enable_wake(pdev, 0, 0);
3064
3065 netif_device_attach(netdev);
3066 if (netif_running(netdev)) {
3067 e100_open(netdev);
3068 mod_timer(&nic->watchdog, jiffies);
3069 }
3070}
3071
3072static struct pci_error_handlers e100_err_handler = {
3073 .error_detected = e100_io_error_detected,
3074 .slot_reset = e100_io_slot_reset,
3075 .resume = e100_io_resume,
3076};
3077
3078static struct pci_driver e100_driver = {
3079 .name = DRV_NAME,
3080 .id_table = e100_id_table,
3081 .probe = e100_probe,
3082 .remove = __devexit_p(e100_remove),
3083#ifdef CONFIG_PM
3084
3085 .suspend = e100_suspend,
3086 .resume = e100_resume,
3087#endif
3088 .shutdown = e100_shutdown,
3089 .err_handler = &e100_err_handler,
3090};
3091
3092static int __init e100_init_module(void)
3093{
3094 if (((1 << debug) - 1) & NETIF_MSG_DRV) {
3095 pr_info("%s, %s\n", DRV_DESCRIPTION, DRV_VERSION);
3096 pr_info("%s\n", DRV_COPYRIGHT);
3097 }
3098 return pci_register_driver(&e100_driver);
3099}
3100
3101static void __exit e100_cleanup_module(void)
3102{
3103 pci_unregister_driver(&e100_driver);
3104}
3105
3106module_init(e100_init_module);
3107module_exit(e100_cleanup_module);
3108