diff options
Diffstat (limited to 'drivers/net/e1000/e1000_main.c')
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 145 |
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 |
40 | char e1000_driver_version[] = DRV_VERSION; | 40 | char e1000_driver_version[] = DRV_VERSION; |
41 | static char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation."; | 41 | static 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 | ||
965 | err_register: | 981 | err_register: |
982 | e1000_release_hw_control(adapter); | ||
983 | err_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); |
968 | err_flashmap: | 989 | err_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 | ||
969 | err_sw_init: | 1000 | err_sw_init: |
970 | err_eeprom: | ||
971 | iounmap(adapter->hw.hw_addr); | 1001 | iounmap(adapter->hw.hw_addr); |
972 | err_ioremap: | 1002 | err_ioremap: |
973 | free_netdev(netdev); | 1003 | free_netdev(netdev); |
974 | err_alloc_etherdev: | 1004 | err_alloc_etherdev: |
975 | pci_release_regions(pdev); | 1005 | pci_release_regions(pdev); |
1006 | err_pci_reg: | ||
1007 | err_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 | ||
1230 | err_up: | 1263 | err_up: |
1264 | e1000_power_down_phy(adapter); | ||
1265 | e1000_free_irq(adapter); | ||
1266 | err_req_irq: | ||
1231 | e1000_free_all_rx_resources(adapter); | 1267 | e1000_free_all_rx_resources(adapter); |
1232 | err_setup_rx: | 1268 | err_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; |
4024 | map_skb: | 4054 | map_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); |