From e7e15e5d88f42e8ed7be5926442aab24644a5f7c Mon Sep 17 00:00:00 2001 From: sumedh baikady Date: Wed, 18 Mar 2020 12:34:57 -0700 Subject: [PATCH] qcacmn: Convert GI and LTF to radiotap defined values The HE GI and HE LTF values are obtained from phy TLVs in monitor path. The stats used in host have an enum defined used by other upper layer code. The radiotap spec defines different set of enums. Add translation function to convert host stats enum to radiotap defined enum for sniffer capture purpose. Change-Id: I8c76adb42b0623e83958f7a37147b74e72b1ce74 CRs-Fixed: 2636051 --- hal/wifi3.0/hal_api_mon.h | 10 ++++++++ hal/wifi3.0/hal_generic_api.h | 45 ++++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/hal/wifi3.0/hal_api_mon.h b/hal/wifi3.0/hal_api_mon.h index 1e453ae5e0b7..4ea10bcdfcca 100644 --- a/hal/wifi3.0/hal_api_mon.h +++ b/hal/wifi3.0/hal_api_mon.h @@ -118,6 +118,16 @@ #define HE_GI_1_6 2 #define HE_GI_3_2 3 +#define HE_GI_RADIOTAP_0_8 0 +#define HE_GI_RADIOTAP_1_6 1 +#define HE_GI_RADIOTAP_3_2 2 +#define HE_GI_RADIOTAP_RESERVED 3 + +#define HE_LTF_RADIOTAP_UNKNOWN 0 +#define HE_LTF_RADIOTAP_1_X 1 +#define HE_LTF_RADIOTAP_2_X 2 +#define HE_LTF_RADIOTAP_4_X 3 + #define HT_SGI_PRESENT 0x80 #define HE_LTF_1_X 0 diff --git a/hal/wifi3.0/hal_generic_api.h b/hal/wifi3.0/hal_generic_api.h index 4e8713696a3b..ee900c921747 100644 --- a/hal/wifi3.0/hal_generic_api.h +++ b/hal/wifi3.0/hal_generic_api.h @@ -425,6 +425,46 @@ hal_get_mac_addr1(uint8_t *rx_mpdu_start, { } #endif + +/** + * hal_get_radiotap_he_gi_ltf() - Convert HE ltf and GI value + * from stats enum to radiotap enum + * @he_gi: HE GI value used in stats + * @he_ltf: HE LTF value used in stats + * + * Return: void + */ +static inline void hal_get_radiotap_he_gi_ltf(uint16_t *he_gi, uint16_t *he_ltf) +{ + switch (*he_gi) { + case HE_GI_0_8: + *he_gi = HE_GI_RADIOTAP_0_8; + break; + case HE_GI_1_6: + *he_gi = HE_GI_RADIOTAP_1_6; + break; + case HE_GI_3_2: + *he_gi = HE_GI_RADIOTAP_3_2; + break; + default: + *he_gi = HE_GI_RADIOTAP_RESERVED; + } + + switch (*he_ltf) { + case HE_LTF_1_X: + *he_ltf = HE_LTF_RADIOTAP_1_X; + break; + case HE_LTF_2_X: + *he_ltf = HE_LTF_RADIOTAP_2_X; + break; + case HE_LTF_4_X: + *he_ltf = HE_LTF_RADIOTAP_4_X; + break; + default: + *he_ltf = HE_LTF_RADIOTAP_UNKNOWN; + } +} + /** * hal_rx_status_get_tlv_info() - process receive info TLV * @rx_tlv_hdr: pointer to TLV header @@ -990,10 +1030,11 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo, break; } ppdu_info->rx_status.sgi = he_gi; + ppdu_info->rx_status.ltf_size = he_ltf; + hal_get_radiotap_he_gi_ltf(&he_gi, &he_ltf); value = he_gi << QDF_MON_STATUS_GI_SHIFT; ppdu_info->rx_status.he_data5 |= value; value = he_ltf << QDF_MON_STATUS_HE_LTF_SIZE_SHIFT; - ppdu_info->rx_status.ltf_size = he_ltf; ppdu_info->rx_status.he_data5 |= value; value = HAL_RX_GET(he_sig_a_su_info, HE_SIG_A_SU_INFO_0, NSTS); @@ -1116,6 +1157,8 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo, break; } ppdu_info->rx_status.sgi = he_gi; + ppdu_info->rx_status.ltf_size = he_ltf; + hal_get_radiotap_he_gi_ltf(&he_gi, &he_ltf); value = he_gi << QDF_MON_STATUS_GI_SHIFT; ppdu_info->rx_status.he_data5 |= value;