|
@@ -696,6 +696,24 @@ static int iwlagn_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static inline bool iwl_enable_rx_ampdu(const struct iwl_cfg *cfg)
|
|
|
+{
|
|
|
+ if (iwlwifi_mod_params.disable_11n & IWL_DISABLE_HT_RXAGG)
|
|
|
+ return false;
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+static inline bool iwl_enable_tx_ampdu(const struct iwl_cfg *cfg)
|
|
|
+{
|
|
|
+ if (iwlwifi_mod_params.disable_11n & IWL_DISABLE_HT_TXAGG)
|
|
|
+ return false;
|
|
|
+ if (iwlwifi_mod_params.disable_11n & IWL_ENABLE_HT_TXAGG)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ /* disabled by default */
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
|
|
|
struct ieee80211_vif *vif,
|
|
|
enum ieee80211_ampdu_mlme_action action,
|
|
@@ -717,7 +735,7 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
|
|
|
|
|
|
switch (action) {
|
|
|
case IEEE80211_AMPDU_RX_START:
|
|
|
- if (iwlwifi_mod_params.disable_11n & IWL_DISABLE_HT_RXAGG)
|
|
|
+ if (!iwl_enable_rx_ampdu(priv->cfg))
|
|
|
break;
|
|
|
IWL_DEBUG_HT(priv, "start Rx\n");
|
|
|
ret = iwl_sta_rx_agg_start(priv, sta, tid, *ssn);
|
|
@@ -729,7 +747,7 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
|
|
|
case IEEE80211_AMPDU_TX_START:
|
|
|
if (!priv->trans->ops->txq_enable)
|
|
|
break;
|
|
|
- if (iwlwifi_mod_params.disable_11n & IWL_DISABLE_HT_TXAGG)
|
|
|
+ if (!iwl_enable_tx_ampdu(priv->cfg))
|
|
|
break;
|
|
|
IWL_DEBUG_HT(priv, "start Tx\n");
|
|
|
ret = iwlagn_tx_agg_start(priv, vif, sta, tid, ssn);
|