diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-11-16 06:00:38 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-11-18 17:09:15 -0500 |
commit | c951ad3550ab40071bb0f222ba6125845769c08a (patch) | |
tree | 9db1d3c110b359a34a3d706eaf40285cfa01550b /drivers | |
parent | 3b53fde8ac40c4321389def14d7f4a9e14092fd3 (diff) |
mac80211: convert aggregation to operate on vifs/stas
The entire aggregation code currently operates on the
hw pointer and station addresses, but that needs to
change to make stations purely per-vif; As one step
preparing for that make the aggregation code callable
with the station, or by the combination of virtual
interface and station address.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath/ar9170/main.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/rc.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-tx.c | 8 |
6 files changed, 13 insertions, 10 deletions
diff --git a/drivers/net/wireless/ath/ar9170/main.c b/drivers/net/wireless/ath/ar9170/main.c index bd2a276c870a..f9d6db8d013e 100644 --- a/drivers/net/wireless/ath/ar9170/main.c +++ b/drivers/net/wireless/ath/ar9170/main.c | |||
@@ -2441,6 +2441,7 @@ static int ar9170_conf_tx(struct ieee80211_hw *hw, u16 queue, | |||
2441 | } | 2441 | } |
2442 | 2442 | ||
2443 | static int ar9170_ampdu_action(struct ieee80211_hw *hw, | 2443 | static int ar9170_ampdu_action(struct ieee80211_hw *hw, |
2444 | struct ieee80211_vif *vif, | ||
2444 | enum ieee80211_ampdu_mlme_action action, | 2445 | enum ieee80211_ampdu_mlme_action action, |
2445 | struct ieee80211_sta *sta, u16 tid, u16 *ssn) | 2446 | struct ieee80211_sta *sta, u16 tid, u16 *ssn) |
2446 | { | 2447 | { |
@@ -2470,7 +2471,7 @@ static int ar9170_ampdu_action(struct ieee80211_hw *hw, | |||
2470 | tid_info->state = AR9170_TID_STATE_PROGRESS; | 2471 | tid_info->state = AR9170_TID_STATE_PROGRESS; |
2471 | tid_info->active = false; | 2472 | tid_info->active = false; |
2472 | spin_unlock_irqrestore(&ar->tx_ampdu_list_lock, flags); | 2473 | spin_unlock_irqrestore(&ar->tx_ampdu_list_lock, flags); |
2473 | ieee80211_start_tx_ba_cb_irqsafe(hw, sta->addr, tid); | 2474 | ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid); |
2474 | break; | 2475 | break; |
2475 | 2476 | ||
2476 | case IEEE80211_AMPDU_TX_STOP: | 2477 | case IEEE80211_AMPDU_TX_STOP: |
@@ -2480,7 +2481,7 @@ static int ar9170_ampdu_action(struct ieee80211_hw *hw, | |||
2480 | tid_info->active = false; | 2481 | tid_info->active = false; |
2481 | skb_queue_purge(&tid_info->queue); | 2482 | skb_queue_purge(&tid_info->queue); |
2482 | spin_unlock_irqrestore(&ar->tx_ampdu_list_lock, flags); | 2483 | spin_unlock_irqrestore(&ar->tx_ampdu_list_lock, flags); |
2483 | ieee80211_stop_tx_ba_cb_irqsafe(hw, sta->addr, tid); | 2484 | ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); |
2484 | break; | 2485 | break; |
2485 | 2486 | ||
2486 | case IEEE80211_AMPDU_TX_OPERATIONAL: | 2487 | case IEEE80211_AMPDU_TX_OPERATIONAL: |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 3229c3993568..16bdb1b549b4 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -3078,6 +3078,7 @@ static void ath9k_reset_tsf(struct ieee80211_hw *hw) | |||
3078 | } | 3078 | } |
3079 | 3079 | ||
3080 | static int ath9k_ampdu_action(struct ieee80211_hw *hw, | 3080 | static int ath9k_ampdu_action(struct ieee80211_hw *hw, |
3081 | struct ieee80211_vif *vif, | ||
3081 | enum ieee80211_ampdu_mlme_action action, | 3082 | enum ieee80211_ampdu_mlme_action action, |
3082 | struct ieee80211_sta *sta, | 3083 | struct ieee80211_sta *sta, |
3083 | u16 tid, u16 *ssn) | 3084 | u16 tid, u16 *ssn) |
@@ -3095,11 +3096,11 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw, | |||
3095 | break; | 3096 | break; |
3096 | case IEEE80211_AMPDU_TX_START: | 3097 | case IEEE80211_AMPDU_TX_START: |
3097 | ath_tx_aggr_start(sc, sta, tid, ssn); | 3098 | ath_tx_aggr_start(sc, sta, tid, ssn); |
3098 | ieee80211_start_tx_ba_cb_irqsafe(hw, sta->addr, tid); | 3099 | ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid); |
3099 | break; | 3100 | break; |
3100 | case IEEE80211_AMPDU_TX_STOP: | 3101 | case IEEE80211_AMPDU_TX_STOP: |
3101 | ath_tx_aggr_stop(sc, sta, tid); | 3102 | ath_tx_aggr_stop(sc, sta, tid); |
3102 | ieee80211_stop_tx_ba_cb_irqsafe(hw, sta->addr, tid); | 3103 | ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); |
3103 | break; | 3104 | break; |
3104 | case IEEE80211_AMPDU_TX_OPERATIONAL: | 3105 | case IEEE80211_AMPDU_TX_OPERATIONAL: |
3105 | ath_tx_aggr_resume(sc, sta, tid); | 3106 | ath_tx_aggr_resume(sc, sta, tid); |
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c index ea4b9081b4d0..1d96777b4cd2 100644 --- a/drivers/net/wireless/ath/ath9k/rc.c +++ b/drivers/net/wireless/ath/ath9k/rc.c | |||
@@ -1353,7 +1353,7 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband, | |||
1353 | an = (struct ath_node *)sta->drv_priv; | 1353 | an = (struct ath_node *)sta->drv_priv; |
1354 | 1354 | ||
1355 | if(ath_tx_aggr_check(sc, an, tid)) | 1355 | if(ath_tx_aggr_check(sc, an, tid)) |
1356 | ieee80211_start_tx_ba_session(sc->hw, hdr->addr1, tid); | 1356 | ieee80211_start_tx_ba_session(sta, tid); |
1357 | } | 1357 | } |
1358 | } | 1358 | } |
1359 | 1359 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c index 43edd8fd4405..2f09e3b7f0eb 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c | |||
@@ -301,7 +301,7 @@ static void rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv, | |||
301 | if (rs_tl_get_load(lq_data, tid) > IWL_AGG_LOAD_THRESHOLD) { | 301 | if (rs_tl_get_load(lq_data, tid) > IWL_AGG_LOAD_THRESHOLD) { |
302 | IWL_DEBUG_HT(priv, "Starting Tx agg: STA: %pM tid: %d\n", | 302 | IWL_DEBUG_HT(priv, "Starting Tx agg: STA: %pM tid: %d\n", |
303 | sta->addr, tid); | 303 | sta->addr, tid); |
304 | ieee80211_start_tx_ba_session(priv->hw, sta->addr, tid); | 304 | ieee80211_start_tx_ba_session(sta, tid); |
305 | } | 305 | } |
306 | } | 306 | } |
307 | 307 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 6385cdf24d13..b80cd0bc5845 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -2691,6 +2691,7 @@ static int iwl_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, | |||
2691 | } | 2691 | } |
2692 | 2692 | ||
2693 | static int iwl_mac_ampdu_action(struct ieee80211_hw *hw, | 2693 | static int iwl_mac_ampdu_action(struct ieee80211_hw *hw, |
2694 | struct ieee80211_vif *vif, | ||
2694 | enum ieee80211_ampdu_mlme_action action, | 2695 | enum ieee80211_ampdu_mlme_action action, |
2695 | struct ieee80211_sta *sta, u16 tid, u16 *ssn) | 2696 | struct ieee80211_sta *sta, u16 tid, u16 *ssn) |
2696 | { | 2697 | { |
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c index ebfc460115d6..f3dff2ecc406 100644 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c | |||
@@ -1312,7 +1312,7 @@ int iwl_tx_agg_start(struct iwl_priv *priv, const u8 *ra, u16 tid, u16 *ssn) | |||
1312 | if (tid_data->tfds_in_queue == 0) { | 1312 | if (tid_data->tfds_in_queue == 0) { |
1313 | IWL_DEBUG_HT(priv, "HW queue is empty\n"); | 1313 | IWL_DEBUG_HT(priv, "HW queue is empty\n"); |
1314 | tid_data->agg.state = IWL_AGG_ON; | 1314 | tid_data->agg.state = IWL_AGG_ON; |
1315 | ieee80211_start_tx_ba_cb_irqsafe(priv->hw, ra, tid); | 1315 | ieee80211_start_tx_ba_cb_irqsafe(priv->vif, ra, tid); |
1316 | } else { | 1316 | } else { |
1317 | IWL_DEBUG_HT(priv, "HW queue is NOT empty: %d packets in HW queue\n", | 1317 | IWL_DEBUG_HT(priv, "HW queue is NOT empty: %d packets in HW queue\n", |
1318 | tid_data->tfds_in_queue); | 1318 | tid_data->tfds_in_queue); |
@@ -1377,7 +1377,7 @@ int iwl_tx_agg_stop(struct iwl_priv *priv , const u8 *ra, u16 tid) | |||
1377 | if (ret) | 1377 | if (ret) |
1378 | return ret; | 1378 | return ret; |
1379 | 1379 | ||
1380 | ieee80211_stop_tx_ba_cb_irqsafe(priv->hw, ra, tid); | 1380 | ieee80211_stop_tx_ba_cb_irqsafe(priv->vif, ra, tid); |
1381 | 1381 | ||
1382 | return 0; | 1382 | return 0; |
1383 | } | 1383 | } |
@@ -1401,7 +1401,7 @@ int iwl_txq_check_empty(struct iwl_priv *priv, int sta_id, u8 tid, int txq_id) | |||
1401 | priv->cfg->ops->lib->txq_agg_disable(priv, txq_id, | 1401 | priv->cfg->ops->lib->txq_agg_disable(priv, txq_id, |
1402 | ssn, tx_fifo); | 1402 | ssn, tx_fifo); |
1403 | tid_data->agg.state = IWL_AGG_OFF; | 1403 | tid_data->agg.state = IWL_AGG_OFF; |
1404 | ieee80211_stop_tx_ba_cb_irqsafe(priv->hw, addr, tid); | 1404 | ieee80211_stop_tx_ba_cb_irqsafe(priv->vif, addr, tid); |
1405 | } | 1405 | } |
1406 | break; | 1406 | break; |
1407 | case IWL_EMPTYING_HW_QUEUE_ADDBA: | 1407 | case IWL_EMPTYING_HW_QUEUE_ADDBA: |
@@ -1409,7 +1409,7 @@ int iwl_txq_check_empty(struct iwl_priv *priv, int sta_id, u8 tid, int txq_id) | |||
1409 | if (tid_data->tfds_in_queue == 0) { | 1409 | if (tid_data->tfds_in_queue == 0) { |
1410 | IWL_DEBUG_HT(priv, "HW queue empty: continue ADDBA flow\n"); | 1410 | IWL_DEBUG_HT(priv, "HW queue empty: continue ADDBA flow\n"); |
1411 | tid_data->agg.state = IWL_AGG_ON; | 1411 | tid_data->agg.state = IWL_AGG_ON; |
1412 | ieee80211_start_tx_ba_cb_irqsafe(priv->hw, addr, tid); | 1412 | ieee80211_start_tx_ba_cb_irqsafe(priv->vif, addr, tid); |
1413 | } | 1413 | } |
1414 | break; | 1414 | break; |
1415 | } | 1415 | } |