|
@@ -1148,8 +1148,23 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
|
|
|
if (ht_cap->mcs.rx_mask[i/8] & (1 << i%8))
|
|
|
arg->peer_ht_rates.rates[n++] = i;
|
|
|
|
|
|
- arg->peer_ht_rates.num_rates = n;
|
|
|
- arg->peer_num_spatial_streams = sta->rx_nss;
|
|
|
+ /*
|
|
|
+ * This is a workaround for HT-enabled STAs which break the spec
|
|
|
+ * and have no HT capabilities RX mask (no HT RX MCS map).
|
|
|
+ *
|
|
|
+ * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
|
|
|
+ * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
|
|
|
+ *
|
|
|
+ * Firmware asserts if such situation occurs.
|
|
|
+ */
|
|
|
+ if (n == 0) {
|
|
|
+ arg->peer_ht_rates.num_rates = 8;
|
|
|
+ for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
|
|
|
+ arg->peer_ht_rates.rates[i] = i;
|
|
|
+ } else {
|
|
|
+ arg->peer_ht_rates.num_rates = n;
|
|
|
+ arg->peer_num_spatial_streams = sta->rx_nss;
|
|
|
+ }
|
|
|
|
|
|
ath10k_dbg(ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
|
|
|
arg->addr,
|