iwlwifi: mvm: Add number of DTIMs to skip
authorAlexander Bondar <alexander.bondar@intel.com>
Tue, 23 Apr 2013 10:32:35 +0000 (13:32 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 16 May 2013 21:09:51 +0000 (23:09 +0200)
New host-device API provides the ability to set the number
of DTIMs to skip. Add this parameter to the command and set
it (to a sane default value.)

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

index 90fdfcda15b6c2c0bd9f4856f62fb78a1f9b53ee..05e51927b8483dfe891f18225d73cb231b04d60e 100644 (file)
@@ -101,19 +101,19 @@ enum iwl_power_flags {
  * @tx_data_timeout:    Minimum time (usec) from last Tx packet for AM to
  *                     PSM transition - legacy PM
  * @sleep_interval:    not in use
- * @keep_alive_beacons:        not in use
+ * @num_skip_dtim:     Number of DTIMs to skip if Skip over DTIM flag is set
  * @lprx_rssi_threshold: Signal strength up to which LP RX can be enabled.
  *                     Default: 80dbm
  */
 struct iwl_powertable_cmd {
-       /* PM_POWER_TABLE_CMD_API_S_VER_5 */
+       /* PM_POWER_TABLE_CMD_API_S_VER_6 */
        __le16 flags;
        u8 keep_alive_seconds;
        u8 debug_flags;
        __le32 rx_data_timeout;
        __le32 tx_data_timeout;
        __le32 sleep_interval[IWL_POWER_VEC_SIZE];
-       __le32 keep_alive_beacons;
+       __le32 num_skip_dtim;
        __le32 lprx_rssi_threshold;
 } __packed;
 
index 30a5c27bd62329ab0f2809adc7001d33cb2baf95..6c5dfc9a8d43d6da4d7be3355971e317ca03b4c0 100644 (file)
@@ -91,6 +91,9 @@ static void iwl_mvm_power_log(struct iwl_mvm *mvm,
                                le32_to_cpu(cmd->tx_data_timeout));
                IWL_DEBUG_POWER(mvm, "LP RX RSSI threshold = %u\n",
                                cmd->lprx_rssi_threshold);
+               if (cmd->flags & cpu_to_le16(POWER_FLAGS_SKIP_OVER_DTIM_MSK))
+                       IWL_DEBUG_POWER(mvm, "DTIMs to skip = %u\n",
+                                       le32_to_cpu(cmd->num_skip_dtim));
        }
 }
 
@@ -135,8 +138,10 @@ void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
 
        /* Check skip over DTIM conditions */
        if (!radar_detect && (dtimper <= 10) &&
-           (iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_LP))
+           (iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_LP)) {
                cmd->flags |= cpu_to_le16(POWER_FLAGS_SKIP_OVER_DTIM_MSK);
+               cmd->num_skip_dtim = cpu_to_le32(2);
+       }
 
        /* Check that keep alive period is at least 3 * DTIM */
        dtimper_msec = dtimper * vif->bss_conf.beacon_int;