aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000/e1000_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/e1000/e1000_main.c')
-rw-r--r--drivers/net/e1000/e1000_main.c145
1 files changed, 88 insertions, 57 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 0cf9ff2462ba..1d7c99947e92 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -36,7 +36,7 @@ static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
36#else 36#else
37#define DRIVERNAPI "-NAPI" 37#define DRIVERNAPI "-NAPI"
38#endif 38#endif
39#define DRV_VERSION "7.1.9-k6"DRIVERNAPI 39#define DRV_VERSION "7.2.7-k2"DRIVERNAPI
40char e1000_driver_version[] = DRV_VERSION; 40char e1000_driver_version[] = DRV_VERSION;
41static char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation."; 41static char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
42 42
@@ -98,6 +98,7 @@ static struct pci_device_id e1000_pci_tbl[] = {
98 INTEL_E1000_ETHERNET_DEVICE(0x1098), 98 INTEL_E1000_ETHERNET_DEVICE(0x1098),
99 INTEL_E1000_ETHERNET_DEVICE(0x1099), 99 INTEL_E1000_ETHERNET_DEVICE(0x1099),
100 INTEL_E1000_ETHERNET_DEVICE(0x109A), 100 INTEL_E1000_ETHERNET_DEVICE(0x109A),
101 INTEL_E1000_ETHERNET_DEVICE(0x10A4),
101 INTEL_E1000_ETHERNET_DEVICE(0x10B5), 102 INTEL_E1000_ETHERNET_DEVICE(0x10B5),
102 INTEL_E1000_ETHERNET_DEVICE(0x10B9), 103 INTEL_E1000_ETHERNET_DEVICE(0x10B9),
103 INTEL_E1000_ETHERNET_DEVICE(0x10BA), 104 INTEL_E1000_ETHERNET_DEVICE(0x10BA),
@@ -681,9 +682,9 @@ e1000_probe(struct pci_dev *pdev,
681 unsigned long flash_start, flash_len; 682 unsigned long flash_start, flash_len;
682 683
683 static int cards_found = 0; 684 static int cards_found = 0;
684 static int e1000_ksp3_port_a = 0; /* global ksp3 port a indication */ 685 static int global_quad_port_a = 0; /* global ksp3 port a indication */
685 int i, err, pci_using_dac; 686 int i, err, pci_using_dac;
686 uint16_t eeprom_data; 687 uint16_t eeprom_data = 0;
687 uint16_t eeprom_apme_mask = E1000_EEPROM_APME; 688 uint16_t eeprom_apme_mask = E1000_EEPROM_APME;
688 if ((err = pci_enable_device(pdev))) 689 if ((err = pci_enable_device(pdev)))
689 return err; 690 return err;
@@ -695,21 +696,20 @@ e1000_probe(struct pci_dev *pdev,
695 if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) && 696 if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) &&
696 (err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK))) { 697 (err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK))) {
697 E1000_ERR("No usable DMA configuration, aborting\n"); 698 E1000_ERR("No usable DMA configuration, aborting\n");
698 return err; 699 goto err_dma;
699 } 700 }
700 pci_using_dac = 0; 701 pci_using_dac = 0;
701 } 702 }
702 703
703 if ((err = pci_request_regions(pdev, e1000_driver_name))) 704 if ((err = pci_request_regions(pdev, e1000_driver_name)))
704 return err; 705 goto err_pci_reg;
705 706
706 pci_set_master(pdev); 707 pci_set_master(pdev);
707 708
709 err = -ENOMEM;
708 netdev = alloc_etherdev(sizeof(struct e1000_adapter)); 710 netdev = alloc_etherdev(sizeof(struct e1000_adapter));
709 if (!netdev) { 711 if (!netdev)
710 err = -ENOMEM;
711 goto err_alloc_etherdev; 712 goto err_alloc_etherdev;
712 }
713 713
714 SET_MODULE_OWNER(netdev); 714 SET_MODULE_OWNER(netdev);
715 SET_NETDEV_DEV(netdev, &pdev->dev); 715 SET_NETDEV_DEV(netdev, &pdev->dev);
@@ -724,11 +724,10 @@ e1000_probe(struct pci_dev *pdev,
724 mmio_start = pci_resource_start(pdev, BAR_0); 724 mmio_start = pci_resource_start(pdev, BAR_0);
725 mmio_len = pci_resource_len(pdev, BAR_0); 725 mmio_len = pci_resource_len(pdev, BAR_0);
726 726
727 err = -EIO;
727 adapter->hw.hw_addr = ioremap(mmio_start, mmio_len); 728 adapter->hw.hw_addr = ioremap(mmio_start, mmio_len);
728 if (!adapter->hw.hw_addr) { 729 if (!adapter->hw.hw_addr)
729 err = -EIO;
730 goto err_ioremap; 730 goto err_ioremap;
731 }
732 731
733 for (i = BAR_1; i <= BAR_5; i++) { 732 for (i = BAR_1; i <= BAR_5; i++) {
734 if (pci_resource_len(pdev, i) == 0) 733 if (pci_resource_len(pdev, i) == 0)
@@ -773,6 +772,7 @@ e1000_probe(struct pci_dev *pdev,
773 if ((err = e1000_sw_init(adapter))) 772 if ((err = e1000_sw_init(adapter)))
774 goto err_sw_init; 773 goto err_sw_init;
775 774
775 err = -EIO;
776 /* Flash BAR mapping must happen after e1000_sw_init 776 /* Flash BAR mapping must happen after e1000_sw_init
777 * because it depends on mac_type */ 777 * because it depends on mac_type */
778 if ((adapter->hw.mac_type == e1000_ich8lan) && 778 if ((adapter->hw.mac_type == e1000_ich8lan) &&
@@ -780,24 +780,13 @@ e1000_probe(struct pci_dev *pdev,
780 flash_start = pci_resource_start(pdev, 1); 780 flash_start = pci_resource_start(pdev, 1);
781 flash_len = pci_resource_len(pdev, 1); 781 flash_len = pci_resource_len(pdev, 1);
782 adapter->hw.flash_address = ioremap(flash_start, flash_len); 782 adapter->hw.flash_address = ioremap(flash_start, flash_len);
783 if (!adapter->hw.flash_address) { 783 if (!adapter->hw.flash_address)
784 err = -EIO;
785 goto err_flashmap; 784 goto err_flashmap;
786 }
787 } 785 }
788 786
789 if ((err = e1000_check_phy_reset_block(&adapter->hw))) 787 if (e1000_check_phy_reset_block(&adapter->hw))
790 DPRINTK(PROBE, INFO, "PHY reset is blocked due to SOL/IDER session.\n"); 788 DPRINTK(PROBE, INFO, "PHY reset is blocked due to SOL/IDER session.\n");
791 789
792 /* if ksp3, indicate if it's port a being setup */
793 if (pdev->device == E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3 &&
794 e1000_ksp3_port_a == 0)
795 adapter->ksp3_port_a = 1;
796 e1000_ksp3_port_a++;
797 /* Reset for multiple KP3 adapters */
798 if (e1000_ksp3_port_a == 4)
799 e1000_ksp3_port_a = 0;
800
801 if (adapter->hw.mac_type >= e1000_82543) { 790 if (adapter->hw.mac_type >= e1000_82543) {
802 netdev->features = NETIF_F_SG | 791 netdev->features = NETIF_F_SG |
803 NETIF_F_HW_CSUM | 792 NETIF_F_HW_CSUM |
@@ -829,7 +818,7 @@ e1000_probe(struct pci_dev *pdev,
829 818
830 if (e1000_init_eeprom_params(&adapter->hw)) { 819 if (e1000_init_eeprom_params(&adapter->hw)) {
831 E1000_ERR("EEPROM initialization failed\n"); 820 E1000_ERR("EEPROM initialization failed\n");
832 return -EIO; 821 goto err_eeprom;
833 } 822 }
834 823
835 /* before reading the EEPROM, reset the controller to 824 /* before reading the EEPROM, reset the controller to
@@ -841,7 +830,6 @@ e1000_probe(struct pci_dev *pdev,
841 830
842 if (e1000_validate_eeprom_checksum(&adapter->hw) < 0) { 831 if (e1000_validate_eeprom_checksum(&adapter->hw) < 0) {
843 DPRINTK(PROBE, ERR, "The EEPROM Checksum Is Not Valid\n"); 832 DPRINTK(PROBE, ERR, "The EEPROM Checksum Is Not Valid\n");
844 err = -EIO;
845 goto err_eeprom; 833 goto err_eeprom;
846 } 834 }
847 835
@@ -854,12 +842,9 @@ e1000_probe(struct pci_dev *pdev,
854 842
855 if (!is_valid_ether_addr(netdev->perm_addr)) { 843 if (!is_valid_ether_addr(netdev->perm_addr)) {
856 DPRINTK(PROBE, ERR, "Invalid MAC Address\n"); 844 DPRINTK(PROBE, ERR, "Invalid MAC Address\n");
857 err = -EIO;
858 goto err_eeprom; 845 goto err_eeprom;
859 } 846 }
860 847
861 e1000_read_part_num(&adapter->hw, &(adapter->part_num));
862
863 e1000_get_bus_info(&adapter->hw); 848 e1000_get_bus_info(&adapter->hw);
864 849
865 init_timer(&adapter->tx_fifo_stall_timer); 850 init_timer(&adapter->tx_fifo_stall_timer);
@@ -920,7 +905,38 @@ e1000_probe(struct pci_dev *pdev,
920 break; 905 break;
921 } 906 }
922 if (eeprom_data & eeprom_apme_mask) 907 if (eeprom_data & eeprom_apme_mask)
923 adapter->wol |= E1000_WUFC_MAG; 908 adapter->eeprom_wol |= E1000_WUFC_MAG;
909
910 /* now that we have the eeprom settings, apply the special cases
911 * where the eeprom may be wrong or the board simply won't support
912 * wake on lan on a particular port */
913 switch (pdev->device) {
914 case E1000_DEV_ID_82546GB_PCIE:
915 adapter->eeprom_wol = 0;
916 break;
917 case E1000_DEV_ID_82546EB_FIBER:
918 case E1000_DEV_ID_82546GB_FIBER:
919 case E1000_DEV_ID_82571EB_FIBER:
920 /* Wake events only supported on port A for dual fiber
921 * regardless of eeprom setting */
922 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_FUNC_1)
923 adapter->eeprom_wol = 0;
924 break;
925 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
926 case E1000_DEV_ID_82571EB_QUAD_COPPER:
927 /* if quad port adapter, disable WoL on all but port A */
928 if (global_quad_port_a != 0)
929 adapter->eeprom_wol = 0;
930 else
931 adapter->quad_port_a = 1;
932 /* Reset for multiple quad port adapters */
933 if (++global_quad_port_a == 4)
934 global_quad_port_a = 0;
935 break;
936 }
937
938 /* initialize the wol settings based on the eeprom settings */
939 adapter->wol = adapter->eeprom_wol;
924 940
925 /* print bus type/speed/width info */ 941 /* print bus type/speed/width info */
926 { 942 {
@@ -963,16 +979,33 @@ e1000_probe(struct pci_dev *pdev,
963 return 0; 979 return 0;
964 980
965err_register: 981err_register:
982 e1000_release_hw_control(adapter);
983err_eeprom:
984 if (!e1000_check_phy_reset_block(&adapter->hw))
985 e1000_phy_hw_reset(&adapter->hw);
986
966 if (adapter->hw.flash_address) 987 if (adapter->hw.flash_address)
967 iounmap(adapter->hw.flash_address); 988 iounmap(adapter->hw.flash_address);
968err_flashmap: 989err_flashmap:
990#ifdef CONFIG_E1000_NAPI
991 for (i = 0; i < adapter->num_rx_queues; i++)
992 dev_put(&adapter->polling_netdev[i]);
993#endif
994
995 kfree(adapter->tx_ring);
996 kfree(adapter->rx_ring);
997#ifdef CONFIG_E1000_NAPI
998 kfree(adapter->polling_netdev);
999#endif
969err_sw_init: 1000err_sw_init:
970err_eeprom:
971 iounmap(adapter->hw.hw_addr); 1001 iounmap(adapter->hw.hw_addr);
972err_ioremap: 1002err_ioremap:
973 free_netdev(netdev); 1003 free_netdev(netdev);
974err_alloc_etherdev: 1004err_alloc_etherdev:
975 pci_release_regions(pdev); 1005 pci_release_regions(pdev);
1006err_pci_reg:
1007err_dma:
1008 pci_disable_device(pdev);
976 return err; 1009 return err;
977} 1010}
978 1011
@@ -1207,7 +1240,7 @@ e1000_open(struct net_device *netdev)
1207 1240
1208 err = e1000_request_irq(adapter); 1241 err = e1000_request_irq(adapter);
1209 if (err) 1242 if (err)
1210 goto err_up; 1243 goto err_req_irq;
1211 1244
1212 e1000_power_up_phy(adapter); 1245 e1000_power_up_phy(adapter);
1213 1246
@@ -1228,6 +1261,9 @@ e1000_open(struct net_device *netdev)
1228 return E1000_SUCCESS; 1261 return E1000_SUCCESS;
1229 1262
1230err_up: 1263err_up:
1264 e1000_power_down_phy(adapter);
1265 e1000_free_irq(adapter);
1266err_req_irq:
1231 e1000_free_all_rx_resources(adapter); 1267 e1000_free_all_rx_resources(adapter);
1232err_setup_rx: 1268err_setup_rx:
1233 e1000_free_all_tx_resources(adapter); 1269 e1000_free_all_tx_resources(adapter);
@@ -1380,10 +1416,6 @@ setup_tx_desc_die:
1380 * (Descriptors) for all queues 1416 * (Descriptors) for all queues
1381 * @adapter: board private structure 1417 * @adapter: board private structure
1382 * 1418 *
1383 * If this function returns with an error, then it's possible one or
1384 * more of the rings is populated (while the rest are not). It is the
1385 * callers duty to clean those orphaned rings.
1386 *
1387 * Return 0 on success, negative on failure 1419 * Return 0 on success, negative on failure
1388 **/ 1420 **/
1389 1421
@@ -1397,6 +1429,9 @@ e1000_setup_all_tx_resources(struct e1000_adapter *adapter)
1397 if (err) { 1429 if (err) {
1398 DPRINTK(PROBE, ERR, 1430 DPRINTK(PROBE, ERR,
1399 "Allocation for Tx Queue %u failed\n", i); 1431 "Allocation for Tx Queue %u failed\n", i);
1432 for (i-- ; i >= 0; i--)
1433 e1000_free_tx_resources(adapter,
1434 &adapter->tx_ring[i]);
1400 break; 1435 break;
1401 } 1436 }
1402 } 1437 }
@@ -1636,10 +1671,6 @@ setup_rx_desc_die:
1636 * (Descriptors) for all queues 1671 * (Descriptors) for all queues
1637 * @adapter: board private structure 1672 * @adapter: board private structure
1638 * 1673 *
1639 * If this function returns with an error, then it's possible one or
1640 * more of the rings is populated (while the rest are not). It is the
1641 * callers duty to clean those orphaned rings.
1642 *
1643 * Return 0 on success, negative on failure 1674 * Return 0 on success, negative on failure
1644 **/ 1675 **/
1645 1676
@@ -1653,6 +1684,9 @@ e1000_setup_all_rx_resources(struct e1000_adapter *adapter)
1653 if (err) { 1684 if (err) {
1654 DPRINTK(PROBE, ERR, 1685 DPRINTK(PROBE, ERR,
1655 "Allocation for Rx Queue %u failed\n", i); 1686 "Allocation for Rx Queue %u failed\n", i);
1687 for (i-- ; i >= 0; i--)
1688 e1000_free_rx_resources(adapter,
1689 &adapter->rx_ring[i]);
1656 break; 1690 break;
1657 } 1691 }
1658 } 1692 }
@@ -2439,10 +2473,9 @@ e1000_watchdog(unsigned long data)
2439 * disable receives in the ISR and 2473 * disable receives in the ISR and
2440 * reset device here in the watchdog 2474 * reset device here in the watchdog
2441 */ 2475 */
2442 if (adapter->hw.mac_type == e1000_80003es2lan) { 2476 if (adapter->hw.mac_type == e1000_80003es2lan)
2443 /* reset device */ 2477 /* reset device */
2444 schedule_work(&adapter->reset_task); 2478 schedule_work(&adapter->reset_task);
2445 }
2446 } 2479 }
2447 2480
2448 e1000_smartspeed(adapter); 2481 e1000_smartspeed(adapter);
@@ -3677,7 +3710,7 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
3677 E1000_DBG("%s: Receive packet consumed multiple" 3710 E1000_DBG("%s: Receive packet consumed multiple"
3678 " buffers\n", netdev->name); 3711 " buffers\n", netdev->name);
3679 /* recycle */ 3712 /* recycle */
3680 buffer_info-> skb = skb; 3713 buffer_info->skb = skb;
3681 goto next_desc; 3714 goto next_desc;
3682 } 3715 }
3683 3716
@@ -3708,7 +3741,6 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
3708 netdev_alloc_skb(netdev, length + NET_IP_ALIGN); 3741 netdev_alloc_skb(netdev, length + NET_IP_ALIGN);
3709 if (new_skb) { 3742 if (new_skb) {
3710 skb_reserve(new_skb, NET_IP_ALIGN); 3743 skb_reserve(new_skb, NET_IP_ALIGN);
3711 new_skb->dev = netdev;
3712 memcpy(new_skb->data - NET_IP_ALIGN, 3744 memcpy(new_skb->data - NET_IP_ALIGN,
3713 skb->data - NET_IP_ALIGN, 3745 skb->data - NET_IP_ALIGN,
3714 length + NET_IP_ALIGN); 3746 length + NET_IP_ALIGN);
@@ -3975,13 +4007,13 @@ e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
3975 buffer_info = &rx_ring->buffer_info[i]; 4007 buffer_info = &rx_ring->buffer_info[i];
3976 4008
3977 while (cleaned_count--) { 4009 while (cleaned_count--) {
3978 if (!(skb = buffer_info->skb)) 4010 skb = buffer_info->skb;
3979 skb = netdev_alloc_skb(netdev, bufsz); 4011 if (skb) {
3980 else {
3981 skb_trim(skb, 0); 4012 skb_trim(skb, 0);
3982 goto map_skb; 4013 goto map_skb;
3983 } 4014 }
3984 4015
4016 skb = netdev_alloc_skb(netdev, bufsz);
3985 if (unlikely(!skb)) { 4017 if (unlikely(!skb)) {
3986 /* Better luck next round */ 4018 /* Better luck next round */
3987 adapter->alloc_rx_buff_failed++; 4019 adapter->alloc_rx_buff_failed++;
@@ -4006,10 +4038,10 @@ e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
4006 dev_kfree_skb(skb); 4038 dev_kfree_skb(skb);
4007 dev_kfree_skb(oldskb); 4039 dev_kfree_skb(oldskb);
4008 break; /* while !buffer_info->skb */ 4040 break; /* while !buffer_info->skb */
4009 } else {
4010 /* Use new allocation */
4011 dev_kfree_skb(oldskb);
4012 } 4041 }
4042
4043 /* Use new allocation */
4044 dev_kfree_skb(oldskb);
4013 } 4045 }
4014 /* Make buffer alignment 2 beyond a 16 byte boundary 4046 /* Make buffer alignment 2 beyond a 16 byte boundary
4015 * this will result in a 16 byte aligned IP header after 4047 * this will result in a 16 byte aligned IP header after
@@ -4017,8 +4049,6 @@ e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
4017 */ 4049 */
4018 skb_reserve(skb, NET_IP_ALIGN); 4050 skb_reserve(skb, NET_IP_ALIGN);
4019 4051
4020 skb->dev = netdev;
4021
4022 buffer_info->skb = skb; 4052 buffer_info->skb = skb;
4023 buffer_info->length = adapter->rx_buffer_len; 4053 buffer_info->length = adapter->rx_buffer_len;
4024map_skb: 4054map_skb:
@@ -4132,8 +4162,6 @@ e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
4132 */ 4162 */
4133 skb_reserve(skb, NET_IP_ALIGN); 4163 skb_reserve(skb, NET_IP_ALIGN);
4134 4164
4135 skb->dev = netdev;
4136
4137 buffer_info->skb = skb; 4165 buffer_info->skb = skb;
4138 buffer_info->length = adapter->rx_ps_bsize0; 4166 buffer_info->length = adapter->rx_ps_bsize0;
4139 buffer_info->dma = pci_map_single(pdev, skb->data, 4167 buffer_info->dma = pci_map_single(pdev, skb->data,
@@ -4625,7 +4653,7 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state)
4625 e1000_set_multi(netdev); 4653 e1000_set_multi(netdev);
4626 4654
4627 /* turn on all-multi mode if wake on multicast is enabled */ 4655 /* turn on all-multi mode if wake on multicast is enabled */
4628 if (adapter->wol & E1000_WUFC_MC) { 4656 if (wufc & E1000_WUFC_MC) {
4629 rctl = E1000_READ_REG(&adapter->hw, RCTL); 4657 rctl = E1000_READ_REG(&adapter->hw, RCTL);
4630 rctl |= E1000_RCTL_MPE; 4658 rctl |= E1000_RCTL_MPE;
4631 E1000_WRITE_REG(&adapter->hw, RCTL, rctl); 4659 E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
@@ -4697,11 +4725,14 @@ e1000_resume(struct pci_dev *pdev)
4697{ 4725{
4698 struct net_device *netdev = pci_get_drvdata(pdev); 4726 struct net_device *netdev = pci_get_drvdata(pdev);
4699 struct e1000_adapter *adapter = netdev_priv(netdev); 4727 struct e1000_adapter *adapter = netdev_priv(netdev);
4700 uint32_t manc, ret_val; 4728 uint32_t manc, err;
4701 4729
4702 pci_set_power_state(pdev, PCI_D0); 4730 pci_set_power_state(pdev, PCI_D0);
4703 e1000_pci_restore_state(adapter); 4731 e1000_pci_restore_state(adapter);
4704 ret_val = pci_enable_device(pdev); 4732 if ((err = pci_enable_device(pdev))) {
4733 printk(KERN_ERR "e1000: Cannot enable PCI device from suspend\n");
4734 return err;
4735 }
4705 pci_set_master(pdev); 4736 pci_set_master(pdev);
4706 4737
4707 pci_enable_wake(pdev, PCI_D3hot, 0); 4738 pci_enable_wake(pdev, PCI_D3hot, 0);