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#include "e1000.h"
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
76char e1000_driver_name[] = "e1000";
77char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
78char e1000_driver_version[] = "5.2.39-k2";
79char e1000_copyright[] = "Copyright (c) 1999-2004 Intel Corporation.";
80
81
82
83
84
85
86
87
88
89static struct pci_device_id e1000_pci_tbl[] = {
90 {0x8086, 0x1000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
91 {0x8086, 0x1001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
92 {0x8086, 0x1004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
93 {0x8086, 0x1008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
94 {0x8086, 0x1009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
95 {0x8086, 0x100C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
96 {0x8086, 0x100D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
97 {0x8086, 0x100E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
98 {0x8086, 0x100F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
99 {0x8086, 0x1010, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
100 {0x8086, 0x1011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
101 {0x8086, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
102 {0x8086, 0x1013, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
103 {0x8086, 0x1015, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
104 {0x8086, 0x1016, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
105 {0x8086, 0x1017, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
106 {0x8086, 0x1018, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
107 {0x8086, 0x1019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
108 {0x8086, 0x101D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
109 {0x8086, 0x101E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
110 {0x8086, 0x1026, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
111 {0x8086, 0x1027, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
112 {0x8086, 0x1028, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
113 {0x8086, 0x1075, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
114 {0x8086, 0x1076, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
115 {0x8086, 0x1077, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
116 {0x8086, 0x1078, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
117 {0x8086, 0x1079, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
118 {0x8086, 0x107A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
119 {0x8086, 0x107B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
120
121 {0,}
122};
123
124MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
125
126int e1000_up(struct e1000_adapter *adapter);
127void e1000_down(struct e1000_adapter *adapter);
128void e1000_reset(struct e1000_adapter *adapter);
129int e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx);
130int e1000_setup_tx_resources(struct e1000_adapter *adapter);
131int e1000_setup_rx_resources(struct e1000_adapter *adapter);
132void e1000_free_tx_resources(struct e1000_adapter *adapter);
133void e1000_free_rx_resources(struct e1000_adapter *adapter);
134void e1000_update_stats(struct e1000_adapter *adapter);
135
136
137
138static int e1000_init_module(void);
139static void e1000_exit_module(void);
140static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
141static void __devexit e1000_remove(struct pci_dev *pdev);
142static int e1000_sw_init(struct e1000_adapter *adapter);
143static int e1000_open(struct net_device *netdev);
144static int e1000_close(struct net_device *netdev);
145static void e1000_configure_tx(struct e1000_adapter *adapter);
146static void e1000_configure_rx(struct e1000_adapter *adapter);
147static void e1000_setup_rctl(struct e1000_adapter *adapter);
148static void e1000_clean_tx_ring(struct e1000_adapter *adapter);
149static void e1000_clean_rx_ring(struct e1000_adapter *adapter);
150static void e1000_set_multi(struct net_device *netdev);
151static void e1000_update_phy_info(unsigned long data);
152static void e1000_watchdog(unsigned long data);
153static void e1000_82547_tx_fifo_stall(unsigned long data);
154static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
155static struct net_device_stats * e1000_get_stats(struct net_device *netdev);
156static int e1000_change_mtu(struct net_device *netdev, int new_mtu);
157static int e1000_set_mac(struct net_device *netdev, void *p);
158static inline void e1000_irq_disable(struct e1000_adapter *adapter);
159static inline void e1000_irq_enable(struct e1000_adapter *adapter);
160static irqreturn_t e1000_intr(int irq, void *data, struct pt_regs *regs);
161static boolean_t e1000_clean_tx_irq(struct e1000_adapter *adapter);
162#ifdef CONFIG_E1000_NAPI
163static int e1000_clean(struct net_device *netdev, int *budget);
164static boolean_t e1000_clean_rx_irq(struct e1000_adapter *adapter,
165 int *work_done, int work_to_do);
166#else
167static boolean_t e1000_clean_rx_irq(struct e1000_adapter *adapter);
168#endif
169static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter);
170static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd);
171static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
172 int cmd);
173static void e1000_enter_82542_rst(struct e1000_adapter *adapter);
174static void e1000_leave_82542_rst(struct e1000_adapter *adapter);
175static inline void e1000_rx_checksum(struct e1000_adapter *adapter,
176 struct e1000_rx_desc *rx_desc,
177 struct sk_buff *skb);
178static void e1000_tx_timeout(struct net_device *dev);
179static void e1000_tx_timeout_task(struct net_device *dev);
180static void e1000_smartspeed(struct e1000_adapter *adapter);
181static inline int e1000_82547_fifo_workaround(struct e1000_adapter *adapter,
182 struct sk_buff *skb);
183
184static void e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp);
185static void e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
186static void e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
187static void e1000_restore_vlan(struct e1000_adapter *adapter);
188
189static int e1000_notify_reboot(struct notifier_block *, unsigned long event, void *ptr);
190static int e1000_suspend(struct pci_dev *pdev, uint32_t state);
191#ifdef CONFIG_PM
192static int e1000_resume(struct pci_dev *pdev);
193#endif
194
195#ifdef CONFIG_NET_POLL_CONTROLLER
196
197static void e1000_netpoll (struct net_device *dev);
198#endif
199
200struct notifier_block e1000_notifier_reboot = {
201 .notifier_call = e1000_notify_reboot,
202 .next = NULL,
203 .priority = 0
204};
205
206
207
208extern void e1000_check_options(struct e1000_adapter *adapter);
209extern int e1000_ethtool_ioctl(struct net_device *netdev, struct ifreq *ifr);
210
211static struct pci_driver e1000_driver = {
212 .name = e1000_driver_name,
213 .id_table = e1000_pci_tbl,
214 .probe = e1000_probe,
215 .remove = __devexit_p(e1000_remove),
216
217#ifdef CONFIG_PM
218 .suspend = e1000_suspend,
219 .resume = e1000_resume
220#endif
221};
222
223MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
224MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");
225MODULE_LICENSE("GPL");
226
227
228
229
230
231
232
233
234static int __init
235e1000_init_module(void)
236{
237 int ret;
238 printk(KERN_INFO "%s - version %s\n",
239 e1000_driver_string, e1000_driver_version);
240
241 printk(KERN_INFO "%s\n", e1000_copyright);
242
243 ret = pci_module_init(&e1000_driver);
244 if(ret >= 0) {
245 register_reboot_notifier(&e1000_notifier_reboot);
246 }
247 return ret;
248}
249
250module_init(e1000_init_module);
251
252
253
254
255
256
257
258
259static void __exit
260e1000_exit_module(void)
261{
262 unregister_reboot_notifier(&e1000_notifier_reboot);
263 pci_unregister_driver(&e1000_driver);
264}
265
266module_exit(e1000_exit_module);
267
268
269int
270e1000_up(struct e1000_adapter *adapter)
271{
272 struct net_device *netdev = adapter->netdev;
273 int err;
274
275
276
277 e1000_set_multi(netdev);
278
279 e1000_restore_vlan(adapter);
280
281 e1000_configure_tx(adapter);
282 e1000_setup_rctl(adapter);
283 e1000_configure_rx(adapter);
284 e1000_alloc_rx_buffers(adapter);
285
286 if((err = request_irq(adapter->pdev->irq, &e1000_intr,
287 SA_SHIRQ | SA_SAMPLE_RANDOM,
288 netdev->name, netdev)))
289 return err;
290
291 mod_timer(&adapter->watchdog_timer, jiffies);
292 e1000_irq_enable(adapter);
293
294 return 0;
295}
296
297void
298e1000_down(struct e1000_adapter *adapter)
299{
300 struct net_device *netdev = adapter->netdev;
301
302 e1000_irq_disable(adapter);
303 free_irq(adapter->pdev->irq, netdev);
304 del_timer_sync(&adapter->tx_fifo_stall_timer);
305 del_timer_sync(&adapter->watchdog_timer);
306 del_timer_sync(&adapter->phy_info_timer);
307 adapter->link_speed = 0;
308 adapter->link_duplex = 0;
309 netif_carrier_off(netdev);
310 netif_stop_queue(netdev);
311
312 e1000_reset(adapter);
313 e1000_clean_tx_ring(adapter);
314 e1000_clean_rx_ring(adapter);
315}
316
317void
318e1000_reset(struct e1000_adapter *adapter)
319{
320 uint32_t pba;
321
322
323
324
325 if(adapter->hw.mac_type < e1000_82547) {
326 if(adapter->rx_buffer_len > E1000_RXBUFFER_8192)
327 pba = E1000_PBA_40K;
328 else
329 pba = E1000_PBA_48K;
330 } else {
331 if(adapter->rx_buffer_len > E1000_RXBUFFER_8192)
332 pba = E1000_PBA_22K;
333 else
334 pba = E1000_PBA_30K;
335 adapter->tx_fifo_head = 0;
336 adapter->tx_head_addr = pba << E1000_TX_HEAD_ADDR_SHIFT;
337 adapter->tx_fifo_size =
338 (E1000_PBA_40K - pba) << E1000_PBA_BYTES_SHIFT;
339 atomic_set(&adapter->tx_fifo_stall, 0);
340 }
341 E1000_WRITE_REG(&adapter->hw, PBA, pba);
342
343
344 adapter->hw.fc_high_water =
345 (pba << E1000_PBA_BYTES_SHIFT) - E1000_FC_HIGH_DIFF;
346 adapter->hw.fc_low_water =
347 (pba << E1000_PBA_BYTES_SHIFT) - E1000_FC_LOW_DIFF;
348 adapter->hw.fc_pause_time = E1000_FC_PAUSE_TIME;
349 adapter->hw.fc_send_xon = 1;
350 adapter->hw.fc = adapter->hw.original_fc;
351
352 e1000_reset_hw(&adapter->hw);
353 if(adapter->hw.mac_type >= e1000_82544)
354 E1000_WRITE_REG(&adapter->hw, WUC, 0);
355 e1000_init_hw(&adapter->hw);
356
357
358 E1000_WRITE_REG(&adapter->hw, VET, ETHERNET_IEEE_VLAN_TYPE);
359
360 e1000_reset_adaptive(&adapter->hw);
361 e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
362}
363
364
365
366
367
368
369
370
371
372
373
374
375
376static int __devinit
377e1000_probe(struct pci_dev *pdev,
378 const struct pci_device_id *ent)
379{
380 struct net_device *netdev;
381 struct e1000_adapter *adapter;
382 static int cards_found = 0;
383 unsigned long mmio_start;
384 int mmio_len;
385 int pci_using_dac;
386 int i;
387 int err;
388 uint16_t eeprom_data;
389
390 if((err = pci_enable_device(pdev)))
391 return err;
392
393 if(!(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK))) {
394 pci_using_dac = 1;
395 } else {
396 if((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK))) {
397 E1000_ERR("No usable DMA configuration, aborting\n");
398 return err;
399 }
400 pci_using_dac = 0;
401 }
402
403 if((err = pci_request_regions(pdev, e1000_driver_name)))
404 return err;
405
406 pci_set_master(pdev);
407
408 netdev = alloc_etherdev(sizeof(struct e1000_adapter));
409 if(!netdev) {
410 err = -ENOMEM;
411 goto err_alloc_etherdev;
412 }
413
414 SET_MODULE_OWNER(netdev);
415 SET_NETDEV_DEV(netdev, &pdev->dev);
416
417 pci_set_drvdata(pdev, netdev);
418 adapter = netdev->priv;
419 adapter->netdev = netdev;
420 adapter->pdev = pdev;
421 adapter->hw.back = adapter;
422
423 mmio_start = pci_resource_start(pdev, BAR_0);
424 mmio_len = pci_resource_len(pdev, BAR_0);
425
426 adapter->hw.hw_addr = ioremap(mmio_start, mmio_len);
427 if(!adapter->hw.hw_addr) {
428 err = -EIO;
429 goto err_ioremap;
430 }
431
432 for(i = BAR_1; i <= BAR_5; i++) {
433 if(pci_resource_len(pdev, i) == 0)
434 continue;
435 if(pci_resource_flags(pdev, i) & IORESOURCE_IO) {
436 adapter->hw.io_base = pci_resource_start(pdev, i);
437 break;
438 }
439 }
440
441 netdev->open = &e1000_open;
442 netdev->stop = &e1000_close;
443 netdev->hard_start_xmit = &e1000_xmit_frame;
444 netdev->get_stats = &e1000_get_stats;
445 netdev->set_multicast_list = &e1000_set_multi;
446 netdev->set_mac_address = &e1000_set_mac;
447 netdev->change_mtu = &e1000_change_mtu;
448 netdev->do_ioctl = &e1000_ioctl;
449 netdev->tx_timeout = &e1000_tx_timeout;
450 netdev->watchdog_timeo = 5 * HZ;
451#ifdef CONFIG_E1000_NAPI
452 netdev->poll = &e1000_clean;
453 netdev->weight = 64;
454#endif
455 netdev->vlan_rx_register = e1000_vlan_rx_register;
456 netdev->vlan_rx_add_vid = e1000_vlan_rx_add_vid;
457 netdev->vlan_rx_kill_vid = e1000_vlan_rx_kill_vid;
458#ifdef CONFIG_NET_POLL_CONTROLLER
459 netdev->poll_controller = e1000_netpoll;
460#endif
461
462 netdev->mem_start = mmio_start;
463 netdev->mem_end = mmio_start + mmio_len;
464 netdev->base_addr = adapter->hw.io_base;
465
466 adapter->bd_number = cards_found;
467
468
469
470 if((err = e1000_sw_init(adapter)))
471 goto err_sw_init;
472
473 if(adapter->hw.mac_type >= e1000_82543) {
474 netdev->features = NETIF_F_SG |
475 NETIF_F_HW_CSUM |
476 NETIF_F_HW_VLAN_TX |
477 NETIF_F_HW_VLAN_RX |
478 NETIF_F_HW_VLAN_FILTER;
479 } else {
480 netdev->features = NETIF_F_SG;
481 }
482
483#ifdef NETIF_F_TSO
484#ifdef BROKEN_ON_NON_IA_ARCHS
485
486
487
488 if((adapter->hw.mac_type >= e1000_82544) &&
489 (adapter->hw.mac_type != e1000_82547))
490 netdev->features |= NETIF_F_TSO;
491#endif
492#endif
493
494 if(pci_using_dac)
495 netdev->features |= NETIF_F_HIGHDMA;
496
497
498
499
500 e1000_reset_hw(&adapter->hw);
501
502
503
504 if(e1000_validate_eeprom_checksum(&adapter->hw) < 0) {
505 printk(KERN_ERR "The EEPROM Checksum Is Not Valid\n");
506 err = -EIO;
507 goto err_eeprom;
508 }
509
510
511
512 e1000_read_mac_addr(&adapter->hw);
513 memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len);
514
515 if(!is_valid_ether_addr(netdev->dev_addr)) {
516 err = -EIO;
517 goto err_eeprom;
518 }
519
520 e1000_read_part_num(&adapter->hw, &(adapter->part_num));
521
522 e1000_get_bus_info(&adapter->hw);
523
524 init_timer(&adapter->tx_fifo_stall_timer);
525 adapter->tx_fifo_stall_timer.function = &e1000_82547_tx_fifo_stall;
526 adapter->tx_fifo_stall_timer.data = (unsigned long) adapter;
527
528 init_timer(&adapter->watchdog_timer);
529 adapter->watchdog_timer.function = &e1000_watchdog;
530 adapter->watchdog_timer.data = (unsigned long) adapter;
531
532 init_timer(&adapter->phy_info_timer);
533 adapter->phy_info_timer.function = &e1000_update_phy_info;
534 adapter->phy_info_timer.data = (unsigned long) adapter;
535
536 INIT_WORK(&adapter->tx_timeout_task,
537 (void (*)(void *))e1000_tx_timeout_task, netdev);
538
539 if((err = register_netdev(netdev)))
540 goto err_register;
541
542
543
544 netif_carrier_off(netdev);
545 netif_stop_queue(netdev);
546
547 printk(KERN_INFO "%s: Intel(R) PRO/1000 Network Connection\n",
548 netdev->name);
549 e1000_check_options(adapter);
550
551
552
553
554
555
556 switch(adapter->hw.mac_type) {
557 case e1000_82542_rev2_0:
558 case e1000_82542_rev2_1:
559 case e1000_82543:
560 break;
561 case e1000_82546:
562 case e1000_82546_rev_3:
563 if((E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_FUNC_1)
564 && (adapter->hw.media_type == e1000_media_type_copper)) {
565 e1000_read_eeprom(&adapter->hw,
566 EEPROM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
567 break;
568 }
569
570 default:
571 e1000_read_eeprom(&adapter->hw,
572 EEPROM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
573 break;
574 }
575 if(eeprom_data & E1000_EEPROM_APME)
576 adapter->wol |= E1000_WUFC_MAG;
577
578
579
580 e1000_reset(adapter);
581
582 cards_found++;
583 return 0;
584
585err_register:
586err_sw_init:
587err_eeprom:
588 iounmap(adapter->hw.hw_addr);
589err_ioremap:
590 free_netdev(netdev);
591err_alloc_etherdev:
592 pci_release_regions(pdev);
593 return err;
594}
595
596
597
598
599
600
601
602
603
604
605
606static void __devexit
607e1000_remove(struct pci_dev *pdev)
608{
609 struct net_device *netdev = pci_get_drvdata(pdev);
610 struct e1000_adapter *adapter = netdev->priv;
611 uint32_t manc;
612
613 if(adapter->hw.mac_type >= e1000_82540 &&
614 adapter->hw.media_type == e1000_media_type_copper) {
615 manc = E1000_READ_REG(&adapter->hw, MANC);
616 if(manc & E1000_MANC_SMBUS_EN) {
617 manc |= E1000_MANC_ARP_EN;
618 E1000_WRITE_REG(&adapter->hw, MANC, manc);
619 }
620 }
621
622 unregister_netdev(netdev);
623
624 e1000_phy_hw_reset(&adapter->hw);
625
626 iounmap(adapter->hw.hw_addr);
627 pci_release_regions(pdev);
628
629 free_netdev(netdev);
630}
631
632
633
634
635
636
637
638
639
640
641static int __devinit
642e1000_sw_init(struct e1000_adapter *adapter)
643{
644 struct e1000_hw *hw = &adapter->hw;
645 struct net_device *netdev = adapter->netdev;
646 struct pci_dev *pdev = adapter->pdev;
647
648
649
650 hw->vendor_id = pdev->vendor;
651 hw->device_id = pdev->device;
652 hw->subsystem_vendor_id = pdev->subsystem_vendor;
653 hw->subsystem_id = pdev->subsystem_device;
654
655 pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id);
656
657 pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word);
658
659 adapter->rx_buffer_len = E1000_RXBUFFER_2048;
660 hw->max_frame_size = netdev->mtu +
661 ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
662 hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE;
663
664
665
666 if (e1000_set_mac_type(hw)) {
667 E1000_ERR("Unknown MAC Type\n");
668 return -EIO;
669 }
670
671
672
673 e1000_init_eeprom_params(hw);
674
675 if((hw->mac_type == e1000_82541) ||
676 (hw->mac_type == e1000_82547) ||
677 (hw->mac_type == e1000_82541_rev_2) ||
678 (hw->mac_type == e1000_82547_rev_2))
679 hw->phy_init_script = 1;
680
681 e1000_set_media_type(hw);
682
683 if(hw->mac_type < e1000_82543)
684 hw->report_tx_early = 0;
685 else
686 hw->report_tx_early = 1;
687
688 hw->wait_autoneg_complete = FALSE;
689 hw->tbi_compatibility_en = TRUE;
690 hw->adaptive_ifs = TRUE;
691
692
693
694 if(hw->media_type == e1000_media_type_copper) {
695 hw->mdix = AUTO_ALL_MODES;
696 hw->disable_polarity_correction = FALSE;
697 hw->master_slave = E1000_MASTER_SLAVE;
698 }
699
700 atomic_set(&adapter->irq_sem, 1);
701 spin_lock_init(&adapter->stats_lock);
702 spin_lock_init(&adapter->tx_lock);
703
704 return 0;
705}
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720static int
721e1000_open(struct net_device *netdev)
722{
723 struct e1000_adapter *adapter = netdev->priv;
724 int err;
725
726
727
728 if((err = e1000_setup_tx_resources(adapter)))
729 goto err_setup_tx;
730
731
732
733 if((err = e1000_setup_rx_resources(adapter)))
734 goto err_setup_rx;
735
736 if((err = e1000_up(adapter)))
737 goto err_up;
738
739 return 0;
740
741err_up:
742 e1000_free_rx_resources(adapter);
743err_setup_rx:
744 e1000_free_tx_resources(adapter);
745err_setup_tx:
746 e1000_reset(adapter);
747
748 return err;
749}
750
751
752
753
754
755
756
757
758
759
760
761
762
763static int
764e1000_close(struct net_device *netdev)
765{
766 struct e1000_adapter *adapter = netdev->priv;
767
768 e1000_down(adapter);
769
770 e1000_free_tx_resources(adapter);
771 e1000_free_rx_resources(adapter);
772
773 return 0;
774}
775
776
777
778
779
780
781
782
783int
784e1000_setup_tx_resources(struct e1000_adapter *adapter)
785{
786 struct e1000_desc_ring *txdr = &adapter->tx_ring;
787 struct pci_dev *pdev = adapter->pdev;
788 int size;
789
790 size = sizeof(struct e1000_buffer) * txdr->count;
791 txdr->buffer_info = kmalloc(size, GFP_KERNEL);
792 if(!txdr->buffer_info) {
793 return -ENOMEM;
794 }
795 memset(txdr->buffer_info, 0, size);
796
797
798
799 txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
800 E1000_ROUNDUP(txdr->size, 4096);
801
802 txdr->desc = pci_alloc_consistent(pdev, txdr->size, &txdr->dma);
803 if(!txdr->desc) {
804 kfree(txdr->buffer_info);
805 return -ENOMEM;
806 }
807 memset(txdr->desc, 0, txdr->size);
808
809 txdr->next_to_use = 0;
810 txdr->next_to_clean = 0;
811
812 return 0;
813}
814
815
816
817
818
819
820
821
822static void
823e1000_configure_tx(struct e1000_adapter *adapter)
824{
825 uint64_t tdba = adapter->tx_ring.dma;
826 uint32_t tdlen = adapter->tx_ring.count * sizeof(struct e1000_tx_desc);
827 uint32_t tctl, tipg;
828
829 E1000_WRITE_REG(&adapter->hw, TDBAL, (tdba & 0x00000000ffffffffULL));
830 E1000_WRITE_REG(&adapter->hw, TDBAH, (tdba >> 32));
831
832 E1000_WRITE_REG(&adapter->hw, TDLEN, tdlen);
833
834
835
836 E1000_WRITE_REG(&adapter->hw, TDH, 0);
837 E1000_WRITE_REG(&adapter->hw, TDT, 0);
838
839
840
841 switch (adapter->hw.mac_type) {
842 case e1000_82542_rev2_0:
843 case e1000_82542_rev2_1:
844 tipg = DEFAULT_82542_TIPG_IPGT;
845 tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
846 tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
847 break;
848 default:
849 if(adapter->hw.media_type == e1000_media_type_fiber ||
850 adapter->hw.media_type == e1000_media_type_internal_serdes)
851 tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
852 else
853 tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
854 tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
855 tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
856 }
857 E1000_WRITE_REG(&adapter->hw, TIPG, tipg);
858
859
860
861 E1000_WRITE_REG(&adapter->hw, TIDV, adapter->tx_int_delay);
862 if(adapter->hw.mac_type >= e1000_82540)
863 E1000_WRITE_REG(&adapter->hw, TADV, adapter->tx_abs_int_delay);
864
865
866
867 tctl = E1000_READ_REG(&adapter->hw, TCTL);
868
869 tctl &= ~E1000_TCTL_CT;
870 tctl |= E1000_TCTL_EN | E1000_TCTL_PSP |
871 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
872
873 E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
874
875 e1000_config_collision_dist(&adapter->hw);
876
877
878 adapter->txd_cmd = E1000_TXD_CMD_IDE | E1000_TXD_CMD_EOP |
879 E1000_TXD_CMD_IFCS;
880
881 if(adapter->hw.report_tx_early == 1)
882 adapter->txd_cmd |= E1000_TXD_CMD_RS;
883 else
884 adapter->txd_cmd |= E1000_TXD_CMD_RPS;
885
886
887
888 if(adapter->hw.mac_type == e1000_82544 &&
889 adapter->hw.bus_type == e1000_bus_type_pcix)
890 adapter->pcix_82544 = 1;
891}
892
893
894
895
896
897
898
899
900int
901e1000_setup_rx_resources(struct e1000_adapter *adapter)
902{
903 struct e1000_desc_ring *rxdr = &adapter->rx_ring;
904 struct pci_dev *pdev = adapter->pdev;
905 int size;
906
907 size = sizeof(struct e1000_buffer) * rxdr->count;
908 rxdr->buffer_info = kmalloc(size, GFP_KERNEL);
909 if(!rxdr->buffer_info) {
910 return -ENOMEM;
911 }
912 memset(rxdr->buffer_info, 0, size);
913
914
915
916 rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
917 E1000_ROUNDUP(rxdr->size, 4096);
918
919 rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma);
920
921 if(!rxdr->desc) {
922 kfree(rxdr->buffer_info);
923 return -ENOMEM;
924 }
925 memset(rxdr->desc, 0, rxdr->size);
926
927 rxdr->next_to_clean = 0;
928 rxdr->next_to_use = 0;
929
930 return 0;
931}
932
933
934
935
936
937
938static void
939e1000_setup_rctl(struct e1000_adapter *adapter)
940{
941 uint32_t rctl;
942
943 rctl = E1000_READ_REG(&adapter->hw, RCTL);
944
945 rctl &= ~(3 << E1000_RCTL_MO_SHIFT);
946
947 rctl |= E1000_RCTL_EN | E1000_RCTL_BAM |
948 E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
949 (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
950
951 if(adapter->hw.tbi_compatibility_on == 1)
952 rctl |= E1000_RCTL_SBP;
953 else
954 rctl &= ~E1000_RCTL_SBP;
955
956 rctl &= ~(E1000_RCTL_SZ_4096);
957 switch (adapter->rx_buffer_len) {
958 case E1000_RXBUFFER_2048:
959 default:
960 rctl |= E1000_RCTL_SZ_2048;
961 rctl &= ~(E1000_RCTL_BSEX | E1000_RCTL_LPE);
962 break;
963 case E1000_RXBUFFER_4096:
964 rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
965 break;
966 case E1000_RXBUFFER_8192:
967 rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
968 break;
969 case E1000_RXBUFFER_16384:
970 rctl |= E1000_RCTL_SZ_16384 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
971 break;
972 }
973
974 E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
975}
976
977
978
979
980
981
982
983
984static void
985e1000_configure_rx(struct e1000_adapter *adapter)
986{
987 uint64_t rdba = adapter->rx_ring.dma;
988 uint32_t rdlen = adapter->rx_ring.count * sizeof(struct e1000_rx_desc);
989 uint32_t rctl;
990 uint32_t rxcsum;
991
992
993
994 rctl = E1000_READ_REG(&adapter->hw, RCTL);
995 E1000_WRITE_REG(&adapter->hw, RCTL, rctl & ~E1000_RCTL_EN);
996
997
998
999 E1000_WRITE_REG(&adapter->hw, RDTR, adapter->rx_int_delay);
1000
1001 if(adapter->hw.mac_type >= e1000_82540) {
1002 E1000_WRITE_REG(&adapter->hw, RADV, adapter->rx_abs_int_delay);
1003 if(adapter->itr > 1)
1004 E1000_WRITE_REG(&adapter->hw, ITR,
1005 1000000000 / (adapter->itr * 256));
1006 }
1007
1008
1009
1010 E1000_WRITE_REG(&adapter->hw, RDBAL, (rdba & 0x00000000ffffffffULL));
1011 E1000_WRITE_REG(&adapter->hw, RDBAH, (rdba >> 32));
1012
1013 E1000_WRITE_REG(&adapter->hw, RDLEN, rdlen);
1014
1015
1016 E1000_WRITE_REG(&adapter->hw, RDH, 0);
1017 E1000_WRITE_REG(&adapter->hw, RDT, 0);
1018
1019
1020 if((adapter->hw.mac_type >= e1000_82543) &&
1021 (adapter->rx_csum == TRUE)) {
1022 rxcsum = E1000_READ_REG(&adapter->hw, RXCSUM);
1023 rxcsum |= E1000_RXCSUM_TUOFL;
1024 E1000_WRITE_REG(&adapter->hw, RXCSUM, rxcsum);
1025 }
1026
1027
1028
1029 E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
1030}
1031
1032
1033
1034
1035
1036
1037
1038
1039void
1040e1000_free_tx_resources(struct e1000_adapter *adapter)
1041{
1042 struct pci_dev *pdev = adapter->pdev;
1043
1044 e1000_clean_tx_ring(adapter);
1045
1046 kfree(adapter->tx_ring.buffer_info);
1047 adapter->tx_ring.buffer_info = NULL;
1048
1049 pci_free_consistent(pdev, adapter->tx_ring.size,
1050 adapter->tx_ring.desc, adapter->tx_ring.dma);
1051
1052 adapter->tx_ring.desc = NULL;
1053}
1054
1055
1056
1057
1058
1059
1060static void
1061e1000_clean_tx_ring(struct e1000_adapter *adapter)
1062{
1063 struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
1064 struct e1000_buffer *buffer_info;
1065 struct pci_dev *pdev = adapter->pdev;
1066 unsigned long size;
1067 unsigned int i;
1068
1069
1070
1071 for(i = 0; i < tx_ring->count; i++) {
1072 buffer_info = &tx_ring->buffer_info[i];
1073 if(buffer_info->skb) {
1074
1075 pci_unmap_page(pdev,
1076 buffer_info->dma,
1077 buffer_info->length,
1078 PCI_DMA_TODEVICE);
1079
1080 dev_kfree_skb(buffer_info->skb);
1081
1082 buffer_info->skb = NULL;
1083 }
1084 }
1085
1086 size = sizeof(struct e1000_buffer) * tx_ring->count;
1087 memset(tx_ring->buffer_info, 0, size);
1088
1089
1090
1091 memset(tx_ring->desc, 0, tx_ring->size);
1092
1093 tx_ring->next_to_use = 0;
1094 tx_ring->next_to_clean = 0;
1095
1096 E1000_WRITE_REG(&adapter->hw, TDH, 0);
1097 E1000_WRITE_REG(&adapter->hw, TDT, 0);
1098}
1099
1100
1101
1102
1103
1104
1105
1106
1107void
1108e1000_free_rx_resources(struct e1000_adapter *adapter)
1109{
1110 struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
1111 struct pci_dev *pdev = adapter->pdev;
1112
1113 e1000_clean_rx_ring(adapter);
1114
1115 kfree(rx_ring->buffer_info);
1116 rx_ring->buffer_info = NULL;
1117
1118 pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, rx_ring->dma);
1119
1120 rx_ring->desc = NULL;
1121}
1122
1123
1124
1125
1126
1127
1128static void
1129e1000_clean_rx_ring(struct e1000_adapter *adapter)
1130{
1131 struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
1132 struct e1000_buffer *buffer_info;
1133 struct pci_dev *pdev = adapter->pdev;
1134 unsigned long size;
1135 unsigned int i;
1136
1137
1138
1139 for(i = 0; i < rx_ring->count; i++) {
1140 buffer_info = &rx_ring->buffer_info[i];
1141 if(buffer_info->skb) {
1142
1143 pci_unmap_single(pdev,
1144 buffer_info->dma,
1145 buffer_info->length,
1146 PCI_DMA_FROMDEVICE);
1147
1148 dev_kfree_skb(buffer_info->skb);
1149
1150 buffer_info->skb = NULL;
1151 }
1152 }
1153
1154 size = sizeof(struct e1000_buffer) * rx_ring->count;
1155 memset(rx_ring->buffer_info, 0, size);
1156
1157
1158
1159 memset(rx_ring->desc, 0, rx_ring->size);
1160
1161 rx_ring->next_to_clean = 0;
1162 rx_ring->next_to_use = 0;
1163
1164 E1000_WRITE_REG(&adapter->hw, RDH, 0);
1165 E1000_WRITE_REG(&adapter->hw, RDT, 0);
1166}
1167
1168
1169
1170
1171static void
1172e1000_enter_82542_rst(struct e1000_adapter *adapter)
1173{
1174 struct net_device *netdev = adapter->netdev;
1175 uint32_t rctl;
1176
1177 e1000_pci_clear_mwi(&adapter->hw);
1178
1179 rctl = E1000_READ_REG(&adapter->hw, RCTL);
1180 rctl |= E1000_RCTL_RST;
1181 E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
1182 E1000_WRITE_FLUSH(&adapter->hw);
1183 mdelay(5);
1184
1185 if(netif_running(netdev))
1186 e1000_clean_rx_ring(adapter);
1187}
1188
1189static void
1190e1000_leave_82542_rst(struct e1000_adapter *adapter)
1191{
1192 struct net_device *netdev = adapter->netdev;
1193 uint32_t rctl;
1194
1195 rctl = E1000_READ_REG(&adapter->hw, RCTL);
1196 rctl &= ~E1000_RCTL_RST;
1197 E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
1198 E1000_WRITE_FLUSH(&adapter->hw);
1199 mdelay(5);
1200
1201 if(adapter->hw.pci_cmd_word & PCI_COMMAND_INVALIDATE)
1202 e1000_pci_set_mwi(&adapter->hw);
1203
1204 if(netif_running(netdev)) {
1205 e1000_configure_rx(adapter);
1206 e1000_alloc_rx_buffers(adapter);
1207 }
1208}
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218static int
1219e1000_set_mac(struct net_device *netdev, void *p)
1220{
1221 struct e1000_adapter *adapter = netdev->priv;
1222 struct sockaddr *addr = p;
1223
1224 if(!is_valid_ether_addr(addr->sa_data))
1225 return -EADDRNOTAVAIL;
1226
1227
1228
1229 if(adapter->hw.mac_type == e1000_82542_rev2_0)
1230 e1000_enter_82542_rst(adapter);
1231
1232 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
1233 memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len);
1234
1235 e1000_rar_set(&adapter->hw, adapter->hw.mac_addr, 0);
1236
1237 if(adapter->hw.mac_type == e1000_82542_rev2_0)
1238 e1000_leave_82542_rst(adapter);
1239
1240 return 0;
1241}
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253static void
1254e1000_set_multi(struct net_device *netdev)
1255{
1256 struct e1000_adapter *adapter = netdev->priv;
1257 struct e1000_hw *hw = &adapter->hw;
1258 struct dev_mc_list *mc_ptr;
1259 uint32_t rctl;
1260 uint32_t hash_value;
1261 int i;
1262
1263
1264
1265 rctl = E1000_READ_REG(hw, RCTL);
1266
1267 if(netdev->flags & IFF_PROMISC) {
1268 rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
1269 } else if(netdev->flags & IFF_ALLMULTI) {
1270 rctl |= E1000_RCTL_MPE;
1271 rctl &= ~E1000_RCTL_UPE;
1272 } else {
1273 rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
1274 }
1275
1276 E1000_WRITE_REG(hw, RCTL, rctl);
1277
1278
1279
1280 if(hw->mac_type == e1000_82542_rev2_0)
1281 e1000_enter_82542_rst(adapter);
1282
1283
1284
1285
1286
1287 mc_ptr = netdev->mc_list;
1288
1289 for(i = 1; i < E1000_RAR_ENTRIES; i++) {
1290 if(mc_ptr) {
1291 e1000_rar_set(hw, mc_ptr->dmi_addr, i);
1292 mc_ptr = mc_ptr->next;
1293 } else {
1294 E1000_WRITE_REG_ARRAY(hw, RA, i << 1, 0);
1295 E1000_WRITE_REG_ARRAY(hw, RA, (i << 1) + 1, 0);
1296 }
1297 }
1298
1299
1300
1301 for(i = 0; i < E1000_NUM_MTA_REGISTERS; i++)
1302 E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
1303
1304
1305
1306 for(; mc_ptr; mc_ptr = mc_ptr->next) {
1307 hash_value = e1000_hash_mc_addr(hw, mc_ptr->dmi_addr);
1308 e1000_mta_set(hw, hash_value);
1309 }
1310
1311 if(hw->mac_type == e1000_82542_rev2_0)
1312 e1000_leave_82542_rst(adapter);
1313}
1314
1315
1316
1317static void
1318e1000_update_phy_info(unsigned long data)
1319{
1320 struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1321 e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
1322}
1323
1324
1325
1326
1327
1328
1329static void
1330e1000_82547_tx_fifo_stall(unsigned long data)
1331{
1332 struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1333 struct net_device *netdev = adapter->netdev;
1334 uint32_t tctl;
1335
1336 if(atomic_read(&adapter->tx_fifo_stall)) {
1337 if((E1000_READ_REG(&adapter->hw, TDT) ==
1338 E1000_READ_REG(&adapter->hw, TDH)) &&
1339 (E1000_READ_REG(&adapter->hw, TDFT) ==
1340 E1000_READ_REG(&adapter->hw, TDFH)) &&
1341 (E1000_READ_REG(&adapter->hw, TDFTS) ==
1342 E1000_READ_REG(&adapter->hw, TDFHS))) {
1343 tctl = E1000_READ_REG(&adapter->hw, TCTL);
1344 E1000_WRITE_REG(&adapter->hw, TCTL,
1345 tctl & ~E1000_TCTL_EN);
1346 E1000_WRITE_REG(&adapter->hw, TDFT,
1347 adapter->tx_head_addr);
1348 E1000_WRITE_REG(&adapter->hw, TDFH,
1349 adapter->tx_head_addr);
1350 E1000_WRITE_REG(&adapter->hw, TDFTS,
1351 adapter->tx_head_addr);
1352 E1000_WRITE_REG(&adapter->hw, TDFHS,
1353 adapter->tx_head_addr);
1354 E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
1355 E1000_WRITE_FLUSH(&adapter->hw);
1356
1357 adapter->tx_fifo_head = 0;
1358 atomic_set(&adapter->tx_fifo_stall, 0);
1359 netif_wake_queue(netdev);
1360 } else {
1361 mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1);
1362 }
1363 }
1364}
1365
1366
1367
1368
1369
1370
1371static void
1372e1000_watchdog(unsigned long data)
1373{
1374 struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1375 struct net_device *netdev = adapter->netdev;
1376 struct e1000_desc_ring *txdr = &adapter->tx_ring;
1377 unsigned int i;
1378 uint32_t link;
1379
1380 e1000_check_for_link(&adapter->hw);
1381
1382 if((adapter->hw.media_type == e1000_media_type_internal_serdes) &&
1383 !(E1000_READ_REG(&adapter->hw, TXCW) & E1000_TXCW_ANE))
1384 link = !adapter->hw.serdes_link_down;
1385 else
1386 link = E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU;
1387
1388 if(link) {
1389 if(!netif_carrier_ok(netdev)) {
1390 e1000_get_speed_and_duplex(&adapter->hw,
1391 &adapter->link_speed,
1392 &adapter->link_duplex);
1393
1394 printk(KERN_INFO
1395 "e1000: %s NIC Link is Up %d Mbps %s\n",
1396 netdev->name, adapter->link_speed,
1397 adapter->link_duplex == FULL_DUPLEX ?
1398 "Full Duplex" : "Half Duplex");
1399
1400 netif_carrier_on(netdev);
1401 netif_wake_queue(netdev);
1402 mod_timer(&adapter->phy_info_timer, jiffies + 2 * HZ);
1403 adapter->smartspeed = 0;
1404 }
1405 } else {
1406 if(netif_carrier_ok(netdev)) {
1407 adapter->link_speed = 0;
1408 adapter->link_duplex = 0;
1409 printk(KERN_INFO
1410 "e1000: %s NIC Link is Down\n",
1411 netdev->name);
1412 netif_carrier_off(netdev);
1413 netif_stop_queue(netdev);
1414 mod_timer(&adapter->phy_info_timer, jiffies + 2 * HZ);
1415 }
1416
1417 e1000_smartspeed(adapter);
1418 }
1419
1420 e1000_update_stats(adapter);
1421
1422 adapter->hw.tx_packet_delta = adapter->stats.tpt - adapter->tpt_old;
1423 adapter->tpt_old = adapter->stats.tpt;
1424 adapter->hw.collision_delta = adapter->stats.colc - adapter->colc_old;
1425 adapter->colc_old = adapter->stats.colc;
1426
1427 adapter->gorcl = adapter->stats.gorcl - adapter->gorcl_old;
1428 adapter->gorcl_old = adapter->stats.gorcl;
1429 adapter->gotcl = adapter->stats.gotcl - adapter->gotcl_old;
1430 adapter->gotcl_old = adapter->stats.gotcl;
1431
1432 e1000_update_adaptive(&adapter->hw);
1433
1434 if(!netif_carrier_ok(netdev)) {
1435 if(E1000_DESC_UNUSED(txdr) + 1 < txdr->count) {
1436
1437
1438
1439
1440 schedule_work(&adapter->tx_timeout_task);
1441 }
1442 }
1443
1444
1445 if(adapter->hw.mac_type >= e1000_82540 && adapter->itr == 1) {
1446
1447
1448
1449 uint32_t goc = (adapter->gotcl + adapter->gorcl) / 10000;
1450 uint32_t dif = (adapter->gotcl > adapter->gorcl ?
1451 adapter->gotcl - adapter->gorcl :
1452 adapter->gorcl - adapter->gotcl) / 10000;
1453 uint32_t itr = goc > 0 ? (dif * 6000 / goc + 2000) : 8000;
1454 E1000_WRITE_REG(&adapter->hw, ITR, 1000000000 / (itr * 256));
1455 }
1456
1457
1458 E1000_WRITE_REG(&adapter->hw, ICS, E1000_ICS_RXDMT0);
1459
1460
1461 i = txdr->next_to_clean;
1462 if(txdr->buffer_info[i].dma &&
1463 time_after(jiffies, txdr->buffer_info[i].time_stamp + HZ) &&
1464 !(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF))
1465 netif_stop_queue(netdev);
1466
1467
1468 mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);
1469}
1470
1471#define E1000_TX_FLAGS_CSUM 0x00000001
1472#define E1000_TX_FLAGS_VLAN 0x00000002
1473#define E1000_TX_FLAGS_TSO 0x00000004
1474#define E1000_TX_FLAGS_VLAN_MASK 0xffff0000
1475#define E1000_TX_FLAGS_VLAN_SHIFT 16
1476
1477static inline boolean_t
1478e1000_tso(struct e1000_adapter *adapter, struct sk_buff *skb)
1479{
1480#ifdef NETIF_F_TSO
1481 struct e1000_context_desc *context_desc;
1482 unsigned int i;
1483 uint8_t ipcss, ipcso, tucss, tucso, hdr_len;
1484 uint16_t ipcse, tucse, mss;
1485
1486 if(skb_shinfo(skb)->tso_size) {
1487 hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2));
1488 mss = skb_shinfo(skb)->tso_size;
1489 skb->nh.iph->tot_len = 0;
1490 skb->nh.iph->check = 0;
1491 skb->h.th->check = ~csum_tcpudp_magic(skb->nh.iph->saddr,
1492 skb->nh.iph->daddr,
1493 0,
1494 IPPROTO_TCP,
1495 0);
1496 ipcss = skb->nh.raw - skb->data;
1497 ipcso = (void *)&(skb->nh.iph->check) - (void *)skb->data;
1498 ipcse = skb->h.raw - skb->data - 1;
1499 tucss = skb->h.raw - skb->data;
1500 tucso = (void *)&(skb->h.th->check) - (void *)skb->data;
1501 tucse = 0;
1502
1503 i = adapter->tx_ring.next_to_use;
1504 context_desc = E1000_CONTEXT_DESC(adapter->tx_ring, i);
1505
1506 context_desc->lower_setup.ip_fields.ipcss = ipcss;
1507 context_desc->lower_setup.ip_fields.ipcso = ipcso;
1508 context_desc->lower_setup.ip_fields.ipcse = cpu_to_le16(ipcse);
1509 context_desc->upper_setup.tcp_fields.tucss = tucss;
1510 context_desc->upper_setup.tcp_fields.tucso = tucso;
1511 context_desc->upper_setup.tcp_fields.tucse = cpu_to_le16(tucse);
1512 context_desc->tcp_seg_setup.fields.mss = cpu_to_le16(mss);
1513 context_desc->tcp_seg_setup.fields.hdr_len = hdr_len;
1514 context_desc->cmd_and_length = cpu_to_le32(
1515 E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE |
1516 E1000_TXD_CMD_IP | E1000_TXD_CMD_TCP |
1517 (skb->len - (hdr_len)));
1518
1519 if(++i == adapter->tx_ring.count) i = 0;
1520 adapter->tx_ring.next_to_use = i;
1521
1522 return TRUE;
1523 }
1524#endif
1525
1526 return FALSE;
1527}
1528
1529static inline boolean_t
1530e1000_tx_csum(struct e1000_adapter *adapter, struct sk_buff *skb)
1531{
1532 struct e1000_context_desc *context_desc;
1533 unsigned int i;
1534 uint8_t css, cso;
1535
1536 if(skb->ip_summed == CHECKSUM_HW) {
1537 css = skb->h.raw - skb->data;
1538 cso = (skb->h.raw + skb->csum) - skb->data;
1539
1540 i = adapter->tx_ring.next_to_use;
1541 context_desc = E1000_CONTEXT_DESC(adapter->tx_ring, i);
1542
1543 context_desc->upper_setup.tcp_fields.tucss = css;
1544 context_desc->upper_setup.tcp_fields.tucso = cso;
1545 context_desc->upper_setup.tcp_fields.tucse = 0;
1546 context_desc->tcp_seg_setup.data = 0;
1547 context_desc->cmd_and_length = cpu_to_le32(E1000_TXD_CMD_DEXT);
1548
1549 if(++i == adapter->tx_ring.count) i = 0;
1550 adapter->tx_ring.next_to_use = i;
1551
1552 return TRUE;
1553 }
1554
1555 return FALSE;
1556}
1557
1558#define E1000_MAX_TXD_PWR 12
1559#define E1000_MAX_DATA_PER_TXD (1<<E1000_MAX_TXD_PWR)
1560
1561static inline int
1562e1000_tx_map(struct e1000_adapter *adapter, struct sk_buff *skb,
1563 unsigned int first)
1564{
1565 struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
1566 struct e1000_tx_desc *tx_desc;
1567 struct e1000_buffer *buffer_info;
1568 unsigned int len = skb->len, max_per_txd = E1000_MAX_DATA_PER_TXD;
1569 unsigned int offset = 0, size, count = 0, i;
1570#ifdef NETIF_F_TSO
1571 unsigned int mss;
1572#endif
1573 unsigned int nr_frags;
1574 unsigned int f;
1575
1576#ifdef NETIF_F_TSO
1577 mss = skb_shinfo(skb)->tso_size;
1578
1579
1580
1581
1582
1583
1584 if(mss)
1585 max_per_txd = min(mss << 2, max_per_txd);
1586#endif
1587 nr_frags = skb_shinfo(skb)->nr_frags;
1588 len -= skb->data_len;
1589
1590 i = tx_ring->next_to_use;
1591
1592 while(len) {
1593 buffer_info = &tx_ring->buffer_info[i];
1594 size = min(len, max_per_txd);
1595#ifdef NETIF_F_TSO
1596
1597
1598 if(mss && !nr_frags && size == len && size > 8)
1599 size -= 4;
1600#endif
1601
1602
1603 if(adapter->pcix_82544 &&
1604 !((unsigned long)(skb->data + offset + size - 1) & 4) &&
1605 size > 4)
1606 size -= 4;
1607
1608 buffer_info->length = size;
1609 buffer_info->dma =
1610 pci_map_single(adapter->pdev,
1611 skb->data + offset,
1612 size,
1613 PCI_DMA_TODEVICE);
1614 buffer_info->time_stamp = jiffies;
1615
1616 len -= size;
1617 offset += size;
1618 count++;
1619 if(++i == tx_ring->count) i = 0;
1620 }
1621
1622 for(f = 0; f < nr_frags; f++) {
1623 struct skb_frag_struct *frag;
1624
1625 frag = &skb_shinfo(skb)->frags[f];
1626 len = frag->size;
1627 offset = frag->page_offset;
1628
1629 while(len) {
1630 buffer_info = &tx_ring->buffer_info[i];
1631 size = min(len, max_per_txd);
1632#ifdef NETIF_F_TSO
1633
1634
1635 if(mss && f == (nr_frags-1) && size == len && size > 8)
1636 size -= 4;
1637#endif
1638
1639
1640
1641 if(adapter->pcix_82544 &&
1642 !((unsigned long)(frag->page+offset+size-1) & 4) &&
1643 size > 4)
1644 size -= 4;
1645
1646 buffer_info->length = size;
1647 buffer_info->dma =
1648 pci_map_page(adapter->pdev,
1649 frag->page,
1650 offset,
1651 size,
1652 PCI_DMA_TODEVICE);
1653 buffer_info->time_stamp = jiffies;
1654
1655 len -= size;
1656 offset += size;
1657 count++;
1658 if(++i == tx_ring->count) i = 0;
1659 }
1660 }
1661
1662 if(E1000_DESC_UNUSED(&adapter->tx_ring) < count + 2) {
1663
1664
1665
1666
1667
1668
1669
1670
1671 i = tx_ring->next_to_use;
1672
1673 if(i == first) {
1674
1675
1676 tx_desc = E1000_TX_DESC(*tx_ring, first);
1677 tx_desc->buffer_addr = 0;
1678 tx_desc->lower.data = 0;
1679 tx_desc->upper.data = 0;
1680 }
1681
1682 while(count--) {
1683 buffer_info = &tx_ring->buffer_info[i];
1684
1685 if(buffer_info->dma) {
1686 pci_unmap_page(adapter->pdev,
1687 buffer_info->dma,
1688 buffer_info->length,
1689 PCI_DMA_TODEVICE);
1690 buffer_info->dma = 0;
1691 }
1692
1693 if(++i == tx_ring->count) i = 0;
1694 }
1695
1696 tx_ring->next_to_use = first;
1697
1698 return 0;
1699 }
1700
1701 i = (i == 0) ? tx_ring->count - 1 : i - 1;
1702 tx_ring->buffer_info[i].skb = skb;
1703 tx_ring->buffer_info[first].next_to_watch = i;
1704
1705 return count;
1706}
1707
1708static inline void
1709e1000_tx_queue(struct e1000_adapter *adapter, int count, int tx_flags)
1710{
1711 struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
1712 struct e1000_tx_desc *tx_desc = NULL;
1713 struct e1000_buffer *buffer_info;
1714 uint32_t txd_upper = 0, txd_lower = E1000_TXD_CMD_IFCS;
1715 unsigned int i;
1716
1717 if(tx_flags & E1000_TX_FLAGS_TSO) {
1718 txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D |
1719 E1000_TXD_CMD_TSE;
1720 txd_upper |= (E1000_TXD_POPTS_IXSM | E1000_TXD_POPTS_TXSM) << 8;
1721 }
1722
1723 if(tx_flags & E1000_TX_FLAGS_CSUM) {
1724 txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
1725 txd_upper |= E1000_TXD_POPTS_TXSM << 8;
1726 }
1727
1728 if(tx_flags & E1000_TX_FLAGS_VLAN) {
1729 txd_lower |= E1000_TXD_CMD_VLE;
1730 txd_upper |= (tx_flags & E1000_TX_FLAGS_VLAN_MASK);
1731 }
1732
1733 i = tx_ring->next_to_use;
1734
1735 while(count--) {
1736 buffer_info = &tx_ring->buffer_info[i];
1737 tx_desc = E1000_TX_DESC(*tx_ring, i);
1738 tx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
1739 tx_desc->lower.data =
1740 cpu_to_le32(txd_lower | buffer_info->length);
1741 tx_desc->upper.data = cpu_to_le32(txd_upper);
1742 if(++i == tx_ring->count) i = 0;
1743 }
1744
1745 tx_desc->lower.data |= cpu_to_le32(adapter->txd_cmd);
1746
1747
1748
1749
1750
1751 wmb();
1752
1753 tx_ring->next_to_use = i;
1754 E1000_WRITE_REG(&adapter->hw, TDT, i);
1755}
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766#define E1000_FIFO_HDR 0x10
1767#define E1000_82547_PAD_LEN 0x3E0
1768
1769static inline int
1770e1000_82547_fifo_workaround(struct e1000_adapter *adapter, struct sk_buff *skb)
1771{
1772 uint32_t fifo_space = adapter->tx_fifo_size - adapter->tx_fifo_head;
1773 uint32_t skb_fifo_len = skb->len + E1000_FIFO_HDR;
1774
1775 E1000_ROUNDUP(skb_fifo_len, E1000_FIFO_HDR);
1776
1777 if(adapter->link_duplex != HALF_DUPLEX)
1778 goto no_fifo_stall_required;
1779
1780 if(atomic_read(&adapter->tx_fifo_stall))
1781 return 1;
1782
1783 if(skb_fifo_len >= (E1000_82547_PAD_LEN + fifo_space)) {
1784 atomic_set(&adapter->tx_fifo_stall, 1);
1785 return 1;
1786 }
1787
1788no_fifo_stall_required:
1789 adapter->tx_fifo_head += skb_fifo_len;
1790 if(adapter->tx_fifo_head >= adapter->tx_fifo_size)
1791 adapter->tx_fifo_head -= adapter->tx_fifo_size;
1792 return 0;
1793}
1794
1795static int
1796e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1797{
1798 struct e1000_adapter *adapter = netdev->priv;
1799 unsigned int first;
1800 unsigned int tx_flags = 0;
1801 unsigned long flags;
1802 int count;
1803
1804 if(skb->len <= 0) {
1805 dev_kfree_skb_any(skb);
1806 return 0;
1807 }
1808
1809 spin_lock_irqsave(&adapter->tx_lock, flags);
1810
1811 if(adapter->hw.mac_type == e1000_82547) {
1812 if(e1000_82547_fifo_workaround(adapter, skb)) {
1813 netif_stop_queue(netdev);
1814 mod_timer(&adapter->tx_fifo_stall_timer, jiffies);
1815 spin_unlock_irqrestore(&adapter->tx_lock, flags);
1816 return 1;
1817 }
1818 }
1819
1820 if(adapter->vlgrp && vlan_tx_tag_present(skb)) {
1821 tx_flags |= E1000_TX_FLAGS_VLAN;
1822 tx_flags |= (vlan_tx_tag_get(skb) << E1000_TX_FLAGS_VLAN_SHIFT);
1823 }
1824
1825 first = adapter->tx_ring.next_to_use;
1826
1827 if(e1000_tso(adapter, skb))
1828 tx_flags |= E1000_TX_FLAGS_TSO;
1829 else if(e1000_tx_csum(adapter, skb))
1830 tx_flags |= E1000_TX_FLAGS_CSUM;
1831
1832 if((count = e1000_tx_map(adapter, skb, first)))
1833 e1000_tx_queue(adapter, count, tx_flags);
1834 else {
1835 netif_stop_queue(netdev);
1836 spin_unlock_irqrestore(&adapter->tx_lock, flags);
1837 return 1;
1838 }
1839
1840 netdev->trans_start = jiffies;
1841
1842 spin_unlock_irqrestore(&adapter->tx_lock, flags);
1843
1844 return 0;
1845}
1846
1847
1848
1849
1850
1851
1852static void
1853e1000_tx_timeout(struct net_device *netdev)
1854{
1855 struct e1000_adapter *adapter = netdev->priv;
1856
1857
1858 schedule_work(&adapter->tx_timeout_task);
1859}
1860
1861static void
1862e1000_tx_timeout_task(struct net_device *netdev)
1863{
1864 struct e1000_adapter *adapter = netdev->priv;
1865
1866 netif_device_detach(netdev);
1867 e1000_down(adapter);
1868 e1000_up(adapter);
1869 netif_device_attach(netdev);
1870}
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880static struct net_device_stats *
1881e1000_get_stats(struct net_device *netdev)
1882{
1883 struct e1000_adapter *adapter = netdev->priv;
1884
1885 e1000_update_stats(adapter);
1886 return &adapter->net_stats;
1887}
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897static int
1898e1000_change_mtu(struct net_device *netdev, int new_mtu)
1899{
1900 struct e1000_adapter *adapter = netdev->priv;
1901 int old_mtu = adapter->rx_buffer_len;
1902 int max_frame = new_mtu + ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
1903
1904 if((max_frame < MINIMUM_ETHERNET_FRAME_SIZE) ||
1905 (max_frame > MAX_JUMBO_FRAME_SIZE)) {
1906 E1000_ERR("Invalid MTU setting\n");
1907 return -EINVAL;
1908 }
1909
1910 if(max_frame <= MAXIMUM_ETHERNET_FRAME_SIZE) {
1911 adapter->rx_buffer_len = E1000_RXBUFFER_2048;
1912
1913 } else if(adapter->hw.mac_type < e1000_82543) {
1914 E1000_ERR("Jumbo Frames not supported on 82542\n");
1915 return -EINVAL;
1916
1917 } else if(max_frame <= E1000_RXBUFFER_4096) {
1918 adapter->rx_buffer_len = E1000_RXBUFFER_4096;
1919
1920 } else if(max_frame <= E1000_RXBUFFER_8192) {
1921 adapter->rx_buffer_len = E1000_RXBUFFER_8192;
1922
1923 } else {
1924 adapter->rx_buffer_len = E1000_RXBUFFER_16384;
1925 }
1926
1927 if(old_mtu != adapter->rx_buffer_len && netif_running(netdev)) {
1928
1929 e1000_down(adapter);
1930 e1000_up(adapter);
1931 }
1932
1933 netdev->mtu = new_mtu;
1934 adapter->hw.max_frame_size = max_frame;
1935
1936 return 0;
1937}
1938
1939
1940
1941
1942
1943
1944void
1945e1000_update_stats(struct e1000_adapter *adapter)
1946{
1947 struct e1000_hw *hw = &adapter->hw;
1948 unsigned long flags;
1949 uint16_t phy_tmp;
1950
1951#define PHY_IDLE_ERROR_COUNT_MASK 0x00FF
1952
1953 spin_lock_irqsave(&adapter->stats_lock, flags);
1954
1955
1956
1957
1958
1959
1960 adapter->stats.crcerrs += E1000_READ_REG(hw, CRCERRS);
1961 adapter->stats.gprc += E1000_READ_REG(hw, GPRC);
1962 adapter->stats.gorcl += E1000_READ_REG(hw, GORCL);
1963 adapter->stats.gorch += E1000_READ_REG(hw, GORCH);
1964 adapter->stats.bprc += E1000_READ_REG(hw, BPRC);
1965 adapter->stats.mprc += E1000_READ_REG(hw, MPRC);
1966 adapter->stats.roc += E1000_READ_REG(hw, ROC);
1967 adapter->stats.prc64 += E1000_READ_REG(hw, PRC64);
1968 adapter->stats.prc127 += E1000_READ_REG(hw, PRC127);
1969 adapter->stats.prc255 += E1000_READ_REG(hw, PRC255);
1970 adapter->stats.prc511 += E1000_READ_REG(hw, PRC511);
1971 adapter->stats.prc1023 += E1000_READ_REG(hw, PRC1023);
1972 adapter->stats.prc1522 += E1000_READ_REG(hw, PRC1522);
1973
1974
1975
1976 adapter->stats.symerrs += E1000_READ_REG(hw, SYMERRS);
1977 adapter->stats.mpc += E1000_READ_REG(hw, MPC);
1978 adapter->stats.scc += E1000_READ_REG(hw, SCC);
1979 adapter->stats.ecol += E1000_READ_REG(hw, ECOL);
1980 adapter->stats.mcc += E1000_READ_REG(hw, MCC);
1981 adapter->stats.latecol += E1000_READ_REG(hw, LATECOL);
1982 adapter->stats.dc += E1000_READ_REG(hw, DC);
1983 adapter->stats.sec += E1000_READ_REG(hw, SEC);
1984 adapter->stats.rlec += E1000_READ_REG(hw, RLEC);
1985 adapter->stats.xonrxc += E1000_READ_REG(hw, XONRXC);
1986 adapter->stats.xontxc += E1000_READ_REG(hw, XONTXC);
1987 adapter->stats.xoffrxc += E1000_READ_REG(hw, XOFFRXC);
1988 adapter->stats.xofftxc += E1000_READ_REG(hw, XOFFTXC);
1989 adapter->stats.fcruc += E1000_READ_REG(hw, FCRUC);
1990 adapter->stats.gptc += E1000_READ_REG(hw, GPTC);
1991 adapter->stats.gotcl += E1000_READ_REG(hw, GOTCL);
1992 adapter->stats.gotch += E1000_READ_REG(hw, GOTCH);
1993 adapter->stats.rnbc += E1000_READ_REG(hw, RNBC);
1994 adapter->stats.ruc += E1000_READ_REG(hw, RUC);
1995 adapter->stats.rfc += E1000_READ_REG(hw, RFC);
1996 adapter->stats.rjc += E1000_READ_REG(hw, RJC);
1997 adapter->stats.torl += E1000_READ_REG(hw, TORL);
1998 adapter->stats.torh += E1000_READ_REG(hw, TORH);
1999 adapter->stats.totl += E1000_READ_REG(hw, TOTL);
2000 adapter->stats.toth += E1000_READ_REG(hw, TOTH);
2001 adapter->stats.tpr += E1000_READ_REG(hw, TPR);
2002 adapter->stats.ptc64 += E1000_READ_REG(hw, PTC64);
2003 adapter->stats.ptc127 += E1000_READ_REG(hw, PTC127);
2004 adapter->stats.ptc255 += E1000_READ_REG(hw, PTC255);
2005 adapter->stats.ptc511 += E1000_READ_REG(hw, PTC511);
2006 adapter->stats.ptc1023 += E1000_READ_REG(hw, PTC1023);
2007 adapter->stats.ptc1522 += E1000_READ_REG(hw, PTC1522);
2008 adapter->stats.mptc += E1000_READ_REG(hw, MPTC);
2009 adapter->stats.bptc += E1000_READ_REG(hw, BPTC);
2010
2011
2012
2013 hw->tx_packet_delta = E1000_READ_REG(hw, TPT);
2014 adapter->stats.tpt += hw->tx_packet_delta;
2015 hw->collision_delta = E1000_READ_REG(hw, COLC);
2016 adapter->stats.colc += hw->collision_delta;
2017
2018 if(hw->mac_type >= e1000_82543) {
2019 adapter->stats.algnerrc += E1000_READ_REG(hw, ALGNERRC);
2020 adapter->stats.rxerrc += E1000_READ_REG(hw, RXERRC);
2021 adapter->stats.tncrs += E1000_READ_REG(hw, TNCRS);
2022 adapter->stats.cexterr += E1000_READ_REG(hw, CEXTERR);
2023 adapter->stats.tsctc += E1000_READ_REG(hw, TSCTC);
2024 adapter->stats.tsctfc += E1000_READ_REG(hw, TSCTFC);
2025 }
2026
2027
2028
2029 adapter->net_stats.rx_packets = adapter->stats.gprc;
2030 adapter->net_stats.tx_packets = adapter->stats.gptc;
2031 adapter->net_stats.rx_bytes = adapter->stats.gorcl;
2032 adapter->net_stats.tx_bytes = adapter->stats.gotcl;
2033 adapter->net_stats.multicast = adapter->stats.mprc;
2034 adapter->net_stats.collisions = adapter->stats.colc;
2035
2036
2037
2038 adapter->net_stats.rx_errors = adapter->stats.rxerrc +
2039 adapter->stats.crcerrs + adapter->stats.algnerrc +
2040 adapter->stats.rlec + adapter->stats.rnbc +
2041 adapter->stats.mpc + adapter->stats.cexterr;
2042 adapter->net_stats.rx_dropped = adapter->stats.rnbc;
2043 adapter->net_stats.rx_length_errors = adapter->stats.rlec;
2044 adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs;
2045 adapter->net_stats.rx_frame_errors = adapter->stats.algnerrc;
2046 adapter->net_stats.rx_fifo_errors = adapter->stats.mpc;
2047 adapter->net_stats.rx_missed_errors = adapter->stats.mpc;
2048
2049
2050
2051 adapter->net_stats.tx_errors = adapter->stats.ecol +
2052 adapter->stats.latecol;
2053 adapter->net_stats.tx_aborted_errors = adapter->stats.ecol;
2054 adapter->net_stats.tx_window_errors = adapter->stats.latecol;
2055 adapter->net_stats.tx_carrier_errors = adapter->stats.tncrs;
2056
2057
2058
2059
2060
2061 if(hw->media_type == e1000_media_type_copper) {
2062 if((adapter->link_speed == SPEED_1000) &&
2063 (!e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_tmp))) {
2064 phy_tmp &= PHY_IDLE_ERROR_COUNT_MASK;
2065 adapter->phy_stats.idle_errors += phy_tmp;
2066 }
2067
2068 if((hw->mac_type <= e1000_82546) &&
2069 (hw->phy_type == e1000_phy_m88) &&
2070 !e1000_read_phy_reg(hw, M88E1000_RX_ERR_CNTR, &phy_tmp))
2071 adapter->phy_stats.receive_errors += phy_tmp;
2072 }
2073
2074 spin_unlock_irqrestore(&adapter->stats_lock, flags);
2075}
2076
2077
2078
2079
2080
2081
2082static inline void
2083e1000_irq_disable(struct e1000_adapter *adapter)
2084{
2085 atomic_inc(&adapter->irq_sem);
2086 E1000_WRITE_REG(&adapter->hw, IMC, ~0);
2087 E1000_WRITE_FLUSH(&adapter->hw);
2088 synchronize_irq(adapter->pdev->irq);
2089}
2090
2091
2092
2093
2094
2095
2096static inline void
2097e1000_irq_enable(struct e1000_adapter *adapter)
2098{
2099 if(atomic_dec_and_test(&adapter->irq_sem)) {
2100 E1000_WRITE_REG(&adapter->hw, IMS, IMS_ENABLE_MASK);
2101 E1000_WRITE_FLUSH(&adapter->hw);
2102 }
2103}
2104
2105
2106
2107
2108
2109
2110
2111
2112static irqreturn_t
2113e1000_intr(int irq, void *data, struct pt_regs *regs)
2114{
2115 struct net_device *netdev = data;
2116 struct e1000_adapter *adapter = netdev->priv;
2117 struct e1000_hw *hw = &adapter->hw;
2118 uint32_t icr = E1000_READ_REG(&adapter->hw, ICR);
2119#ifndef CONFIG_E1000_NAPI
2120 unsigned int i;
2121#endif
2122
2123 if(!icr)
2124 return IRQ_NONE;
2125
2126 if(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
2127 hw->get_link_status = 1;
2128 mod_timer(&adapter->watchdog_timer, jiffies);
2129 }
2130
2131#ifdef CONFIG_E1000_NAPI
2132 if(netif_rx_schedule_prep(netdev)) {
2133
2134
2135
2136
2137
2138 atomic_inc(&adapter->irq_sem);
2139 E1000_WRITE_REG(hw, IMC, ~0);
2140 __netif_rx_schedule(netdev);
2141 }
2142#else
2143 for(i = 0; i < E1000_MAX_INTR; i++)
2144 if(!e1000_clean_rx_irq(adapter) &
2145 !e1000_clean_tx_irq(adapter))
2146 break;
2147#endif
2148
2149 return IRQ_HANDLED;
2150}
2151
2152#ifdef CONFIG_E1000_NAPI
2153
2154
2155
2156
2157
2158static int
2159e1000_clean(struct net_device *netdev, int *budget)
2160{
2161 struct e1000_adapter *adapter = netdev->priv;
2162 int work_to_do = min(*budget, netdev->quota);
2163 int work_done = 0;
2164
2165 e1000_clean_tx_irq(adapter);
2166 e1000_clean_rx_irq(adapter, &work_done, work_to_do);
2167
2168 *budget -= work_done;
2169 netdev->quota -= work_done;
2170
2171 if(work_done < work_to_do || !netif_running(netdev)) {
2172 netif_rx_complete(netdev);
2173 e1000_irq_enable(adapter);
2174 }
2175
2176 return (work_done >= work_to_do);
2177}
2178#endif
2179
2180
2181
2182
2183
2184
2185static boolean_t
2186e1000_clean_tx_irq(struct e1000_adapter *adapter)
2187{
2188 struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
2189 struct net_device *netdev = adapter->netdev;
2190 struct pci_dev *pdev = adapter->pdev;
2191 struct e1000_tx_desc *tx_desc, *eop_desc;
2192 struct e1000_buffer *buffer_info;
2193 unsigned int i, eop;
2194 boolean_t cleaned = FALSE;
2195
2196 spin_lock(&adapter->tx_lock);
2197
2198 i = tx_ring->next_to_clean;
2199 eop = tx_ring->buffer_info[i].next_to_watch;
2200 eop_desc = E1000_TX_DESC(*tx_ring, eop);
2201
2202 while(eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) {
2203
2204 for(cleaned = FALSE; !cleaned; ) {
2205 tx_desc = E1000_TX_DESC(*tx_ring, i);
2206 buffer_info = &tx_ring->buffer_info[i];
2207
2208 if(buffer_info->dma) {
2209
2210 pci_unmap_page(pdev,
2211 buffer_info->dma,
2212 buffer_info->length,
2213 PCI_DMA_TODEVICE);
2214
2215 buffer_info->dma = 0;
2216 }
2217
2218 if(buffer_info->skb) {
2219
2220 dev_kfree_skb_any(buffer_info->skb);
2221
2222 buffer_info->skb = NULL;
2223 }
2224
2225 tx_desc->buffer_addr = 0;
2226 tx_desc->lower.data = 0;
2227 tx_desc->upper.data = 0;
2228
2229 cleaned = (i == eop);
2230 if(++i == tx_ring->count) i = 0;
2231 }
2232
2233 eop = tx_ring->buffer_info[i].next_to_watch;
2234 eop_desc = E1000_TX_DESC(*tx_ring, eop);
2235 }
2236
2237 tx_ring->next_to_clean = i;
2238
2239 if(cleaned && netif_queue_stopped(netdev) && netif_carrier_ok(netdev))
2240 netif_wake_queue(netdev);
2241
2242 spin_unlock(&adapter->tx_lock);
2243
2244 return cleaned;
2245}
2246
2247
2248
2249
2250
2251
2252static boolean_t
2253#ifdef CONFIG_E1000_NAPI
2254e1000_clean_rx_irq(struct e1000_adapter *adapter, int *work_done,
2255 int work_to_do)
2256#else
2257e1000_clean_rx_irq(struct e1000_adapter *adapter)
2258#endif
2259{
2260 struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
2261 struct net_device *netdev = adapter->netdev;
2262 struct pci_dev *pdev = adapter->pdev;
2263 struct e1000_rx_desc *rx_desc;
2264 struct e1000_buffer *buffer_info;
2265 struct sk_buff *skb;
2266 unsigned long flags;
2267 uint32_t length;
2268 uint8_t last_byte;
2269 unsigned int i;
2270 boolean_t cleaned = FALSE;
2271
2272 i = rx_ring->next_to_clean;
2273 rx_desc = E1000_RX_DESC(*rx_ring, i);
2274
2275 while(rx_desc->status & E1000_RXD_STAT_DD) {
2276 buffer_info = &rx_ring->buffer_info[i];
2277
2278#ifdef CONFIG_E1000_NAPI
2279 if(*work_done >= work_to_do)
2280 break;
2281
2282 (*work_done)++;
2283#endif
2284
2285 cleaned = TRUE;
2286
2287 pci_unmap_single(pdev,
2288 buffer_info->dma,
2289 buffer_info->length,
2290 PCI_DMA_FROMDEVICE);
2291
2292 skb = buffer_info->skb;
2293 length = le16_to_cpu(rx_desc->length);
2294
2295 if(!(rx_desc->status & E1000_RXD_STAT_EOP)) {
2296
2297
2298
2299 E1000_DBG("Receive packet consumed multiple buffers\n");
2300
2301 dev_kfree_skb_irq(skb);
2302 rx_desc->status = 0;
2303 buffer_info->skb = NULL;
2304
2305 if(++i == rx_ring->count) i = 0;
2306
2307 rx_desc = E1000_RX_DESC(*rx_ring, i);
2308 continue;
2309 }
2310
2311 if(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
2312
2313 last_byte = *(skb->data + length - 1);
2314
2315 if(TBI_ACCEPT(&adapter->hw, rx_desc->status,
2316 rx_desc->errors, length, last_byte)) {
2317
2318 spin_lock_irqsave(&adapter->stats_lock, flags);
2319
2320 e1000_tbi_adjust_stats(&adapter->hw,
2321 &adapter->stats,
2322 length, skb->data);
2323
2324 spin_unlock_irqrestore(&adapter->stats_lock,
2325 flags);
2326 length--;
2327 } else {
2328
2329 dev_kfree_skb_irq(skb);
2330 rx_desc->status = 0;
2331 buffer_info->skb = NULL;
2332
2333 if(++i == rx_ring->count) i = 0;
2334
2335 rx_desc = E1000_RX_DESC(*rx_ring, i);
2336 continue;
2337 }
2338 }
2339
2340
2341 skb_put(skb, length - ETHERNET_FCS_SIZE);
2342
2343
2344 e1000_rx_checksum(adapter, rx_desc, skb);
2345
2346 skb->protocol = eth_type_trans(skb, netdev);
2347#ifdef CONFIG_E1000_NAPI
2348 if(adapter->vlgrp && (rx_desc->status & E1000_RXD_STAT_VP)) {
2349 vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
2350 le16_to_cpu(rx_desc->special &
2351 E1000_RXD_SPC_VLAN_MASK));
2352 } else {
2353 netif_receive_skb(skb);
2354 }
2355#else
2356 if(adapter->vlgrp && (rx_desc->status & E1000_RXD_STAT_VP)) {
2357 vlan_hwaccel_rx(skb, adapter->vlgrp,
2358 le16_to_cpu(rx_desc->special &
2359 E1000_RXD_SPC_VLAN_MASK));
2360 } else {
2361 netif_rx(skb);
2362 }
2363#endif
2364 netdev->last_rx = jiffies;
2365
2366 rx_desc->status = 0;
2367 buffer_info->skb = NULL;
2368
2369 if(++i == rx_ring->count) i = 0;
2370
2371 rx_desc = E1000_RX_DESC(*rx_ring, i);
2372 }
2373
2374 rx_ring->next_to_clean = i;
2375
2376 e1000_alloc_rx_buffers(adapter);
2377
2378 return cleaned;
2379}
2380
2381
2382
2383
2384
2385
2386static void
2387e1000_alloc_rx_buffers(struct e1000_adapter *adapter)
2388{
2389 struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
2390 struct net_device *netdev = adapter->netdev;
2391 struct pci_dev *pdev = adapter->pdev;
2392 struct e1000_rx_desc *rx_desc;
2393 struct e1000_buffer *buffer_info;
2394 struct sk_buff *skb;
2395 int reserve_len = 2;
2396 unsigned int i;
2397
2398 i = rx_ring->next_to_use;
2399 buffer_info = &rx_ring->buffer_info[i];
2400
2401 while(!buffer_info->skb) {
2402 rx_desc = E1000_RX_DESC(*rx_ring, i);
2403
2404 skb = dev_alloc_skb(adapter->rx_buffer_len + reserve_len);
2405
2406 if(!skb) {
2407
2408 break;
2409 }
2410
2411
2412
2413
2414
2415 skb_reserve(skb, reserve_len);
2416
2417 skb->dev = netdev;
2418
2419 buffer_info->skb = skb;
2420 buffer_info->length = adapter->rx_buffer_len;
2421 buffer_info->dma =
2422 pci_map_single(pdev,
2423 skb->data,
2424 adapter->rx_buffer_len,
2425 PCI_DMA_FROMDEVICE);
2426
2427 rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
2428
2429 if((i & ~(E1000_RX_BUFFER_WRITE - 1)) == i) {
2430
2431
2432
2433
2434 wmb();
2435
2436 E1000_WRITE_REG(&adapter->hw, RDT, i);
2437 }
2438
2439 if(++i == rx_ring->count) i = 0;
2440 buffer_info = &rx_ring->buffer_info[i];
2441 }
2442
2443 rx_ring->next_to_use = i;
2444}
2445
2446
2447
2448
2449
2450
2451static void
2452e1000_smartspeed(struct e1000_adapter *adapter)
2453{
2454 uint16_t phy_status;
2455 uint16_t phy_ctrl;
2456
2457 if((adapter->hw.phy_type != e1000_phy_igp) || !adapter->hw.autoneg ||
2458 !(adapter->hw.autoneg_advertised & ADVERTISE_1000_FULL))
2459 return;
2460
2461 if(adapter->smartspeed == 0) {
2462
2463
2464 e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_status);
2465 if(!(phy_status & SR_1000T_MS_CONFIG_FAULT)) return;
2466 e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_status);
2467 if(!(phy_status & SR_1000T_MS_CONFIG_FAULT)) return;
2468 e1000_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_ctrl);
2469 if(phy_ctrl & CR_1000T_MS_ENABLE) {
2470 phy_ctrl &= ~CR_1000T_MS_ENABLE;
2471 e1000_write_phy_reg(&adapter->hw, PHY_1000T_CTRL,
2472 phy_ctrl);
2473 adapter->smartspeed++;
2474 if(!e1000_phy_setup_autoneg(&adapter->hw) &&
2475 !e1000_read_phy_reg(&adapter->hw, PHY_CTRL,
2476 &phy_ctrl)) {
2477 phy_ctrl |= (MII_CR_AUTO_NEG_EN |
2478 MII_CR_RESTART_AUTO_NEG);
2479 e1000_write_phy_reg(&adapter->hw, PHY_CTRL,
2480 phy_ctrl);
2481 }
2482 }
2483 return;
2484 } else if(adapter->smartspeed == E1000_SMARTSPEED_DOWNSHIFT) {
2485
2486 e1000_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_ctrl);
2487 phy_ctrl |= CR_1000T_MS_ENABLE;
2488 e1000_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_ctrl);
2489 if(!e1000_phy_setup_autoneg(&adapter->hw) &&
2490 !e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_ctrl)) {
2491 phy_ctrl |= (MII_CR_AUTO_NEG_EN |
2492 MII_CR_RESTART_AUTO_NEG);
2493 e1000_write_phy_reg(&adapter->hw, PHY_CTRL, phy_ctrl);
2494 }
2495 }
2496
2497 if(adapter->smartspeed++ == E1000_SMARTSPEED_MAX)
2498 adapter->smartspeed = 0;
2499}
2500
2501
2502
2503
2504
2505
2506
2507
2508static int
2509e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
2510{
2511 switch (cmd) {
2512 case SIOCGMIIPHY:
2513 case SIOCGMIIREG:
2514 case SIOCSMIIREG:
2515 return e1000_mii_ioctl(netdev, ifr, cmd);
2516 case SIOCETHTOOL:
2517 return e1000_ethtool_ioctl(netdev, ifr);
2518 default:
2519 return -EOPNOTSUPP;
2520 }
2521}
2522
2523
2524
2525
2526
2527
2528
2529
2530static int
2531e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
2532{
2533 struct e1000_adapter *adapter = netdev->priv;
2534 struct mii_ioctl_data *data = (struct mii_ioctl_data *)&ifr->ifr_data;
2535 int retval;
2536 uint16_t mii_reg;
2537 uint16_t spddplx;
2538
2539 if(adapter->hw.media_type != e1000_media_type_copper)
2540 return -EOPNOTSUPP;
2541
2542 switch (cmd) {
2543 case SIOCGMIIPHY:
2544 data->phy_id = adapter->hw.phy_addr;
2545 break;
2546 case SIOCGMIIREG:
2547 if (!capable(CAP_NET_ADMIN))
2548 return -EPERM;
2549 if (e1000_read_phy_reg(&adapter->hw, data->reg_num & 0x1F,
2550 &data->val_out))
2551 return -EIO;
2552 break;
2553 case SIOCSMIIREG:
2554 if (!capable(CAP_NET_ADMIN))
2555 return -EPERM;
2556 if (data->reg_num & ~(0x1F))
2557 return -EFAULT;
2558 mii_reg = data->val_in;
2559 if (e1000_write_phy_reg(&adapter->hw, data->reg_num,
2560 data->val_in))
2561 return -EIO;
2562 if (adapter->hw.phy_type == e1000_phy_m88) {
2563 switch (data->reg_num) {
2564 case PHY_CTRL:
2565 if(data->val_in & MII_CR_AUTO_NEG_EN) {
2566 adapter->hw.autoneg = 1;
2567 adapter->hw.autoneg_advertised = 0x2F;
2568 } else {
2569 if (data->val_in & 0x40)
2570 spddplx = SPEED_1000;
2571 else if (data->val_in & 0x2000)
2572 spddplx = SPEED_100;
2573 else
2574 spddplx = SPEED_10;
2575 spddplx += (data->val_in & 0x100)
2576 ? FULL_DUPLEX :
2577 HALF_DUPLEX;
2578 retval = e1000_set_spd_dplx(adapter,
2579 spddplx);
2580 if(retval)
2581 return retval;
2582 }
2583 if(netif_running(adapter->netdev)) {
2584 e1000_down(adapter);
2585 e1000_up(adapter);
2586 } else
2587 e1000_reset(adapter);
2588 break;
2589 case M88E1000_PHY_SPEC_CTRL:
2590 case M88E1000_EXT_PHY_SPEC_CTRL:
2591 if (e1000_phy_reset(&adapter->hw))
2592 return -EIO;
2593 break;
2594 }
2595 }
2596 break;
2597 default:
2598 return -EOPNOTSUPP;
2599 }
2600 return E1000_SUCCESS;
2601}
2602
2603
2604
2605
2606
2607
2608
2609
2610static inline void
2611e1000_rx_checksum(struct e1000_adapter *adapter,
2612 struct e1000_rx_desc *rx_desc,
2613 struct sk_buff *skb)
2614{
2615
2616 if((adapter->hw.mac_type < e1000_82543) ||
2617
2618 (rx_desc->status & E1000_RXD_STAT_IXSM) ||
2619
2620 (!(rx_desc->status & E1000_RXD_STAT_TCPCS))) {
2621 skb->ip_summed = CHECKSUM_NONE;
2622 return;
2623 }
2624
2625
2626
2627 if(rx_desc->errors & E1000_RXD_ERR_TCPE) {
2628
2629 skb->ip_summed = CHECKSUM_NONE;
2630 adapter->hw_csum_err++;
2631 } else {
2632
2633 skb->ip_summed = CHECKSUM_UNNECESSARY;
2634 adapter->hw_csum_good++;
2635 }
2636}
2637
2638void
2639e1000_pci_set_mwi(struct e1000_hw *hw)
2640{
2641 struct e1000_adapter *adapter = hw->back;
2642
2643 pci_set_mwi(adapter->pdev);
2644}
2645
2646void
2647e1000_pci_clear_mwi(struct e1000_hw *hw)
2648{
2649 struct e1000_adapter *adapter = hw->back;
2650
2651 pci_clear_mwi(adapter->pdev);
2652}
2653
2654void
2655e1000_read_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
2656{
2657 struct e1000_adapter *adapter = hw->back;
2658
2659 pci_read_config_word(adapter->pdev, reg, value);
2660}
2661
2662void
2663e1000_write_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
2664{
2665 struct e1000_adapter *adapter = hw->back;
2666
2667 pci_write_config_word(adapter->pdev, reg, *value);
2668}
2669
2670uint32_t
2671e1000_io_read(struct e1000_hw *hw, unsigned long port)
2672{
2673 return inl(port);
2674}
2675
2676void
2677e1000_io_write(struct e1000_hw *hw, unsigned long port, uint32_t value)
2678{
2679 outl(value, port);
2680}
2681
2682static void
2683e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
2684{
2685 struct e1000_adapter *adapter = netdev->priv;
2686 uint32_t ctrl, rctl;
2687
2688 e1000_irq_disable(adapter);
2689 adapter->vlgrp = grp;
2690
2691 if(grp) {
2692
2693
2694 ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2695 ctrl |= E1000_CTRL_VME;
2696 E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2697
2698
2699
2700 rctl = E1000_READ_REG(&adapter->hw, RCTL);
2701 rctl |= E1000_RCTL_VFE;
2702 rctl &= ~E1000_RCTL_CFIEN;
2703 E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
2704 } else {
2705
2706
2707 ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2708 ctrl &= ~E1000_CTRL_VME;
2709 E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2710
2711
2712
2713 rctl = E1000_READ_REG(&adapter->hw, RCTL);
2714 rctl &= ~E1000_RCTL_VFE;
2715 E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
2716 }
2717
2718 e1000_irq_enable(adapter);
2719}
2720
2721static void
2722e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid)
2723{
2724 struct e1000_adapter *adapter = netdev->priv;
2725 uint32_t vfta, index;
2726
2727
2728
2729 index = (vid >> 5) & 0x7F;
2730 vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
2731 vfta |= (1 << (vid & 0x1F));
2732 e1000_write_vfta(&adapter->hw, index, vfta);
2733}
2734
2735static void
2736e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid)
2737{
2738 struct e1000_adapter *adapter = netdev->priv;
2739 uint32_t vfta, index;
2740
2741 e1000_irq_disable(adapter);
2742
2743 if(adapter->vlgrp)
2744 adapter->vlgrp->vlan_devices[vid] = NULL;
2745
2746 e1000_irq_enable(adapter);
2747
2748
2749
2750 index = (vid >> 5) & 0x7F;
2751 vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
2752 vfta &= ~(1 << (vid & 0x1F));
2753 e1000_write_vfta(&adapter->hw, index, vfta);
2754}
2755
2756static void
2757e1000_restore_vlan(struct e1000_adapter *adapter)
2758{
2759 e1000_vlan_rx_register(adapter->netdev, adapter->vlgrp);
2760
2761 if(adapter->vlgrp) {
2762 uint16_t vid;
2763 for(vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
2764 if(!adapter->vlgrp->vlan_devices[vid])
2765 continue;
2766 e1000_vlan_rx_add_vid(adapter->netdev, vid);
2767 }
2768 }
2769}
2770
2771int
2772e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx)
2773{
2774 adapter->hw.autoneg = 0;
2775
2776 switch(spddplx) {
2777 case SPEED_10 + DUPLEX_HALF:
2778 adapter->hw.forced_speed_duplex = e1000_10_half;
2779 break;
2780 case SPEED_10 + DUPLEX_FULL:
2781 adapter->hw.forced_speed_duplex = e1000_10_full;
2782 break;
2783 case SPEED_100 + DUPLEX_HALF:
2784 adapter->hw.forced_speed_duplex = e1000_100_half;
2785 break;
2786 case SPEED_100 + DUPLEX_FULL:
2787 adapter->hw.forced_speed_duplex = e1000_100_full;
2788 break;
2789 case SPEED_1000 + DUPLEX_FULL:
2790 adapter->hw.autoneg = 1;
2791 adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
2792 break;
2793 case SPEED_1000 + DUPLEX_HALF:
2794 default:
2795 return -EINVAL;
2796 }
2797 return 0;
2798}
2799
2800static int
2801e1000_notify_reboot(struct notifier_block *nb, unsigned long event, void *p)
2802{
2803 struct pci_dev *pdev = NULL;
2804
2805 switch(event) {
2806 case SYS_DOWN:
2807 case SYS_HALT:
2808 case SYS_POWER_OFF:
2809 while((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev))) {
2810 if(pci_dev_driver(pdev) == &e1000_driver)
2811 e1000_suspend(pdev, 3);
2812 }
2813 }
2814 return NOTIFY_DONE;
2815}
2816
2817static int
2818e1000_suspend(struct pci_dev *pdev, uint32_t state)
2819{
2820 struct net_device *netdev = pci_get_drvdata(pdev);
2821 struct e1000_adapter *adapter = netdev->priv;
2822 uint32_t ctrl, ctrl_ext, rctl, manc, status;
2823 uint32_t wufc = adapter->wol;
2824
2825 netif_device_detach(netdev);
2826
2827 if(netif_running(netdev))
2828 e1000_down(adapter);
2829
2830 status = E1000_READ_REG(&adapter->hw, STATUS);
2831 if(status & E1000_STATUS_LU)
2832 wufc &= ~E1000_WUFC_LNKC;
2833
2834 if(wufc) {
2835 e1000_setup_rctl(adapter);
2836 e1000_set_multi(netdev);
2837
2838
2839 if(adapter->wol & E1000_WUFC_MC) {
2840 rctl = E1000_READ_REG(&adapter->hw, RCTL);
2841 rctl |= E1000_RCTL_MPE;
2842 E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
2843 }
2844
2845 if(adapter->hw.mac_type >= e1000_82540) {
2846 ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2847
2848 #define E1000_CTRL_ADVD3WUC 0x00100000
2849
2850 #define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000
2851 ctrl |= E1000_CTRL_ADVD3WUC |
2852 E1000_CTRL_EN_PHY_PWR_MGMT;
2853 E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2854 }
2855
2856 if(adapter->hw.media_type == e1000_media_type_fiber ||
2857 adapter->hw.media_type == e1000_media_type_internal_serdes) {
2858
2859 ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
2860 ctrl_ext |= E1000_CTRL_EXT_SDP7_DATA;
2861 E1000_WRITE_REG(&adapter->hw, CTRL_EXT, ctrl_ext);
2862 }
2863
2864 E1000_WRITE_REG(&adapter->hw, WUC, E1000_WUC_PME_EN);
2865 E1000_WRITE_REG(&adapter->hw, WUFC, wufc);
2866 pci_enable_wake(pdev, 3, 1);
2867 pci_enable_wake(pdev, 4, 1);
2868 } else {
2869 E1000_WRITE_REG(&adapter->hw, WUC, 0);
2870 E1000_WRITE_REG(&adapter->hw, WUFC, 0);
2871 pci_enable_wake(pdev, 3, 0);
2872 pci_enable_wake(pdev, 4, 0);
2873 }
2874
2875 pci_save_state(pdev, adapter->pci_state);
2876
2877 if(adapter->hw.mac_type >= e1000_82540 &&
2878 adapter->hw.media_type == e1000_media_type_copper) {
2879 manc = E1000_READ_REG(&adapter->hw, MANC);
2880 if(manc & E1000_MANC_SMBUS_EN) {
2881 manc |= E1000_MANC_ARP_EN;
2882 E1000_WRITE_REG(&adapter->hw, MANC, manc);
2883 pci_enable_wake(pdev, 3, 1);
2884 pci_enable_wake(pdev, 4, 1);
2885 }
2886 }
2887
2888 state = (state > 0) ? 3 : 0;
2889 pci_set_power_state(pdev, state);
2890
2891 return 0;
2892}
2893
2894#ifdef CONFIG_PM
2895static int
2896e1000_resume(struct pci_dev *pdev)
2897{
2898 struct net_device *netdev = pci_get_drvdata(pdev);
2899 struct e1000_adapter *adapter = netdev->priv;
2900 uint32_t manc;
2901
2902 pci_set_power_state(pdev, 0);
2903 pci_restore_state(pdev, adapter->pci_state);
2904
2905 pci_enable_wake(pdev, 3, 0);
2906 pci_enable_wake(pdev, 4, 0);
2907
2908 e1000_reset(adapter);
2909 E1000_WRITE_REG(&adapter->hw, WUS, ~0);
2910
2911 if(netif_running(netdev))
2912 e1000_up(adapter);
2913
2914 netif_device_attach(netdev);
2915
2916 if(adapter->hw.mac_type >= e1000_82540 &&
2917 adapter->hw.media_type == e1000_media_type_copper) {
2918 manc = E1000_READ_REG(&adapter->hw, MANC);
2919 manc &= ~(E1000_MANC_ARP_EN);
2920 E1000_WRITE_REG(&adapter->hw, MANC, manc);
2921 }
2922
2923 return 0;
2924}
2925#endif
2926
2927#ifdef CONFIG_NET_POLL_CONTROLLER
2928
2929
2930
2931
2932
2933
2934static void e1000_netpoll (struct net_device *dev)
2935{
2936 struct e1000_adapter *adapter = dev->priv;
2937 disable_irq(adapter->pdev->irq);
2938 e1000_intr (adapter->pdev->irq, dev, NULL);
2939 enable_irq(adapter->pdev->irq);
2940}
2941#endif
2942
2943
2944