ath10k: simplify computation of mgmt rx band
authorMichal Kazior <michal.kazior@tieto.com>
Tue, 21 Oct 2014 07:10:30 +0000 (10:10 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Tue, 21 Oct 2014 07:36:56 +0000 (10:36 +0300)
Using global channel won't work with chanctx. Try
to determine the channel from the information
provided in the wmi event itself alone. This
should be sufficient.

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/wmi.c

index 829fccf..ae746ce 100644 (file)
@@ -1114,7 +1114,6 @@ static int ath10k_wmi_event_mgmt_rx(struct ath10k *ar, struct sk_buff *skb)
        struct wmi_mgmt_rx_event_v2 *ev_v2;
        struct wmi_mgmt_rx_hdr_v1 *ev_hdr;
        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
-       struct ieee80211_channel *ch;
        struct ieee80211_hdr *hdr;
        u32 rx_status;
        u32 channel;
@@ -1167,25 +1166,26 @@ static int ath10k_wmi_event_mgmt_rx(struct ath10k *ar, struct sk_buff *skb)
        if (rx_status & WMI_RX_STATUS_ERR_MIC)
                status->flag |= RX_FLAG_MMIC_ERROR;
 
-       /* HW can Rx CCK rates on 5GHz. In that case phy_mode is set to
+       /* Hardware can Rx CCK rates on 5GHz. In that case phy_mode is set to
         * MODE_11B. This means phy_mode is not a reliable source for the band
-        * of mgmt rx. */
-
-       ch = ar->scan_channel;
-       if (!ch)
-               ch = ar->rx_channel;
-
-       if (ch) {
-               status->band = ch->band;
-
-               if (phy_mode == MODE_11B &&
-                   status->band == IEEE80211_BAND_5GHZ)
-                       ath10k_dbg(ar, ATH10K_DBG_MGMT, "wmi mgmt rx 11b (CCK) on 5GHz\n");
+        * of mgmt rx.
+        */
+       if (channel >= 1 && channel <= 14) {
+               status->band = IEEE80211_BAND_2GHZ;
+       } else if (channel >= 36 && channel <= 165) {
+               status->band = IEEE80211_BAND_5GHZ;
        } else {
-               ath10k_warn(ar, "using (unreliable) phy_mode to extract band for mgmt rx\n");
-               status->band = phy_mode_to_band(phy_mode);
+               /* Shouldn't happen unless list of advertised channels to
+                * mac80211 has been changed.
+                */
+               WARN_ON_ONCE(1);
+               dev_kfree_skb(skb);
+               return 0;
        }
 
+       if (phy_mode == MODE_11B && status->band == IEEE80211_BAND_5GHZ)
+               ath10k_dbg(ar, ATH10K_DBG_MGMT, "wmi mgmt rx 11b (CCK) on 5GHz\n");
+
        status->freq = ieee80211_channel_to_frequency(channel, status->band);
        status->signal = snr + ATH10K_DEFAULT_NOISE_FLOOR;
        status->rate_idx = get_rate_idx(rate, status->band);