Commit 941c84e0 authored by Jeff Garzik's avatar Jeff Garzik

[netdrvr e1000] restore VLAN settings after resume

Contributed by Scott Feldman @ Intel.
parent 218d8c4b
...@@ -175,6 +175,7 @@ static void e1000_tx_timeout_task(struct net_device *dev); ...@@ -175,6 +175,7 @@ static void e1000_tx_timeout_task(struct net_device *dev);
static void e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp); static void e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp);
static void e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid); static void e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
static void e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid); static void e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
static void e1000_restore_vlan(struct e1000_adapter *adapter);
static int e1000_notify_reboot(struct notifier_block *, unsigned long event, void *ptr); static int e1000_notify_reboot(struct notifier_block *, unsigned long event, void *ptr);
static int e1000_notify_netdev(struct notifier_block *, unsigned long event, void *ptr); static int e1000_notify_netdev(struct notifier_block *, unsigned long event, void *ptr);
...@@ -274,6 +275,7 @@ e1000_up(struct e1000_adapter *adapter) ...@@ -274,6 +275,7 @@ e1000_up(struct e1000_adapter *adapter)
/* hardware has been reset, we need to reload some things */ /* hardware has been reset, we need to reload some things */
e1000_set_multi(netdev); e1000_set_multi(netdev);
e1000_restore_vlan(adapter);
e1000_configure_tx(adapter); e1000_configure_tx(adapter);
e1000_setup_rctl(adapter); e1000_setup_rctl(adapter);
...@@ -2394,6 +2396,21 @@ e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid) ...@@ -2394,6 +2396,21 @@ e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid)
e1000_write_vfta(&adapter->hw, index, vfta); e1000_write_vfta(&adapter->hw, index, vfta);
} }
static void
e1000_restore_vlan(struct e1000_adapter *adapter)
{
e1000_vlan_rx_register(adapter->netdev, adapter->vlgrp);
if(adapter->vlgrp) {
uint16_t vid;
for(vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
if(!adapter->vlgrp->vlan_devices[vid])
continue;
e1000_vlan_rx_add_vid(adapter->netdev, vid);
}
}
}
static int static int
e1000_notify_reboot(struct notifier_block *nb, unsigned long event, void *p) e1000_notify_reboot(struct notifier_block *nb, unsigned long event, void *p)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment