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