[PATCH] e100: Fix Wake on lan related issues

Fix Wake on lan related issues

Signed-off-by: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com>
Signed-off-by: Ganesh Venkatesan <ganesh.venkatesan@intel.com>
Signed-off-by: John Ronciak <john.ronciak@intel.com>

authored by Malli Chilakala and committed by Jeff Garzik 6bdacb1a 0236ebb7

+28 -3
+28 -3
drivers/net/e100.c
··· 971 if(nic->flags & multicast_all) 972 config->multicast_all = 0x1; /* 1=accept, 0=no */ 973 974 - if(!(nic->flags & wol_magic)) 975 config->magic_packet_disable = 0x1; /* 1=off, 0=on */ 976 977 if(nic->mac >= mac_82558_D101_A4) { ··· 1719 return 0; 1720 } 1721 1722 static int e100_asf(struct nic *nic) 1723 { 1724 /* ASF can be enabled from eeprom */ ··· 1728 !(nic->eeprom[eeprom_config_asf] & eeprom_gcl) && 1729 ((nic->eeprom[eeprom_smbus_addr] & 0xFF) != 0xFE)); 1730 } 1731 1732 static int e100_up(struct nic *nic) 1733 { ··· 1941 else 1942 nic->flags &= ~wol_magic; 1943 1944 - pci_enable_wake(nic->pdev, 0, nic->flags & (wol_magic | e100_asf(nic))); 1945 e100_exec_cb(nic, NULL, e100_configure); 1946 1947 return 0; ··· 2338 (nic->eeprom[eeprom_id] & eeprom_id_wol)) 2339 nic->flags |= wol_magic; 2340 2341 - pci_enable_wake(pdev, 0, nic->flags & (wol_magic | e100_asf(nic))); 2342 2343 strcpy(netdev->name, "eth%d"); 2344 if((err = register_netdev(netdev))) { ··· 2411 2412 pci_set_power_state(pdev, PCI_D0); 2413 pci_restore_state(pdev); 2414 if(e100_hw_init(nic)) 2415 DPRINTK(HW, ERR, "e100_hw_init failed\n"); 2416 ··· 2424 } 2425 #endif 2426 2427 static struct pci_driver e100_driver = { 2428 .name = DRV_NAME, 2429 .id_table = e100_id_table, ··· 2448 .suspend = e100_suspend, 2449 .resume = e100_resume, 2450 #endif 2451 }; 2452 2453 static int __init e100_init_module(void)
··· 971 if(nic->flags & multicast_all) 972 config->multicast_all = 0x1; /* 1=accept, 0=no */ 973 974 + /* disable WoL when up */ 975 + if(netif_running(nic->netdev) || !(nic->flags & wol_magic)) 976 config->magic_packet_disable = 0x1; /* 1=off, 0=on */ 977 978 if(nic->mac >= mac_82558_D101_A4) { ··· 1718 return 0; 1719 } 1720 1721 + #ifdef CONFIG_PM 1722 static int e100_asf(struct nic *nic) 1723 { 1724 /* ASF can be enabled from eeprom */ ··· 1726 !(nic->eeprom[eeprom_config_asf] & eeprom_gcl) && 1727 ((nic->eeprom[eeprom_smbus_addr] & 0xFF) != 0xFE)); 1728 } 1729 + #endif 1730 1731 static int e100_up(struct nic *nic) 1732 { ··· 1938 else 1939 nic->flags &= ~wol_magic; 1940 1941 e100_exec_cb(nic, NULL, e100_configure); 1942 1943 return 0; ··· 2336 (nic->eeprom[eeprom_id] & eeprom_id_wol)) 2337 nic->flags |= wol_magic; 2338 2339 + /* ack any pending wake events, disable PME */ 2340 + pci_enable_wake(pdev, 0, 0); 2341 2342 strcpy(netdev->name, "eth%d"); 2343 if((err = register_netdev(netdev))) { ··· 2408 2409 pci_set_power_state(pdev, PCI_D0); 2410 pci_restore_state(pdev); 2411 + /* ack any pending wake events, disable PME */ 2412 + pci_enable_wake(pdev, 0, 0); 2413 if(e100_hw_init(nic)) 2414 DPRINTK(HW, ERR, "e100_hw_init failed\n"); 2415 ··· 2419 } 2420 #endif 2421 2422 + 2423 + static void e100_shutdown(struct device *dev) 2424 + { 2425 + struct pci_dev *pdev = container_of(dev, struct pci_dev, dev); 2426 + struct net_device *netdev = pci_get_drvdata(pdev); 2427 + struct nic *nic = netdev_priv(netdev); 2428 + 2429 + #ifdef CONFIG_PM 2430 + pci_enable_wake(pdev, 0, nic->flags & (wol_magic | e100_asf(nic))); 2431 + #else 2432 + pci_enable_wake(pdev, 0, nic->flags & (wol_magic)); 2433 + #endif 2434 + } 2435 + 2436 + 2437 static struct pci_driver e100_driver = { 2438 .name = DRV_NAME, 2439 .id_table = e100_id_table, ··· 2428 .suspend = e100_suspend, 2429 .resume = e100_resume, 2430 #endif 2431 + 2432 + .driver = { 2433 + .shutdown = e100_shutdown, 2434 + } 2435 + 2436 }; 2437 2438 static int __init e100_init_module(void)