diff options
Diffstat (limited to 'drivers/net/ethernet/intel/e1000/e1000_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000_main.c | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index 0e9aec8f6917..4348b6fd44fa 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c | |||
@@ -164,6 +164,8 @@ static int e1000_82547_fifo_workaround(struct e1000_adapter *adapter, | |||
164 | static bool e1000_vlan_used(struct e1000_adapter *adapter); | 164 | static bool e1000_vlan_used(struct e1000_adapter *adapter); |
165 | static void e1000_vlan_mode(struct net_device *netdev, | 165 | static void e1000_vlan_mode(struct net_device *netdev, |
166 | netdev_features_t features); | 166 | netdev_features_t features); |
167 | static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter, | ||
168 | bool filter_on); | ||
167 | static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid); | 169 | static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid); |
168 | static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid); | 170 | static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid); |
169 | static void e1000_restore_vlan(struct e1000_adapter *adapter); | 171 | static void e1000_restore_vlan(struct e1000_adapter *adapter); |
@@ -215,7 +217,8 @@ MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver"); | |||
215 | MODULE_LICENSE("GPL"); | 217 | MODULE_LICENSE("GPL"); |
216 | MODULE_VERSION(DRV_VERSION); | 218 | MODULE_VERSION(DRV_VERSION); |
217 | 219 | ||
218 | static int debug = NETIF_MSG_DRV | NETIF_MSG_PROBE; | 220 | #define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK) |
221 | static int debug = -1; | ||
219 | module_param(debug, int, 0); | 222 | module_param(debug, int, 0); |
220 | MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); | 223 | MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); |
221 | 224 | ||
@@ -979,7 +982,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
979 | adapter = netdev_priv(netdev); | 982 | adapter = netdev_priv(netdev); |
980 | adapter->netdev = netdev; | 983 | adapter->netdev = netdev; |
981 | adapter->pdev = pdev; | 984 | adapter->pdev = pdev; |
982 | adapter->msg_enable = (1 << debug) - 1; | 985 | adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE); |
983 | adapter->bars = bars; | 986 | adapter->bars = bars; |
984 | adapter->need_ioport = need_ioport; | 987 | adapter->need_ioport = need_ioport; |
985 | 988 | ||
@@ -1214,7 +1217,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
1214 | if (err) | 1217 | if (err) |
1215 | goto err_register; | 1218 | goto err_register; |
1216 | 1219 | ||
1217 | e1000_vlan_mode(netdev, netdev->features); | 1220 | e1000_vlan_filter_on_off(adapter, false); |
1218 | 1221 | ||
1219 | /* print bus type/speed/width info */ | 1222 | /* print bus type/speed/width info */ |
1220 | e_info(probe, "(PCI%s:%dMHz:%d-bit) %pM\n", | 1223 | e_info(probe, "(PCI%s:%dMHz:%d-bit) %pM\n", |
@@ -4770,6 +4773,22 @@ static bool e1000_vlan_used(struct e1000_adapter *adapter) | |||
4770 | return false; | 4773 | return false; |
4771 | } | 4774 | } |
4772 | 4775 | ||
4776 | static void __e1000_vlan_mode(struct e1000_adapter *adapter, | ||
4777 | netdev_features_t features) | ||
4778 | { | ||
4779 | struct e1000_hw *hw = &adapter->hw; | ||
4780 | u32 ctrl; | ||
4781 | |||
4782 | ctrl = er32(CTRL); | ||
4783 | if (features & NETIF_F_HW_VLAN_RX) { | ||
4784 | /* enable VLAN tag insert/strip */ | ||
4785 | ctrl |= E1000_CTRL_VME; | ||
4786 | } else { | ||
4787 | /* disable VLAN tag insert/strip */ | ||
4788 | ctrl &= ~E1000_CTRL_VME; | ||
4789 | } | ||
4790 | ew32(CTRL, ctrl); | ||
4791 | } | ||
4773 | static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter, | 4792 | static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter, |
4774 | bool filter_on) | 4793 | bool filter_on) |
4775 | { | 4794 | { |
@@ -4779,6 +4798,7 @@ static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter, | |||
4779 | if (!test_bit(__E1000_DOWN, &adapter->flags)) | 4798 | if (!test_bit(__E1000_DOWN, &adapter->flags)) |
4780 | e1000_irq_disable(adapter); | 4799 | e1000_irq_disable(adapter); |
4781 | 4800 | ||
4801 | __e1000_vlan_mode(adapter, adapter->netdev->features); | ||
4782 | if (filter_on) { | 4802 | if (filter_on) { |
4783 | /* enable VLAN receive filtering */ | 4803 | /* enable VLAN receive filtering */ |
4784 | rctl = er32(RCTL); | 4804 | rctl = er32(RCTL); |
@@ -4799,24 +4819,14 @@ static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter, | |||
4799 | } | 4819 | } |
4800 | 4820 | ||
4801 | static void e1000_vlan_mode(struct net_device *netdev, | 4821 | static void e1000_vlan_mode(struct net_device *netdev, |
4802 | netdev_features_t features) | 4822 | netdev_features_t features) |
4803 | { | 4823 | { |
4804 | struct e1000_adapter *adapter = netdev_priv(netdev); | 4824 | struct e1000_adapter *adapter = netdev_priv(netdev); |
4805 | struct e1000_hw *hw = &adapter->hw; | ||
4806 | u32 ctrl; | ||
4807 | 4825 | ||
4808 | if (!test_bit(__E1000_DOWN, &adapter->flags)) | 4826 | if (!test_bit(__E1000_DOWN, &adapter->flags)) |
4809 | e1000_irq_disable(adapter); | 4827 | e1000_irq_disable(adapter); |
4810 | 4828 | ||
4811 | ctrl = er32(CTRL); | 4829 | __e1000_vlan_mode(adapter, features); |
4812 | if (features & NETIF_F_HW_VLAN_RX) { | ||
4813 | /* enable VLAN tag insert/strip */ | ||
4814 | ctrl |= E1000_CTRL_VME; | ||
4815 | } else { | ||
4816 | /* disable VLAN tag insert/strip */ | ||
4817 | ctrl &= ~E1000_CTRL_VME; | ||
4818 | } | ||
4819 | ew32(CTRL, ctrl); | ||
4820 | 4830 | ||
4821 | if (!test_bit(__E1000_DOWN, &adapter->flags)) | 4831 | if (!test_bit(__E1000_DOWN, &adapter->flags)) |
4822 | e1000_irq_enable(adapter); | 4832 | e1000_irq_enable(adapter); |