iwlwifi: mvm: tell the firmware about the U-APSD parameters
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Thu, 12 Jan 2017 13:43:57 +0000 (15:43 +0200)
committerLuca Coelho <luciano.coelho@intel.com>
Wed, 19 Apr 2017 19:20:52 +0000 (22:20 +0300)
Newer firmware versions will be able to handle all the
WMM-PS flows internally when we act as a GO. The firwmare
relies on the fact that the drivers puts frames for
different peers in different queues (DQA) to achieve this.
The driver will not be aware of the power state of the peers
anymore.

Tell the firmware about the WMM-PS parameters of earch peer
that connects to us so that it can know what are the
trigger-enabled ACs, the delivery-enableds ACs and the
Service Period length.

This API change is backward compatible since older firmware
versions will simply ignore the newly added values.

Since we don't support ieee80211 TSPECs for now, just copy
the trigger-enabled ACs to the delivery enabled ones.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/fw-api-sta.h
drivers/net/wireless/intel/iwlwifi/mvm/sta.c

index 4f8648f53879decf80e9d247cd913fac0c9e5f2c..e79df1c53d68316b42ee58d10d554df597fd9551 100644 (file)
@@ -179,7 +179,7 @@ enum iwl_sta_key_flag {
  * enum iwl_sta_modify_flag - indicate to the fw what flag are being changed
  * @STA_MODIFY_QUEUE_REMOVAL: this command removes a queue
  * @STA_MODIFY_TID_DISABLE_TX: this command modifies %tid_disable_tx
- * @STA_MODIFY_UAPSD_ACS: this command modifies %uapsd_trigger_acs
+ * @STA_MODIFY_UAPSD_ACS: this command modifies %uapsd_acs
  * @STA_MODIFY_ADD_BA_TID: this command modifies %add_immediate_ba_tid
  * @STA_MODIFY_REMOVE_BA_TID: this command modifies %remove_immediate_ba_tid
  * @STA_MODIFY_SLEEPING_STA_TX_COUNT: this command modifies %sleep_tx_count
@@ -354,8 +354,9 @@ struct iwl_mvm_add_sta_cmd_v7 {
  * @tfd_queue_msk: tfd queues used by this station.
  *     Obselete for new TX API (9 and above).
  * @rx_ba_window: aggregation window size
- * @scd_queue_bank: queue bank in used. Each bank contains 32 queues. 0 means
- *     that the queues used by this station are in the first 32.
+ * @sp_length: the size of the SP as it appears in the WME IE
+ * @uapsd_acs:  4 LS bits are trigger enabled ACs, 4 MS bits are the deliver
+ *     enabled ACs.
  *
  * The device contains an internal table of per-station information, with info
  * on security keys, aggregation parameters, and Tx rates for initial Tx
@@ -385,8 +386,8 @@ struct iwl_mvm_add_sta_cmd {
        __le16 beamform_flags;
        __le32 tfd_queue_msk;
        __le16 rx_ba_window;
-       u8 scd_queue_bank;
-       u8 uapsd_trigger_acs;
+       u8 sp_length;
+       u8 uapsd_acs;
 } __packed; /* ADD_STA_CMD_API_S_VER_9 */
 
 /**
index e51b74cd5b9fab28e9e732aa105bc12273784d1e..36ae228c161257ddbcf6ffb3c5a50cb8de200e17 100644 (file)
@@ -215,13 +215,15 @@ int iwl_mvm_sta_send_to_fw(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
                add_sta_cmd.modify_mask |= STA_MODIFY_UAPSD_ACS;
 
                if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
-                       add_sta_cmd.uapsd_trigger_acs |= BIT(AC_BK);
+                       add_sta_cmd.uapsd_acs |= BIT(AC_BK);
                if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
-                       add_sta_cmd.uapsd_trigger_acs |= BIT(AC_BE);
+                       add_sta_cmd.uapsd_acs |= BIT(AC_BE);
                if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
-                       add_sta_cmd.uapsd_trigger_acs |= BIT(AC_VI);
+                       add_sta_cmd.uapsd_acs |= BIT(AC_VI);
                if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
-                       add_sta_cmd.uapsd_trigger_acs |= BIT(AC_VO);
+                       add_sta_cmd.uapsd_acs |= BIT(AC_VO);
+               add_sta_cmd.uapsd_acs |= add_sta_cmd.uapsd_acs << 4;
+               add_sta_cmd.sp_length = sta->max_sp;
        }
 
        status = ADD_STA_SUCCESS;