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