|
@@ -1416,6 +1416,12 @@ static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static bool ath10k_mac_sta_has_11g_rates(struct ieee80211_sta *sta)
|
|
|
+{
|
|
|
+ /* First 4 rates in ath10k_rates are CCK (11b) rates. */
|
|
|
+ return sta->supp_rates[IEEE80211_BAND_2GHZ] >> 4;
|
|
|
+}
|
|
|
+
|
|
|
static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
|
|
|
struct ieee80211_vif *vif,
|
|
|
struct ieee80211_sta *sta,
|
|
@@ -1430,8 +1436,10 @@ static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
|
|
|
phymode = MODE_11NG_HT40;
|
|
|
else
|
|
|
phymode = MODE_11NG_HT20;
|
|
|
- } else {
|
|
|
+ } else if (ath10k_mac_sta_has_11g_rates(sta)) {
|
|
|
phymode = MODE_11G;
|
|
|
+ } else {
|
|
|
+ phymode = MODE_11B;
|
|
|
}
|
|
|
|
|
|
break;
|
|
@@ -4724,6 +4732,9 @@ static const struct ieee80211_channel ath10k_5ghz_channels[] = {
|
|
|
CHAN5G(165, 5825, 0),
|
|
|
};
|
|
|
|
|
|
+/* Note: Be careful if you re-order these. There is code which depends on this
|
|
|
+ * ordering.
|
|
|
+ */
|
|
|
static struct ieee80211_rate ath10k_rates[] = {
|
|
|
/* CCK */
|
|
|
RATETAB_ENT(10, 0x82, 0),
|