diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-09-10 20:45:11 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-09-15 16:48:24 -0400 |
commit | 323ce79a9cdbf838ea577677b1ddace8e0b4d4c6 (patch) | |
tree | f14a67ec7927865dc1537b2c3a4fb20c0325f517 | |
parent | b7e35008815a1c39123f4dd53b430788e2e18da4 (diff) |
mac80211: share sta->supp_rates
As more preparation for a saner rate control algorithm API,
share the supported rates bitmap in the public API.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath9k/rc.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 6 | ||||
-rw-r--r-- | include/net/mac80211.h | 2 | ||||
-rw-r--r-- | net/mac80211/cfg.c | 2 | ||||
-rw-r--r-- | net/mac80211/mesh_plink.c | 4 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 12 | ||||
-rw-r--r-- | net/mac80211/rate.h | 2 | ||||
-rw-r--r-- | net/mac80211/sta_info.h | 2 |
9 files changed, 18 insertions, 18 deletions
diff --git a/drivers/net/wireless/ath9k/rc.c b/drivers/net/wireless/ath9k/rc.c index 390019ed398e..226d70c73fe6 100644 --- a/drivers/net/wireless/ath9k/rc.c +++ b/drivers/net/wireless/ath9k/rc.c | |||
@@ -1825,7 +1825,7 @@ static void ath_setup_rates(struct ieee80211_local *local, struct sta_info *sta) | |||
1825 | 1825 | ||
1826 | sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; | 1826 | sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; |
1827 | for (i = 0; i < sband->n_bitrates; i++) { | 1827 | for (i = 0; i < sband->n_bitrates; i++) { |
1828 | if (sta->supp_rates[local->hw.conf.channel->band] & BIT(i)) { | 1828 | if (sta->sta.supp_rates[local->hw.conf.channel->band] & BIT(i)) { |
1829 | rc_priv->neg_rates.rs_rates[j] | 1829 | rc_priv->neg_rates.rs_rates[j] |
1830 | = (sband->bitrates[i].bitrate * 2) / 10; | 1830 | = (sband->bitrates[i].bitrate * 2) / 10; |
1831 | j++; | 1831 | j++; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-rs.c b/drivers/net/wireless/iwlwifi/iwl-3945-rs.c index 46b672c34585..f751b9097592 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945-rs.c | |||
@@ -333,7 +333,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta, | |||
333 | * after assoc.. */ | 333 | * after assoc.. */ |
334 | 334 | ||
335 | for (i = IWL_RATE_COUNT - 1; i >= 0; i--) { | 335 | for (i = IWL_RATE_COUNT - 1; i >= 0; i--) { |
336 | if (sta->supp_rates[local->hw.conf.channel->band] & (1 << i)) { | 336 | if (sta->sta.supp_rates[local->hw.conf.channel->band] & (1 << i)) { |
337 | sta->txrate_idx = i; | 337 | sta->txrate_idx = i; |
338 | break; | 338 | break; |
339 | } | 339 | } |
@@ -680,7 +680,7 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev, | |||
680 | 680 | ||
681 | rs_sta = (void *)sta->rate_ctrl_priv; | 681 | rs_sta = (void *)sta->rate_ctrl_priv; |
682 | 682 | ||
683 | rate_mask = sta->supp_rates[sband->band]; | 683 | rate_mask = sta->sta.supp_rates[sband->band]; |
684 | index = min(rs_sta->last_txrate_idx & 0xffff, IWL_RATE_COUNT - 1); | 684 | index = min(rs_sta->last_txrate_idx & 0xffff, IWL_RATE_COUNT - 1); |
685 | 685 | ||
686 | if (sband->band == IEEE80211_BAND_5GHZ) | 686 | if (sband->band == IEEE80211_BAND_5GHZ) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c index 54f076bb2022..f7191a9a7fb7 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c | |||
@@ -1731,7 +1731,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, | |||
1731 | return; | 1731 | return; |
1732 | 1732 | ||
1733 | lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv; | 1733 | lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv; |
1734 | lq_sta->supp_rates = sta->supp_rates[lq_sta->band]; | 1734 | lq_sta->supp_rates = sta->sta.supp_rates[lq_sta->band]; |
1735 | 1735 | ||
1736 | tid = rs_tl_add_packet(lq_sta, hdr); | 1736 | tid = rs_tl_add_packet(lq_sta, hdr); |
1737 | 1737 | ||
@@ -2233,7 +2233,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta, | |||
2233 | sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; | 2233 | sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; |
2234 | 2234 | ||
2235 | lq_sta->flush_timer = 0; | 2235 | lq_sta->flush_timer = 0; |
2236 | lq_sta->supp_rates = sta->supp_rates[sband->band]; | 2236 | lq_sta->supp_rates = sta->sta.supp_rates[sband->band]; |
2237 | sta->txrate_idx = 3; | 2237 | sta->txrate_idx = 3; |
2238 | for (j = 0; j < LQ_SIZE; j++) | 2238 | for (j = 0; j < LQ_SIZE; j++) |
2239 | for (i = 0; i < IWL_RATE_COUNT; i++) | 2239 | for (i = 0; i < IWL_RATE_COUNT; i++) |
@@ -2270,7 +2270,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta, | |||
2270 | 2270 | ||
2271 | /* Find highest tx rate supported by hardware and destination station */ | 2271 | /* Find highest tx rate supported by hardware and destination station */ |
2272 | for (i = 0; i < sband->n_bitrates; i++) | 2272 | for (i = 0; i < sband->n_bitrates; i++) |
2273 | if (sta->supp_rates[sband->band] & BIT(i)) | 2273 | if (sta->sta.supp_rates[sband->band] & BIT(i)) |
2274 | sta->txrate_idx = i; | 2274 | sta->txrate_idx = i; |
2275 | 2275 | ||
2276 | lq_sta->last_txrate_idx = sta->txrate_idx; | 2276 | lq_sta->last_txrate_idx = sta->txrate_idx; |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 5a6a029da4da..ef8e4cc32c2e 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -666,10 +666,12 @@ enum set_key_cmd { | |||
666 | * | 666 | * |
667 | * @addr: MAC address | 667 | * @addr: MAC address |
668 | * @aid: AID we assigned to the station if we're an AP | 668 | * @aid: AID we assigned to the station if we're an AP |
669 | * @supp_rates: Bitmap of supported rates (per band) | ||
669 | * @drv_priv: data area for driver use, will always be aligned to | 670 | * @drv_priv: data area for driver use, will always be aligned to |
670 | * sizeof(void *), size is determined in hw information. | 671 | * sizeof(void *), size is determined in hw information. |
671 | */ | 672 | */ |
672 | struct ieee80211_sta { | 673 | struct ieee80211_sta { |
674 | u64 supp_rates[IEEE80211_NUM_BANDS]; | ||
673 | u8 addr[ETH_ALEN]; | 675 | u8 addr[ETH_ALEN]; |
674 | u16 aid; | 676 | u16 aid; |
675 | 677 | ||
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index ed5e77ce627b..47988d2eb15c 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -667,7 +667,7 @@ static void sta_apply_parameters(struct ieee80211_local *local, | |||
667 | rates |= BIT(j); | 667 | rates |= BIT(j); |
668 | } | 668 | } |
669 | } | 669 | } |
670 | sta->supp_rates[local->oper_channel->band] = rates; | 670 | sta->sta.supp_rates[local->oper_channel->band] = rates; |
671 | } | 671 | } |
672 | 672 | ||
673 | if (params->ht_capa) { | 673 | if (params->ht_capa) { |
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c index debf7834dbc6..faac101c0f85 100644 --- a/net/mac80211/mesh_plink.c +++ b/net/mac80211/mesh_plink.c | |||
@@ -106,7 +106,7 @@ static struct sta_info *mesh_plink_alloc(struct ieee80211_sub_if_data *sdata, | |||
106 | return NULL; | 106 | return NULL; |
107 | 107 | ||
108 | sta->flags = WLAN_STA_AUTHORIZED; | 108 | sta->flags = WLAN_STA_AUTHORIZED; |
109 | sta->supp_rates[local->hw.conf.channel->band] = rates; | 109 | sta->sta.supp_rates[local->hw.conf.channel->band] = rates; |
110 | 110 | ||
111 | return sta; | 111 | return sta; |
112 | } | 112 | } |
@@ -243,7 +243,7 @@ void mesh_neighbour_update(u8 *hw_addr, u64 rates, struct ieee80211_sub_if_data | |||
243 | } | 243 | } |
244 | 244 | ||
245 | sta->last_rx = jiffies; | 245 | sta->last_rx = jiffies; |
246 | sta->supp_rates[local->hw.conf.channel->band] = rates; | 246 | sta->sta.supp_rates[local->hw.conf.channel->band] = rates; |
247 | if (peer_accepting_plinks && sta->plink_state == PLINK_LISTEN && | 247 | if (peer_accepting_plinks && sta->plink_state == PLINK_LISTEN && |
248 | sdata->u.mesh.accepting_plinks && | 248 | sdata->u.mesh.accepting_plinks && |
249 | sdata->u.mesh.mshcfg.auto_open_plinks) | 249 | sdata->u.mesh.mshcfg.auto_open_plinks) |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 35c421b89dd2..c049f336e58a 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -1301,7 +1301,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata, | |||
1301 | } | 1301 | } |
1302 | } | 1302 | } |
1303 | 1303 | ||
1304 | sta->supp_rates[local->hw.conf.channel->band] = rates; | 1304 | sta->sta.supp_rates[local->hw.conf.channel->band] = rates; |
1305 | sdata->bss_conf.basic_rates = basic_rates; | 1305 | sdata->bss_conf.basic_rates = basic_rates; |
1306 | 1306 | ||
1307 | /* cf. IEEE 802.11 9.2.12 */ | 1307 | /* cf. IEEE 802.11 9.2.12 */ |
@@ -1497,13 +1497,13 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata, | |||
1497 | if (sta) { | 1497 | if (sta) { |
1498 | u64 prev_rates; | 1498 | u64 prev_rates; |
1499 | 1499 | ||
1500 | prev_rates = sta->supp_rates[band]; | 1500 | prev_rates = sta->sta.supp_rates[band]; |
1501 | /* make sure mandatory rates are always added */ | 1501 | /* make sure mandatory rates are always added */ |
1502 | sta->supp_rates[band] = supp_rates | | 1502 | sta->sta.supp_rates[band] = supp_rates | |
1503 | ieee80211_mandatory_rates(local, band); | 1503 | ieee80211_mandatory_rates(local, band); |
1504 | 1504 | ||
1505 | #ifdef CONFIG_MAC80211_IBSS_DEBUG | 1505 | #ifdef CONFIG_MAC80211_IBSS_DEBUG |
1506 | if (sta->supp_rates[band] != prev_rates) | 1506 | if (sta->sta.supp_rates[band] != prev_rates) |
1507 | printk(KERN_DEBUG "%s: updated supp_rates set " | 1507 | printk(KERN_DEBUG "%s: updated supp_rates set " |
1508 | "for %s based on beacon info (0x%llx | " | 1508 | "for %s based on beacon info (0x%llx | " |
1509 | "0x%llx -> 0x%llx)\n", | 1509 | "0x%llx -> 0x%llx)\n", |
@@ -1511,7 +1511,7 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata, | |||
1511 | print_mac(mac, sta->sta.addr), | 1511 | print_mac(mac, sta->sta.addr), |
1512 | (unsigned long long) prev_rates, | 1512 | (unsigned long long) prev_rates, |
1513 | (unsigned long long) supp_rates, | 1513 | (unsigned long long) supp_rates, |
1514 | (unsigned long long) sta->supp_rates[band]); | 1514 | (unsigned long long) sta->sta.supp_rates[band]); |
1515 | #endif | 1515 | #endif |
1516 | } else { | 1516 | } else { |
1517 | ieee80211_ibss_add_sta(sdata, NULL, mgmt->bssid, | 1517 | ieee80211_ibss_add_sta(sdata, NULL, mgmt->bssid, |
@@ -2339,7 +2339,7 @@ struct sta_info *ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, | |||
2339 | set_sta_flags(sta, WLAN_STA_AUTHORIZED); | 2339 | set_sta_flags(sta, WLAN_STA_AUTHORIZED); |
2340 | 2340 | ||
2341 | /* make sure mandatory rates are always added */ | 2341 | /* make sure mandatory rates are always added */ |
2342 | sta->supp_rates[band] = supp_rates | | 2342 | sta->sta.supp_rates[band] = supp_rates | |
2343 | ieee80211_mandatory_rates(local, band); | 2343 | ieee80211_mandatory_rates(local, band); |
2344 | 2344 | ||
2345 | rate_control_rate_init(sta, local); | 2345 | rate_control_rate_init(sta, local); |
diff --git a/net/mac80211/rate.h b/net/mac80211/rate.h index ede7ab56f65b..5f18c27eb900 100644 --- a/net/mac80211/rate.h +++ b/net/mac80211/rate.h | |||
@@ -134,7 +134,7 @@ static inline int rate_supported(struct sta_info *sta, | |||
134 | enum ieee80211_band band, | 134 | enum ieee80211_band band, |
135 | int index) | 135 | int index) |
136 | { | 136 | { |
137 | return (sta == NULL || sta->supp_rates[band] & BIT(index)); | 137 | return (sta == NULL || sta->sta.supp_rates[band] & BIT(index)); |
138 | } | 138 | } |
139 | 139 | ||
140 | static inline s8 | 140 | static inline s8 |
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index df42d1815458..4dafa044b2f2 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h | |||
@@ -168,7 +168,6 @@ struct sta_ampdu_mlme { | |||
168 | * in the header file. | 168 | * in the header file. |
169 | * @flaglock: spinlock for flags accesses | 169 | * @flaglock: spinlock for flags accesses |
170 | * @ht_info: HT capabilities of this STA | 170 | * @ht_info: HT capabilities of this STA |
171 | * @supp_rates: Bitmap of supported rates (per band) | ||
172 | * @addr: MAC address of this STA | 171 | * @addr: MAC address of this STA |
173 | * @aid: STA's unique AID (1..2007, 0 = not assigned yet), | 172 | * @aid: STA's unique AID (1..2007, 0 = not assigned yet), |
174 | * only used in AP (and IBSS?) mode | 173 | * only used in AP (and IBSS?) mode |
@@ -228,7 +227,6 @@ struct sta_info { | |||
228 | spinlock_t lock; | 227 | spinlock_t lock; |
229 | spinlock_t flaglock; | 228 | spinlock_t flaglock; |
230 | struct ieee80211_ht_info ht_info; | 229 | struct ieee80211_ht_info ht_info; |
231 | u64 supp_rates[IEEE80211_NUM_BANDS]; | ||
232 | 230 | ||
233 | u16 listen_interval; | 231 | u16 listen_interval; |
234 | 232 | ||