u8 ibss_sta_added;
        struct timer_list rate_scale_flush;
        struct iwl3945_rate_scale_data win[IWL_RATE_COUNT];
+
+       /* used to be in sta_info */
+       int last_txrate_idx;
 };
 
 static s32 iwl3945_expected_tpt_g[IWL_RATE_COUNT] = {
 static void rs_rate_init(void *priv_rate, void *priv_sta,
                         struct ieee80211_local *local, struct sta_info *sta)
 {
+       struct iwl3945_rs_sta *rs_sta = (void *)sta->rate_ctrl_priv;
        int i;
 
        IWL_DEBUG_RATE("enter\n");
                }
        }
 
-       sta->last_txrate_idx = sta->txrate_idx;
+       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)
-               sta->last_txrate_idx += IWL_FIRST_OFDM_RATE;
+               rs_sta->last_txrate_idx += IWL_FIRST_OFDM_RATE;
 
        IWL_DEBUG_RATE("leave\n");
 }
                return;
        }
 
+       rs_sta = (void *)sta->rate_ctrl_priv;
+
        rate_mask = sta->supp_rates[sband->band];
-       index = min(sta->last_txrate_idx & 0xffff, IWL_RATE_COUNT - 1);
+       index = min(rs_sta->last_txrate_idx & 0xffff, IWL_RATE_COUNT - 1);
 
        if (sband->band == IEEE80211_BAND_5GHZ)
                rate_mask = rate_mask << IWL_FIRST_OFDM_RATE;
 
-       rs_sta = (void *)sta->rate_ctrl_priv;
-
        if ((priv->iw_mode == NL80211_IFTYPE_ADHOC) &&
            !rs_sta->ibss_sta_added) {
                u8 sta_id = iwl3945_hw_find_station(priv, hdr->addr1);
 
  out:
 
-       sta->last_txrate_idx = index;
+       rs_sta->last_txrate_idx = index;
        if (sband->band == IEEE80211_BAND_5GHZ)
-               sta->txrate_idx = sta->last_txrate_idx - IWL_FIRST_OFDM_RATE;
+               sta->txrate_idx = rs_sta->last_txrate_idx - IWL_FIRST_OFDM_RATE;
        else
-               sta->txrate_idx = sta->last_txrate_idx;
+               sta->txrate_idx = rs_sta->last_txrate_idx;
 
        rcu_read_unlock();
 
 
        u32 dbg_fixed_rate;
 #endif
        struct iwl_priv *drv;
+
+       /* used to be in sta_info */
+       int last_txrate_idx;
 };
 
 static void rs_rate_scale_perform(struct iwl_priv *priv,
        is_green = lq_sta->is_green;
 
        /* current tx rate */
-       index = sta->last_txrate_idx;
+       index = lq_sta->last_txrate_idx;
 
        IWL_DEBUG_RATE("Rate scale index %d for type %d\n", index,
                       tbl->lq_type);
 out:
        tbl->current_rate = rate_n_flags_from_tbl(tbl, index, is_green);
        i = index;
-       sta->last_txrate_idx = i;
+       lq_sta->last_txrate_idx = i;
 
        /* sta->txrate_idx is an index to A mode rates which start
         * at IWL_FIRST_OFDM_RATE
                goto out;
 
        lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv;
-       i = sta->last_txrate_idx;
+       i = lq_sta->last_txrate_idx;
 
        if ((lq_sta->lq.sta_id == 0xff) &&
            (priv->iw_mode == NL80211_IFTYPE_ADHOC))
        }
 
        lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv;
-       i = sta->last_txrate_idx;
+       i = lq_sta->last_txrate_idx;
 
        if ((priv->iw_mode == NL80211_IFTYPE_ADHOC) &&
            !lq_sta->ibss_sta_added) {
                if (sta->supp_rates[sband->band] & BIT(i))
                        sta->txrate_idx = i;
 
-       sta->last_txrate_idx = sta->txrate_idx;
+       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)
-               sta->last_txrate_idx += IWL_FIRST_OFDM_RATE;
+               lq_sta->last_txrate_idx += IWL_FIRST_OFDM_RATE;
 
        lq_sta->is_dup = 0;
        lq_sta->is_green = rs_use_green(priv, conf);
 
        if (rateidx >= sband->n_bitrates)
                rateidx = sband->n_bitrates - 1;
 
-       sta->last_txrate_idx = rateidx;
-
        rcu_read_unlock();
 
        sel->rate_idx = rateidx;
 
  * @tx_bytes: TBD
  * @tx_fragments: number of transmitted MPDUs
  * @txrate_idx: TBD
- * @last_txrate_idx: TBD
  * @tid_seq: TBD
  * @wme_tx_queue: TBD
  * @ampdu_mlme: TBD
        unsigned long tx_bytes;
        unsigned long tx_fragments;
        int txrate_idx;
-       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];