mac80211: share sta->supp_rates
authorJohannes Berg <johannes@sipsolutions.net>
Thu, 11 Sep 2008 00:45:11 +0000 (02:45 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 15 Sep 2008 20:48:24 +0000 (16:48 -0400)
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>
drivers/net/wireless/ath9k/rc.c
drivers/net/wireless/iwlwifi/iwl-3945-rs.c
drivers/net/wireless/iwlwifi/iwl-agn-rs.c
include/net/mac80211.h
net/mac80211/cfg.c
net/mac80211/mesh_plink.c
net/mac80211/mlme.c
net/mac80211/rate.h
net/mac80211/sta_info.h

index 390019ed398ee6a533ec8ac33638fdb2dc85dda1..226d70c73fe65f6300538ef02f642498da654629 100644 (file)
@@ -1825,7 +1825,7 @@ static void ath_setup_rates(struct ieee80211_local *local, struct sta_info *sta)
 
        sband =  local->hw.wiphy->bands[local->hw.conf.channel->band];
        for (i = 0; i < sband->n_bitrates; i++) {
-               if (sta->supp_rates[local->hw.conf.channel->band] & BIT(i)) {
+               if (sta->sta.supp_rates[local->hw.conf.channel->band] & BIT(i)) {
                        rc_priv->neg_rates.rs_rates[j]
                                = (sband->bitrates[i].bitrate * 2) / 10;
                        j++;
index 46b672c34585b962a48c7b2dbb83b42f8b5019c2..f751b909759228b3e80462b3f293b4b6e6715480 100644 (file)
@@ -333,7 +333,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
         * after assoc.. */
 
        for (i = IWL_RATE_COUNT - 1; i >= 0; i--) {
-               if (sta->supp_rates[local->hw.conf.channel->band] & (1 << i)) {
+               if (sta->sta.supp_rates[local->hw.conf.channel->band] & (1 << i)) {
                        sta->txrate_idx = i;
                        break;
                }
@@ -680,7 +680,7 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev,
 
        rs_sta = (void *)sta->rate_ctrl_priv;
 
-       rate_mask = sta->supp_rates[sband->band];
+       rate_mask = sta->sta.supp_rates[sband->band];
        index = min(rs_sta->last_txrate_idx & 0xffff, IWL_RATE_COUNT - 1);
 
        if (sband->band == IEEE80211_BAND_5GHZ)
index 54f076bb20220fb1fb60f30103f4ad1dd86434ba..f7191a9a7fb7f240251540fe453cf86f9ddc445d 100644 (file)
@@ -1731,7 +1731,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
                return;
 
        lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv;
-       lq_sta->supp_rates = sta->supp_rates[lq_sta->band];
+       lq_sta->supp_rates = sta->sta.supp_rates[lq_sta->band];
 
        tid = rs_tl_add_packet(lq_sta, hdr);
 
@@ -2233,7 +2233,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
        sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
 
        lq_sta->flush_timer = 0;
-       lq_sta->supp_rates = sta->supp_rates[sband->band];
+       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++)
@@ -2270,7 +2270,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
 
        /* Find highest tx rate supported by hardware and destination station */
        for (i = 0; i < sband->n_bitrates; i++)
-               if (sta->supp_rates[sband->band] & BIT(i))
+               if (sta->sta.supp_rates[sband->band] & BIT(i))
                        sta->txrate_idx = i;
 
        lq_sta->last_txrate_idx = sta->txrate_idx;
index 5a6a029da4da80bbf74f9762081e0a883580ef40..ef8e4cc32c2ede23cae5dc90fff97c33f65fb795 100644 (file)
@@ -666,10 +666,12 @@ enum set_key_cmd {
  *
  * @addr: MAC address
  * @aid: AID we assigned to the station if we're an AP
+ * @supp_rates: Bitmap of supported rates (per band)
  * @drv_priv: data area for driver use, will always be aligned to
  *     sizeof(void *), size is determined in hw information.
  */
 struct ieee80211_sta {
+       u64 supp_rates[IEEE80211_NUM_BANDS];
        u8 addr[ETH_ALEN];
        u16 aid;
 
index ed5e77ce627b9db22b4b66a1ebfa6a2a50b2cb6a..47988d2eb15c8b13889c8fb1b8bd93e1c9b72b5c 100644 (file)
@@ -667,7 +667,7 @@ static void sta_apply_parameters(struct ieee80211_local *local,
                                        rates |= BIT(j);
                        }
                }
-               sta->supp_rates[local->oper_channel->band] = rates;
+               sta->sta.supp_rates[local->oper_channel->band] = rates;
        }
 
        if (params->ht_capa) {
index debf7834dbc63bae119768e2b6320728783cb011..faac101c0f85a2b7001dfc42c068d5e6140557c3 100644 (file)
@@ -106,7 +106,7 @@ static struct sta_info *mesh_plink_alloc(struct ieee80211_sub_if_data *sdata,
                return NULL;
 
        sta->flags = WLAN_STA_AUTHORIZED;
-       sta->supp_rates[local->hw.conf.channel->band] = rates;
+       sta->sta.supp_rates[local->hw.conf.channel->band] = rates;
 
        return sta;
 }
@@ -243,7 +243,7 @@ void mesh_neighbour_update(u8 *hw_addr, u64 rates, struct ieee80211_sub_if_data
        }
 
        sta->last_rx = jiffies;
-       sta->supp_rates[local->hw.conf.channel->band] = rates;
+       sta->sta.supp_rates[local->hw.conf.channel->band] = rates;
        if (peer_accepting_plinks && sta->plink_state == PLINK_LISTEN &&
                        sdata->u.mesh.accepting_plinks &&
                        sdata->u.mesh.mshcfg.auto_open_plinks)
index 35c421b89dd21ceed6d2ea6942395f0585e150bc..c049f336e58a3680b2923a741900bdc2b24fda73 100644 (file)
@@ -1301,7 +1301,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
                }
        }
 
-       sta->supp_rates[local->hw.conf.channel->band] = rates;
+       sta->sta.supp_rates[local->hw.conf.channel->band] = rates;
        sdata->bss_conf.basic_rates = basic_rates;
 
        /* cf. IEEE 802.11 9.2.12 */
@@ -1497,13 +1497,13 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
                if (sta) {
                        u64 prev_rates;
 
-                       prev_rates = sta->supp_rates[band];
+                       prev_rates = sta->sta.supp_rates[band];
                        /* make sure mandatory rates are always added */
-                       sta->supp_rates[band] = supp_rates |
+                       sta->sta.supp_rates[band] = supp_rates |
                                ieee80211_mandatory_rates(local, band);
 
 #ifdef CONFIG_MAC80211_IBSS_DEBUG
-                       if (sta->supp_rates[band] != prev_rates)
+                       if (sta->sta.supp_rates[band] != prev_rates)
                                printk(KERN_DEBUG "%s: updated supp_rates set "
                                    "for %s based on beacon info (0x%llx | "
                                    "0x%llx -> 0x%llx)\n",
@@ -1511,7 +1511,7 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
                                    print_mac(mac, sta->sta.addr),
                                    (unsigned long long) prev_rates,
                                    (unsigned long long) supp_rates,
-                                   (unsigned long long) sta->supp_rates[band]);
+                                   (unsigned long long) sta->sta.supp_rates[band]);
 #endif
                } else {
                        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,
        set_sta_flags(sta, WLAN_STA_AUTHORIZED);
 
        /* make sure mandatory rates are always added */
-       sta->supp_rates[band] = supp_rates |
+       sta->sta.supp_rates[band] = supp_rates |
                        ieee80211_mandatory_rates(local, band);
 
        rate_control_rate_init(sta, local);
index ede7ab56f65bc269f2363a56541d4944f32f56b7..5f18c27eb9000ac621ecaecf3b3cfa738cd1146e 100644 (file)
@@ -134,7 +134,7 @@ static inline int rate_supported(struct sta_info *sta,
                                 enum ieee80211_band band,
                                 int index)
 {
-       return (sta == NULL || sta->supp_rates[band] & BIT(index));
+       return (sta == NULL || sta->sta.supp_rates[band] & BIT(index));
 }
 
 static inline s8
index df42d181545897bf2cb9f6f2252f6f9804be7339..4dafa044b2f27e3d529f99e01b501362a4da6b55 100644 (file)
@@ -168,7 +168,6 @@ struct sta_ampdu_mlme {
  *     in the header file.
  * @flaglock: spinlock for flags accesses
  * @ht_info: HT capabilities of this STA
- * @supp_rates: Bitmap of supported rates (per band)
  * @addr: MAC address of this STA
  * @aid: STA's unique AID (1..2007, 0 = not assigned yet),
  *     only used in AP (and IBSS?) mode
@@ -228,7 +227,6 @@ struct sta_info {
        spinlock_t lock;
        spinlock_t flaglock;
        struct ieee80211_ht_info ht_info;
-       u64 supp_rates[IEEE80211_NUM_BANDS];
 
        u16 listen_interval;