mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 09:12:39 +00:00
65 lines
2.3 KiB
Diff
65 lines
2.3 KiB
Diff
|
From ebf82988f844dd98e6b007cffcc5e95986056995 Mon Sep 17 00:00:00 2001
|
||
|
From: Muna Sinada <quic_msinada@quicinc.com>
|
||
|
Date: Fri, 24 Feb 2023 12:28:04 +0200
|
||
|
Subject: [PATCH] wifi: ath11k: generate rx and tx mcs maps for supported HE
|
||
|
mcs
|
||
|
|
||
|
Generate rx and tx mcs maps in ath11k_mac_set_hemcsmap() and set them
|
||
|
in supported mcs/nss for HE capabilities.
|
||
|
|
||
|
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
|
||
|
|
||
|
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||
|
Link: https://lore.kernel.org/r/1666128501-12364-5-git-send-email-quic_msinada@quicinc.com
|
||
|
---
|
||
|
drivers/net/wireless/ath/ath11k/mac.c | 30 ++++++++++++++++++++-------
|
||
|
1 file changed, 23 insertions(+), 7 deletions(-)
|
||
|
|
||
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||
|
@@ -5488,20 +5488,36 @@ static void ath11k_mac_set_hemcsmap(stru
|
||
|
struct ieee80211_sta_he_cap *he_cap,
|
||
|
int band)
|
||
|
{
|
||
|
- struct ath11k_band_cap *band_cap = &cap->band[band];
|
||
|
+ u16 txmcs_map, rxmcs_map;
|
||
|
+ u32 i;
|
||
|
|
||
|
+ rxmcs_map = 0;
|
||
|
+ txmcs_map = 0;
|
||
|
+ for (i = 0; i < 8; i++) {
|
||
|
+ if (i < ar->num_tx_chains &&
|
||
|
+ (ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
|
||
|
+ txmcs_map |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
|
||
|
+ else
|
||
|
+ txmcs_map |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
|
||
|
+
|
||
|
+ if (i < ar->num_rx_chains &&
|
||
|
+ (ar->cfg_rx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
|
||
|
+ rxmcs_map |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
|
||
|
+ else
|
||
|
+ rxmcs_map |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
|
||
|
+ }
|
||
|
he_cap->he_mcs_nss_supp.rx_mcs_80 =
|
||
|
- cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||
|
+ cpu_to_le16(rxmcs_map & 0xffff);
|
||
|
he_cap->he_mcs_nss_supp.tx_mcs_80 =
|
||
|
- cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||
|
+ cpu_to_le16(txmcs_map & 0xffff);
|
||
|
he_cap->he_mcs_nss_supp.rx_mcs_160 =
|
||
|
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||
|
+ cpu_to_le16(rxmcs_map & 0xffff);
|
||
|
he_cap->he_mcs_nss_supp.tx_mcs_160 =
|
||
|
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||
|
+ cpu_to_le16(txmcs_map & 0xffff);
|
||
|
he_cap->he_mcs_nss_supp.rx_mcs_80p80 =
|
||
|
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||
|
+ cpu_to_le16(rxmcs_map & 0xffff);
|
||
|
he_cap->he_mcs_nss_supp.tx_mcs_80p80 =
|
||
|
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||
|
+ cpu_to_le16(txmcs_map & 0xffff);
|
||
|
}
|
||
|
|
||
|
static int ath11k_mac_copy_he_cap(struct ath11k *ar,
|