Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 111712
b: refs/heads/master
c: ae17e98
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Sep 15, 2008
1 parent e9da6d7 commit ae04de5
Show file tree
Hide file tree
Showing 10 changed files with 33 additions and 38 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 323ce79a9cdbf838ea577677b1ddace8e0b4d4c6
refs/heads/master: ae17e986091637e7ef5a8224c7b689029b105131
1 change: 0 additions & 1 deletion trunk/drivers/net/wireless/ath9k/rc.c
Original file line number Diff line number Diff line change
Expand Up @@ -2039,7 +2039,6 @@ static void ath_rate_init(void *priv, void *priv_sta,
DPRINTF(sc, ATH_DBG_RATE, "%s\n", __func__);

sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
sta->txrate_idx = rate_lowest_index(local, sband, sta);

ath_setup_rates(local, sta);
if (conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) {
Expand Down
10 changes: 3 additions & 7 deletions trunk/drivers/net/wireless/iwlwifi/iwl-3945-rs.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,13 +334,11 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,

for (i = IWL_RATE_COUNT - 1; i >= 0; i--) {
if (sta->sta.supp_rates[local->hw.conf.channel->band] & (1 << i)) {
sta->txrate_idx = i;
rs_sta->last_txrate_idx = i;
break;
}
}

rs_sta->last_txrate_idx = sta->txrate_idx;

/* For 5 GHz band it start at IWL_FIRST_OFDM_RATE */
if (local->hw.conf.channel->band == IEEE80211_BAND_5GHZ)
rs_sta->last_txrate_idx += IWL_FIRST_OFDM_RATE;
Expand Down Expand Up @@ -809,15 +807,13 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev,

rs_sta->last_txrate_idx = index;
if (sband->band == IEEE80211_BAND_5GHZ)
sta->txrate_idx = rs_sta->last_txrate_idx - IWL_FIRST_OFDM_RATE;
sel->rate_idx = rs_sta->last_txrate_idx - IWL_FIRST_OFDM_RATE;
else
sta->txrate_idx = rs_sta->last_txrate_idx;
sel->rate_idx = rs_sta->last_txrate_idx;

rcu_read_unlock();

IWL_DEBUG_RATE("leave: %d\n", index);

sel->rate_idx = sta->txrate_idx;
}

static struct rate_control_ops rs_ops = {
Expand Down
13 changes: 2 additions & 11 deletions trunk/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
Original file line number Diff line number Diff line change
Expand Up @@ -2064,14 +2064,6 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
i = index;
lq_sta->last_txrate_idx = i;

/* sta->txrate_idx is an index to A mode rates which start
* at IWL_FIRST_OFDM_RATE
*/
if (lq_sta->band == IEEE80211_BAND_5GHZ)
sta->txrate_idx = i - IWL_FIRST_OFDM_RATE;
else
sta->txrate_idx = i;

return;
}

Expand Down Expand Up @@ -2234,7 +2226,6 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,

lq_sta->flush_timer = 0;
lq_sta->supp_rates = sta->sta.supp_rates[sband->band];
sta->txrate_idx = 3;
for (j = 0; j < LQ_SIZE; j++)
for (i = 0; i < IWL_RATE_COUNT; i++)
rs_rate_scale_clear_window(&lq_sta->lq_info[j].win[i]);
Expand Down Expand Up @@ -2269,11 +2260,11 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
}

/* Find highest tx rate supported by hardware and destination station */
lq_sta->last_txrate_idx = 3;
for (i = 0; i < sband->n_bitrates; i++)
if (sta->sta.supp_rates[sband->band] & BIT(i))
sta->txrate_idx = i;
lq_sta->last_txrate_idx = i;

lq_sta->last_txrate_idx = sta->txrate_idx;
/* For MODE_IEEE80211A, skip over cck rates in global rate table */
if (local->hw.conf.channel->band == IEEE80211_BAND_5GHZ)
lq_sta->last_txrate_idx += IWL_FIRST_OFDM_RATE;
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/mac80211/mesh_hwmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ static u32 airtime_link_metric_get(struct ieee80211_local *local,
/* bitrate is in units of 100 Kbps, while we need rate in units of
* 1Mbps. This will be corrected on tx_time computation.
*/
rate = sband->bitrates[sta->txrate_idx].bitrate;
rate = sband->bitrates[sta->last_txrate_idx].bitrate;
tx_time = (device_constant + 10 * test_frame_len / rate);
estimated_retx = ((1 << (2 * ARITH_SHIFT)) / (s_unit - err));
result = (tx_time * estimated_retx) >> (2 * ARITH_SHIFT) ;
Expand Down
2 changes: 2 additions & 0 deletions trunk/net/mac80211/rc80211_pid.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ struct rc_pid_sta_info {
u32 tx_num_failed;
u32 tx_num_xmit;

int txrate_idx;

/* Average failed frames percentage error (i.e. actual vs. target
* percentage), scaled by RC_PID_SMOOTHING. This value is computed
* using using an exponential weighted average technique:
Expand Down
33 changes: 19 additions & 14 deletions trunk/net/mac80211/rc80211_pid_algo.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ static void rate_control_pid_adjust_rate(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata;
struct ieee80211_supported_band *sband;
int cur_sorted, new_sorted, probe, tmp, n_bitrates, band;
int cur = sta->txrate_idx;
struct rc_pid_sta_info *spinfo = (void *)sta->rate_ctrl_priv;
int cur = spinfo->txrate_idx;

sdata = sta->sdata;
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
Expand Down Expand Up @@ -111,7 +112,7 @@ static void rate_control_pid_adjust_rate(struct ieee80211_local *local,
/* Fit the rate found to the nearest supported rate. */
do {
if (rate_supported(sta, band, rinfo[tmp].index)) {
sta->txrate_idx = rinfo[tmp].index;
spinfo->txrate_idx = rinfo[tmp].index;
break;
}
if (adj < 0)
Expand All @@ -121,9 +122,9 @@ static void rate_control_pid_adjust_rate(struct ieee80211_local *local,
} while (tmp < n_bitrates && tmp >= 0);

#ifdef CONFIG_MAC80211_DEBUGFS
rate_control_pid_event_rate_change(
&((struct rc_pid_sta_info *)sta->rate_ctrl_priv)->events,
sta->txrate_idx, sband->bitrates[sta->txrate_idx].bitrate);
rate_control_pid_event_rate_change(&spinfo->events,
spinfo->txrate_idx,
sband->bitrates[spinfo->txrate_idx].bitrate);
#endif
}

Expand Down Expand Up @@ -190,16 +191,16 @@ static void rate_control_pid_sample(struct rc_pid_info *pinfo,
spinfo->tx_num_failed = 0;

/* If we just switched rate, update the rate behaviour info. */
if (pinfo->oldrate != sta->txrate_idx) {
if (pinfo->oldrate != spinfo->txrate_idx) {

i = rinfo[pinfo->oldrate].rev_index;
j = rinfo[sta->txrate_idx].rev_index;
j = rinfo[spinfo->txrate_idx].rev_index;

tmp = (pf - spinfo->last_pf);
tmp = RC_PID_DO_ARITH_RIGHT_SHIFT(tmp, RC_PID_ARITH_SHIFT);

rinfo[j].diff = rinfo[i].diff + tmp;
pinfo->oldrate = sta->txrate_idx;
pinfo->oldrate = spinfo->txrate_idx;
}
rate_control_pid_normalize(pinfo, sband->n_bitrates);

Expand Down Expand Up @@ -252,19 +253,20 @@ static void rate_control_pid_tx_status(void *priv, struct net_device *dev,
if (!sta)
goto unlock;

spinfo = sta->rate_ctrl_priv;

/* Don't update the state if we're not controlling the rate. */
sdata = sta->sdata;
if (sdata->force_unicast_rateidx > -1) {
sta->txrate_idx = sdata->max_ratectrl_rateidx;
spinfo->txrate_idx = sdata->max_ratectrl_rateidx;
goto unlock;
}

/* Ignore all frames that were sent with a different rate than the rate
* we currently advise mac80211 to use. */
if (info->tx_rate_idx != sta->txrate_idx)
if (info->tx_rate_idx != spinfo->txrate_idx)
goto unlock;

spinfo = sta->rate_ctrl_priv;
spinfo->tx_num_xmit++;

#ifdef CONFIG_MAC80211_DEBUGFS
Expand Down Expand Up @@ -301,6 +303,7 @@ static void rate_control_pid_get_rate(void *priv, struct net_device *dev,
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
struct ieee80211_sub_if_data *sdata;
struct rc_pid_sta_info *spinfo;
struct sta_info *sta;
int rateidx;
u16 fc;
Expand All @@ -321,10 +324,11 @@ static void rate_control_pid_get_rate(void *priv, struct net_device *dev,

/* If a forced rate is in effect, select it. */
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
spinfo = (struct rc_pid_sta_info *)sta->rate_ctrl_priv;
if (sdata->force_unicast_rateidx > -1)
sta->txrate_idx = sdata->force_unicast_rateidx;
spinfo->txrate_idx = sdata->force_unicast_rateidx;

rateidx = sta->txrate_idx;
rateidx = spinfo->txrate_idx;

if (rateidx >= sband->n_bitrates)
rateidx = sband->n_bitrates - 1;
Expand All @@ -349,9 +353,10 @@ static void rate_control_pid_rate_init(void *priv, void *priv_sta,
* Until that method is implemented, we will use the lowest supported
* rate as a workaround. */
struct ieee80211_supported_band *sband;
struct rc_pid_sta_info *spinfo = (void *)sta->rate_ctrl_priv;

sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
sta->txrate_idx = rate_lowest_index(local, sband, sta);
spinfo->txrate_idx = rate_lowest_index(local, sband, sta);
sta->fail_avg = 0;
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/net/mac80211/sta_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ struct sta_info {
unsigned long tx_packets;
unsigned long tx_bytes;
unsigned long tx_fragments;
int txrate_idx;
unsigned int last_txrate_idx;
u16 tid_seq[IEEE80211_QOS_CTL_TID_MASK + 1];
#ifdef CONFIG_MAC80211_DEBUG_COUNTERS
unsigned int wme_tx_queue[NUM_RX_DATA_QUEUES];
Expand Down
2 changes: 2 additions & 0 deletions trunk/net/mac80211/tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,8 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)

if (likely(tx->rate_idx < 0)) {
rate_control_get_rate(tx->dev, sband, tx->skb, &rsel);
if (tx->sta)
tx->sta->last_txrate_idx = rsel.rate_idx;
tx->rate_idx = rsel.rate_idx;
if (unlikely(rsel.probe_idx >= 0)) {
info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
Expand Down
4 changes: 2 additions & 2 deletions trunk/net/mac80211/wext.c
Original file line number Diff line number Diff line change
Expand Up @@ -636,8 +636,8 @@ static int ieee80211_ioctl_giwrate(struct net_device *dev,

sta = sta_info_get(local, sdata->u.sta.bssid);

if (sta && sta->txrate_idx < sband->n_bitrates)
rate->value = sband->bitrates[sta->txrate_idx].bitrate;
if (sta && sta->last_txrate_idx < sband->n_bitrates)
rate->value = sband->bitrates[sta->last_txrate_idx].bitrate;
else
rate->value = 0;

Expand Down

0 comments on commit ae04de5

Please sign in to comment.