aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2009-11-16 06:00:38 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-11-18 17:09:15 -0500
commitc951ad3550ab40071bb0f222ba6125845769c08a (patch)
tree9db1d3c110b359a34a3d706eaf40285cfa01550b /drivers
parent3b53fde8ac40c4321389def14d7f4a9e14092fd3 (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.c5
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c5
-rw-r--r--drivers/net/wireless/ath/ath9k/rc.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-rs.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-tx.c8
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
2443static int ar9170_ampdu_action(struct ieee80211_hw *hw, 2443static 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
3080static int ath9k_ampdu_action(struct ieee80211_hw *hw, 3080static 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
2693static int iwl_mac_ampdu_action(struct ieee80211_hw *hw, 2693static 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 }