]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: Move remaining SIG TLV parsing to Wi-Fi 7 module
authorAlok Singh <quic_aloksing@quicinc.com>
Mon, 10 Nov 2025 10:37:10 +0000 (16:07 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Tue, 11 Nov 2025 15:21:33 +0000 (07:21 -0800)
The ath12k common monitor path still contains Wi-Fi 7 specific
SIG TLV parsing. Move these SIG TLV parsing to the Wi-Fi 7
module to improve modularity.

Relocate the following functions into wifi7/dp_mon.c and
rename them with the ath12k_wifi7_ prefix:
- ath12k_dp_mon_parse_l_sig_b()
- ath12k_dp_mon_parse_l_sig_a()
- ath12k_dp_mon_hal_rx_parse_u_sig_cmn()
- ath12k_dp_mon_hal_rx_parse_u_sig_tb()
- ath12k_dp_mon_hal_rx_parse_u_sig_mu()
- ath12k_dp_mon_hal_rx_parse_u_sig_hdr()

Export the helper symbols needed by the Wi-Fi 7 module.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.5-01651-QCAHKSWPL_SILICONZ-1

Signed-off-by: Alok Singh <quic_aloksing@quicinc.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Link: https://patch.msgid.link/20251110103713.3484779-10-quic_aloksing@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/dp_mon.c
drivers/net/wireless/ath/ath12k/dp_mon.h
drivers/net/wireless/ath/ath12k/wifi7/dp_mon.c

index 1ad984cd561e635245823b6c5efe5ab3190f4825..9b04a9505ea07ec27651b570a6fac1ac1b290d6a 100644 (file)
@@ -75,271 +75,6 @@ ath12k_dp_mon_rx_populate_mu_user_info(const struct hal_rx_ppdu_end_user_stats *
 }
 EXPORT_SYMBOL(ath12k_dp_mon_rx_populate_mu_user_info);
 
-void ath12k_dp_mon_parse_l_sig_b(const struct hal_rx_lsig_b_info *lsigb,
-                                struct hal_rx_mon_ppdu_info *ppdu_info)
-{
-       u32 info0 = __le32_to_cpu(lsigb->info0);
-       u8 rate;
-
-       rate = u32_get_bits(info0, HAL_RX_LSIG_B_INFO_INFO0_RATE);
-       switch (rate) {
-       case 1:
-               rate = HAL_RX_LEGACY_RATE_1_MBPS;
-               break;
-       case 2:
-       case 5:
-               rate = HAL_RX_LEGACY_RATE_2_MBPS;
-               break;
-       case 3:
-       case 6:
-               rate = HAL_RX_LEGACY_RATE_5_5_MBPS;
-               break;
-       case 4:
-       case 7:
-               rate = HAL_RX_LEGACY_RATE_11_MBPS;
-               break;
-       default:
-               rate = HAL_RX_LEGACY_RATE_INVALID;
-       }
-
-       ppdu_info->rate = rate;
-       ppdu_info->cck_flag = 1;
-}
-EXPORT_SYMBOL(ath12k_dp_mon_parse_l_sig_b);
-
-void ath12k_dp_mon_parse_l_sig_a(const struct hal_rx_lsig_a_info *lsiga,
-                                struct hal_rx_mon_ppdu_info *ppdu_info)
-{
-       u32 info0 = __le32_to_cpu(lsiga->info0);
-       u8 rate;
-
-       rate = u32_get_bits(info0, HAL_RX_LSIG_A_INFO_INFO0_RATE);
-       switch (rate) {
-       case 8:
-               rate = HAL_RX_LEGACY_RATE_48_MBPS;
-               break;
-       case 9:
-               rate = HAL_RX_LEGACY_RATE_24_MBPS;
-               break;
-       case 10:
-               rate = HAL_RX_LEGACY_RATE_12_MBPS;
-               break;
-       case 11:
-               rate = HAL_RX_LEGACY_RATE_6_MBPS;
-               break;
-       case 12:
-               rate = HAL_RX_LEGACY_RATE_54_MBPS;
-               break;
-       case 13:
-               rate = HAL_RX_LEGACY_RATE_36_MBPS;
-               break;
-       case 14:
-               rate = HAL_RX_LEGACY_RATE_18_MBPS;
-               break;
-       case 15:
-               rate = HAL_RX_LEGACY_RATE_9_MBPS;
-               break;
-       default:
-               rate = HAL_RX_LEGACY_RATE_INVALID;
-       }
-
-       ppdu_info->rate = rate;
-}
-EXPORT_SYMBOL(ath12k_dp_mon_parse_l_sig_a);
-
-static void
-ath12k_dp_mon_hal_rx_parse_u_sig_cmn(const struct hal_mon_usig_cmn *cmn,
-                                    struct hal_rx_mon_ppdu_info *ppdu_info)
-{
-       u32 common;
-
-       ppdu_info->u_sig_info.bw = le32_get_bits(cmn->info0,
-                                                HAL_RX_USIG_CMN_INFO0_BW);
-       ppdu_info->u_sig_info.ul_dl = le32_get_bits(cmn->info0,
-                                                   HAL_RX_USIG_CMN_INFO0_UL_DL);
-
-       common = __le32_to_cpu(ppdu_info->u_sig_info.usig.common);
-       common |= IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER_KNOWN |
-                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_KNOWN |
-                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL_KNOWN |
-                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR_KNOWN |
-                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP_KNOWN |
-                 ATH12K_LE32_DEC_ENC(cmn->info0,
-                                     HAL_RX_USIG_CMN_INFO0_PHY_VERSION,
-                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER) |
-                 u32_encode_bits(ppdu_info->u_sig_info.bw,
-                                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW) |
-                 u32_encode_bits(ppdu_info->u_sig_info.ul_dl,
-                                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL) |
-                 ATH12K_LE32_DEC_ENC(cmn->info0,
-                                     HAL_RX_USIG_CMN_INFO0_BSS_COLOR,
-                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR) |
-                 ATH12K_LE32_DEC_ENC(cmn->info0,
-                                     HAL_RX_USIG_CMN_INFO0_TXOP,
-                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP);
-       ppdu_info->u_sig_info.usig.common = cpu_to_le32(common);
-
-       switch (ppdu_info->u_sig_info.bw) {
-       default:
-               fallthrough;
-       case HAL_EHT_BW_20:
-               ppdu_info->bw = HAL_RX_BW_20MHZ;
-               break;
-       case HAL_EHT_BW_40:
-               ppdu_info->bw = HAL_RX_BW_40MHZ;
-               break;
-       case HAL_EHT_BW_80:
-               ppdu_info->bw = HAL_RX_BW_80MHZ;
-               break;
-       case HAL_EHT_BW_160:
-               ppdu_info->bw = HAL_RX_BW_160MHZ;
-               break;
-       case HAL_EHT_BW_320_1:
-       case HAL_EHT_BW_320_2:
-               ppdu_info->bw = HAL_RX_BW_320MHZ;
-               break;
-       }
-}
-
-static void
-ath12k_dp_mon_hal_rx_parse_u_sig_tb(const struct hal_mon_usig_tb *usig_tb,
-                                   struct hal_rx_mon_ppdu_info *ppdu_info)
-{
-       struct ieee80211_radiotap_eht_usig *usig = &ppdu_info->u_sig_info.usig;
-       enum ieee80211_radiotap_eht_usig_tb spatial_reuse1, spatial_reuse2;
-       u32 common, value, mask;
-
-       spatial_reuse1 = IEEE80211_RADIOTAP_EHT_USIG2_TB_B3_B6_SPATIAL_REUSE_1;
-       spatial_reuse2 = IEEE80211_RADIOTAP_EHT_USIG2_TB_B7_B10_SPATIAL_REUSE_2;
-
-       common = __le32_to_cpu(usig->common);
-       value = __le32_to_cpu(usig->value);
-       mask = __le32_to_cpu(usig->mask);
-
-       ppdu_info->u_sig_info.ppdu_type_comp_mode =
-                               le32_get_bits(usig_tb->info0,
-                                             HAL_RX_USIG_TB_INFO0_PPDU_TYPE_COMP_MODE);
-
-       common |= ATH12K_LE32_DEC_ENC(usig_tb->info0,
-                                     HAL_RX_USIG_TB_INFO0_RX_INTEG_CHECK_PASS,
-                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_BAD_USIG_CRC);
-
-       value |= IEEE80211_RADIOTAP_EHT_USIG1_TB_B20_B25_DISREGARD |
-                u32_encode_bits(ppdu_info->u_sig_info.ppdu_type_comp_mode,
-                                IEEE80211_RADIOTAP_EHT_USIG2_TB_B0_B1_PPDU_TYPE) |
-                IEEE80211_RADIOTAP_EHT_USIG2_TB_B2_VALIDATE |
-                ATH12K_LE32_DEC_ENC(usig_tb->info0,
-                                    HAL_RX_USIG_TB_INFO0_SPATIAL_REUSE_1,
-                                    spatial_reuse1) |
-                ATH12K_LE32_DEC_ENC(usig_tb->info0,
-                                    HAL_RX_USIG_TB_INFO0_SPATIAL_REUSE_2,
-                                    spatial_reuse2) |
-                IEEE80211_RADIOTAP_EHT_USIG2_TB_B11_B15_DISREGARD |
-                ATH12K_LE32_DEC_ENC(usig_tb->info0,
-                                    HAL_RX_USIG_TB_INFO0_CRC,
-                                    IEEE80211_RADIOTAP_EHT_USIG2_TB_B16_B19_CRC) |
-                ATH12K_LE32_DEC_ENC(usig_tb->info0,
-                                    HAL_RX_USIG_TB_INFO0_TAIL,
-                                    IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL);
-
-       mask |= IEEE80211_RADIOTAP_EHT_USIG1_TB_B20_B25_DISREGARD |
-               IEEE80211_RADIOTAP_EHT_USIG2_TB_B0_B1_PPDU_TYPE |
-               IEEE80211_RADIOTAP_EHT_USIG2_TB_B2_VALIDATE |
-               spatial_reuse1 | spatial_reuse2 |
-               IEEE80211_RADIOTAP_EHT_USIG2_TB_B11_B15_DISREGARD |
-               IEEE80211_RADIOTAP_EHT_USIG2_TB_B16_B19_CRC |
-               IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL;
-
-       usig->common = cpu_to_le32(common);
-       usig->value = cpu_to_le32(value);
-       usig->mask = cpu_to_le32(mask);
-}
-
-static void
-ath12k_dp_mon_hal_rx_parse_u_sig_mu(const struct hal_mon_usig_mu *usig_mu,
-                                   struct hal_rx_mon_ppdu_info *ppdu_info)
-{
-       struct ieee80211_radiotap_eht_usig *usig = &ppdu_info->u_sig_info.usig;
-       enum ieee80211_radiotap_eht_usig_mu sig_symb, punc;
-       u32 common, value, mask;
-
-       sig_symb = IEEE80211_RADIOTAP_EHT_USIG2_MU_B11_B15_EHT_SIG_SYMBOLS;
-       punc = IEEE80211_RADIOTAP_EHT_USIG2_MU_B3_B7_PUNCTURED_INFO;
-
-       common = __le32_to_cpu(usig->common);
-       value = __le32_to_cpu(usig->value);
-       mask = __le32_to_cpu(usig->mask);
-
-       ppdu_info->u_sig_info.ppdu_type_comp_mode =
-                               le32_get_bits(usig_mu->info0,
-                                             HAL_RX_USIG_MU_INFO0_PPDU_TYPE_COMP_MODE);
-       ppdu_info->u_sig_info.eht_sig_mcs =
-                               le32_get_bits(usig_mu->info0,
-                                             HAL_RX_USIG_MU_INFO0_EHT_SIG_MCS);
-       ppdu_info->u_sig_info.num_eht_sig_sym =
-                               le32_get_bits(usig_mu->info0,
-                                             HAL_RX_USIG_MU_INFO0_NUM_EHT_SIG_SYM);
-
-       common |= ATH12K_LE32_DEC_ENC(usig_mu->info0,
-                                     HAL_RX_USIG_MU_INFO0_RX_INTEG_CHECK_PASS,
-                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_BAD_USIG_CRC);
-
-       value |= IEEE80211_RADIOTAP_EHT_USIG1_MU_B20_B24_DISREGARD |
-                IEEE80211_RADIOTAP_EHT_USIG1_MU_B25_VALIDATE |
-                u32_encode_bits(ppdu_info->u_sig_info.ppdu_type_comp_mode,
-                                IEEE80211_RADIOTAP_EHT_USIG2_MU_B0_B1_PPDU_TYPE) |
-                IEEE80211_RADIOTAP_EHT_USIG2_MU_B2_VALIDATE |
-                ATH12K_LE32_DEC_ENC(usig_mu->info0,
-                                    HAL_RX_USIG_MU_INFO0_PUNC_CH_INFO,
-                                    punc) |
-                IEEE80211_RADIOTAP_EHT_USIG2_MU_B8_VALIDATE |
-                u32_encode_bits(ppdu_info->u_sig_info.eht_sig_mcs,
-                                IEEE80211_RADIOTAP_EHT_USIG2_MU_B9_B10_SIG_MCS) |
-                u32_encode_bits(ppdu_info->u_sig_info.num_eht_sig_sym,
-                                sig_symb) |
-                ATH12K_LE32_DEC_ENC(usig_mu->info0,
-                                    HAL_RX_USIG_MU_INFO0_CRC,
-                                    IEEE80211_RADIOTAP_EHT_USIG2_MU_B16_B19_CRC) |
-                ATH12K_LE32_DEC_ENC(usig_mu->info0,
-                                    HAL_RX_USIG_MU_INFO0_TAIL,
-                                    IEEE80211_RADIOTAP_EHT_USIG2_MU_B20_B25_TAIL);
-
-       mask |= IEEE80211_RADIOTAP_EHT_USIG1_MU_B20_B24_DISREGARD |
-               IEEE80211_RADIOTAP_EHT_USIG1_MU_B25_VALIDATE |
-               IEEE80211_RADIOTAP_EHT_USIG2_MU_B0_B1_PPDU_TYPE |
-               IEEE80211_RADIOTAP_EHT_USIG2_MU_B2_VALIDATE |
-               punc |
-               IEEE80211_RADIOTAP_EHT_USIG2_MU_B8_VALIDATE |
-               IEEE80211_RADIOTAP_EHT_USIG2_MU_B9_B10_SIG_MCS |
-               sig_symb |
-               IEEE80211_RADIOTAP_EHT_USIG2_MU_B16_B19_CRC |
-               IEEE80211_RADIOTAP_EHT_USIG2_MU_B20_B25_TAIL;
-
-       usig->common = cpu_to_le32(common);
-       usig->value = cpu_to_le32(value);
-       usig->mask = cpu_to_le32(mask);
-}
-
-void
-ath12k_dp_mon_hal_rx_parse_u_sig_hdr(const struct hal_mon_usig_hdr *usig,
-                                    struct hal_rx_mon_ppdu_info *ppdu_info)
-{
-       u8 comp_mode;
-
-       ppdu_info->eht_usig = true;
-
-       ath12k_dp_mon_hal_rx_parse_u_sig_cmn(&usig->cmn, ppdu_info);
-
-       comp_mode = le32_get_bits(usig->non_cmn.mu.info0,
-                                 HAL_RX_USIG_MU_INFO0_PPDU_TYPE_COMP_MODE);
-
-       if (comp_mode == 0 && ppdu_info->u_sig_info.ul_dl)
-               ath12k_dp_mon_hal_rx_parse_u_sig_tb(&usig->non_cmn.tb, ppdu_info);
-       else
-               ath12k_dp_mon_hal_rx_parse_u_sig_mu(&usig->non_cmn.mu, ppdu_info);
-}
-EXPORT_SYMBOL(ath12k_dp_mon_hal_rx_parse_u_sig_hdr);
-
 static inline enum ath12k_eht_ru_size
 hal_rx_mon_hal_ru_size_to_ath12k_ru_size(u32 hal_ru_size)
 {
index d2bee88f561f4583caaba62c1024fd070d3a9d94..063d57512db7007d112b4460491ddb502650def6 100644 (file)
@@ -126,10 +126,6 @@ void
 ath12k_dp_mon_rx_populate_mu_user_info(const struct hal_rx_ppdu_end_user_stats *rx_tlv,
                                       struct hal_rx_mon_ppdu_info *ppdu_info,
                                       struct hal_rx_user_status *rx_user_status);
-void ath12k_dp_mon_parse_l_sig_b(const struct hal_rx_lsig_b_info *lsigb,
-                                struct hal_rx_mon_ppdu_info *ppdu_info);
-void ath12k_dp_mon_parse_l_sig_a(const struct hal_rx_lsig_a_info *lsiga,
-                                struct hal_rx_mon_ppdu_info *ppdu_info);
 void
 ath12k_dp_mon_hal_rx_parse_user_info(const struct hal_receive_user_info *rx_usr_info,
                                     u16 user_id,
@@ -137,7 +133,4 @@ ath12k_dp_mon_hal_rx_parse_user_info(const struct hal_receive_user_info *rx_usr_
 void
 ath12k_dp_mon_parse_status_msdu_end(struct ath12k_mon_data *pmon,
                                    const struct hal_rx_msdu_end *msdu_end);
-void
-ath12k_dp_mon_hal_rx_parse_u_sig_hdr(const struct hal_mon_usig_hdr *usig,
-                                    struct hal_rx_mon_ppdu_info *ppdu_info);
 #endif
index b924180007c538fca8c1b3a92ac9f9eadb9df33d..2d67fd553776f2d26f7f5a922398d41c01af1882 100644 (file)
@@ -31,6 +31,270 @@ ath12k_wifi7_dp_mon_rx_memset_ppdu_info(struct hal_rx_mon_ppdu_info *ppdu_info)
        ppdu_info->peer_id = HAL_INVALID_PEERID;
 }
 
+static void
+ath12k_wifi7_dp_mon_parse_l_sig_b(const struct hal_rx_lsig_b_info *lsigb,
+                                 struct hal_rx_mon_ppdu_info *ppdu_info)
+{
+       u32 info0 = __le32_to_cpu(lsigb->info0);
+       u8 rate;
+
+       rate = u32_get_bits(info0, HAL_RX_LSIG_B_INFO_INFO0_RATE);
+       switch (rate) {
+       case 1:
+               rate = HAL_RX_LEGACY_RATE_1_MBPS;
+               break;
+       case 2:
+       case 5:
+               rate = HAL_RX_LEGACY_RATE_2_MBPS;
+               break;
+       case 3:
+       case 6:
+               rate = HAL_RX_LEGACY_RATE_5_5_MBPS;
+               break;
+       case 4:
+       case 7:
+               rate = HAL_RX_LEGACY_RATE_11_MBPS;
+               break;
+       default:
+               rate = HAL_RX_LEGACY_RATE_INVALID;
+       }
+
+       ppdu_info->rate = rate;
+       ppdu_info->cck_flag = 1;
+}
+
+static void
+ath12k_wifi7_dp_mon_parse_l_sig_a(const struct hal_rx_lsig_a_info *lsiga,
+                                 struct hal_rx_mon_ppdu_info *ppdu_info)
+{
+       u32 info0 = __le32_to_cpu(lsiga->info0);
+       u8 rate;
+
+       rate = u32_get_bits(info0, HAL_RX_LSIG_A_INFO_INFO0_RATE);
+       switch (rate) {
+       case 8:
+               rate = HAL_RX_LEGACY_RATE_48_MBPS;
+               break;
+       case 9:
+               rate = HAL_RX_LEGACY_RATE_24_MBPS;
+               break;
+       case 10:
+               rate = HAL_RX_LEGACY_RATE_12_MBPS;
+               break;
+       case 11:
+               rate = HAL_RX_LEGACY_RATE_6_MBPS;
+               break;
+       case 12:
+               rate = HAL_RX_LEGACY_RATE_54_MBPS;
+               break;
+       case 13:
+               rate = HAL_RX_LEGACY_RATE_36_MBPS;
+               break;
+       case 14:
+               rate = HAL_RX_LEGACY_RATE_18_MBPS;
+               break;
+       case 15:
+               rate = HAL_RX_LEGACY_RATE_9_MBPS;
+               break;
+       default:
+               rate = HAL_RX_LEGACY_RATE_INVALID;
+       }
+
+       ppdu_info->rate = rate;
+}
+
+static void
+ath12k_wifi7_dp_mon_hal_rx_parse_u_sig_cmn(const struct hal_mon_usig_cmn *cmn,
+                                          struct hal_rx_mon_ppdu_info *ppdu_info)
+{
+       u32 common;
+
+       ppdu_info->u_sig_info.bw = le32_get_bits(cmn->info0,
+                                                HAL_RX_USIG_CMN_INFO0_BW);
+       ppdu_info->u_sig_info.ul_dl = le32_get_bits(cmn->info0,
+                                                   HAL_RX_USIG_CMN_INFO0_UL_DL);
+
+       common = __le32_to_cpu(ppdu_info->u_sig_info.usig.common);
+       common |= IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER_KNOWN |
+                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_KNOWN |
+                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL_KNOWN |
+                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR_KNOWN |
+                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP_KNOWN |
+                 ATH12K_LE32_DEC_ENC(cmn->info0,
+                                     HAL_RX_USIG_CMN_INFO0_PHY_VERSION,
+                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER) |
+                 u32_encode_bits(ppdu_info->u_sig_info.bw,
+                                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW) |
+                 u32_encode_bits(ppdu_info->u_sig_info.ul_dl,
+                                 IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL) |
+                 ATH12K_LE32_DEC_ENC(cmn->info0,
+                                     HAL_RX_USIG_CMN_INFO0_BSS_COLOR,
+                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR) |
+                 ATH12K_LE32_DEC_ENC(cmn->info0,
+                                     HAL_RX_USIG_CMN_INFO0_TXOP,
+                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP);
+       ppdu_info->u_sig_info.usig.common = cpu_to_le32(common);
+
+       switch (ppdu_info->u_sig_info.bw) {
+       default:
+               fallthrough;
+       case HAL_EHT_BW_20:
+               ppdu_info->bw = HAL_RX_BW_20MHZ;
+               break;
+       case HAL_EHT_BW_40:
+               ppdu_info->bw = HAL_RX_BW_40MHZ;
+               break;
+       case HAL_EHT_BW_80:
+               ppdu_info->bw = HAL_RX_BW_80MHZ;
+               break;
+       case HAL_EHT_BW_160:
+               ppdu_info->bw = HAL_RX_BW_160MHZ;
+               break;
+       case HAL_EHT_BW_320_1:
+       case HAL_EHT_BW_320_2:
+               ppdu_info->bw = HAL_RX_BW_320MHZ;
+               break;
+       }
+}
+
+static void
+ath12k_wifi7_dp_mon_hal_rx_parse_u_sig_tb(const struct hal_mon_usig_tb *usig_tb,
+                                         struct hal_rx_mon_ppdu_info *ppdu_info)
+{
+       struct ieee80211_radiotap_eht_usig *usig = &ppdu_info->u_sig_info.usig;
+       enum ieee80211_radiotap_eht_usig_tb spatial_reuse1, spatial_reuse2;
+       u32 common, value, mask;
+
+       spatial_reuse1 = IEEE80211_RADIOTAP_EHT_USIG2_TB_B3_B6_SPATIAL_REUSE_1;
+       spatial_reuse2 = IEEE80211_RADIOTAP_EHT_USIG2_TB_B7_B10_SPATIAL_REUSE_2;
+
+       common = __le32_to_cpu(usig->common);
+       value = __le32_to_cpu(usig->value);
+       mask = __le32_to_cpu(usig->mask);
+
+       ppdu_info->u_sig_info.ppdu_type_comp_mode =
+                               le32_get_bits(usig_tb->info0,
+                                             HAL_RX_USIG_TB_INFO0_PPDU_TYPE_COMP_MODE);
+
+       common |= ATH12K_LE32_DEC_ENC(usig_tb->info0,
+                                     HAL_RX_USIG_TB_INFO0_RX_INTEG_CHECK_PASS,
+                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_BAD_USIG_CRC);
+
+       value |= IEEE80211_RADIOTAP_EHT_USIG1_TB_B20_B25_DISREGARD |
+                u32_encode_bits(ppdu_info->u_sig_info.ppdu_type_comp_mode,
+                                IEEE80211_RADIOTAP_EHT_USIG2_TB_B0_B1_PPDU_TYPE) |
+                IEEE80211_RADIOTAP_EHT_USIG2_TB_B2_VALIDATE |
+                ATH12K_LE32_DEC_ENC(usig_tb->info0,
+                                    HAL_RX_USIG_TB_INFO0_SPATIAL_REUSE_1,
+                                    spatial_reuse1) |
+                ATH12K_LE32_DEC_ENC(usig_tb->info0,
+                                    HAL_RX_USIG_TB_INFO0_SPATIAL_REUSE_2,
+                                    spatial_reuse2) |
+                IEEE80211_RADIOTAP_EHT_USIG2_TB_B11_B15_DISREGARD |
+                ATH12K_LE32_DEC_ENC(usig_tb->info0,
+                                    HAL_RX_USIG_TB_INFO0_CRC,
+                                    IEEE80211_RADIOTAP_EHT_USIG2_TB_B16_B19_CRC) |
+                ATH12K_LE32_DEC_ENC(usig_tb->info0,
+                                    HAL_RX_USIG_TB_INFO0_TAIL,
+                                    IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL);
+
+       mask |= IEEE80211_RADIOTAP_EHT_USIG1_TB_B20_B25_DISREGARD |
+               IEEE80211_RADIOTAP_EHT_USIG2_TB_B0_B1_PPDU_TYPE |
+               IEEE80211_RADIOTAP_EHT_USIG2_TB_B2_VALIDATE |
+               spatial_reuse1 | spatial_reuse2 |
+               IEEE80211_RADIOTAP_EHT_USIG2_TB_B11_B15_DISREGARD |
+               IEEE80211_RADIOTAP_EHT_USIG2_TB_B16_B19_CRC |
+               IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL;
+
+       usig->common = cpu_to_le32(common);
+       usig->value = cpu_to_le32(value);
+       usig->mask = cpu_to_le32(mask);
+}
+
+static void
+ath12k_wifi7_dp_mon_hal_rx_parse_u_sig_mu(const struct hal_mon_usig_mu *usig_mu,
+                                         struct hal_rx_mon_ppdu_info *ppdu_info)
+{
+       struct ieee80211_radiotap_eht_usig *usig = &ppdu_info->u_sig_info.usig;
+       enum ieee80211_radiotap_eht_usig_mu sig_symb, punc;
+       u32 common, value, mask;
+
+       sig_symb = IEEE80211_RADIOTAP_EHT_USIG2_MU_B11_B15_EHT_SIG_SYMBOLS;
+       punc = IEEE80211_RADIOTAP_EHT_USIG2_MU_B3_B7_PUNCTURED_INFO;
+
+       common = __le32_to_cpu(usig->common);
+       value = __le32_to_cpu(usig->value);
+       mask = __le32_to_cpu(usig->mask);
+
+       ppdu_info->u_sig_info.ppdu_type_comp_mode =
+                               le32_get_bits(usig_mu->info0,
+                                             HAL_RX_USIG_MU_INFO0_PPDU_TYPE_COMP_MODE);
+       ppdu_info->u_sig_info.eht_sig_mcs =
+                               le32_get_bits(usig_mu->info0,
+                                             HAL_RX_USIG_MU_INFO0_EHT_SIG_MCS);
+       ppdu_info->u_sig_info.num_eht_sig_sym =
+                               le32_get_bits(usig_mu->info0,
+                                             HAL_RX_USIG_MU_INFO0_NUM_EHT_SIG_SYM);
+
+       common |= ATH12K_LE32_DEC_ENC(usig_mu->info0,
+                                     HAL_RX_USIG_MU_INFO0_RX_INTEG_CHECK_PASS,
+                                     IEEE80211_RADIOTAP_EHT_USIG_COMMON_BAD_USIG_CRC);
+
+       value |= IEEE80211_RADIOTAP_EHT_USIG1_MU_B20_B24_DISREGARD |
+                IEEE80211_RADIOTAP_EHT_USIG1_MU_B25_VALIDATE |
+                u32_encode_bits(ppdu_info->u_sig_info.ppdu_type_comp_mode,
+                                IEEE80211_RADIOTAP_EHT_USIG2_MU_B0_B1_PPDU_TYPE) |
+                IEEE80211_RADIOTAP_EHT_USIG2_MU_B2_VALIDATE |
+                ATH12K_LE32_DEC_ENC(usig_mu->info0,
+                                    HAL_RX_USIG_MU_INFO0_PUNC_CH_INFO,
+                                    punc) |
+                IEEE80211_RADIOTAP_EHT_USIG2_MU_B8_VALIDATE |
+                u32_encode_bits(ppdu_info->u_sig_info.eht_sig_mcs,
+                                IEEE80211_RADIOTAP_EHT_USIG2_MU_B9_B10_SIG_MCS) |
+                u32_encode_bits(ppdu_info->u_sig_info.num_eht_sig_sym,
+                                sig_symb) |
+                ATH12K_LE32_DEC_ENC(usig_mu->info0,
+                                    HAL_RX_USIG_MU_INFO0_CRC,
+                                    IEEE80211_RADIOTAP_EHT_USIG2_MU_B16_B19_CRC) |
+                ATH12K_LE32_DEC_ENC(usig_mu->info0,
+                                    HAL_RX_USIG_MU_INFO0_TAIL,
+                                    IEEE80211_RADIOTAP_EHT_USIG2_MU_B20_B25_TAIL);
+
+       mask |= IEEE80211_RADIOTAP_EHT_USIG1_MU_B20_B24_DISREGARD |
+               IEEE80211_RADIOTAP_EHT_USIG1_MU_B25_VALIDATE |
+               IEEE80211_RADIOTAP_EHT_USIG2_MU_B0_B1_PPDU_TYPE |
+               IEEE80211_RADIOTAP_EHT_USIG2_MU_B2_VALIDATE |
+               punc |
+               IEEE80211_RADIOTAP_EHT_USIG2_MU_B8_VALIDATE |
+               IEEE80211_RADIOTAP_EHT_USIG2_MU_B9_B10_SIG_MCS |
+               sig_symb |
+               IEEE80211_RADIOTAP_EHT_USIG2_MU_B16_B19_CRC |
+               IEEE80211_RADIOTAP_EHT_USIG2_MU_B20_B25_TAIL;
+
+       usig->common = cpu_to_le32(common);
+       usig->value = cpu_to_le32(value);
+       usig->mask = cpu_to_le32(mask);
+}
+
+static void
+ath12k_wifi7_dp_mon_hal_rx_parse_u_sig_hdr(const struct hal_mon_usig_hdr *usig,
+                                          struct hal_rx_mon_ppdu_info *ppdu_info)
+{
+       u8 comp_mode;
+
+       ppdu_info->eht_usig = true;
+
+       ath12k_wifi7_dp_mon_hal_rx_parse_u_sig_cmn(&usig->cmn, ppdu_info);
+
+       comp_mode = le32_get_bits(usig->non_cmn.mu.info0,
+                                 HAL_RX_USIG_MU_INFO0_PPDU_TYPE_COMP_MODE);
+
+       if (comp_mode == 0 && ppdu_info->u_sig_info.ul_dl)
+               ath12k_wifi7_dp_mon_hal_rx_parse_u_sig_tb(&usig->non_cmn.tb, ppdu_info);
+       else
+               ath12k_wifi7_dp_mon_hal_rx_parse_u_sig_mu(&usig->non_cmn.mu, ppdu_info);
+}
+
 static void
 ath12k_wifi7_dp_mon_parse_vht_sig_a(const struct hal_rx_vht_sig_a_info *vht_sig,
                                    struct hal_rx_mon_ppdu_info *ppdu_info)
@@ -956,11 +1220,11 @@ ath12k_wifi7_dp_mon_rx_parse_status_tlv(struct ath12k_pdev_dp *dp_pdev,
                break;
 
        case HAL_PHYRX_L_SIG_B:
-               ath12k_dp_mon_parse_l_sig_b(tlv_data, ppdu_info);
+               ath12k_wifi7_dp_mon_parse_l_sig_b(tlv_data, ppdu_info);
                break;
 
        case HAL_PHYRX_L_SIG_A:
-               ath12k_dp_mon_parse_l_sig_a(tlv_data, ppdu_info);
+               ath12k_wifi7_dp_mon_parse_l_sig_a(tlv_data, ppdu_info);
                break;
 
        case HAL_PHYRX_VHT_SIG_A:
@@ -1058,7 +1322,7 @@ ath12k_wifi7_dp_mon_rx_parse_status_tlv(struct ath12k_pdev_dp *dp_pdev,
        case HAL_RX_MPDU_END:
                return HAL_RX_MON_STATUS_MPDU_END;
        case HAL_PHYRX_GENERIC_U_SIG:
-               ath12k_dp_mon_hal_rx_parse_u_sig_hdr(tlv_data, ppdu_info);
+               ath12k_wifi7_dp_mon_hal_rx_parse_u_sig_hdr(tlv_data, ppdu_info);
                break;
        case HAL_PHYRX_GENERIC_EHT_SIG:
                /* Handle the case where aggregation is in progress
@@ -1621,11 +1885,11 @@ ath12k_wifi7_dp_mon_tx_parse_status_tlv(struct ath12k_base *ab,
                break;
 
        case HAL_MACTX_L_SIG_A:
-               ath12k_dp_mon_parse_l_sig_a(tlv_data, &tx_ppdu_info->rx_status);
+               ath12k_wifi7_dp_mon_parse_l_sig_a(tlv_data, &tx_ppdu_info->rx_status);
                break;
 
        case HAL_MACTX_L_SIG_B:
-               ath12k_dp_mon_parse_l_sig_b(tlv_data, &tx_ppdu_info->rx_status);
+               ath12k_wifi7_dp_mon_parse_l_sig_b(tlv_data, &tx_ppdu_info->rx_status);
                break;
 
        case HAL_RX_FRAME_BITMAP_ACK: {