};
 
 
-u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate)
+u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
 {
        u8 idx;
 
-       BUG_ON(wl->band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
+       BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
 
        if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
                wl1271_error("Illegal RX rate from HW: %d", rate);
                return 0;
        }
 
-       idx = wl1271_band_rate_to_idx[wl->band][rate];
+       idx = wl1271_band_rate_to_idx[band][rate];
        if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
                wl1271_error("Unsupported RX rate from HW: %d", rate);
                return 0;
 
                             struct ieee80211_rx_status *status,
                             u8 beacon)
 {
+       enum ieee80211_band desc_band;
+
        memset(status, 0, sizeof(struct ieee80211_rx_status));
 
        status->band = wl->band;
-       status->rate_idx = wl1271_rate_to_idx(wl, desc->rate);
+
+       if ((desc->flags & WL1271_RX_DESC_BAND_MASK) == WL1271_RX_DESC_BAND_BG)
+               desc_band = IEEE80211_BAND_2GHZ;
+       else
+               desc_band = IEEE80211_BAND_5GHZ;
+
+       status->rate_idx = wl1271_rate_to_idx(desc->rate, desc_band);
 
 #ifdef CONFIG_WL1271_HT
        /* 11n support */
 
 } __packed;
 
 void wl1271_rx(struct wl1271 *wl, struct wl1271_fw_status *status);
-u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate);
+u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band);
 
 #endif
 
        if (result->status == TX_SUCCESS) {
                if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
                        info->flags |= IEEE80211_TX_STAT_ACK;
-               rate = wl1271_rate_to_idx(wl, result->rate_class_index);
+               rate = wl1271_rate_to_idx(result->rate_class_index, wl->band);
                retries = result->ack_failures;
        } else if (result->status == TX_RETRY_EXCEEDED) {
                wl->stats.excessive_retries++;
 
 void wl1271_tx_complete(struct wl1271 *wl);
 void wl1271_tx_reset(struct wl1271 *wl);
 void wl1271_tx_flush(struct wl1271 *wl);
-u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate);
+u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band);
 u32 wl1271_tx_enabled_rates_get(struct wl1271 *wl, u32 rate_set);
 
 #endif