|
@@ -445,8 +445,18 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
|
|
ieee80211_hw_set(hw, NEEDS_UNIQUE_STA_ADDR);
|
|
ieee80211_hw_set(hw, NEEDS_UNIQUE_STA_ADDR);
|
|
if (iwl_mvm_has_new_rx_api(mvm))
|
|
if (iwl_mvm_has_new_rx_api(mvm))
|
|
ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER);
|
|
ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER);
|
|
- if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_STA_PM_NOTIF))
|
|
|
|
|
|
+
|
|
|
|
+ if (fw_has_capa(&mvm->fw->ucode_capa,
|
|
|
|
+ IWL_UCODE_TLV_CAPA_STA_PM_NOTIF)) {
|
|
ieee80211_hw_set(hw, AP_LINK_PS);
|
|
ieee80211_hw_set(hw, AP_LINK_PS);
|
|
|
|
+ } else if (WARN_ON(iwl_mvm_has_new_tx_api(mvm))) {
|
|
|
|
+ /*
|
|
|
|
+ * we absolutely need this for the new TX API since that comes
|
|
|
|
+ * with many more queues than the current code can deal with
|
|
|
|
+ * for station powersave
|
|
|
|
+ */
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
|
|
if (mvm->trans->num_rx_queues > 1)
|
|
if (mvm->trans->num_rx_queues > 1)
|
|
ieee80211_hw_set(hw, USES_RSS);
|
|
ieee80211_hw_set(hw, USES_RSS);
|
|
@@ -2399,6 +2409,14 @@ static void __iwl_mvm_mac_sta_notify(struct ieee80211_hw *hw,
|
|
unsigned long txqs = 0, tids = 0;
|
|
unsigned long txqs = 0, tids = 0;
|
|
int tid;
|
|
int tid;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * If we have TVQM then we get too high queue numbers - luckily
|
|
|
|
+ * we really shouldn't get here with that because such hardware
|
|
|
|
+ * should have firmware supporting buffer station offload.
|
|
|
|
+ */
|
|
|
|
+ if (WARN_ON(iwl_mvm_has_new_tx_api(mvm)))
|
|
|
|
+ return;
|
|
|
|
+
|
|
spin_lock_bh(&mvmsta->lock);
|
|
spin_lock_bh(&mvmsta->lock);
|
|
for (tid = 0; tid < IWL_MAX_TID_COUNT; tid++) {
|
|
for (tid = 0; tid < IWL_MAX_TID_COUNT; tid++) {
|
|
struct iwl_mvm_tid_data *tid_data = &mvmsta->tid_data[tid];
|
|
struct iwl_mvm_tid_data *tid_data = &mvmsta->tid_data[tid];
|