]> git.hungrycats.org Git - linux/commitdiff
[e1000] read correct bit from EEPROM for getting WoL settings
authorScott Feldman <scott.feldman@intel.com>
Thu, 11 Sep 2003 11:10:55 +0000 (07:10 -0400)
committerStephen Hemminger <shemminger@osdl.org>
Thu, 11 Sep 2003 11:10:55 +0000 (07:10 -0400)
* Bug fix: read the correct bit from the EEPROM that controls the
  initial setting for WoL after a reset.

drivers/net/e1000/e1000.h
drivers/net/e1000/e1000_main.c

index cf9c5d0e3625388c59e976ecf9f00e4f153d9afe..80bc150c83c3af37fefc72fcda3cc7318358019b 100644 (file)
@@ -122,7 +122,7 @@ struct e1000_adapter;
 #define E1000_RX_BUFFER_WRITE  16      /* Must be power of 2 */
 
 #define AUTO_ALL_MODES       0
-#define E1000_EEPROM_APME    4
+#define E1000_EEPROM_APME    0x0400
 
 /* only works for sizes that are powers of 2 */
 #define E1000_ROUNDUP(i, size) ((i) = (((i) + (size) - 1) & ~((size) - 1)))
index 3ec127cce7bafa4eef1826a665f3f3d6c752db76..2f7ea422ec94153780bd69e51db5419c9bbbfc40 100644 (file)
@@ -494,12 +494,28 @@ e1000_probe(struct pci_dev *pdev,
         * enable the ACPI Magic Packet filter
         */
 
-       e1000_read_eeprom(&adapter->hw, EEPROM_INIT_CONTROL2_REG,1, &eeprom_data);
-       if((adapter->hw.mac_type >= e1000_82544) &&
-          (eeprom_data & E1000_EEPROM_APME))
+       switch(adapter->hw.mac_type) {
+       case e1000_82542_rev2_0:
+       case e1000_82542_rev2_1:
+       case e1000_82543:
+               break;
+       case e1000_82546:
+       case e1000_82546_rev_3:
+               if((E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_FUNC_1)
+                  && (adapter->hw.media_type == e1000_media_type_copper)) {
+                       e1000_read_eeprom(&adapter->hw,
+                               EEPROM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
+                       break;
+               }
+               /* Fall Through */
+       default:
+               e1000_read_eeprom(&adapter->hw,
+                       EEPROM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
+               break;
+       }
+       if(eeprom_data & E1000_EEPROM_APME)
                adapter->wol |= E1000_WUFC_MAG;
 
-
        /* reset the hardware with the new settings */
 
        e1000_reset(adapter);