CC: l...@lists.linux.dev CC: kbuild-...@lists.01.org CC: Kalle Valo <kv...@codeaurora.org> CC: ath...@lists.infradead.org CC: linux-ker...@vger.kernel.org TO: Pradeep Kumar Chitrapu <prade...@codeaurora.org> CC: Kalle Valo <quic_kv...@quicinc.com> CC: Miles Hu <mil...@codeaurora.org> CC: Anilkumar Kolli <ako...@codeaurora.org>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git pending head: 4136ddcfda28450e2d01173e37300b95c8687d9b commit: 20168f00578862c259f02f179971f71c51a2a7a4 [33/42] ath11k: translate HE status to radiotap format :::::: branch date: 9 hours ago :::::: commit date: 2 days ago config: x86_64-randconfig-c007 (https://download.01.org/0day-ci/archive/20220223/202202230731.bspdcarb-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?id=20168f00578862c259f02f179971f71c51a2a7a4 git remote add kvalo-ath https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git git fetch --no-tags kvalo-ath pending git checkout 20168f00578862c259f02f179971f71c51a2a7a4 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> clang-analyzer warnings: (new ones prefixed by >>) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/sunrpc/cache.c:1081:4: note: Taking false branch if (test_bit(CACHE_PENDING, &ch->flags)) ^ net/sunrpc/cache.c:1084:8: note: Assuming field 'readers' is equal to 0 if (cr->readers != 0) ^~~~~~~~~~~~~~~~ net/sunrpc/cache.c:1084:4: note: Taking false branch if (cr->readers != 0) ^ net/sunrpc/cache.c:1076:2: note: Loop condition is false. Execution continues on line 1088 list_for_each_entry_safe(cq, tmp, &detail->queue, list) ^ include/linux/list.h:725:2: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ net/sunrpc/cache.c:1089:2: note: Loop condition is true. Entering loop body while (!list_empty(&dequeued)) { ^ net/sunrpc/cache.c:1094:3: note: Memory is released kfree(cr); ^~~~~~~~~ net/sunrpc/cache.c:1089:2: note: Loop condition is true. Entering loop body while (!list_empty(&dequeued)) { ^ net/sunrpc/cache.c:1091:3: note: Calling 'list_del' list_del(&cr->q.list); ^~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:149:14: note: Use of memory after it is freed entry->next = LIST_POISON1; ~~~~~~~~~~~ ^ Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. Suppressed 9 warnings (9 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (5 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 16 warnings generated. >> drivers/net/wireless/ath/ath11k/hal_rx.c:1246:3: warning: Value stored to >> 'he_stbc' is never read [clang-analyzer-deadcode.DeadStores] he_stbc = value; ^ ~~~~~ drivers/net/wireless/ath/ath11k/hal_rx.c:1246:3: note: Value stored to 'he_stbc' is never read he_stbc = value; ^ ~~~~~ >> drivers/net/wireless/ath/ath11k/hal_rx.c:1415:3: warning: Value stored to >> 'he_dcm' is never read [clang-analyzer-deadcode.DeadStores] he_dcm = value; ^ ~~~~~ drivers/net/wireless/ath/ath11k/hal_rx.c:1415:3: note: Value stored to 'he_dcm' is never read he_dcm = value; ^ ~~~~~ Suppressed 14 warnings (14 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 19 warnings generated. drivers/net/wireless/ath/ath11k/wmi.c:953:2: warning: Value stored to 'ptr' is never read [clang-analyzer-deadcode.DeadStores] ptr += sizeof(*tlv); ^ ~~~~~~~~~~~~ drivers/net/wireless/ath/ath11k/wmi.c:953:2: note: Value stored to 'ptr' is never read ptr += sizeof(*tlv); ^ ~~~~~~~~~~~~ drivers/net/wireless/ath/ath11k/wmi.c:6617:7: warning: 2nd function call argument is an uninitialized value [clang-analyzer-core.CallAndMessage] ar = ath11k_mac_get_ar_by_vdev_id(ab, peer_del_resp.vdev_id); ^ drivers/net/wireless/ath/ath11k/wmi.c:7774:7: note: Taking false branch id = FIELD_GET(WMI_CMD_HDR_CMD_ID, (cmd_hdr->cmd_id)); ^ include/linux/bitfield.h:125:3: note: expanded from macro 'FIELD_GET' __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ ^ include/linux/bitfield.h:62:3: note: expanded from macro '__BF_FIELD_CHECK' BUILD_BUG_ON_MSG(!__builtin_constant_p(_mask), \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:346:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:334:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:326:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/net/wireless/ath/ath11k/wmi.c:7774:7: note: Loop condition is false. Exiting loop id = FIELD_GET(WMI_CMD_HDR_CMD_ID, (cmd_hdr->cmd_id)); ^ include/linux/bitfield.h:125:3: note: expanded from macro 'FIELD_GET' __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ ^ include/linux/bitfield.h:62:3: note: expanded from macro '__BF_FIELD_CHECK' BUILD_BUG_ON_MSG(!__builtin_constant_p(_mask), \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:346:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:334:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:318:2: note: expanded from macro '__compiletime_assert' do { \ ^ drivers/net/wireless/ath/ath11k/wmi.c:7774:7: note: Taking false branch id = FIELD_GET(WMI_CMD_HDR_CMD_ID, (cmd_hdr->cmd_id)); ^ include/linux/bitfield.h:125:3: note: expanded from macro 'FIELD_GET' __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ ^ include/linux/bitfield.h:64:3: note: expanded from macro '__BF_FIELD_CHECK' BUILD_BUG_ON_MSG((_mask) == 0, _pfx "mask is zero"); \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:346:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:334:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:326:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/net/wireless/ath/ath11k/wmi.c:7774:7: note: Loop condition is false. Exiting loop id = FIELD_GET(WMI_CMD_HDR_CMD_ID, (cmd_hdr->cmd_id)); ^ include/linux/bitfield.h:125:3: note: expanded from macro 'FIELD_GET' __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ ^ include/linux/bitfield.h:64:3: note: expanded from macro '__BF_FIELD_CHECK' BUILD_BUG_ON_MSG((_mask) == 0, _pfx "mask is zero"); \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:346:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:334:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:318:2: note: expanded from macro '__compiletime_assert' do { \ vim +/he_stbc +1246 drivers/net/wireless/ath/ath11k/hal_rx.c 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 867 d5c65159f28953 Kalle Valo 2019-11-23 868 static enum hal_rx_mon_status d5c65159f28953 Kalle Valo 2019-11-23 869 ath11k_hal_rx_parse_mon_status_tlv(struct ath11k_base *ab, d5c65159f28953 Kalle Valo 2019-11-23 870 struct hal_rx_mon_ppdu_info *ppdu_info, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 871 u32 tlv_tag, u8 *tlv_data, u32 userid) d5c65159f28953 Kalle Valo 2019-11-23 872 { 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 873 u32 info0, info1, value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 874 u8 he_dcm = 0, he_stbc = 0; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 875 u16 he_gi = 0, he_ltf = 0; d5c65159f28953 Kalle Valo 2019-11-23 876 d5c65159f28953 Kalle Valo 2019-11-23 877 switch (tlv_tag) { d5c65159f28953 Kalle Valo 2019-11-23 878 case HAL_RX_PPDU_START: { d5c65159f28953 Kalle Valo 2019-11-23 879 struct hal_rx_ppdu_start *ppdu_start = d5c65159f28953 Kalle Valo 2019-11-23 880 (struct hal_rx_ppdu_start *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 881 d5c65159f28953 Kalle Valo 2019-11-23 882 ppdu_info->ppdu_id = d5c65159f28953 Kalle Valo 2019-11-23 883 FIELD_GET(HAL_RX_PPDU_START_INFO0_PPDU_ID, d5c65159f28953 Kalle Valo 2019-11-23 884 __le32_to_cpu(ppdu_start->info0)); d5c65159f28953 Kalle Valo 2019-11-23 885 ppdu_info->chan_num = __le32_to_cpu(ppdu_start->chan_num); d5c65159f28953 Kalle Valo 2019-11-23 886 ppdu_info->ppdu_ts = __le32_to_cpu(ppdu_start->ppdu_start_ts); d5c65159f28953 Kalle Valo 2019-11-23 887 break; d5c65159f28953 Kalle Valo 2019-11-23 888 } d5c65159f28953 Kalle Valo 2019-11-23 889 case HAL_RX_PPDU_END_USER_STATS: { d5c65159f28953 Kalle Valo 2019-11-23 890 struct hal_rx_ppdu_end_user_stats *eu_stats = d5c65159f28953 Kalle Valo 2019-11-23 891 (struct hal_rx_ppdu_end_user_stats *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 892 d5c65159f28953 Kalle Valo 2019-11-23 893 info0 = __le32_to_cpu(eu_stats->info0); d5c65159f28953 Kalle Valo 2019-11-23 894 info1 = __le32_to_cpu(eu_stats->info1); d5c65159f28953 Kalle Valo 2019-11-23 895 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 896 ppdu_info->ast_index = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 897 FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO2_AST_INDEX, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 898 __le32_to_cpu(eu_stats->info2)); d5c65159f28953 Kalle Valo 2019-11-23 899 ppdu_info->tid = d5c65159f28953 Kalle Valo 2019-11-23 900 ffs(FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP, d5c65159f28953 Kalle Valo 2019-11-23 901 __le32_to_cpu(eu_stats->info6))) - 1; d5c65159f28953 Kalle Valo 2019-11-23 902 ppdu_info->tcp_msdu_count = d5c65159f28953 Kalle Valo 2019-11-23 903 FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO4_TCP_MSDU_CNT, d5c65159f28953 Kalle Valo 2019-11-23 904 __le32_to_cpu(eu_stats->info4)); d5c65159f28953 Kalle Valo 2019-11-23 905 ppdu_info->udp_msdu_count = d5c65159f28953 Kalle Valo 2019-11-23 906 FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO4_UDP_MSDU_CNT, d5c65159f28953 Kalle Valo 2019-11-23 907 __le32_to_cpu(eu_stats->info4)); d5c65159f28953 Kalle Valo 2019-11-23 908 ppdu_info->other_msdu_count = d5c65159f28953 Kalle Valo 2019-11-23 909 FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO5_OTHER_MSDU_CNT, d5c65159f28953 Kalle Valo 2019-11-23 910 __le32_to_cpu(eu_stats->info5)); d5c65159f28953 Kalle Valo 2019-11-23 911 ppdu_info->tcp_ack_msdu_count = d5c65159f28953 Kalle Valo 2019-11-23 912 FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO5_TCP_ACK_MSDU_CNT, d5c65159f28953 Kalle Valo 2019-11-23 913 __le32_to_cpu(eu_stats->info5)); d5c65159f28953 Kalle Valo 2019-11-23 914 ppdu_info->preamble_type = d5c65159f28953 Kalle Valo 2019-11-23 915 FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO1_PKT_TYPE, info1); d5c65159f28953 Kalle Valo 2019-11-23 916 ppdu_info->num_mpdu_fcs_ok = d5c65159f28953 Kalle Valo 2019-11-23 917 FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO1_MPDU_CNT_FCS_OK, d5c65159f28953 Kalle Valo 2019-11-23 918 info1); d5c65159f28953 Kalle Valo 2019-11-23 919 ppdu_info->num_mpdu_fcs_err = d5c65159f28953 Kalle Valo 2019-11-23 920 FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO0_MPDU_CNT_FCS_ERR, d5c65159f28953 Kalle Valo 2019-11-23 921 info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 922 switch (ppdu_info->preamble_type) { 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 923 case HAL_RX_PREAMBLE_11N: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 924 ppdu_info->ht_flags = 1; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 925 break; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 926 case HAL_RX_PREAMBLE_11AC: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 927 ppdu_info->vht_flags = 1; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 928 break; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 929 case HAL_RX_PREAMBLE_11AX: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 930 ppdu_info->he_flags = 1; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 931 break; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 932 default: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 933 break; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 934 } 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 935 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 936 if (userid < HAL_MAX_UL_MU_USERS) { 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 937 struct hal_rx_user_status *rxuser_stats = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 938 &ppdu_info->userstats; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 939 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 940 ath11k_hal_rx_handle_ofdma_info(tlv_data, rxuser_stats); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 941 ath11k_hal_rx_populate_mu_user_info(tlv_data, ppdu_info, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 942 rxuser_stats); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 943 } 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 944 ppdu_info->userstats.mpdu_fcs_ok_bitmap[0] = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 945 __le32_to_cpu(eu_stats->rsvd1[0]); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 946 ppdu_info->userstats.mpdu_fcs_ok_bitmap[1] = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 947 __le32_to_cpu(eu_stats->rsvd1[1]); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 948 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 949 break; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 950 } 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 951 case HAL_RX_PPDU_END_USER_STATS_EXT: { 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 952 struct hal_rx_ppdu_end_user_stats_ext *eu_stats = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 953 (struct hal_rx_ppdu_end_user_stats_ext *)tlv_data; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 954 ppdu_info->userstats.mpdu_fcs_ok_bitmap[2] = eu_stats->info1; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 955 ppdu_info->userstats.mpdu_fcs_ok_bitmap[3] = eu_stats->info2; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 956 ppdu_info->userstats.mpdu_fcs_ok_bitmap[4] = eu_stats->info3; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 957 ppdu_info->userstats.mpdu_fcs_ok_bitmap[5] = eu_stats->info4; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 958 ppdu_info->userstats.mpdu_fcs_ok_bitmap[6] = eu_stats->info5; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 959 ppdu_info->userstats.mpdu_fcs_ok_bitmap[7] = eu_stats->info6; d5c65159f28953 Kalle Valo 2019-11-23 960 break; d5c65159f28953 Kalle Valo 2019-11-23 961 } d5c65159f28953 Kalle Valo 2019-11-23 962 case HAL_PHYRX_HT_SIG: { d5c65159f28953 Kalle Valo 2019-11-23 963 struct hal_rx_ht_sig_info *ht_sig = d5c65159f28953 Kalle Valo 2019-11-23 964 (struct hal_rx_ht_sig_info *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 965 d5c65159f28953 Kalle Valo 2019-11-23 966 info0 = __le32_to_cpu(ht_sig->info0); d5c65159f28953 Kalle Valo 2019-11-23 967 info1 = __le32_to_cpu(ht_sig->info1); d5c65159f28953 Kalle Valo 2019-11-23 968 d5c65159f28953 Kalle Valo 2019-11-23 969 ppdu_info->mcs = FIELD_GET(HAL_RX_HT_SIG_INFO_INFO0_MCS, info0); d5c65159f28953 Kalle Valo 2019-11-23 970 ppdu_info->bw = FIELD_GET(HAL_RX_HT_SIG_INFO_INFO0_BW, info0); d5c65159f28953 Kalle Valo 2019-11-23 971 ppdu_info->is_stbc = FIELD_GET(HAL_RX_HT_SIG_INFO_INFO1_STBC, d5c65159f28953 Kalle Valo 2019-11-23 972 info1); d5c65159f28953 Kalle Valo 2019-11-23 973 ppdu_info->ldpc = FIELD_GET(HAL_RX_HT_SIG_INFO_INFO1_FEC_CODING, info1); d5c65159f28953 Kalle Valo 2019-11-23 974 ppdu_info->gi = info1 & HAL_RX_HT_SIG_INFO_INFO1_GI; d5c65159f28953 Kalle Valo 2019-11-23 975 d5c65159f28953 Kalle Valo 2019-11-23 976 switch (ppdu_info->mcs) { d5c65159f28953 Kalle Valo 2019-11-23 977 case 0 ... 7: d5c65159f28953 Kalle Valo 2019-11-23 978 ppdu_info->nss = 1; d5c65159f28953 Kalle Valo 2019-11-23 979 break; d5c65159f28953 Kalle Valo 2019-11-23 980 case 8 ... 15: d5c65159f28953 Kalle Valo 2019-11-23 981 ppdu_info->nss = 2; d5c65159f28953 Kalle Valo 2019-11-23 982 break; d5c65159f28953 Kalle Valo 2019-11-23 983 case 16 ... 23: d5c65159f28953 Kalle Valo 2019-11-23 984 ppdu_info->nss = 3; d5c65159f28953 Kalle Valo 2019-11-23 985 break; d5c65159f28953 Kalle Valo 2019-11-23 986 case 24 ... 31: d5c65159f28953 Kalle Valo 2019-11-23 987 ppdu_info->nss = 4; d5c65159f28953 Kalle Valo 2019-11-23 988 break; d5c65159f28953 Kalle Valo 2019-11-23 989 } d5c65159f28953 Kalle Valo 2019-11-23 990 d5c65159f28953 Kalle Valo 2019-11-23 991 if (ppdu_info->nss > 1) d5c65159f28953 Kalle Valo 2019-11-23 992 ppdu_info->mcs = ppdu_info->mcs % 8; d5c65159f28953 Kalle Valo 2019-11-23 993 d5c65159f28953 Kalle Valo 2019-11-23 994 ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_SU; d5c65159f28953 Kalle Valo 2019-11-23 995 break; d5c65159f28953 Kalle Valo 2019-11-23 996 } d5c65159f28953 Kalle Valo 2019-11-23 997 case HAL_PHYRX_L_SIG_B: { d5c65159f28953 Kalle Valo 2019-11-23 998 struct hal_rx_lsig_b_info *lsigb = d5c65159f28953 Kalle Valo 2019-11-23 999 (struct hal_rx_lsig_b_info *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 1000 d5c65159f28953 Kalle Valo 2019-11-23 1001 ppdu_info->rate = FIELD_GET(HAL_RX_LSIG_B_INFO_INFO0_RATE, d5c65159f28953 Kalle Valo 2019-11-23 1002 __le32_to_cpu(lsigb->info0)); d5c65159f28953 Kalle Valo 2019-11-23 1003 ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_SU; d5c65159f28953 Kalle Valo 2019-11-23 1004 break; d5c65159f28953 Kalle Valo 2019-11-23 1005 } d5c65159f28953 Kalle Valo 2019-11-23 1006 case HAL_PHYRX_L_SIG_A: { d5c65159f28953 Kalle Valo 2019-11-23 1007 struct hal_rx_lsig_a_info *lsiga = d5c65159f28953 Kalle Valo 2019-11-23 1008 (struct hal_rx_lsig_a_info *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 1009 d5c65159f28953 Kalle Valo 2019-11-23 1010 ppdu_info->rate = FIELD_GET(HAL_RX_LSIG_A_INFO_INFO0_RATE, d5c65159f28953 Kalle Valo 2019-11-23 1011 __le32_to_cpu(lsiga->info0)); d5c65159f28953 Kalle Valo 2019-11-23 1012 ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_SU; d5c65159f28953 Kalle Valo 2019-11-23 1013 break; d5c65159f28953 Kalle Valo 2019-11-23 1014 } d5c65159f28953 Kalle Valo 2019-11-23 1015 case HAL_PHYRX_VHT_SIG_A: { d5c65159f28953 Kalle Valo 2019-11-23 1016 struct hal_rx_vht_sig_a_info *vht_sig = d5c65159f28953 Kalle Valo 2019-11-23 1017 (struct hal_rx_vht_sig_a_info *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 1018 u32 nsts; d5c65159f28953 Kalle Valo 2019-11-23 1019 u32 group_id; 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1020 u8 gi_setting; d5c65159f28953 Kalle Valo 2019-11-23 1021 d5c65159f28953 Kalle Valo 2019-11-23 1022 info0 = __le32_to_cpu(vht_sig->info0); d5c65159f28953 Kalle Valo 2019-11-23 1023 info1 = __le32_to_cpu(vht_sig->info1); d5c65159f28953 Kalle Valo 2019-11-23 1024 d5c65159f28953 Kalle Valo 2019-11-23 1025 ppdu_info->ldpc = FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO1_SU_MU_CODING, d5c65159f28953 Kalle Valo 2019-11-23 1026 info0); d5c65159f28953 Kalle Valo 2019-11-23 1027 ppdu_info->mcs = FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO1_MCS, d5c65159f28953 Kalle Valo 2019-11-23 1028 info1); 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1029 gi_setting = FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO1_GI_SETTING, d5c65159f28953 Kalle Valo 2019-11-23 1030 info1); 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1031 switch (gi_setting) { 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1032 case HAL_RX_VHT_SIG_A_NORMAL_GI: 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1033 ppdu_info->gi = HAL_RX_GI_0_8_US; 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1034 break; 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1035 case HAL_RX_VHT_SIG_A_SHORT_GI: 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1036 case HAL_RX_VHT_SIG_A_SHORT_GI_AMBIGUITY: 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1037 ppdu_info->gi = HAL_RX_GI_0_4_US; 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1038 break; 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1039 } 28dee8ef7645cd Manikanta Pubbisetty 2019-11-28 1040 d5c65159f28953 Kalle Valo 2019-11-23 1041 ppdu_info->is_stbc = info0 & HAL_RX_VHT_SIG_A_INFO_INFO0_STBC; d5c65159f28953 Kalle Valo 2019-11-23 1042 nsts = FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO0_NSTS, info0); d5c65159f28953 Kalle Valo 2019-11-23 1043 if (ppdu_info->is_stbc && nsts > 0) d5c65159f28953 Kalle Valo 2019-11-23 1044 nsts = ((nsts + 1) >> 1) - 1; d5c65159f28953 Kalle Valo 2019-11-23 1045 d5c65159f28953 Kalle Valo 2019-11-23 1046 ppdu_info->nss = (nsts & VHT_SIG_SU_NSS_MASK) + 1; d5c65159f28953 Kalle Valo 2019-11-23 1047 ppdu_info->bw = FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO0_BW, d5c65159f28953 Kalle Valo 2019-11-23 1048 info0); d5c65159f28953 Kalle Valo 2019-11-23 1049 ppdu_info->beamformed = info1 & d5c65159f28953 Kalle Valo 2019-11-23 1050 HAL_RX_VHT_SIG_A_INFO_INFO1_BEAMFORMED; d5c65159f28953 Kalle Valo 2019-11-23 1051 group_id = FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO0_GROUP_ID, d5c65159f28953 Kalle Valo 2019-11-23 1052 info0); d5c65159f28953 Kalle Valo 2019-11-23 1053 if (group_id == 0 || group_id == 63) d5c65159f28953 Kalle Valo 2019-11-23 1054 ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_SU; d5c65159f28953 Kalle Valo 2019-11-23 1055 else d5c65159f28953 Kalle Valo 2019-11-23 1056 ppdu_info->reception_type = d5c65159f28953 Kalle Valo 2019-11-23 1057 HAL_RX_RECEPTION_TYPE_MU_MIMO; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1058 ppdu_info->vht_flag_values5 = group_id; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1059 ppdu_info->vht_flag_values3[0] = (((ppdu_info->mcs) << 4) | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1060 ppdu_info->nss); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1061 ppdu_info->vht_flag_values2 = ppdu_info->bw; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1062 ppdu_info->vht_flag_values4 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1063 FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO1_SU_MU_CODING, info1); d5c65159f28953 Kalle Valo 2019-11-23 1064 break; d5c65159f28953 Kalle Valo 2019-11-23 1065 } d5c65159f28953 Kalle Valo 2019-11-23 1066 case HAL_PHYRX_HE_SIG_A_SU: { d5c65159f28953 Kalle Valo 2019-11-23 1067 struct hal_rx_he_sig_a_su_info *he_sig_a = d5c65159f28953 Kalle Valo 2019-11-23 1068 (struct hal_rx_he_sig_a_su_info *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 1069 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1070 ppdu_info->he_flags = 1; d5c65159f28953 Kalle Valo 2019-11-23 1071 info0 = __le32_to_cpu(he_sig_a->info0); d5c65159f28953 Kalle Valo 2019-11-23 1072 info1 = __le32_to_cpu(he_sig_a->info1); d5c65159f28953 Kalle Valo 2019-11-23 1073 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1074 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_FORMAT_IND, info0); d5c65159f28953 Kalle Valo 2019-11-23 1075 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1076 if (value == 0) 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1077 ppdu_info->he_data1 = IEEE80211_RADIOTAP_HE_DATA1_FORMAT_TRIG; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1078 else 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1079 ppdu_info->he_data1 = IEEE80211_RADIOTAP_HE_DATA1_FORMAT_SU; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1080 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1081 ppdu_info->he_data1 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1082 IEEE80211_RADIOTAP_HE_DATA1_BSS_COLOR_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1083 IEEE80211_RADIOTAP_HE_DATA1_BEAM_CHANGE_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1084 IEEE80211_RADIOTAP_HE_DATA1_UL_DL_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1085 IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1086 IEEE80211_RADIOTAP_HE_DATA1_DATA_DCM_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1087 IEEE80211_RADIOTAP_HE_DATA1_CODING_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1088 IEEE80211_RADIOTAP_HE_DATA1_LDPC_XSYMSEG_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1089 IEEE80211_RADIOTAP_HE_DATA1_STBC_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1090 IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1091 IEEE80211_RADIOTAP_HE_DATA1_DOPPLER_KNOWN; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1092 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1093 ppdu_info->he_data2 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1094 IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1095 IEEE80211_RADIOTAP_HE_DATA2_TXBF_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1096 IEEE80211_RADIOTAP_HE_DATA2_PE_DISAMBIG_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1097 IEEE80211_RADIOTAP_HE_DATA2_TXOP_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1098 IEEE80211_RADIOTAP_HE_DATA2_NUM_LTF_SYMS_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1099 IEEE80211_RADIOTAP_HE_DATA2_PRE_FEC_PAD_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1100 IEEE80211_RADIOTAP_HE_DATA2_MIDAMBLE_KNOWN; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1101 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1102 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_BSS_COLOR, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1103 ppdu_info->he_data3 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1104 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_BSS_COLOR, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1105 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_BEAM_CHANGE, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1106 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1107 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_BEAM_CHANGE, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1108 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_DL_UL_FLAG, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1109 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1110 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_UL_DL, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1111 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_TRANSMIT_MCS, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1112 ppdu_info->mcs = value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1113 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1114 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_DATA_MCS, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1115 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1116 he_dcm = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_DCM, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1117 ppdu_info->dcm = he_dcm; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1118 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1119 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_DATA_DCM, he_dcm); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1120 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO1_CODING, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1121 ppdu_info->ldpc = (value == HAL_RX_SU_MU_CODING_LDPC) ? 1 : 0; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1122 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1123 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_CODING, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1124 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO1_LDPC_EXTRA, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1125 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1126 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_LDPC_XSYMSEG, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1127 he_stbc = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO1_STBC, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1128 ppdu_info->is_stbc = he_stbc; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1129 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1130 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_STBC, he_stbc); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1131 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1132 /* data4 */ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1133 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_SPATIAL_REUSE, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1134 ppdu_info->he_data4 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1135 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA4_SU_MU_SPTL_REUSE, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1136 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1137 /* data5 */ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1138 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_TRANSMIT_BW, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1139 ppdu_info->bw = value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1140 ppdu_info->he_data5 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1141 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1142 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_CP_LTF_SIZE, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1143 switch (value) { d5c65159f28953 Kalle Valo 2019-11-23 1144 case 0: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1145 he_gi = HE_GI_0_8; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1146 he_ltf = HE_LTF_1_X; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1147 break; d5c65159f28953 Kalle Valo 2019-11-23 1148 case 1: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1149 he_gi = HE_GI_0_8; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1150 he_ltf = HE_LTF_2_X; d5c65159f28953 Kalle Valo 2019-11-23 1151 break; d5c65159f28953 Kalle Valo 2019-11-23 1152 case 2: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1153 he_gi = HE_GI_1_6; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1154 he_ltf = HE_LTF_2_X; d5c65159f28953 Kalle Valo 2019-11-23 1155 break; d5c65159f28953 Kalle Valo 2019-11-23 1156 case 3: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1157 if (he_dcm && he_stbc) { 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1158 he_gi = HE_GI_0_8; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1159 he_ltf = HE_LTF_4_X; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1160 } else { 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1161 he_gi = HE_GI_3_2; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1162 he_ltf = HE_LTF_4_X; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1163 } d5c65159f28953 Kalle Valo 2019-11-23 1164 break; d5c65159f28953 Kalle Valo 2019-11-23 1165 } 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1166 ppdu_info->gi = he_gi; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1167 he_gi = (he_gi != 0) ? he_gi - 1 : 0; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1168 ppdu_info->he_data5 |= FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_GI, he_gi); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1169 ppdu_info->ltf_size = he_ltf; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1170 ppdu_info->he_data5 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1171 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1172 (he_ltf == HE_LTF_4_X) ? he_ltf - 1 : he_ltf); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1173 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1174 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_NSTS, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1175 ppdu_info->he_data5 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1176 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_NUM_LTF_SYMS, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1177 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1178 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO1_PKT_EXT_FACTOR, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1179 ppdu_info->he_data5 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1180 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_PRE_FEC_PAD, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1181 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1182 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO1_TXBF, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1183 ppdu_info->beamformed = value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1184 ppdu_info->he_data5 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1185 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_TXBF, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1186 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO1_PKT_EXT_PE_DISAM, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1187 ppdu_info->he_data5 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1188 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_PE_DISAMBIG, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1189 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1190 /* data6 */ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1191 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO0_NSTS, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1192 value++; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1193 ppdu_info->nss = value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1194 ppdu_info->he_data6 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1195 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA6_NSTS, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1196 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO1_DOPPLER_IND, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1197 ppdu_info->he_data6 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1198 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA6_DOPPLER, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1199 value = FIELD_GET(HAL_RX_HE_SIG_A_SU_INFO_INFO1_TXOP_DURATION, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1200 ppdu_info->he_data6 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1201 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA6_TXOP, value); d5c65159f28953 Kalle Valo 2019-11-23 1202 d5c65159f28953 Kalle Valo 2019-11-23 1203 ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_SU; d5c65159f28953 Kalle Valo 2019-11-23 1204 break; d5c65159f28953 Kalle Valo 2019-11-23 1205 } d5c65159f28953 Kalle Valo 2019-11-23 1206 case HAL_PHYRX_HE_SIG_A_MU_DL: { d5c65159f28953 Kalle Valo 2019-11-23 1207 struct hal_rx_he_sig_a_mu_dl_info *he_sig_a_mu_dl = d5c65159f28953 Kalle Valo 2019-11-23 1208 (struct hal_rx_he_sig_a_mu_dl_info *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 1209 d5c65159f28953 Kalle Valo 2019-11-23 1210 info0 = __le32_to_cpu(he_sig_a_mu_dl->info0); d5c65159f28953 Kalle Valo 2019-11-23 1211 info1 = __le32_to_cpu(he_sig_a_mu_dl->info1); d5c65159f28953 Kalle Valo 2019-11-23 1212 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1213 ppdu_info->he_mu_flags = 1; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1214 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1215 ppdu_info->he_data1 = IEEE80211_RADIOTAP_HE_DATA1_FORMAT_MU; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1216 ppdu_info->he_data1 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1217 IEEE80211_RADIOTAP_HE_DATA1_BSS_COLOR_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1218 IEEE80211_RADIOTAP_HE_DATA1_UL_DL_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1219 IEEE80211_RADIOTAP_HE_DATA1_LDPC_XSYMSEG_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1220 IEEE80211_RADIOTAP_HE_DATA1_STBC_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1221 IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1222 IEEE80211_RADIOTAP_HE_DATA1_DOPPLER_KNOWN; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1223 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1224 ppdu_info->he_data2 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1225 IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1226 IEEE80211_RADIOTAP_HE_DATA2_NUM_LTF_SYMS_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1227 IEEE80211_RADIOTAP_HE_DATA2_PRE_FEC_PAD_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1228 IEEE80211_RADIOTAP_HE_DATA2_PE_DISAMBIG_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1229 IEEE80211_RADIOTAP_HE_DATA2_TXOP_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1230 IEEE80211_RADIOTAP_HE_DATA2_MIDAMBLE_KNOWN; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1231 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1232 /*data3*/ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1233 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_BSS_COLOR, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1234 ppdu_info->he_data3 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1235 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_BSS_COLOR, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1236 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1237 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_UL_FLAG, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1238 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1239 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_UL_DL, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1240 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1241 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO1_LDPC_EXTRA, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1242 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1243 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_LDPC_XSYMSEG, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1244 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1245 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO1_STBC, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 @1246 he_stbc = value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1247 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1248 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_STBC, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1249 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1250 /*data4*/ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1251 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_SPATIAL_REUSE, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1252 ppdu_info->he_data4 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1253 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA4_SU_MU_SPTL_REUSE, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1254 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1255 /*data5*/ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1256 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_TRANSMIT_BW, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1257 ppdu_info->bw = value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1258 ppdu_info->he_data5 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1259 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1260 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1261 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_CP_LTF_SIZE, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1262 switch (value) { d5c65159f28953 Kalle Valo 2019-11-23 1263 case 0: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1264 he_gi = HE_GI_0_8; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1265 he_ltf = HE_LTF_4_X; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1266 break; d5c65159f28953 Kalle Valo 2019-11-23 1267 case 1: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1268 he_gi = HE_GI_0_8; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1269 he_ltf = HE_LTF_2_X; d5c65159f28953 Kalle Valo 2019-11-23 1270 break; d5c65159f28953 Kalle Valo 2019-11-23 1271 case 2: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1272 he_gi = HE_GI_1_6; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1273 he_ltf = HE_LTF_2_X; d5c65159f28953 Kalle Valo 2019-11-23 1274 break; d5c65159f28953 Kalle Valo 2019-11-23 1275 case 3: 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1276 he_gi = HE_GI_3_2; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1277 he_ltf = HE_LTF_4_X; d5c65159f28953 Kalle Valo 2019-11-23 1278 break; d5c65159f28953 Kalle Valo 2019-11-23 1279 } 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1280 ppdu_info->gi = he_gi; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1281 he_gi = (he_gi != 0) ? he_gi - 1 : 0; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1282 ppdu_info->he_data5 |= FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_GI, he_gi); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1283 ppdu_info->ltf_size = he_ltf; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1284 ppdu_info->he_data5 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1285 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1286 (he_ltf == HE_LTF_4_X) ? he_ltf - 1 : he_ltf); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1287 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1288 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO1_NUM_LTF_SYMB, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1289 ppdu_info->he_data5 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1290 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_NUM_LTF_SYMS, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1291 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1292 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO1_PKT_EXT_FACTOR, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1293 info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1294 ppdu_info->he_data5 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1295 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_PRE_FEC_PAD, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1296 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1297 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO1_PKT_EXT_PE_DISAM, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1298 info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1299 ppdu_info->he_data5 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1300 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA5_PE_DISAMBIG, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1301 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1302 /*data6*/ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1303 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_DOPPLER_INDICATION, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1304 info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1305 ppdu_info->he_data6 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1306 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA6_DOPPLER, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1307 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1308 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO1_TXOP_DURATION, info1); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1309 ppdu_info->he_data6 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1310 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA6_TXOP, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1311 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1312 /* HE-MU Flags */ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1313 /* HE-MU-flags1 */ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1314 ppdu_info->he_flags1 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1315 IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_MCS_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1316 IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_DCM_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1317 IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_COMP_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1318 IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_SYMS_USERS_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1319 IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_RU_KNOWN; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1320 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1321 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_MCS_OF_SIGB, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1322 ppdu_info->he_flags1 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1323 FIELD_PREP(IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_MCS_KNOWN, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1324 value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1325 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_DCM_OF_SIGB, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1326 ppdu_info->he_flags1 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1327 FIELD_PREP(IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_DCM_KNOWN, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1328 value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1329 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1330 /* HE-MU-flags2 */ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1331 ppdu_info->he_flags2 = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1332 IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_KNOWN; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1333 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1334 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_TRANSMIT_BW, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1335 ppdu_info->he_flags2 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1336 FIELD_PREP(IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1337 value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1338 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_COMP_MODE_SIGB, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1339 ppdu_info->he_flags2 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1340 FIELD_PREP(IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_COMP, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1341 value = FIELD_GET(HAL_RX_HE_SIG_A_MU_DL_INFO_INFO0_NUM_SIGB_SYMB, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1342 value = value - 1; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1343 ppdu_info->he_flags2 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1344 FIELD_PREP(IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_SYMS_USERS, 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1345 value); d5c65159f28953 Kalle Valo 2019-11-23 1346 d5c65159f28953 Kalle Valo 2019-11-23 1347 ppdu_info->is_stbc = info1 & d5c65159f28953 Kalle Valo 2019-11-23 1348 HAL_RX_HE_SIG_A_MU_DL_INFO_INFO1_STBC; d5c65159f28953 Kalle Valo 2019-11-23 1349 ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_MU_MIMO; d5c65159f28953 Kalle Valo 2019-11-23 1350 break; d5c65159f28953 Kalle Valo 2019-11-23 1351 } d5c65159f28953 Kalle Valo 2019-11-23 1352 case HAL_PHYRX_HE_SIG_B1_MU: { 6a0c370259c76c John Crispin 2020-02-04 1353 struct hal_rx_he_sig_b1_mu_info *he_sig_b1_mu = 6a0c370259c76c John Crispin 2020-02-04 1354 (struct hal_rx_he_sig_b1_mu_info *)tlv_data; 6a0c370259c76c John Crispin 2020-02-04 1355 u16 ru_tones; 6a0c370259c76c John Crispin 2020-02-04 1356 6a0c370259c76c John Crispin 2020-02-04 1357 info0 = __le32_to_cpu(he_sig_b1_mu->info0); 6a0c370259c76c John Crispin 2020-02-04 1358 6a0c370259c76c John Crispin 2020-02-04 1359 ru_tones = FIELD_GET(HAL_RX_HE_SIG_B1_MU_INFO_INFO0_RU_ALLOCATION, 6a0c370259c76c John Crispin 2020-02-04 1360 info0); 1b8bb94c0612cf Wen Gong 2021-12-20 1361 ppdu_info->ru_alloc = 1b8bb94c0612cf Wen Gong 2021-12-20 1362 ath11k_mac_phy_he_ru_to_nl80211_he_ru_alloc(ru_tones); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1363 ppdu_info->he_RU[0] = ru_tones; d5c65159f28953 Kalle Valo 2019-11-23 1364 ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_MU_MIMO; d5c65159f28953 Kalle Valo 2019-11-23 1365 break; d5c65159f28953 Kalle Valo 2019-11-23 1366 } d5c65159f28953 Kalle Valo 2019-11-23 1367 case HAL_PHYRX_HE_SIG_B2_MU: { d5c65159f28953 Kalle Valo 2019-11-23 1368 struct hal_rx_he_sig_b2_mu_info *he_sig_b2_mu = d5c65159f28953 Kalle Valo 2019-11-23 1369 (struct hal_rx_he_sig_b2_mu_info *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 1370 d5c65159f28953 Kalle Valo 2019-11-23 1371 info0 = __le32_to_cpu(he_sig_b2_mu->info0); d5c65159f28953 Kalle Valo 2019-11-23 1372 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1373 ppdu_info->he_data1 |= IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1374 IEEE80211_RADIOTAP_HE_DATA1_CODING_KNOWN; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1375 d5c65159f28953 Kalle Valo 2019-11-23 1376 ppdu_info->mcs = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1377 FIELD_GET(HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_MCS, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1378 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1379 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_DATA_MCS, ppdu_info->mcs); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1380 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1381 value = FIELD_GET(HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_CODING, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1382 ppdu_info->ldpc = value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1383 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1384 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_CODING, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1385 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1386 value = FIELD_GET(HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_ID, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1387 ppdu_info->he_data4 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1388 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA4_MU_STA_ID, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1389 d5c65159f28953 Kalle Valo 2019-11-23 1390 ppdu_info->nss = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1391 FIELD_GET(HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_NSTS, info0) + 1; d5c65159f28953 Kalle Valo 2019-11-23 1392 break; d5c65159f28953 Kalle Valo 2019-11-23 1393 } d5c65159f28953 Kalle Valo 2019-11-23 1394 case HAL_PHYRX_HE_SIG_B2_OFDMA: { d5c65159f28953 Kalle Valo 2019-11-23 1395 struct hal_rx_he_sig_b2_ofdma_info *he_sig_b2_ofdma = d5c65159f28953 Kalle Valo 2019-11-23 1396 (struct hal_rx_he_sig_b2_ofdma_info *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 1397 d5c65159f28953 Kalle Valo 2019-11-23 1398 info0 = __le32_to_cpu(he_sig_b2_ofdma->info0); d5c65159f28953 Kalle Valo 2019-11-23 1399 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1400 ppdu_info->he_data1 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1401 IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1402 IEEE80211_RADIOTAP_HE_DATA1_DATA_DCM_KNOWN | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1403 IEEE80211_RADIOTAP_HE_DATA1_CODING_KNOWN; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1404 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1405 /* HE-data2 */ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1406 ppdu_info->he_data2 |= IEEE80211_RADIOTAP_HE_DATA2_TXBF_KNOWN; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1407 d5c65159f28953 Kalle Valo 2019-11-23 1408 ppdu_info->mcs = d5c65159f28953 Kalle Valo 2019-11-23 1409 FIELD_GET(HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_MCS, d5c65159f28953 Kalle Valo 2019-11-23 1410 info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1411 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1412 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_DATA_MCS, ppdu_info->mcs); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1413 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1414 value = FIELD_GET(HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_DCM, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 @1415 he_dcm = value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1416 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1417 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_DATA_DCM, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1418 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1419 value = FIELD_GET(HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_CODING, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1420 ppdu_info->ldpc = value; 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1421 ppdu_info->he_data3 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1422 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA3_CODING, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1423 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1424 /* HE-data4 */ 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1425 value = FIELD_GET(HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_ID, info0); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1426 ppdu_info->he_data4 |= 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1427 FIELD_PREP(IEEE80211_RADIOTAP_HE_DATA4_MU_STA_ID, value); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1428 d5c65159f28953 Kalle Valo 2019-11-23 1429 ppdu_info->nss = d5c65159f28953 Kalle Valo 2019-11-23 1430 FIELD_GET(HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_NSTS, d5c65159f28953 Kalle Valo 2019-11-23 1431 info0) + 1; d5c65159f28953 Kalle Valo 2019-11-23 1432 ppdu_info->beamformed = 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1433 info0 & HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_TXBF; d5c65159f28953 Kalle Valo 2019-11-23 1434 ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_MU_OFDMA; d5c65159f28953 Kalle Valo 2019-11-23 1435 break; d5c65159f28953 Kalle Valo 2019-11-23 1436 } d5c65159f28953 Kalle Valo 2019-11-23 1437 case HAL_PHYRX_RSSI_LEGACY: { b488c766442f7d Wen Gong 2021-12-17 1438 int i; b488c766442f7d Wen Gong 2021-12-17 1439 bool db2dbm = test_bit(WMI_TLV_SERVICE_HW_DB2DBM_CONVERSION_SUPPORT, b488c766442f7d Wen Gong 2021-12-17 1440 ab->wmi_ab.svc_map); d5c65159f28953 Kalle Valo 2019-11-23 1441 struct hal_rx_phyrx_rssi_legacy_info *rssi = d5c65159f28953 Kalle Valo 2019-11-23 1442 (struct hal_rx_phyrx_rssi_legacy_info *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 1443 d5c65159f28953 Kalle Valo 2019-11-23 1444 /* TODO: Please note that the combined rssi will not be accurate d5c65159f28953 Kalle Valo 2019-11-23 1445 * in MU case. Rssi in MU needs to be retrieved from d5c65159f28953 Kalle Valo 2019-11-23 1446 * PHYRX_OTHER_RECEIVE_INFO TLV. d5c65159f28953 Kalle Valo 2019-11-23 1447 */ d5c65159f28953 Kalle Valo 2019-11-23 1448 ppdu_info->rssi_comb = d5c65159f28953 Kalle Valo 2019-11-23 1449 FIELD_GET(HAL_RX_PHYRX_RSSI_LEGACY_INFO_INFO1_RSSI_COMB, d5c65159f28953 Kalle Valo 2019-11-23 1450 __le32_to_cpu(rssi->info0)); b488c766442f7d Wen Gong 2021-12-17 1451 b488c766442f7d Wen Gong 2021-12-17 1452 if (db2dbm) { b488c766442f7d Wen Gong 2021-12-17 1453 for (i = 0; i < ARRAY_SIZE(rssi->preamble); i++) { b488c766442f7d Wen Gong 2021-12-17 1454 ppdu_info->rssi_chain_pri20[i] = b488c766442f7d Wen Gong 2021-12-17 1455 le32_get_bits(rssi->preamble[i].rssi_2040, b488c766442f7d Wen Gong 2021-12-17 1456 HAL_RX_PHYRX_RSSI_PREAMBLE_PRI20); b488c766442f7d Wen Gong 2021-12-17 1457 } b488c766442f7d Wen Gong 2021-12-17 1458 } d5c65159f28953 Kalle Valo 2019-11-23 1459 break; d5c65159f28953 Kalle Valo 2019-11-23 1460 } d5c65159f28953 Kalle Valo 2019-11-23 1461 case HAL_RX_MPDU_START: { d5c65159f28953 Kalle Valo 2019-11-23 1462 u16 peer_id; d5c65159f28953 Kalle Valo 2019-11-23 1463 8845fed1ad7b2f Baochen Qiang 2021-05-31 1464 peer_id = ab->hw_params.hw_ops->mpdu_info_get_peerid(tlv_data); d5c65159f28953 Kalle Valo 2019-11-23 1465 if (peer_id) d5c65159f28953 Kalle Valo 2019-11-23 1466 ppdu_info->peer_id = peer_id; d5c65159f28953 Kalle Valo 2019-11-23 1467 break; d5c65159f28953 Kalle Valo 2019-11-23 1468 } d5c65159f28953 Kalle Valo 2019-11-23 1469 case HAL_RXPCU_PPDU_END_INFO: { d5c65159f28953 Kalle Valo 2019-11-23 1470 struct hal_rx_ppdu_end_duration *ppdu_rx_duration = d5c65159f28953 Kalle Valo 2019-11-23 1471 (struct hal_rx_ppdu_end_duration *)tlv_data; d5c65159f28953 Kalle Valo 2019-11-23 1472 ppdu_info->rx_duration = d5c65159f28953 Kalle Valo 2019-11-23 1473 FIELD_GET(HAL_RX_PPDU_END_DURATION, d5c65159f28953 Kalle Valo 2019-11-23 1474 __le32_to_cpu(ppdu_rx_duration->info0)); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1475 ppdu_info->tsft = __le32_to_cpu(ppdu_rx_duration->rsvd0[1]); 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1476 ppdu_info->tsft = (ppdu_info->tsft << 32) | 20168f00578862 Pradeep Kumar Chitrapu 2022-02-16 1477 __le32_to_cpu(ppdu_rx_duration->rsvd0[0]); d5c65159f28953 Kalle Valo 2019-11-23 1478 break; d5c65159f28953 Kalle Valo 2019-11-23 1479 } d5c65159f28953 Kalle Valo 2019-11-23 1480 case HAL_DUMMY: d5c65159f28953 Kalle Valo 2019-11-23 1481 return HAL_RX_MON_STATUS_BUF_DONE; d5c65159f28953 Kalle Valo 2019-11-23 1482 case HAL_RX_PPDU_END_STATUS_DONE: d5c65159f28953 Kalle Valo 2019-11-23 1483 case 0: d5c65159f28953 Kalle Valo 2019-11-23 1484 return HAL_RX_MON_STATUS_PPDU_DONE; d5c65159f28953 Kalle Valo 2019-11-23 1485 default: d5c65159f28953 Kalle Valo 2019-11-23 1486 break; d5c65159f28953 Kalle Valo 2019-11-23 1487 } d5c65159f28953 Kalle Valo 2019-11-23 1488 d5c65159f28953 Kalle Valo 2019-11-23 1489 return HAL_RX_MON_STATUS_PPDU_NOT_DONE; d5c65159f28953 Kalle Valo 2019-11-23 1490 } d5c65159f28953 Kalle Valo 2019-11-23 1491 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org