@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef ATH12K_CORE_H
@@ -71,6 +71,7 @@ enum wme_ac {
#define ATH12K_HT_MCS_MAX 7
#define ATH12K_VHT_MCS_MAX 9
#define ATH12K_HE_MCS_MAX 11
+#define ATH12K_EHT_MCS_MAX 13
enum ath12k_crypt_mode {
/* Only use hardware crypto engine */
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause-Clear
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/ieee80211.h>
@@ -2331,6 +2331,21 @@ static void ath12k_dp_rx_h_rate(struct ath12k *ar, struct hal_rx_desc *rx_desc,
rx_status->he_gi = ath12k_mac_he_gi_to_nl80211_he_gi(sgi);
rx_status->bw = ath12k_mac_bw_to_mac80211_bw(bw);
break;
+ case RX_MSDU_START_PKT_TYPE_11BE:
+ rx_status->rate_idx = rate_mcs;
+ if (rate_mcs > ATH12K_EHT_MCS_MAX) {
+ ath12k_warn(ar->ab,
+ "Received with invalid mcs in EHT mode %d\n",
+ rate_mcs);
+ break;
+ }
+ rx_status->encoding = RX_ENC_EHT;
+ rx_status->nss = nss;
+ rx_status->eht.gi = ath12k_mac_eht_gi_to_nl80211_eht_gi(sgi);
+ rx_status->bw = ath12k_mac_bw_to_mac80211_bw(bw);
+ break;
+ default:
+ break;
}
}
@@ -2417,7 +2432,7 @@ static void ath12k_dp_rx_deliver_msdu(struct ath12k *ar, struct napi_struct *nap
spin_unlock_bh(&ab->base_lock);
ath12k_dbg(ab, ATH12K_DBG_DATA,
- "rx skb %pK len %u peer %pM %d %s sn %u %s%s%s%s%s%s%s%s%s rate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",
+ "rx skb %pK len %u peer %pM %d %s sn %u %s%s%s%s%s%s%s%s%s%s rate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",
msdu,
msdu->len,
peer ? peer->addr : NULL,
@@ -2428,6 +2443,7 @@ static void ath12k_dp_rx_deliver_msdu(struct ath12k *ar, struct napi_struct *nap
(status->encoding == RX_ENC_HT) ? "ht" : "",
(status->encoding == RX_ENC_VHT) ? "vht" : "",
(status->encoding == RX_ENC_HE) ? "he" : "",
+ (status->encoding == RX_ENC_EHT) ? "eht" : "",
(status->bw == RATE_INFO_BW_40) ? "40" : "",
(status->bw == RATE_INFO_BW_80) ? "80" : "",
(status->bw == RATE_INFO_BW_160) ? "160" : "",
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause-Clear
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include "core.h"
@@ -510,6 +510,13 @@ static void ath12k_dp_tx_update_txcompl(struct ath12k *ar, struct hal_tx_status
arsta->txrate.mcs = ts->mcs;
arsta->txrate.flags = RATE_INFO_FLAGS_HE_MCS;
arsta->txrate.he_gi = ath12k_mac_he_gi_to_nl80211_he_gi(ts->sgi);
+ } else if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11BE) {
+ if (ts->mcs > ATH12K_EHT_MCS_MAX)
+ goto err_out;
+
+ arsta->txrate.mcs = ts->mcs;
+ arsta->txrate.flags = RATE_INFO_FLAGS_EHT_MCS;
+ arsta->txrate.eht_gi = ath12k_mac_eht_gi_to_nl80211_eht_gi(ts->sgi);
}
arsta->txrate.bw = ath12k_mac_bw_to_mac80211_bw(ts->bw);
@@ -519,6 +526,12 @@ static void ath12k_dp_tx_update_txcompl(struct ath12k *ar, struct hal_tx_status
ath12k_mac_he_ru_tones_to_nl80211_he_ru_alloc(ts->ru_tones);
}
+ if (ts->ofdma && ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11BE) {
+ arsta->txrate.bw = RATE_INFO_BW_EHT_RU;
+ arsta->txrate.eht_ru_alloc =
+ ath12k_mac_eht_ru_tones_to_nl80211_eht_ru_alloc(ts->ru_tones);
+ }
+
err_out:
spin_unlock_bh(&ab->base_lock);
}
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause-Clear
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <net/mac80211.h>
@@ -7697,6 +7697,88 @@ void ath12k_mac_destroy(struct ath12k_base *ab)
}
}
+enum nl80211_eht_gi ath12k_mac_eht_gi_to_nl80211_eht_gi(u8 sgi)
+{
+ enum nl80211_eht_gi ret;
+
+ switch (sgi) {
+ case RX_MSDU_START_SGI_0_8_US:
+ ret = NL80211_RATE_INFO_EHT_GI_0_8;
+ break;
+ case RX_MSDU_START_SGI_1_6_US:
+ ret = NL80211_RATE_INFO_EHT_GI_1_6;
+ break;
+ case RX_MSDU_START_SGI_3_2_US:
+ ret = NL80211_RATE_INFO_EHT_GI_3_2;
+ break;
+ default:
+ ret = NL80211_RATE_INFO_EHT_GI_0_8;
+ break;
+ }
+
+ return ret;
+}
+
+enum nl80211_eht_ru_alloc ath12k_mac_eht_ru_tones_to_nl80211_eht_ru_alloc(u16 ru_tones)
+{
+ enum nl80211_eht_ru_alloc ret;
+
+ switch (ru_tones) {
+ case 26:
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_26;
+ break;
+ case 52:
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_52;
+ break;
+ case (52 + 26):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_52P26;
+ break;
+ case 106:
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_106;
+ break;
+ case (106 + 26):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_106P26;
+ break;
+ case 242:
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_242;
+ break;
+ case 484:
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_484;
+ break;
+ case (484 + 242):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_484P242;
+ break;
+ case 996:
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_996;
+ break;
+ case (996 + 484):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_996P484;
+ break;
+ case (996 + 484 + 242):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_996P484P242;
+ break;
+ case (2 * 996):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_2x996;
+ break;
+ case (2 * 996 + 484):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484;
+ break;
+ case (3 * 996):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_3x996;
+ break;
+ case (3 * 996 + 484):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484;
+ break;
+ case (4 * 996):
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_4x996;
+ break;
+ default:
+ ret = NL80211_RATE_INFO_EHT_RU_ALLOC_26;
+ }
+
+ return ret;
+}
+
enum nl80211_he_ru_alloc ath12k_mac_phy_he_ru_to_nl80211_he_ru_alloc(u16 ru_phy)
{
enum nl80211_he_ru_alloc ret;
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef ATH12K_MAC_H
@@ -79,4 +79,6 @@ int ath12k_mac_rfkill_config(struct ath12k *ar);
enum nl80211_he_gi ath12k_mac_he_gi_to_nl80211_he_gi(u8 sgi);
enum nl80211_he_ru_alloc ath12k_mac_phy_he_ru_to_nl80211_he_ru_alloc(u16 ru_phy);
enum nl80211_he_ru_alloc ath12k_mac_he_ru_tones_to_nl80211_he_ru_alloc(u16 ru_tones);
+enum nl80211_eht_ru_alloc ath12k_mac_eht_ru_tones_to_nl80211_eht_ru_alloc(u16 ru_tones);
+enum nl80211_eht_gi ath12k_mac_eht_gi_to_nl80211_eht_gi(u8 sgi);
#endif
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef ATH12K_RX_DESC_H
#define ATH12K_RX_DESC_H
@@ -582,6 +582,8 @@ enum rx_msdu_start_pkt_type {
RX_MSDU_START_PKT_TYPE_11N,
RX_MSDU_START_PKT_TYPE_11AC,
RX_MSDU_START_PKT_TYPE_11AX,
+ RX_MSDU_START_PKT_TYPE_11BA,
+ RX_MSDU_START_PKT_TYPE_11BE,
};
enum rx_msdu_start_sgi {
When AP is in 11be state, STA's tx/rx bitrate display error value using iw dev wlan command. In ath12k_dp_tx_update_txcompl() function, not handle the case when pkt_type is equal to HAL_TX_RATE_STATS_PKT_TYPE_11BE, so add a else if statement to handle this situation. In ath12k_dp_rx_h_rate function, not handle the case when pkt_type is equal to RX_MSDU_START_PKT_TYPE_11BE, so add a case statement to handle this situation. After that, "iw dev xxx station dump" show the correct tx bitrate such as: tx bitrate: 1441.1 MBit/s 80MHz EHT-MCS 13 EHT-NSS 2 EHT-GI 0 rx bitrate: 1441.1 MBit/s 80MHz EHT-MCS 9 EHT-NSS 3 EHT-GI 0 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4 Signed-off-by: Lingbo Kong <quic_lingbok@quicinc.com> --- depends on patch: Lingbo Kong(1) public review:[PATCH v3] wifi: ath12k: report tx bitrate for iw dev xxx station dump drivers/net/wireless/ath/ath12k/core.h | 3 +- drivers/net/wireless/ath/ath12k/dp_rx.c | 20 +++++- drivers/net/wireless/ath/ath12k/dp_tx.c | 15 +++- drivers/net/wireless/ath/ath12k/mac.c | 84 ++++++++++++++++++++++- drivers/net/wireless/ath/ath12k/mac.h | 4 +- drivers/net/wireless/ath/ath12k/rx_desc.h | 4 +- 6 files changed, 123 insertions(+), 7 deletions(-) base-commit: 2cd4e3f91f264926a6b11df948417b74d52ca9b9 prerequisite-patch-id: 912672aa0506b1efccd896bc5efbe2349a1e15a3