qcacmn: Word mask TLV support for monitor
Word mask TLV support for QCN9224. Change-Id: I9e5d6cbb32cc7469dc367f6fc4bca4ce8adc9da8 CRs-Fixed: 3368626
This commit is contained in:

committed by
Madan Koyyalamudi

parent
91f844bfce
commit
42be95a6df
@@ -1572,12 +1572,14 @@ void dp_rx_word_mask_subscribe_be(struct dp_soc *soc,
|
||||
if (!msg_word || !tlv_filter)
|
||||
return;
|
||||
|
||||
/* tlv_filter->enable is set to 1 for monitor rings */
|
||||
if (tlv_filter->enable)
|
||||
return;
|
||||
|
||||
/* if word mask is zero, FW will set the default values */
|
||||
if (!(tlv_filter->rx_mpdu_start_wmask > 0 &&
|
||||
tlv_filter->rx_msdu_end_wmask > 0)) {
|
||||
msg_word += 4;
|
||||
*msg_word = 0;
|
||||
goto config_mon;
|
||||
return;
|
||||
}
|
||||
|
||||
HTT_RX_RING_SELECTION_CFG_WORD_MASK_COMPACTION_ENABLE_SET(*msg_word, 1);
|
||||
@@ -1596,9 +1598,6 @@ void dp_rx_word_mask_subscribe_be(struct dp_soc *soc,
|
||||
HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_WORD_MASK_SET(
|
||||
*msg_word,
|
||||
tlv_filter->rx_msdu_end_wmask);
|
||||
config_mon:
|
||||
msg_word--;
|
||||
dp_mon_rx_wmask_subscribe(soc, msg_word, tlv_filter);
|
||||
}
|
||||
#else
|
||||
void dp_rx_word_mask_subscribe_be(struct dp_soc *soc,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -1672,21 +1672,31 @@ int htt_h2t_rx_ring_cfg(struct htt_soc *htt_soc, int pdev_id,
|
||||
msg_word,
|
||||
(void *)htt_tlv_filter);
|
||||
|
||||
dp_mon_rx_wmask_subscribe(soc->dp_soc, msg_word, htt_tlv_filter);
|
||||
|
||||
if (mon_drop_th > 0)
|
||||
HTT_RX_RING_SELECTION_CFG_RX_DROP_THRESHOLD_SET(*msg_word,
|
||||
mon_drop_th);
|
||||
|
||||
dp_mon_rx_enable_mpdu_logging(soc->dp_soc, msg_word, htt_tlv_filter);
|
||||
|
||||
dp_mon_rx_enable_phy_errors(msg_word, htt_tlv_filter);
|
||||
|
||||
/* word 14*/
|
||||
msg_word += 3;
|
||||
|
||||
/* word 15*/
|
||||
msg_word++;
|
||||
|
||||
/* word 16*/
|
||||
msg_word++;
|
||||
*msg_word = 0;
|
||||
|
||||
dp_mon_rx_enable_pkt_tlv_offset(soc->dp_soc, msg_word, htt_tlv_filter);
|
||||
|
||||
#ifdef FW_SUPPORT_NOT_YET
|
||||
/* word 17*/
|
||||
msg_word += 3;
|
||||
/* word 20 and 21*/
|
||||
msg_word += 4;
|
||||
*msg_word = 0;
|
||||
|
||||
dp_mon_rx_enable_fpmo(soc->dp_soc, msg_word, htt_tlv_filter);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -676,8 +676,9 @@ struct htt_rx_ring_tlv_filter {
|
||||
u_int32_t phy_err_mask;
|
||||
u_int32_t phy_err_mask_cont;
|
||||
#endif
|
||||
#if defined(QCA_MONITOR_2_0_SUPPORT) || defined(CONFIG_WORD_BASED_TLV)
|
||||
uint16_t rx_mpdu_start_wmask;
|
||||
#if defined(QCA_MONITOR_2_0_SUPPORT) || defined(CONFIG_WORD_BASED_TLV) || \
|
||||
defined(CONFIG_MON_WORD_BASED_TLV)
|
||||
uint32_t rx_mpdu_start_wmask;
|
||||
uint16_t rx_mpdu_end_wmask;
|
||||
uint32_t rx_msdu_end_wmask;
|
||||
uint16_t rx_pkt_tlv_offset;
|
||||
|
@@ -960,6 +960,12 @@ dp_mon_rx_mac_filter_set(struct dp_soc *soc, uint32_t *msg_word,
|
||||
{
|
||||
}
|
||||
|
||||
static inline void
|
||||
dp_mon_rx_enable_pkt_tlv_offset(struct dp_soc *soc, uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef WLAN_TELEMETRY_STATS_SUPPORT
|
||||
static inline
|
||||
void dp_monitor_peer_telemetry_stats(struct dp_peer *peer,
|
||||
|
@@ -1192,6 +1192,7 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc)
|
||||
mon_ops->rx_packet_length_set = NULL;
|
||||
mon_ops->rx_mon_enable = NULL;
|
||||
mon_ops->rx_wmask_subscribe = NULL;
|
||||
mon_ops->rx_pkt_tlv_offset = NULL;
|
||||
mon_ops->rx_enable_mpdu_logging = NULL;
|
||||
mon_ops->rx_enable_fpmo = NULL;
|
||||
mon_ops->mon_neighbour_peers_detach = dp_neighbour_peers_detach;
|
||||
|
@@ -1427,6 +1427,7 @@ dp_mon_register_feature_ops_2_0(struct dp_soc *soc)
|
||||
mon_ops->rx_packet_length_set = dp_rx_mon_packet_length_set;
|
||||
mon_ops->rx_mon_enable = dp_rx_mon_enable_set;
|
||||
mon_ops->rx_wmask_subscribe = dp_rx_mon_word_mask_subscribe;
|
||||
mon_ops->rx_pkt_tlv_offset = dp_rx_mon_pkt_tlv_offset_subscribe;
|
||||
mon_ops->rx_enable_mpdu_logging = dp_rx_mon_enable_mpdu_logging;
|
||||
mon_ops->mon_neighbour_peers_detach = NULL;
|
||||
mon_ops->mon_vdev_set_monitor_mode_buf_rings =
|
||||
|
@@ -179,22 +179,67 @@ void
|
||||
dp_rx_mon_word_mask_subscribe(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
||||
{
|
||||
if (!msg_word || !tlv_filter)
|
||||
return;
|
||||
|
||||
if (!tlv_filter->enable)
|
||||
return;
|
||||
|
||||
HTT_RX_RING_SELECTION_CFG_WORD_MASK_COMPACTION_ENABLE_SET(*msg_word, 1);
|
||||
|
||||
/* word 14 */
|
||||
msg_word += 3;
|
||||
*msg_word = 0;
|
||||
|
||||
HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_WORD_MASK_SET(
|
||||
*msg_word,
|
||||
RX_MON_MPDU_START_WMASK);
|
||||
|
||||
#ifdef QCA_MONITOR_2_0_SUPPORT_WAR /* Yet to get FW support */
|
||||
HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_WORD_MASK_SET(*msg_word,
|
||||
tlv_filter->rx_mpdu_end_wmask);
|
||||
#endif
|
||||
/* word 15 */
|
||||
msg_word++;
|
||||
*msg_word = 0;
|
||||
HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_WORD_MASK_SET(
|
||||
*msg_word,
|
||||
RX_MON_MSDU_END_WMASK);
|
||||
|
||||
/* word 16 */
|
||||
msg_word++;
|
||||
/* word 17 */
|
||||
msg_word++;
|
||||
*msg_word = 0;
|
||||
HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_WORD_MASK_V2_SET(
|
||||
*msg_word,
|
||||
RX_MON_MPDU_START_WMASK);
|
||||
|
||||
/* word 18 */
|
||||
msg_word++;
|
||||
*msg_word = 0;
|
||||
HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_WORD_MASK_V2_SET(
|
||||
*msg_word,
|
||||
RX_MON_MSDU_END_WMASK);
|
||||
/* word 19 */
|
||||
msg_word++;
|
||||
*msg_word = 0;
|
||||
HTT_RX_RING_SELECTION_CFG_RX_PPDU_END_USR_STATS_WORD_MASK_V2_SET(
|
||||
*msg_word,
|
||||
RX_MON_PPDU_END_USR_STATS_WMASK);
|
||||
}
|
||||
|
||||
void
|
||||
dp_rx_mon_pkt_tlv_offset_subscribe(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
||||
{
|
||||
if (!msg_word || !tlv_filter)
|
||||
return;
|
||||
|
||||
/* word 16 */
|
||||
*msg_word = 0;
|
||||
if (tlv_filter->rx_pkt_tlv_offset) {
|
||||
HTT_RX_RING_SELECTION_CFG_ENABLE_RX_PKT_TLV_OFFSET_SET(*msg_word, 1);
|
||||
HTT_RX_RING_SELECTION_CFG_RX_PKT_TLV_OFFSET_SET(*msg_word,
|
||||
tlv_filter->rx_pkt_tlv_offset);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1505,7 +1550,6 @@ static void dp_mon_filter_set_mon_2_0(struct dp_mon_pdev *mon_pdev,
|
||||
filter->tlv_filter.ctrl_mpdu_log = DP_MON_MSDU_LOGGING;
|
||||
filter->tlv_filter.data_mpdu_log = DP_MON_MSDU_LOGGING;
|
||||
|
||||
|
||||
if (mon_pdev->mon_filter_mode & MON_FILTER_OTHER) {
|
||||
filter->tlv_filter.enable_mo = 1;
|
||||
filter->tlv_filter.mo_mgmt_filter = FILTER_MGMT_ALL;
|
||||
@@ -2465,22 +2509,6 @@ dp_rx_mon_filter_h2t_setup(struct dp_soc *soc, struct dp_pdev *pdev,
|
||||
tlv_filter->data_mpdu_log =
|
||||
src_tlv_filter->data_mpdu_log;
|
||||
|
||||
/*
|
||||
* set mpdu start wmask
|
||||
*/
|
||||
if (src_tlv_filter->rx_mpdu_start_wmask &&
|
||||
!tlv_filter->rx_mpdu_start_wmask)
|
||||
tlv_filter->rx_mpdu_start_wmask =
|
||||
src_tlv_filter->rx_mpdu_start_wmask;
|
||||
|
||||
/*
|
||||
* set msdu end wmask
|
||||
*/
|
||||
if (src_tlv_filter->rx_msdu_end_wmask &&
|
||||
!tlv_filter->rx_msdu_end_wmask)
|
||||
tlv_filter->rx_msdu_end_wmask =
|
||||
src_tlv_filter->rx_msdu_end_wmask;
|
||||
|
||||
/*
|
||||
* set hdr tlv length
|
||||
*/
|
||||
|
@@ -76,6 +76,15 @@ void
|
||||
dp_rx_mon_word_mask_subscribe(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
|
||||
/**
|
||||
* dp_rx_mon_pkt_tlv_offset_subscribe () Setup rx monitor packet tlv offset
|
||||
* @msg_word: msg word
|
||||
* @htt_tlv_filter: rx ring filter configuration
|
||||
*/
|
||||
void
|
||||
dp_rx_mon_pkt_tlv_offset_subscribe(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
|
||||
/**
|
||||
* dp_rx_mon_enable_mpdu_logging() - Setup rx monitor per packet mpdu logging
|
||||
* @msg_word: msg word
|
||||
|
@@ -6687,6 +6687,7 @@ void dp_mon_feature_ops_deregister(struct dp_soc *soc)
|
||||
mon_ops->rx_hdr_length_set = NULL;
|
||||
mon_ops->rx_packet_length_set = NULL;
|
||||
mon_ops->rx_wmask_subscribe = NULL;
|
||||
mon_ops->rx_pkt_tlv_offset = NULL;
|
||||
mon_ops->rx_enable_mpdu_logging = NULL;
|
||||
mon_ops->rx_enable_fpmo = NULL;
|
||||
mon_ops->mon_neighbour_peers_detach = NULL;
|
||||
|
@@ -793,6 +793,8 @@ struct dp_mon_ops {
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
void (*rx_wmask_subscribe)(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
void (*rx_pkt_tlv_offset)(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
void (*rx_enable_mpdu_logging)(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
void (*rx_enable_fpmo)(uint32_t *msg_word,
|
||||
@@ -3830,6 +3832,7 @@ void dp_monitor_pdev_reset_scan_spcl_vap_stats_enable(struct dp_pdev *pdev,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MON_WORD_BASED_TLV)
|
||||
static inline void
|
||||
dp_mon_rx_wmask_subscribe(struct dp_soc *soc, uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
||||
@@ -3851,6 +3854,34 @@ dp_mon_rx_wmask_subscribe(struct dp_soc *soc, uint32_t *msg_word,
|
||||
|
||||
monitor_ops->rx_wmask_subscribe(msg_word, tlv_filter);
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
dp_mon_rx_wmask_subscribe(struct dp_soc *soc, uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void
|
||||
dp_mon_rx_enable_pkt_tlv_offset(struct dp_soc *soc, uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
||||
{
|
||||
struct dp_mon_soc *mon_soc = soc->monitor_soc;
|
||||
struct dp_mon_ops *monitor_ops;
|
||||
|
||||
if (!mon_soc) {
|
||||
dp_mon_debug("mon soc is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_ops = mon_soc->mon_ops;
|
||||
if (!monitor_ops || !monitor_ops->rx_pkt_tlv_offset) {
|
||||
dp_mon_debug("callback not registered");
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_ops->rx_pkt_tlv_offset(msg_word, tlv_filter);
|
||||
}
|
||||
|
||||
static inline void
|
||||
dp_mon_rx_enable_mpdu_logging(struct dp_soc *soc, uint32_t *msg_word,
|
||||
|
@@ -104,9 +104,14 @@ defined(QCA_SINGLE_WIFI_3_0)
|
||||
PHYRX_RSSI_LEGACY_PREAMBLE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
|
||||
#endif
|
||||
|
||||
#define RX_MON_MPDU_START_WMASK 0x07F0
|
||||
#define RX_MON_MSDU_END_WMASK 0x0AE1
|
||||
#define RX_MON_PPDU_END_USR_STATS_WMASK 0xB7E
|
||||
|
||||
#ifdef CONFIG_MON_WORD_BASED_TLV
|
||||
#ifndef BIG_ENDIAN_HOST
|
||||
struct rx_mpdu_start_mon_data {
|
||||
uint32_t peer_meta_data : 32;
|
||||
uint32_t rxpcu_mpdu_filter_in_category : 2,
|
||||
sw_frame_group_id : 7,
|
||||
ndp_frame : 1,
|
||||
@@ -136,6 +141,19 @@ struct rx_mpdu_start_mon_data {
|
||||
encrypted : 1,
|
||||
mpdu_retry : 1,
|
||||
mpdu_sequence_number : 12;
|
||||
uint32_t key_id_octet : 8,
|
||||
new_peer_entry : 1,
|
||||
decrypt_needed : 1,
|
||||
decap_type : 2,
|
||||
rx_insert_vlan_c_tag_padding : 1,
|
||||
rx_insert_vlan_s_tag_padding : 1,
|
||||
strip_vlan_c_tag_decap : 1,
|
||||
strip_vlan_s_tag_decap : 1,
|
||||
pre_delim_count : 12,
|
||||
ampdu_flag : 1,
|
||||
bar_frame : 1,
|
||||
raw_mpdu : 1,
|
||||
reserved_12 : 1;
|
||||
uint32_t mpdu_length : 14,
|
||||
first_mpdu : 1,
|
||||
mcast_bcast : 1,
|
||||
@@ -160,6 +178,13 @@ struct rx_mpdu_start_mon_data {
|
||||
uint32_t mac_addr_ad1_31_0 : 32;
|
||||
uint32_t mac_addr_ad1_47_32 : 16,
|
||||
mac_addr_ad2_15_0 : 16;
|
||||
uint32_t mac_addr_ad2_47_16 : 32;
|
||||
uint32_t mac_addr_ad3_31_0 : 32;
|
||||
uint32_t mac_addr_ad3_47_32 : 16,
|
||||
mpdu_sequence_control_field : 16;
|
||||
uint32_t mac_addr_ad4_31_0 : 32;
|
||||
uint32_t mac_addr_ad4_47_32 : 16,
|
||||
mpdu_qos_control_field : 16;
|
||||
};
|
||||
|
||||
struct rx_msdu_end_mon_data {
|
||||
@@ -167,33 +192,140 @@ struct rx_msdu_end_mon_data {
|
||||
sw_frame_group_id : 7,
|
||||
reserved_0 : 7,
|
||||
phy_ppdu_id : 16;
|
||||
uint32_t tcp_udp_chksum : 16,
|
||||
uint32_t ip_hdr_chksum : 16,
|
||||
reported_mpdu_length : 14,
|
||||
reserved_1a : 2;
|
||||
uint32_t sa_sw_peer_id : 16,
|
||||
sa_idx_timeout : 1,
|
||||
da_idx_timeout : 1,
|
||||
msdu_limit_error : 1,
|
||||
flow_idx_timeout : 1,
|
||||
flow_idx_invalid : 1,
|
||||
wifi_parser_error : 1,
|
||||
amsdu_parser_error : 1,
|
||||
to_ds : 1,
|
||||
tid : 4,
|
||||
sa_is_valid : 1,
|
||||
da_is_valid : 1,
|
||||
da_is_mcbc : 1,
|
||||
l3_header_padding : 2,
|
||||
first_msdu : 1,
|
||||
last_msdu : 1,
|
||||
tcp_udp_chksum_fail : 1,
|
||||
ip_chksum_fail : 1;
|
||||
fr_ds : 1,
|
||||
ip_chksum_fail_copy : 1;
|
||||
uint32_t sa_idx : 16,
|
||||
da_idx_or_sw_peer_id : 16;
|
||||
uint32_t msdu_drop : 1,
|
||||
reo_destination_indication : 5,
|
||||
flow_idx : 20,
|
||||
reserved_12a : 6;
|
||||
use_ppe : 1,
|
||||
mesh_sta : 2,
|
||||
vlan_ctag_stripped : 1,
|
||||
vlan_stag_stripped : 1,
|
||||
fragment_flag : 1;
|
||||
uint32_t fse_metadata : 32;
|
||||
uint32_t cce_metadata : 16,
|
||||
sa_sw_peer_id : 16;
|
||||
tcp_udp_chksum : 16;
|
||||
uint32_t aggregation_count : 8,
|
||||
flow_aggregation_continuation : 1,
|
||||
fisa_timeout : 1,
|
||||
tcp_udp_chksum_fail_copy : 1,
|
||||
msdu_limit_error : 1,
|
||||
flow_idx_timeout : 1,
|
||||
flow_idx_invalid : 1,
|
||||
cce_match : 1,
|
||||
amsdu_parser_error : 1,
|
||||
cumulative_ip_length : 16;
|
||||
uint32_t msdu_length : 14,
|
||||
stbc : 1,
|
||||
ipsec_esp : 1,
|
||||
l3_offset : 7,
|
||||
ipsec_ah : 1,
|
||||
l4_offset : 8;
|
||||
uint32_t msdu_number : 8,
|
||||
decap_format : 2,
|
||||
ipv4_proto : 1,
|
||||
ipv6_proto : 1,
|
||||
tcp_proto : 1,
|
||||
udp_proto : 1,
|
||||
ip_frag : 1,
|
||||
tcp_only_ack : 1,
|
||||
da_is_bcast_mcast : 1,
|
||||
toeplitz_hash_sel : 2,
|
||||
ip_fixed_header_valid : 1,
|
||||
ip_extn_header_valid : 1,
|
||||
tcp_udp_header_valid : 1,
|
||||
mesh_control_present : 1,
|
||||
ldpc : 1,
|
||||
ip4_protocol_ip6_next_header : 8;
|
||||
uint32_t user_rssi : 8,
|
||||
pkt_type : 4,
|
||||
sgi : 2,
|
||||
rate_mcs : 4,
|
||||
receive_bandwidth : 3,
|
||||
reception_type : 3,
|
||||
mimo_ss_bitmap : 7,
|
||||
msdu_done_copy : 1;
|
||||
uint32_t flow_id_toeplitz : 32;
|
||||
};
|
||||
|
||||
struct rx_ppdu_end_user_mon_data {
|
||||
uint32_t sw_peer_id : 16,
|
||||
mpdu_cnt_fcs_err : 11,
|
||||
sw2rxdma0_buf_source_used : 1,
|
||||
fw2rxdma_pmac0_buf_source_used : 1,
|
||||
sw2rxdma1_buf_source_used : 1,
|
||||
sw2rxdma_exception_buf_source_used: 1,
|
||||
fw2rxdma_pmac1_buf_source_used : 1;
|
||||
uint32_t mpdu_cnt_fcs_ok : 11,
|
||||
frame_control_info_valid : 1,
|
||||
qos_control_info_valid : 1,
|
||||
ht_control_info_valid : 1,
|
||||
data_sequence_control_info_valid : 1,
|
||||
ht_control_info_null_valid : 1,
|
||||
rxdma2fw_pmac1_ring_used : 1,
|
||||
rxdma2reo_ring_used : 1,
|
||||
rxdma2fw_pmac0_ring_used : 1,
|
||||
rxdma2sw_ring_used : 1,
|
||||
rxdma_release_ring_used : 1,
|
||||
ht_control_field_pkt_type : 4,
|
||||
rxdma2reo_remote0_ring_used : 1,
|
||||
rxdma2reo_remote1_ring_used : 1,
|
||||
reserved_3b : 5;
|
||||
uint32_t ast_index : 16,
|
||||
frame_control_field : 16;
|
||||
uint32_t first_data_seq_ctrl : 16,
|
||||
qos_control_field : 16;
|
||||
uint32_t ht_control_field : 32;
|
||||
uint32_t fcs_ok_bitmap_31_0 : 32;
|
||||
uint32_t fcs_ok_bitmap_63_32 : 32;
|
||||
uint32_t udp_msdu_count : 16,
|
||||
tcp_msdu_count : 16;
|
||||
uint32_t other_msdu_count : 16,
|
||||
tcp_ack_msdu_count : 16;
|
||||
uint32_t sw_response_reference_ptr : 32;
|
||||
uint32_t received_qos_data_tid_bitmap : 16,
|
||||
received_qos_data_tid_eosp_bitmap : 16;
|
||||
uint32_t qosctrl_15_8_tid0 : 8,
|
||||
qosctrl_15_8_tid1 : 8,
|
||||
qosctrl_15_8_tid2 : 8,
|
||||
qosctrl_15_8_tid3 : 8;
|
||||
uint32_t qosctrl_15_8_tid12 : 8,
|
||||
qosctrl_15_8_tid13 : 8,
|
||||
qosctrl_15_8_tid14 : 8,
|
||||
qosctrl_15_8_tid15 : 8;
|
||||
uint32_t mpdu_ok_byte_count : 25,
|
||||
ampdu_delim_ok_count_6_0 : 7;
|
||||
uint32_t ampdu_delim_err_count : 25,
|
||||
ampdu_delim_ok_count_13_7 : 7;
|
||||
uint32_t mpdu_err_byte_count : 25,
|
||||
ampdu_delim_ok_count_20_14 : 7;
|
||||
uint32_t sw_response_reference_ptr_ext : 32;
|
||||
uint32_t corrupted_due_to_fifo_delay : 1,
|
||||
frame_control_info_null_valid : 1,
|
||||
frame_control_field_null : 16,
|
||||
retried_mpdu_count : 11,
|
||||
reserved_23a : 3;
|
||||
};
|
||||
#else
|
||||
struct rx_mpdu_start_mon_data {
|
||||
uint32_t phy_ppdu_id : 16;
|
||||
uint32_t peer_meta_data : 32;
|
||||
uint32_t phy_ppdu_id : 16,
|
||||
reserved_0a : 2,
|
||||
ast_based_lookup_valid : 1,
|
||||
protocol_version_err : 1,
|
||||
@@ -201,10 +333,10 @@ struct rx_mpdu_start_mon_data {
|
||||
phy_err : 1,
|
||||
ndp_frame : 1,
|
||||
sw_frame_group_id : 7,
|
||||
rxpcu_mpdu_filter_in_category : 2,
|
||||
uint32_t sw_peer_id : 16;
|
||||
ast_index : 16,
|
||||
uint32_t mpdu_sequence_number : 12;
|
||||
rxpcu_mpdu_filter_in_category : 2;
|
||||
uint32_t sw_peer_id : 16,
|
||||
ast_index : 16;
|
||||
uint32_t mpdu_sequence_number : 12,
|
||||
mpdu_retry : 1,
|
||||
encrypted : 1,
|
||||
to_ds : 1,
|
||||
@@ -221,7 +353,20 @@ struct rx_mpdu_start_mon_data {
|
||||
mac_addr_ad2_valid : 1,
|
||||
mac_addr_ad1_valid : 1,
|
||||
mpdu_duration_valid : 1,
|
||||
mpdu_frame_control_valid : 1,
|
||||
mpdu_frame_control_valid : 1;
|
||||
uint32_t reserved_12 : 1,
|
||||
raw_mpdu : 1,
|
||||
bar_frame : 1,
|
||||
ampdu_flag : 1,
|
||||
pre_delim_count : 12,
|
||||
strip_vlan_s_tag_decap : 1,
|
||||
strip_vlan_c_tag_decap : 1,
|
||||
rx_insert_vlan_s_tag_padding : 1,
|
||||
rx_insert_vlan_c_tag_padding : 1,
|
||||
decap_type : 2,
|
||||
decrypt_needed : 1,
|
||||
new_peer_entry : 1,
|
||||
key_id_octet : 8;
|
||||
uint32_t reserved_13 : 1;
|
||||
amsdu_present : 1,
|
||||
directed : 1,
|
||||
@@ -241,52 +386,174 @@ struct rx_mpdu_start_mon_data {
|
||||
mcast_bcast : 1,
|
||||
first_mpdu : 1,
|
||||
mpdu_length : 14,
|
||||
uint32_t mpdu_duration_field : 16;
|
||||
mpdu_frame_control_field : 16,
|
||||
uint32_t mpdu_duration_field : 16,
|
||||
mpdu_frame_control_field : 16;
|
||||
uint32_t mac_addr_ad1_31_0 : 32;
|
||||
uint32_t mac_addr_ad2_15_0 : 16;
|
||||
mac_addr_ad1_47_32 : 16,
|
||||
uint32_t mac_addr_ad2_15_0 : 16,
|
||||
mac_addr_ad1_47_32 : 16;
|
||||
uint32_t mac_addr_ad2_47_16 : 32;
|
||||
uint32_t mac_addr_ad3_31_0 : 32;
|
||||
uint32_t mpdu_sequence_control_field : 16,
|
||||
mac_addr_ad3_47_32 : 16;
|
||||
uint32_t mac_addr_ad4_31_0 : 32;
|
||||
uint32_t mpdu_qos_control_field : 16,
|
||||
mac_addr_ad4_47_32 : 16;
|
||||
};
|
||||
|
||||
struct rx_msdu_end_mon_data {
|
||||
uint32_t phy_ppdu_id : 16;
|
||||
uint32_t phy_ppdu_id : 16,
|
||||
reserved_0 : 7,
|
||||
sw_frame_group_id : 7,
|
||||
rxpcu_mpdu_filter_in_category : 2,
|
||||
uint32_t ip_chksum_fail : 1;
|
||||
tcp_udp_chksum_fail : 1,
|
||||
rxpcu_mpdu_filter_in_category : 2;
|
||||
uint32_t reserved_1a : 2,
|
||||
reported_mpdu_length : 14,
|
||||
ip_hdr_chksum : 16;
|
||||
uint32_t ip_chksum_fail_copy : 1,
|
||||
fr_ds : 1,
|
||||
last_msdu : 1,
|
||||
first_msdu : 1,
|
||||
l3_header_padding : 2,
|
||||
da_is_mcbc : 1,
|
||||
da_is_valid : 1,
|
||||
sa_is_valid : 1,
|
||||
tid : 4,
|
||||
to_ds : 1,
|
||||
da_idx_timeout : 1,
|
||||
sa_idx_timeout : 1,
|
||||
sa_sw_peer_id : 16;
|
||||
uint32_t da_idx_or_sw_peer_id : 16,
|
||||
sa_idx : 16;
|
||||
uint32_t fragment_flag : 1,
|
||||
vlan_stag_stripped : 1,
|
||||
vlan_ctag_stripped : 1,
|
||||
mesh_sta : 2,
|
||||
use_ppe : 1,
|
||||
flow_idx : 20,
|
||||
reo_destination_indication : 5,
|
||||
msdu_drop : 1;
|
||||
uint32_t fse_metadata : 32;
|
||||
uint32_t cce_metadata : 16,
|
||||
tcp_udp_chksum : 16;
|
||||
uint32_t cumulative_ip_length : 16,
|
||||
amsdu_parser_error : 1,
|
||||
wifi_parser_error : 1,
|
||||
cce_match : 1,
|
||||
flow_idx_invalid : 1,
|
||||
flow_idx_timeout : 1,
|
||||
msdu_limit_error : 1,
|
||||
da_idx_timeout : 1,
|
||||
sa_idx_timeout : 1,
|
||||
tcp_udp_chksum : 16,
|
||||
uint32_t reserved_12a : 6;
|
||||
flow_idx : 20,
|
||||
reo_destination_indication : 5,
|
||||
msdu_drop : 1,
|
||||
uint32_t fse_metadata : 32;
|
||||
uint32_t sa_sw_peer_id : 16;
|
||||
cce_metadata : 16,
|
||||
tcp_udp_chksum_fail_copy : 1,
|
||||
fisa_timeout : 1,
|
||||
flow_aggregation_continuation : 1,
|
||||
aggregation_count : 8;
|
||||
uint32_t l4_offset : 8,
|
||||
ipsec_ah : 1,
|
||||
l3_offset : 7,
|
||||
ipsec_esp : 1,
|
||||
stbc : 1,
|
||||
msdu_length : 14;
|
||||
uint32_t ip4_protocol_ip6_next_header : 8,
|
||||
ldpc : 1,
|
||||
mesh_control_present : 1,
|
||||
tcp_udp_header_valid : 1,
|
||||
ip_extn_header_valid : 1,
|
||||
ip_fixed_header_valid : 1,
|
||||
toeplitz_hash_sel : 2,
|
||||
da_is_bcast_mcast : 1,
|
||||
tcp_only_ack : 1,
|
||||
ip_frag : 1,
|
||||
udp_proto : 1,
|
||||
tcp_proto : 1,
|
||||
ipv6_proto : 1,
|
||||
ipv4_proto : 1,
|
||||
decap_format : 2,
|
||||
msdu_number : 8;
|
||||
uint32_t msdu_done_copy : 1,
|
||||
mimo_ss_bitmap : 7,
|
||||
reception_type : 3,
|
||||
receive_bandwidth : 3,
|
||||
rate_mcs : 4,
|
||||
sgi : 2,
|
||||
pkt_type : 4,
|
||||
user_rssi : 8;
|
||||
uint32_t flow_id_toeplitz : 32;
|
||||
};
|
||||
|
||||
struct rx_ppdu_end_user_mon_data {
|
||||
uint32_t fw2rxdma_pmac1_buf_source_used : 1,
|
||||
sw2rxdma_exception_buf_source_used: 1,
|
||||
sw2rxdma1_buf_source_used : 1,
|
||||
fw2rxdma_pmac0_buf_source_used : 1,
|
||||
sw2rxdma0_buf_source_used : 1,
|
||||
mpdu_cnt_fcs_err : 11,
|
||||
sw_peer_id : 16;
|
||||
uint32_t reserved_3b : 5,
|
||||
rxdma2reo_remote1_ring_used : 1,
|
||||
rxdma2reo_remote0_ring_used : 1,
|
||||
ht_control_field_pkt_type : 4,
|
||||
rxdma_release_ring_used : 1,
|
||||
rxdma2sw_ring_used : 1,
|
||||
rxdma2fw_pmac0_ring_used : 1,
|
||||
rxdma2reo_ring_used : 1,
|
||||
rxdma2fw_pmac1_ring_used : 1,
|
||||
ht_control_info_null_valid : 1,
|
||||
data_sequence_control_info_valid : 1,
|
||||
ht_control_info_valid : 1,
|
||||
qos_control_info_valid : 1,
|
||||
frame_control_info_valid : 1,
|
||||
mpdu_cnt_fcs_ok : 11;
|
||||
uint32_t frame_control_field : 16,
|
||||
ast_index : 16;
|
||||
uint32_t qos_control_field : 16,
|
||||
first_data_seq_ctrl : 16;
|
||||
uint32_t ht_control_field : 32;
|
||||
uint32_t fcs_ok_bitmap_31_0 : 32;
|
||||
uint32_t fcs_ok_bitmap_63_32 : 32;
|
||||
uint32_t tcp_msdu_count : 16,
|
||||
udp_msdu_count : 16;
|
||||
uint32_t tcp_ack_msdu_count : 16,
|
||||
other_msdu_count : 16;
|
||||
uint32_t sw_response_reference_ptr : 32;
|
||||
uint32_t received_qos_data_tid_eosp_bitmap : 16,
|
||||
received_qos_data_tid_bitmap : 16;
|
||||
uint32_t qosctrl_15_8_tid3 : 8,
|
||||
qosctrl_15_8_tid2 : 8,
|
||||
qosctrl_15_8_tid1 : 8,
|
||||
qosctrl_15_8_tid0 : 8;
|
||||
uint32_t qosctrl_15_8_tid15 : 8,
|
||||
qosctrl_15_8_tid14 : 8,
|
||||
qosctrl_15_8_tid13 : 8,
|
||||
qosctrl_15_8_tid12 : 8;
|
||||
uint32_t ampdu_delim_ok_count_6_0 : 7,
|
||||
mpdu_ok_byte_count : 25;
|
||||
uint32_t ampdu_delim_ok_count_13_7 : 7,
|
||||
ampdu_delim_err_count : 25;
|
||||
uint32_t ampdu_delim_ok_count_20_14 : 7,
|
||||
mpdu_err_byte_count : 25;
|
||||
uint32_t sw_response_reference_ptr_ext : 32;
|
||||
uint32_t reserved_23a : 3,
|
||||
retried_mpdu_count : 11,
|
||||
frame_control_field_null : 16,
|
||||
frame_control_info_null_valid : 1,
|
||||
corrupted_due_to_fifo_delay : 1;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct rx_mpdu_start_mon_data_t {
|
||||
struct rx_mpdu_start_mon_data rx_mpdu_info_details;
|
||||
};
|
||||
|
||||
struct rx_msdu_end_mon_data_t {
|
||||
struct rx_msdu_end_mon_data rx_mpdu_info_details;
|
||||
};
|
||||
/* TLV struct for word based Tlv */
|
||||
typedef struct rx_mpdu_start_mon_data hal_rx_mon_mpdu_start_t;
|
||||
typedef struct rx_mpdu_start_mon_data_t hal_rx_mon_mpdu_start_t;
|
||||
typedef struct rx_msdu_end_mon_data hal_rx_mon_msdu_end_t;
|
||||
typedef struct rx_ppdu_end_user_mon_data hal_rx_mon_ppdu_end_user_t;
|
||||
|
||||
#else
|
||||
|
||||
typedef struct rx_mpdu_start hal_rx_mon_mpdu_start_t;
|
||||
typedef struct rx_msdu_end hal_rx_mon_msdu_end_t;
|
||||
typedef struct rx_ppdu_end_user_stats hal_rx_mon_ppdu_end_user_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -479,45 +746,37 @@ hal_be_get_mon_dest_status(hal_soc_handle_t hal_soc,
|
||||
defined(RX_PPDU_END_USER_STATS_SW_RESPONSE_REFERENCE_PTR_EXT_OFFSET)
|
||||
|
||||
static inline void
|
||||
hal_rx_handle_mu_ul_info(void *rx_tlv,
|
||||
hal_rx_handle_mu_ul_info(hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user,
|
||||
struct mon_rx_user_status *mon_rx_user_status)
|
||||
{
|
||||
mon_rx_user_status->mu_ul_user_v0_word0 =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
SW_RESPONSE_REFERENCE_PTR);
|
||||
rx_ppdu_end_user->sw_response_reference_ptr;
|
||||
|
||||
mon_rx_user_status->mu_ul_user_v0_word1 =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
SW_RESPONSE_REFERENCE_PTR_EXT);
|
||||
rx_ppdu_end_user->sw_response_reference_ptr_ext;
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
hal_rx_handle_mu_ul_info(void *rx_tlv,
|
||||
hal_rx_handle_mu_ul_info(hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user,
|
||||
struct mon_rx_user_status *mon_rx_user_status)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void
|
||||
hal_rx_populate_byte_count(void *rx_tlv, void *ppduinfo,
|
||||
hal_rx_populate_byte_count(hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user,
|
||||
void *ppduinfo,
|
||||
struct mon_rx_user_status *mon_rx_user_status)
|
||||
{
|
||||
uint32_t mpdu_ok_byte_count;
|
||||
uint32_t mpdu_err_byte_count;
|
||||
|
||||
mpdu_ok_byte_count = HAL_RX_GET_64(rx_tlv,
|
||||
RX_PPDU_END_USER_STATS,
|
||||
MPDU_OK_BYTE_COUNT);
|
||||
mpdu_err_byte_count = HAL_RX_GET_64(rx_tlv,
|
||||
RX_PPDU_END_USER_STATS,
|
||||
MPDU_ERR_BYTE_COUNT);
|
||||
|
||||
mon_rx_user_status->mpdu_ok_byte_count = mpdu_ok_byte_count;
|
||||
mon_rx_user_status->mpdu_err_byte_count = mpdu_err_byte_count;
|
||||
mon_rx_user_status->mpdu_ok_byte_count =
|
||||
rx_ppdu_end_user->mpdu_ok_byte_count;
|
||||
mon_rx_user_status->mpdu_err_byte_count =
|
||||
rx_ppdu_end_user->mpdu_err_byte_count;
|
||||
}
|
||||
|
||||
static inline void
|
||||
hal_rx_populate_mu_user_info(void *rx_tlv, void *ppduinfo, uint32_t user_id,
|
||||
hal_rx_populate_mu_user_info(hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user,
|
||||
void *ppduinfo, uint32_t user_id,
|
||||
struct mon_rx_user_status *mon_rx_user_status)
|
||||
{
|
||||
struct mon_rx_info *mon_rx_info;
|
||||
@@ -576,7 +835,8 @@ hal_rx_populate_mu_user_info(void *rx_tlv, void *ppduinfo, uint32_t user_id,
|
||||
sizeof(ppdu_info->com_info.mpdu_fcs_ok_bitmap[0]));
|
||||
mon_rx_user_status->retry_mpdu =
|
||||
ppdu_info->rx_status.mpdu_retry_cnt;
|
||||
hal_rx_populate_byte_count(rx_tlv, ppdu_info, mon_rx_user_status);
|
||||
hal_rx_populate_byte_count(rx_ppdu_end_user, ppdu_info,
|
||||
mon_rx_user_status);
|
||||
}
|
||||
|
||||
#define HAL_RX_UPDATE_RSSI_PER_CHAIN_BW(chain, \
|
||||
@@ -613,18 +873,15 @@ hal_rx_update_rssi_chain(struct hal_rx_ppdu_info *ppdu_info,
|
||||
|
||||
#ifdef WLAN_TX_PKT_CAPTURE_ENH
|
||||
static inline void
|
||||
hal_get_qos_control(void *rx_tlv,
|
||||
hal_get_qos_control(hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user,
|
||||
struct hal_rx_ppdu_info *ppdu_info)
|
||||
{
|
||||
ppdu_info->rx_info.qos_control_info_valid =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
QOS_CONTROL_INFO_VALID);
|
||||
rx_ppdu_end_user->qos_control_info_valid;
|
||||
|
||||
if (ppdu_info->rx_info.qos_control_info_valid)
|
||||
ppdu_info->rx_info.qos_control =
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
RX_PPDU_END_USER_STATS,
|
||||
QOS_CONTROL_FIELD);
|
||||
rx_ppdu_end_user->qos_control_field;
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -649,7 +906,7 @@ hal_get_mac_addr1(hal_rx_mon_mpdu_start_t *rx_mpdu_start,
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
hal_get_qos_control(void *rx_tlv,
|
||||
hal_get_qos_control(hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user,
|
||||
struct hal_rx_ppdu_info *ppdu_info)
|
||||
{
|
||||
}
|
||||
@@ -1876,11 +2133,10 @@ hal_rx_parse_receive_user_info(struct hal_soc *hal_soc, uint8_t *tlv,
|
||||
#ifdef QCA_MONITOR_2_0_SUPPORT
|
||||
static inline void
|
||||
hal_rx_status_get_mpdu_retry_cnt(struct hal_rx_ppdu_info *ppdu_info,
|
||||
void *rx_tlv)
|
||||
hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user)
|
||||
{
|
||||
ppdu_info->rx_status.mpdu_retry_cnt =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
RETRIED_MPDU_COUNT);
|
||||
rx_ppdu_end_user->retried_mpdu_count;
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -1912,7 +2168,7 @@ hal_rx_update_ppdu_drop_cnt(uint8_t *rx_tlv,
|
||||
#else
|
||||
static inline void
|
||||
hal_rx_status_get_mpdu_retry_cnt(struct hal_rx_ppdu_info *ppdu_info,
|
||||
void *rx_tlv)
|
||||
hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user)
|
||||
{
|
||||
ppdu_info->rx_status.mpdu_retry_cnt = 0;
|
||||
}
|
||||
@@ -2066,15 +2322,14 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
*/
|
||||
case WIFIRX_PPDU_END_USER_STATS_E:
|
||||
{
|
||||
hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user = rx_tlv;
|
||||
unsigned long tid = 0;
|
||||
uint16_t seq = 0;
|
||||
|
||||
ppdu_info->rx_status.ast_index =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
AST_INDEX);
|
||||
rx_ppdu_end_user->ast_index;
|
||||
|
||||
tid = HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
RECEIVED_QOS_DATA_TID_BITMAP);
|
||||
tid = rx_ppdu_end_user->received_qos_data_tid_bitmap;
|
||||
ppdu_info->rx_status.tid = qdf_find_first_bit(&tid,
|
||||
sizeof(tid) * 8);
|
||||
|
||||
@@ -2082,45 +2337,39 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
ppdu_info->rx_status.tid = HAL_TID_INVALID;
|
||||
|
||||
ppdu_info->rx_status.tcp_msdu_count =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
TCP_MSDU_COUNT) +
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
TCP_ACK_MSDU_COUNT);
|
||||
rx_ppdu_end_user->tcp_msdu_count +
|
||||
rx_ppdu_end_user->tcp_ack_msdu_count;
|
||||
|
||||
ppdu_info->rx_status.udp_msdu_count =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
UDP_MSDU_COUNT);
|
||||
rx_ppdu_end_user->udp_msdu_count;
|
||||
|
||||
ppdu_info->rx_status.other_msdu_count =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
OTHER_MSDU_COUNT);
|
||||
hal_rx_status_get_mpdu_retry_cnt(ppdu_info, rx_tlv);
|
||||
rx_ppdu_end_user->other_msdu_count;
|
||||
|
||||
hal_rx_status_get_mpdu_retry_cnt(ppdu_info, rx_ppdu_end_user);
|
||||
|
||||
if (ppdu_info->sw_frame_group_id
|
||||
!= HAL_MPDU_SW_FRAME_GROUP_NULL_DATA) {
|
||||
ppdu_info->rx_status.frame_control_info_valid =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
FRAME_CONTROL_INFO_VALID);
|
||||
rx_ppdu_end_user->frame_control_info_valid;
|
||||
|
||||
if (ppdu_info->rx_status.frame_control_info_valid)
|
||||
ppdu_info->rx_status.frame_control =
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
RX_PPDU_END_USER_STATS,
|
||||
FRAME_CONTROL_FIELD);
|
||||
rx_ppdu_end_user->frame_control_field;
|
||||
|
||||
hal_get_qos_control(rx_tlv, ppdu_info);
|
||||
hal_get_qos_control(rx_ppdu_end_user, ppdu_info);
|
||||
}
|
||||
|
||||
ppdu_info->rx_status.data_sequence_control_info_valid =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
DATA_SEQUENCE_CONTROL_INFO_VALID);
|
||||
rx_ppdu_end_user->data_sequence_control_info_valid;
|
||||
|
||||
seq = rx_ppdu_end_user->first_data_seq_ctrl;
|
||||
|
||||
seq = HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
FIRST_DATA_SEQ_CTRL);
|
||||
if (ppdu_info->rx_status.data_sequence_control_info_valid)
|
||||
ppdu_info->rx_status.first_data_seq_ctrl = seq;
|
||||
|
||||
ppdu_info->rx_status.preamble_type =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
HT_CONTROL_FIELD_PKT_TYPE);
|
||||
rx_ppdu_end_user->ht_control_field_pkt_type;
|
||||
|
||||
ppdu_info->end_user_stats_cnt++;
|
||||
|
||||
@@ -2140,11 +2389,9 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
}
|
||||
|
||||
ppdu_info->com_info.mpdu_cnt_fcs_ok =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
MPDU_CNT_FCS_OK);
|
||||
rx_ppdu_end_user->mpdu_cnt_fcs_ok;
|
||||
ppdu_info->com_info.mpdu_cnt_fcs_err =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
MPDU_CNT_FCS_ERR);
|
||||
rx_ppdu_end_user->mpdu_cnt_fcs_err;
|
||||
if ((ppdu_info->com_info.mpdu_cnt_fcs_ok |
|
||||
ppdu_info->com_info.mpdu_cnt_fcs_err) > 1)
|
||||
ppdu_info->rx_status.rs_flags |= IEEE80211_AMPDU_FLAG;
|
||||
@@ -2153,22 +2400,21 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
(~IEEE80211_AMPDU_FLAG);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[0] =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
FCS_OK_BITMAP_31_0);
|
||||
rx_ppdu_end_user->fcs_ok_bitmap_31_0;
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[1] =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
||||
FCS_OK_BITMAP_63_32);
|
||||
rx_ppdu_end_user->fcs_ok_bitmap_63_32;
|
||||
|
||||
if (user_id < HAL_MAX_UL_MU_USERS) {
|
||||
mon_rx_user_status =
|
||||
&ppdu_info->rx_user_status[user_id];
|
||||
|
||||
hal_rx_handle_mu_ul_info(rx_tlv, mon_rx_user_status);
|
||||
hal_rx_handle_mu_ul_info(rx_ppdu_end_user,
|
||||
mon_rx_user_status);
|
||||
|
||||
ppdu_info->com_info.num_users++;
|
||||
|
||||
hal_rx_populate_mu_user_info(rx_tlv, ppdu_info,
|
||||
hal_rx_populate_mu_user_info(rx_ppdu_end_user, ppdu_info,
|
||||
user_id,
|
||||
mon_rx_user_status);
|
||||
}
|
||||
|
Reference in New Issue
Block a user