be2net: cleanup wake-on-lan code
[cascardo/linux.git] / drivers / net / ethernet / emulex / benet / be_cmds.c
index 5635f1e..48076a6 100644 (file)
@@ -3040,14 +3040,16 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
 {
        struct be_mcc_wrb *wrb;
        struct be_cmd_req_acpi_wol_magic_config_v1 *req;
-       int status;
-       int payload_len = sizeof(*req);
+       int status = 0;
        struct be_dma_mem cmd;
 
        if (!be_cmd_allowed(adapter, OPCODE_ETH_ACPI_WOL_MAGIC_CONFIG,
                            CMD_SUBSYSTEM_ETH))
                return -EPERM;
 
+       if (be_is_wol_excluded(adapter))
+               return status;
+
        if (mutex_lock_interruptible(&adapter->mbox_lock))
                return -1;
 
@@ -3072,7 +3074,7 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
 
        be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH,
                               OPCODE_ETH_ACPI_WOL_MAGIC_CONFIG,
-                              payload_len, wrb, &cmd);
+                              sizeof(*req), wrb, &cmd);
 
        req->hdr.version = 1;
        req->query_options = BE_GET_WOL_CAP;
@@ -3082,13 +3084,9 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
                struct be_cmd_resp_acpi_wol_magic_config_v1 *resp;
                resp = (struct be_cmd_resp_acpi_wol_magic_config_v1 *) cmd.va;
 
-               /* the command could succeed misleadingly on old f/w
-                * which is not aware of the V1 version. fake an error. */
-               if (resp->hdr.response_length < payload_len) {
-                       status = -1;
-                       goto err;
-               }
                adapter->wol_cap = resp->wol_settings;
+               if (adapter->wol_cap & BE_WOL_CAP)
+                       adapter->wol_en = true;
        }
 err:
        mutex_unlock(&adapter->mbox_lock);