aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-08-31 16:03:33 -0400
committerDavid S. Miller <davem@davemloft.net>2012-08-31 16:03:33 -0400
commitfcb118491bc8bc16c4eeb8142366bcbe17fe615d (patch)
tree8eb8aba6fe58519aea313820bb4b9c0859721cbd
parent80f0fd8a7f18af78dd26bf94230e89c3ae82d4ba (diff)
parentdd1fe113e7532c7513ff03f832312d81628a23ff (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
-rw-r--r--drivers/net/ethernet/intel/e1000e/82571.c4
-rw-r--r--drivers/net/ethernet/intel/e1000e/ethtool.c3
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c19
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ixgbevf.h4
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c160
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/vf.c14
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/vf.h1
7 files changed, 164 insertions, 41 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c
index 080c89093feb..c98586408005 100644
--- a/drivers/net/ethernet/intel/e1000e/82571.c
+++ b/drivers/net/ethernet/intel/e1000e/82571.c
@@ -653,7 +653,7 @@ static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw)
653 **/ 653 **/
654static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active) 654static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active)
655{ 655{
656 u16 data = er32(POEMB); 656 u32 data = er32(POEMB);
657 657
658 if (active) 658 if (active)
659 data |= E1000_PHY_CTRL_D0A_LPLU; 659 data |= E1000_PHY_CTRL_D0A_LPLU;
@@ -677,7 +677,7 @@ static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active)
677 **/ 677 **/
678static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool active) 678static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool active)
679{ 679{
680 u16 data = er32(POEMB); 680 u32 data = er32(POEMB);
681 681
682 if (!active) { 682 if (!active) {
683 data &= ~E1000_PHY_CTRL_NOND0A_LPLU; 683 data &= ~E1000_PHY_CTRL_NOND0A_LPLU;
diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
index 2e76f06720fd..c11ac2756667 100644
--- a/drivers/net/ethernet/intel/e1000e/ethtool.c
+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
@@ -1942,7 +1942,8 @@ static int e1000_set_coalesce(struct net_device *netdev,
1942 return -EINVAL; 1942 return -EINVAL;
1943 1943
1944 if (ec->rx_coalesce_usecs == 4) { 1944 if (ec->rx_coalesce_usecs == 4) {
1945 adapter->itr = adapter->itr_setting = 4; 1945 adapter->itr_setting = 4;
1946 adapter->itr = adapter->itr_setting;
1946 } else if (ec->rx_coalesce_usecs <= 3) { 1947 } else if (ec->rx_coalesce_usecs <= 3) {
1947 adapter->itr = 20000; 1948 adapter->itr = 20000;
1948 adapter->itr_setting = ec->rx_coalesce_usecs; 1949 adapter->itr_setting = ec->rx_coalesce_usecs;
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index d01a099475a1..121990cab144 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -56,7 +56,7 @@
56 56
57#define DRV_EXTRAVERSION "-k" 57#define DRV_EXTRAVERSION "-k"
58 58
59#define DRV_VERSION "2.0.0" DRV_EXTRAVERSION 59#define DRV_VERSION "2.1.4" DRV_EXTRAVERSION
60char e1000e_driver_name[] = "e1000e"; 60char e1000e_driver_name[] = "e1000e";
61const char e1000e_driver_version[] = DRV_VERSION; 61const char e1000e_driver_version[] = DRV_VERSION;
62 62
@@ -3446,7 +3446,7 @@ void e1000e_reset(struct e1000_adapter *adapter)
3446 3446
3447 /* 3447 /*
3448 * if short on Rx space, Rx wins and must trump Tx 3448 * if short on Rx space, Rx wins and must trump Tx
3449 * adjustment or use Early Receive if available 3449 * adjustment
3450 */ 3450 */
3451 if (pba < min_rx_space) 3451 if (pba < min_rx_space)
3452 pba = min_rx_space; 3452 pba = min_rx_space;
@@ -3755,6 +3755,10 @@ static irqreturn_t e1000_intr_msi_test(int irq, void *data)
3755 e_dbg("icr is %08X\n", icr); 3755 e_dbg("icr is %08X\n", icr);
3756 if (icr & E1000_ICR_RXSEQ) { 3756 if (icr & E1000_ICR_RXSEQ) {
3757 adapter->flags &= ~FLAG_MSI_TEST_FAILED; 3757 adapter->flags &= ~FLAG_MSI_TEST_FAILED;
3758 /*
3759 * Force memory writes to complete before acknowledging the
3760 * interrupt is handled.
3761 */
3758 wmb(); 3762 wmb();
3759 } 3763 }
3760 3764
@@ -3796,6 +3800,10 @@ static int e1000_test_msi_interrupt(struct e1000_adapter *adapter)
3796 goto msi_test_failed; 3800 goto msi_test_failed;
3797 } 3801 }
3798 3802
3803 /*
3804 * Force memory writes to complete before enabling and firing an
3805 * interrupt.
3806 */
3799 wmb(); 3807 wmb();
3800 3808
3801 e1000_irq_enable(adapter); 3809 e1000_irq_enable(adapter);
@@ -3807,7 +3815,7 @@ static int e1000_test_msi_interrupt(struct e1000_adapter *adapter)
3807 3815
3808 e1000_irq_disable(adapter); 3816 e1000_irq_disable(adapter);
3809 3817
3810 rmb(); 3818 rmb(); /* read flags after interrupt has been fired */
3811 3819
3812 if (adapter->flags & FLAG_MSI_TEST_FAILED) { 3820 if (adapter->flags & FLAG_MSI_TEST_FAILED) {
3813 adapter->int_mode = E1000E_INT_MODE_LEGACY; 3821 adapter->int_mode = E1000E_INT_MODE_LEGACY;
@@ -4670,7 +4678,7 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb)
4670 struct e1000_buffer *buffer_info; 4678 struct e1000_buffer *buffer_info;
4671 unsigned int i; 4679 unsigned int i;
4672 u32 cmd_length = 0; 4680 u32 cmd_length = 0;
4673 u16 ipcse = 0, tucse, mss; 4681 u16 ipcse = 0, mss;
4674 u8 ipcss, ipcso, tucss, tucso, hdr_len; 4682 u8 ipcss, ipcso, tucss, tucso, hdr_len;
4675 4683
4676 if (!skb_is_gso(skb)) 4684 if (!skb_is_gso(skb))
@@ -4704,7 +4712,6 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb)
4704 ipcso = (void *)&(ip_hdr(skb)->check) - (void *)skb->data; 4712 ipcso = (void *)&(ip_hdr(skb)->check) - (void *)skb->data;
4705 tucss = skb_transport_offset(skb); 4713 tucss = skb_transport_offset(skb);
4706 tucso = (void *)&(tcp_hdr(skb)->check) - (void *)skb->data; 4714 tucso = (void *)&(tcp_hdr(skb)->check) - (void *)skb->data;
4707 tucse = 0;
4708 4715
4709 cmd_length |= (E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE | 4716 cmd_length |= (E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE |
4710 E1000_TXD_CMD_TCP | (skb->len - (hdr_len))); 4717 E1000_TXD_CMD_TCP | (skb->len - (hdr_len)));
@@ -4718,7 +4725,7 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb)
4718 context_desc->lower_setup.ip_fields.ipcse = cpu_to_le16(ipcse); 4725 context_desc->lower_setup.ip_fields.ipcse = cpu_to_le16(ipcse);
4719 context_desc->upper_setup.tcp_fields.tucss = tucss; 4726 context_desc->upper_setup.tcp_fields.tucss = tucss;
4720 context_desc->upper_setup.tcp_fields.tucso = tucso; 4727 context_desc->upper_setup.tcp_fields.tucso = tucso;
4721 context_desc->upper_setup.tcp_fields.tucse = cpu_to_le16(tucse); 4728 context_desc->upper_setup.tcp_fields.tucse = 0;
4722 context_desc->tcp_seg_setup.fields.mss = cpu_to_le16(mss); 4729 context_desc->tcp_seg_setup.fields.mss = cpu_to_le16(mss);
4723 context_desc->tcp_seg_setup.fields.hdr_len = hdr_len; 4730 context_desc->tcp_seg_setup.fields.hdr_len = hdr_len;
4724 context_desc->cmd_and_length = cpu_to_le32(cmd_length); 4731 context_desc->cmd_and_length = cpu_to_le32(cmd_length);
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
index 98cadb0c4dab..eb26fda63c99 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
@@ -101,7 +101,9 @@ struct ixgbevf_ring {
101 101
102/* Supported Rx Buffer Sizes */ 102/* Supported Rx Buffer Sizes */
103#define IXGBEVF_RXBUFFER_256 256 /* Used for packet split */ 103#define IXGBEVF_RXBUFFER_256 256 /* Used for packet split */
104#define IXGBEVF_RXBUFFER_2048 2048 104#define IXGBEVF_RXBUFFER_3K 3072
105#define IXGBEVF_RXBUFFER_7K 7168
106#define IXGBEVF_RXBUFFER_15K 15360
105#define IXGBEVF_MAX_RXBUFFER 16384 /* largest size for single descriptor */ 107#define IXGBEVF_MAX_RXBUFFER 16384 /* largest size for single descriptor */
106 108
107#define IXGBEVF_RX_HDR_SIZE IXGBEVF_RXBUFFER_256 109#define IXGBEVF_RX_HDR_SIZE IXGBEVF_RXBUFFER_256
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index 60ef64587412..a5d9cc5bb257 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -1057,15 +1057,46 @@ static void ixgbevf_configure_srrctl(struct ixgbevf_adapter *adapter, int index)
1057 1057
1058 srrctl |= IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF; 1058 srrctl |= IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF;
1059 1059
1060 if (rx_ring->rx_buf_len == MAXIMUM_ETHERNET_VLAN_SIZE) 1060 srrctl |= ALIGN(rx_ring->rx_buf_len, 1024) >>
1061 srrctl |= IXGBEVF_RXBUFFER_2048 >> 1061 IXGBE_SRRCTL_BSIZEPKT_SHIFT;
1062 IXGBE_SRRCTL_BSIZEPKT_SHIFT; 1062
1063 else
1064 srrctl |= rx_ring->rx_buf_len >>
1065 IXGBE_SRRCTL_BSIZEPKT_SHIFT;
1066 IXGBE_WRITE_REG(hw, IXGBE_VFSRRCTL(index), srrctl); 1063 IXGBE_WRITE_REG(hw, IXGBE_VFSRRCTL(index), srrctl);
1067} 1064}
1068 1065
1066static void ixgbevf_set_rx_buffer_len(struct ixgbevf_adapter *adapter)
1067{
1068 struct ixgbe_hw *hw = &adapter->hw;
1069 struct net_device *netdev = adapter->netdev;
1070 int max_frame = netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
1071 int i;
1072 u16 rx_buf_len;
1073
1074 /* notify the PF of our intent to use this size of frame */
1075 ixgbevf_rlpml_set_vf(hw, max_frame);
1076
1077 /* PF will allow an extra 4 bytes past for vlan tagged frames */
1078 max_frame += VLAN_HLEN;
1079
1080 /*
1081 * Make best use of allocation by using all but 1K of a
1082 * power of 2 allocation that will be used for skb->head.
1083 */
1084 if ((hw->mac.type == ixgbe_mac_X540_vf) &&
1085 (max_frame <= MAXIMUM_ETHERNET_VLAN_SIZE))
1086 rx_buf_len = MAXIMUM_ETHERNET_VLAN_SIZE;
1087 else if (max_frame <= IXGBEVF_RXBUFFER_3K)
1088 rx_buf_len = IXGBEVF_RXBUFFER_3K;
1089 else if (max_frame <= IXGBEVF_RXBUFFER_7K)
1090 rx_buf_len = IXGBEVF_RXBUFFER_7K;
1091 else if (max_frame <= IXGBEVF_RXBUFFER_15K)
1092 rx_buf_len = IXGBEVF_RXBUFFER_15K;
1093 else
1094 rx_buf_len = IXGBEVF_MAX_RXBUFFER;
1095
1096 for (i = 0; i < adapter->num_rx_queues; i++)
1097 adapter->rx_ring[i].rx_buf_len = rx_buf_len;
1098}
1099
1069/** 1100/**
1070 * ixgbevf_configure_rx - Configure 82599 VF Receive Unit after Reset 1101 * ixgbevf_configure_rx - Configure 82599 VF Receive Unit after Reset
1071 * @adapter: board private structure 1102 * @adapter: board private structure
@@ -1076,18 +1107,14 @@ static void ixgbevf_configure_rx(struct ixgbevf_adapter *adapter)
1076{ 1107{
1077 u64 rdba; 1108 u64 rdba;
1078 struct ixgbe_hw *hw = &adapter->hw; 1109 struct ixgbe_hw *hw = &adapter->hw;
1079 struct net_device *netdev = adapter->netdev;
1080 int max_frame = netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
1081 int i, j; 1110 int i, j;
1082 u32 rdlen; 1111 u32 rdlen;
1083 int rx_buf_len;
1084 1112
1085 /* PSRTYPE must be initialized in 82599 */ 1113 /* PSRTYPE must be initialized in 82599 */
1086 IXGBE_WRITE_REG(hw, IXGBE_VFPSRTYPE, 0); 1114 IXGBE_WRITE_REG(hw, IXGBE_VFPSRTYPE, 0);
1087 if (netdev->mtu <= ETH_DATA_LEN) 1115
1088 rx_buf_len = MAXIMUM_ETHERNET_VLAN_SIZE; 1116 /* set_rx_buffer_len must be called before ring initialization */
1089 else 1117 ixgbevf_set_rx_buffer_len(adapter);
1090 rx_buf_len = ALIGN(max_frame, 1024);
1091 1118
1092 rdlen = adapter->rx_ring[0].count * sizeof(union ixgbe_adv_rx_desc); 1119 rdlen = adapter->rx_ring[0].count * sizeof(union ixgbe_adv_rx_desc);
1093 /* Setup the HW Rx Head and Tail Descriptor Pointers and 1120 /* Setup the HW Rx Head and Tail Descriptor Pointers and
@@ -1103,7 +1130,6 @@ static void ixgbevf_configure_rx(struct ixgbevf_adapter *adapter)
1103 IXGBE_WRITE_REG(hw, IXGBE_VFRDT(j), 0); 1130 IXGBE_WRITE_REG(hw, IXGBE_VFRDT(j), 0);
1104 adapter->rx_ring[i].head = IXGBE_VFRDH(j); 1131 adapter->rx_ring[i].head = IXGBE_VFRDH(j);
1105 adapter->rx_ring[i].tail = IXGBE_VFRDT(j); 1132 adapter->rx_ring[i].tail = IXGBE_VFRDT(j);
1106 adapter->rx_ring[i].rx_buf_len = rx_buf_len;
1107 1133
1108 ixgbevf_configure_srrctl(adapter, j); 1134 ixgbevf_configure_srrctl(adapter, j);
1109 } 1135 }
@@ -1315,7 +1341,6 @@ static void ixgbevf_up_complete(struct ixgbevf_adapter *adapter)
1315 int i, j = 0; 1341 int i, j = 0;
1316 int num_rx_rings = adapter->num_rx_queues; 1342 int num_rx_rings = adapter->num_rx_queues;
1317 u32 txdctl, rxdctl; 1343 u32 txdctl, rxdctl;
1318 u32 msg[2];
1319 1344
1320 for (i = 0; i < adapter->num_tx_queues; i++) { 1345 for (i = 0; i < adapter->num_tx_queues; i++) {
1321 j = adapter->tx_ring[i].reg_idx; 1346 j = adapter->tx_ring[i].reg_idx;
@@ -1356,10 +1381,6 @@ static void ixgbevf_up_complete(struct ixgbevf_adapter *adapter)
1356 hw->mac.ops.set_rar(hw, 0, hw->mac.perm_addr, 0); 1381 hw->mac.ops.set_rar(hw, 0, hw->mac.perm_addr, 0);
1357 } 1382 }
1358 1383
1359 msg[0] = IXGBE_VF_SET_LPE;
1360 msg[1] = netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
1361 hw->mbx.ops.write_posted(hw, msg, 2);
1362
1363 spin_unlock(&adapter->mbx_lock); 1384 spin_unlock(&adapter->mbx_lock);
1364 1385
1365 clear_bit(__IXGBEVF_DOWN, &adapter->state); 1386 clear_bit(__IXGBEVF_DOWN, &adapter->state);
@@ -1867,6 +1888,22 @@ err_set_interrupt:
1867} 1888}
1868 1889
1869/** 1890/**
1891 * ixgbevf_clear_interrupt_scheme - Clear the current interrupt scheme settings
1892 * @adapter: board private structure to clear interrupt scheme on
1893 *
1894 * We go through and clear interrupt specific resources and reset the structure
1895 * to pre-load conditions
1896 **/
1897static void ixgbevf_clear_interrupt_scheme(struct ixgbevf_adapter *adapter)
1898{
1899 adapter->num_tx_queues = 0;
1900 adapter->num_rx_queues = 0;
1901
1902 ixgbevf_free_q_vectors(adapter);
1903 ixgbevf_reset_interrupt_capability(adapter);
1904}
1905
1906/**
1870 * ixgbevf_sw_init - Initialize general software structures 1907 * ixgbevf_sw_init - Initialize general software structures
1871 * (struct ixgbevf_adapter) 1908 * (struct ixgbevf_adapter)
1872 * @adapter: board private structure to initialize 1909 * @adapter: board private structure to initialize
@@ -2860,10 +2897,8 @@ static int ixgbevf_set_mac(struct net_device *netdev, void *p)
2860static int ixgbevf_change_mtu(struct net_device *netdev, int new_mtu) 2897static int ixgbevf_change_mtu(struct net_device *netdev, int new_mtu)
2861{ 2898{
2862 struct ixgbevf_adapter *adapter = netdev_priv(netdev); 2899 struct ixgbevf_adapter *adapter = netdev_priv(netdev);
2863 struct ixgbe_hw *hw = &adapter->hw;
2864 int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN; 2900 int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
2865 int max_possible_frame = MAXIMUM_ETHERNET_VLAN_SIZE; 2901 int max_possible_frame = MAXIMUM_ETHERNET_VLAN_SIZE;
2866 u32 msg[2];
2867 2902
2868 if (adapter->hw.mac.type == ixgbe_mac_X540_vf) 2903 if (adapter->hw.mac.type == ixgbe_mac_X540_vf)
2869 max_possible_frame = IXGBE_MAX_JUMBO_FRAME_SIZE; 2904 max_possible_frame = IXGBE_MAX_JUMBO_FRAME_SIZE;
@@ -2877,35 +2912,91 @@ static int ixgbevf_change_mtu(struct net_device *netdev, int new_mtu)
2877 /* must set new MTU before calling down or up */ 2912 /* must set new MTU before calling down or up */
2878 netdev->mtu = new_mtu; 2913 netdev->mtu = new_mtu;
2879 2914
2880 if (!netif_running(netdev)) {
2881 msg[0] = IXGBE_VF_SET_LPE;
2882 msg[1] = max_frame;
2883 hw->mbx.ops.write_posted(hw, msg, 2);
2884 }
2885
2886 if (netif_running(netdev)) 2915 if (netif_running(netdev))
2887 ixgbevf_reinit_locked(adapter); 2916 ixgbevf_reinit_locked(adapter);
2888 2917
2889 return 0; 2918 return 0;
2890} 2919}
2891 2920
2892static void ixgbevf_shutdown(struct pci_dev *pdev) 2921static int ixgbevf_suspend(struct pci_dev *pdev, pm_message_t state)
2893{ 2922{
2894 struct net_device *netdev = pci_get_drvdata(pdev); 2923 struct net_device *netdev = pci_get_drvdata(pdev);
2895 struct ixgbevf_adapter *adapter = netdev_priv(netdev); 2924 struct ixgbevf_adapter *adapter = netdev_priv(netdev);
2925#ifdef CONFIG_PM
2926 int retval = 0;
2927#endif
2896 2928
2897 netif_device_detach(netdev); 2929 netif_device_detach(netdev);
2898 2930
2899 if (netif_running(netdev)) { 2931 if (netif_running(netdev)) {
2932 rtnl_lock();
2900 ixgbevf_down(adapter); 2933 ixgbevf_down(adapter);
2901 ixgbevf_free_irq(adapter); 2934 ixgbevf_free_irq(adapter);
2902 ixgbevf_free_all_tx_resources(adapter); 2935 ixgbevf_free_all_tx_resources(adapter);
2903 ixgbevf_free_all_rx_resources(adapter); 2936 ixgbevf_free_all_rx_resources(adapter);
2937 rtnl_unlock();
2904 } 2938 }
2905 2939
2906 pci_save_state(pdev); 2940 ixgbevf_clear_interrupt_scheme(adapter);
2941
2942#ifdef CONFIG_PM
2943 retval = pci_save_state(pdev);
2944 if (retval)
2945 return retval;
2907 2946
2947#endif
2908 pci_disable_device(pdev); 2948 pci_disable_device(pdev);
2949
2950 return 0;
2951}
2952
2953#ifdef CONFIG_PM
2954static int ixgbevf_resume(struct pci_dev *pdev)
2955{
2956 struct ixgbevf_adapter *adapter = pci_get_drvdata(pdev);
2957 struct net_device *netdev = adapter->netdev;
2958 u32 err;
2959
2960 pci_set_power_state(pdev, PCI_D0);
2961 pci_restore_state(pdev);
2962 /*
2963 * pci_restore_state clears dev->state_saved so call
2964 * pci_save_state to restore it.
2965 */
2966 pci_save_state(pdev);
2967
2968 err = pci_enable_device_mem(pdev);
2969 if (err) {
2970 dev_err(&pdev->dev, "Cannot enable PCI device from suspend\n");
2971 return err;
2972 }
2973 pci_set_master(pdev);
2974
2975 rtnl_lock();
2976 err = ixgbevf_init_interrupt_scheme(adapter);
2977 rtnl_unlock();
2978 if (err) {
2979 dev_err(&pdev->dev, "Cannot initialize interrupts\n");
2980 return err;
2981 }
2982
2983 ixgbevf_reset(adapter);
2984
2985 if (netif_running(netdev)) {
2986 err = ixgbevf_open(netdev);
2987 if (err)
2988 return err;
2989 }
2990
2991 netif_device_attach(netdev);
2992
2993 return err;
2994}
2995
2996#endif /* CONFIG_PM */
2997static void ixgbevf_shutdown(struct pci_dev *pdev)
2998{
2999 ixgbevf_suspend(pdev, PMSG_SUSPEND);
2909} 3000}
2910 3001
2911static struct rtnl_link_stats64 *ixgbevf_get_stats(struct net_device *netdev, 3002static struct rtnl_link_stats64 *ixgbevf_get_stats(struct net_device *netdev,
@@ -2946,7 +3037,7 @@ static struct rtnl_link_stats64 *ixgbevf_get_stats(struct net_device *netdev,
2946 return stats; 3037 return stats;
2947} 3038}
2948 3039
2949static const struct net_device_ops ixgbe_netdev_ops = { 3040static const struct net_device_ops ixgbevf_netdev_ops = {
2950 .ndo_open = ixgbevf_open, 3041 .ndo_open = ixgbevf_open,
2951 .ndo_stop = ixgbevf_close, 3042 .ndo_stop = ixgbevf_close,
2952 .ndo_start_xmit = ixgbevf_xmit_frame, 3043 .ndo_start_xmit = ixgbevf_xmit_frame,
@@ -2962,7 +3053,7 @@ static const struct net_device_ops ixgbe_netdev_ops = {
2962 3053
2963static void ixgbevf_assign_netdev_ops(struct net_device *dev) 3054static void ixgbevf_assign_netdev_ops(struct net_device *dev)
2964{ 3055{
2965 dev->netdev_ops = &ixgbe_netdev_ops; 3056 dev->netdev_ops = &ixgbevf_netdev_ops;
2966 ixgbevf_set_ethtool_ops(dev); 3057 ixgbevf_set_ethtool_ops(dev);
2967 dev->watchdog_timeo = 5 * HZ; 3058 dev->watchdog_timeo = 5 * HZ;
2968} 3059}
@@ -3131,6 +3222,7 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,
3131 return 0; 3222 return 0;
3132 3223
3133err_register: 3224err_register:
3225 ixgbevf_clear_interrupt_scheme(adapter);
3134err_sw_init: 3226err_sw_init:
3135 ixgbevf_reset_interrupt_capability(adapter); 3227 ixgbevf_reset_interrupt_capability(adapter);
3136 iounmap(hw->hw_addr); 3228 iounmap(hw->hw_addr);
@@ -3168,6 +3260,7 @@ static void __devexit ixgbevf_remove(struct pci_dev *pdev)
3168 if (netdev->reg_state == NETREG_REGISTERED) 3260 if (netdev->reg_state == NETREG_REGISTERED)
3169 unregister_netdev(netdev); 3261 unregister_netdev(netdev);
3170 3262
3263 ixgbevf_clear_interrupt_scheme(adapter);
3171 ixgbevf_reset_interrupt_capability(adapter); 3264 ixgbevf_reset_interrupt_capability(adapter);
3172 3265
3173 iounmap(adapter->hw.hw_addr); 3266 iounmap(adapter->hw.hw_addr);
@@ -3267,6 +3360,11 @@ static struct pci_driver ixgbevf_driver = {
3267 .id_table = ixgbevf_pci_tbl, 3360 .id_table = ixgbevf_pci_tbl,
3268 .probe = ixgbevf_probe, 3361 .probe = ixgbevf_probe,
3269 .remove = __devexit_p(ixgbevf_remove), 3362 .remove = __devexit_p(ixgbevf_remove),
3363#ifdef CONFIG_PM
3364 /* Power Management Hooks */
3365 .suspend = ixgbevf_suspend,
3366 .resume = ixgbevf_resume,
3367#endif
3270 .shutdown = ixgbevf_shutdown, 3368 .shutdown = ixgbevf_shutdown,
3271 .err_handler = &ixgbevf_err_handler 3369 .err_handler = &ixgbevf_err_handler
3272}; 3370};
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c b/drivers/net/ethernet/intel/ixgbevf/vf.c
index ec89b86f7ca4..3d555a10f592 100644
--- a/drivers/net/ethernet/intel/ixgbevf/vf.c
+++ b/drivers/net/ethernet/intel/ixgbevf/vf.c
@@ -419,6 +419,20 @@ static s32 ixgbevf_check_mac_link_vf(struct ixgbe_hw *hw,
419 return 0; 419 return 0;
420} 420}
421 421
422/**
423 * ixgbevf_rlpml_set_vf - Set the maximum receive packet length
424 * @hw: pointer to the HW structure
425 * @max_size: value to assign to max frame size
426 **/
427void ixgbevf_rlpml_set_vf(struct ixgbe_hw *hw, u16 max_size)
428{
429 u32 msgbuf[2];
430
431 msgbuf[0] = IXGBE_VF_SET_LPE;
432 msgbuf[1] = max_size;
433 ixgbevf_write_msg_read_ack(hw, msgbuf, 2);
434}
435
422static const struct ixgbe_mac_operations ixgbevf_mac_ops = { 436static const struct ixgbe_mac_operations ixgbevf_mac_ops = {
423 .init_hw = ixgbevf_init_hw_vf, 437 .init_hw = ixgbevf_init_hw_vf,
424 .reset_hw = ixgbevf_reset_hw_vf, 438 .reset_hw = ixgbevf_reset_hw_vf,
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.h b/drivers/net/ethernet/intel/ixgbevf/vf.h
index 25c951daee5d..07fd87688e35 100644
--- a/drivers/net/ethernet/intel/ixgbevf/vf.h
+++ b/drivers/net/ethernet/intel/ixgbevf/vf.h
@@ -170,5 +170,6 @@ struct ixgbevf_info {
170 const struct ixgbe_mac_operations *mac_ops; 170 const struct ixgbe_mac_operations *mac_ops;
171}; 171};
172 172
173void ixgbevf_rlpml_set_vf(struct ixgbe_hw *hw, u16 max_size);
173#endif /* __IXGBE_VF_H__ */ 174#endif /* __IXGBE_VF_H__ */
174 175