aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorSimon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>2013-07-08 10:55:50 -0400
committerJohannes Berg <johannes.berg@intel.com>2013-07-16 02:58:02 -0400
commit3de805cf965d69c8d3d7d69368d5fd2c925a2d5a (patch)
tree8e8c169830811addbf56ae7518f041f55afb7a6f /net
parentdcd6eac1f3b5fa1df11dfa99da0cf75b76cfef97 (diff)
mac80211/rc80211: add chandef to rate initialization
5 and 10 MHz support needs to know the current operating channel width, add the chandef to the rate control API. Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> Signed-off-by: Mathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de> Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Diffstat (limited to 'net')
-rw-r--r--net/mac80211/rate.h22
-rw-r--r--net/mac80211/rc80211_minstrel.c3
-rw-r--r--net/mac80211/rc80211_minstrel_ht.c10
-rw-r--r--net/mac80211/rc80211_pid_algo.c1
4 files changed, 27 insertions, 9 deletions
diff --git a/net/mac80211/rate.h b/net/mac80211/rate.h
index d35a5dd3fb13..5dedc56c94db 100644
--- a/net/mac80211/rate.h
+++ b/net/mac80211/rate.h
@@ -66,11 +66,12 @@ static inline void rate_control_rate_init(struct sta_info *sta)
66 } 66 }
67 67
68 sband = local->hw.wiphy->bands[chanctx_conf->def.chan->band]; 68 sband = local->hw.wiphy->bands[chanctx_conf->def.chan->band];
69 rcu_read_unlock();
70 69
71 ieee80211_sta_set_rx_nss(sta); 70 ieee80211_sta_set_rx_nss(sta);
72 71
73 ref->ops->rate_init(ref->priv, sband, ista, priv_sta); 72 ref->ops->rate_init(ref->priv, sband, &chanctx_conf->def, ista,
73 priv_sta);
74 rcu_read_unlock();
74 set_sta_flag(sta, WLAN_STA_RATE_CONTROL); 75 set_sta_flag(sta, WLAN_STA_RATE_CONTROL);
75} 76}
76 77
@@ -81,10 +82,21 @@ static inline void rate_control_rate_update(struct ieee80211_local *local,
81 struct rate_control_ref *ref = local->rate_ctrl; 82 struct rate_control_ref *ref = local->rate_ctrl;
82 struct ieee80211_sta *ista = &sta->sta; 83 struct ieee80211_sta *ista = &sta->sta;
83 void *priv_sta = sta->rate_ctrl_priv; 84 void *priv_sta = sta->rate_ctrl_priv;
85 struct ieee80211_chanctx_conf *chanctx_conf;
86
87 if (ref && ref->ops->rate_update) {
88 rcu_read_lock();
84 89
85 if (ref && ref->ops->rate_update) 90 chanctx_conf = rcu_dereference(sta->sdata->vif.chanctx_conf);
86 ref->ops->rate_update(ref->priv, sband, ista, 91 if (WARN_ON(!chanctx_conf)) {
87 priv_sta, changed); 92 rcu_read_unlock();
93 return;
94 }
95
96 ref->ops->rate_update(ref->priv, sband, &chanctx_conf->def,
97 ista, priv_sta, changed);
98 rcu_read_unlock();
99 }
88 drv_sta_rc_update(local, sta->sdata, &sta->sta, changed); 100 drv_sta_rc_update(local, sta->sdata, &sta->sta, changed);
89} 101}
90 102
diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c
index ac7ef5414bde..5b25966add10 100644
--- a/net/mac80211/rc80211_minstrel.c
+++ b/net/mac80211/rc80211_minstrel.c
@@ -417,7 +417,8 @@ init_sample_table(struct minstrel_sta_info *mi)
417 417
418static void 418static void
419minstrel_rate_init(void *priv, struct ieee80211_supported_band *sband, 419minstrel_rate_init(void *priv, struct ieee80211_supported_band *sband,
420 struct ieee80211_sta *sta, void *priv_sta) 420 struct cfg80211_chan_def *chandef,
421 struct ieee80211_sta *sta, void *priv_sta)
421{ 422{
422 struct minstrel_sta_info *mi = priv_sta; 423 struct minstrel_sta_info *mi = priv_sta;
423 struct minstrel_priv *mp = priv; 424 struct minstrel_priv *mp = priv;
diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index 5b2d3012b983..52562973fbd1 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -836,6 +836,7 @@ minstrel_ht_update_cck(struct minstrel_priv *mp, struct minstrel_ht_sta *mi,
836 836
837static void 837static void
838minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband, 838minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband,
839 struct cfg80211_chan_def *chandef,
839 struct ieee80211_sta *sta, void *priv_sta) 840 struct ieee80211_sta *sta, void *priv_sta)
840{ 841{
841 struct minstrel_priv *mp = priv; 842 struct minstrel_priv *mp = priv;
@@ -931,22 +932,25 @@ use_legacy:
931 memset(&msp->legacy, 0, sizeof(msp->legacy)); 932 memset(&msp->legacy, 0, sizeof(msp->legacy));
932 msp->legacy.r = msp->ratelist; 933 msp->legacy.r = msp->ratelist;
933 msp->legacy.sample_table = msp->sample_table; 934 msp->legacy.sample_table = msp->sample_table;
934 return mac80211_minstrel.rate_init(priv, sband, sta, &msp->legacy); 935 return mac80211_minstrel.rate_init(priv, sband, chandef, sta,
936 &msp->legacy);
935} 937}
936 938
937static void 939static void
938minstrel_ht_rate_init(void *priv, struct ieee80211_supported_band *sband, 940minstrel_ht_rate_init(void *priv, struct ieee80211_supported_band *sband,
941 struct cfg80211_chan_def *chandef,
939 struct ieee80211_sta *sta, void *priv_sta) 942 struct ieee80211_sta *sta, void *priv_sta)
940{ 943{
941 minstrel_ht_update_caps(priv, sband, sta, priv_sta); 944 minstrel_ht_update_caps(priv, sband, chandef, sta, priv_sta);
942} 945}
943 946
944static void 947static void
945minstrel_ht_rate_update(void *priv, struct ieee80211_supported_band *sband, 948minstrel_ht_rate_update(void *priv, struct ieee80211_supported_band *sband,
949 struct cfg80211_chan_def *chandef,
946 struct ieee80211_sta *sta, void *priv_sta, 950 struct ieee80211_sta *sta, void *priv_sta,
947 u32 changed) 951 u32 changed)
948{ 952{
949 minstrel_ht_update_caps(priv, sband, sta, priv_sta); 953 minstrel_ht_update_caps(priv, sband, chandef, sta, priv_sta);
950} 954}
951 955
952static void * 956static void *
diff --git a/net/mac80211/rc80211_pid_algo.c b/net/mac80211/rc80211_pid_algo.c
index 502d3ecc4a79..958fad07b54c 100644
--- a/net/mac80211/rc80211_pid_algo.c
+++ b/net/mac80211/rc80211_pid_algo.c
@@ -293,6 +293,7 @@ rate_control_pid_get_rate(void *priv, struct ieee80211_sta *sta,
293 293
294static void 294static void
295rate_control_pid_rate_init(void *priv, struct ieee80211_supported_band *sband, 295rate_control_pid_rate_init(void *priv, struct ieee80211_supported_band *sband,
296 struct cfg80211_chan_def *chandef,
296 struct ieee80211_sta *sta, void *priv_sta) 297 struct ieee80211_sta *sta, void *priv_sta)
297{ 298{
298 struct rc_pid_sta_info *spinfo = priv_sta; 299 struct rc_pid_sta_info *spinfo = priv_sta;