]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
iwlwifi: mvm: store latest power command for debugfs read
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Tue, 28 Jan 2014 07:13:04 +0000 (09:13 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Mon, 3 Feb 2014 20:43:55 +0000 (22:43 +0200)
Instead of re-building the power command upon debugfs read,
store the latest command sent to the firmware.
This reduces the code complexity by reducing the number of
entries in the power code.

Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Reviewed-by: Alexander Bondar <alexander.bondar@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/mvm/mvm.h
drivers/net/wireless/iwlwifi/mvm/power.c

index 93e6c18537e10b142ad0bfb6b90486820fdcc72f..2d76e228c1cb14009c14963ece36e24cec87ec36 100644 (file)
@@ -347,6 +347,7 @@ struct iwl_mvm_vif {
        struct dentry *dbgfs_slink;
        struct iwl_dbgfs_pm dbgfs_pm;
        struct iwl_dbgfs_bf dbgfs_bf;
+       struct iwl_mac_power_cmd mac_pwr_cmd;
 #endif
 
        enum ieee80211_smps_mode smps_requests[NUM_IWL_MVM_SMPS_REQ];
index 15c9c780323b591ff7520a02516d7423fca13a6b..ac6d2c86e75cf0a75259f06b682889035173f5e9 100644 (file)
@@ -431,6 +431,9 @@ static int _iwl_mvm_power_mac_update_mode(struct iwl_mvm *mvm,
 
        iwl_mvm_power_build_cmd(mvm, vif, &cmd);
        iwl_mvm_power_log(mvm, &cmd);
+#ifdef CONFIG_IWLWIFI_DEBUGFS
+       memcpy(&iwl_mvm_vif_from_mac80211(vif)->mac_pwr_cmd, &cmd, sizeof(cmd));
+#endif
 
        return iwl_mvm_send_cmd_pdu(mvm, MAC_PM_POWER_TABLE, CMD_SYNC,
                                    sizeof(cmd), &cmd);
@@ -475,6 +478,7 @@ static int iwl_mvm_power_mac_disable(struct iwl_mvm *mvm,
        if (mvmvif->dbgfs_pm.mask & MVM_DEBUGFS_PM_DISABLE_POWER_OFF &&
            mvmvif->dbgfs_pm.disable_power_off)
                cmd.flags &= cpu_to_le16(~POWER_FLAGS_POWER_SAVE_ENA_MSK);
+       memcpy(&mvmvif->mac_pwr_cmd, &cmd, sizeof(cmd));
 #endif
        iwl_mvm_power_log(mvm, &cmd);
 
@@ -615,10 +619,13 @@ static int iwl_mvm_power_mac_dbgfs_read(struct iwl_mvm *mvm,
                                        struct ieee80211_vif *vif, char *buf,
                                        int bufsz)
 {
+       struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
        struct iwl_mac_power_cmd cmd = {};
        int pos = 0;
 
-       iwl_mvm_power_build_cmd(mvm, vif, &cmd);
+       mutex_lock(&mvm->mutex);
+       memcpy(&cmd, &mvmvif->mac_pwr_cmd, sizeof(cmd));
+       mutex_unlock(&mvm->mutex);
 
        if (!(mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_DEVICE_PS_CMD))
                pos += scnprintf(buf+pos, bufsz-pos, "disable_power_off = %d\n",
@@ -807,6 +814,9 @@ int iwl_mvm_update_d0i3_power_mode(struct iwl_mvm *mvm,
                cmd.skip_dtim_periods = 300 / dtimper_msec;
        }
        iwl_mvm_power_log(mvm, &cmd);
+#ifdef CONFIG_IWLWIFI_DEBUGFS
+       memcpy(&mvmvif->mac_pwr_cmd, &cmd, sizeof(cmd));
+#endif
        ret = iwl_mvm_send_cmd_pdu(mvm, MAC_PM_POWER_TABLE, flags,
                                   sizeof(cmd), &cmd);
        if (ret)