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)
|
if (!msg_word || !tlv_filter)
|
||||||
return;
|
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 word mask is zero, FW will set the default values */
|
||||||
if (!(tlv_filter->rx_mpdu_start_wmask > 0 &&
|
if (!(tlv_filter->rx_mpdu_start_wmask > 0 &&
|
||||||
tlv_filter->rx_msdu_end_wmask > 0)) {
|
tlv_filter->rx_msdu_end_wmask > 0)) {
|
||||||
msg_word += 4;
|
return;
|
||||||
*msg_word = 0;
|
|
||||||
goto config_mon;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HTT_RX_RING_SELECTION_CFG_WORD_MASK_COMPACTION_ENABLE_SET(*msg_word, 1);
|
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(
|
HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_WORD_MASK_SET(
|
||||||
*msg_word,
|
*msg_word,
|
||||||
tlv_filter->rx_msdu_end_wmask);
|
tlv_filter->rx_msdu_end_wmask);
|
||||||
config_mon:
|
|
||||||
msg_word--;
|
|
||||||
dp_mon_rx_wmask_subscribe(soc, msg_word, tlv_filter);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void dp_rx_word_mask_subscribe_be(struct dp_soc *soc,
|
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) 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
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* 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,
|
msg_word,
|
||||||
(void *)htt_tlv_filter);
|
(void *)htt_tlv_filter);
|
||||||
|
|
||||||
|
dp_mon_rx_wmask_subscribe(soc->dp_soc, msg_word, htt_tlv_filter);
|
||||||
|
|
||||||
if (mon_drop_th > 0)
|
if (mon_drop_th > 0)
|
||||||
HTT_RX_RING_SELECTION_CFG_RX_DROP_THRESHOLD_SET(*msg_word,
|
HTT_RX_RING_SELECTION_CFG_RX_DROP_THRESHOLD_SET(*msg_word,
|
||||||
mon_drop_th);
|
mon_drop_th);
|
||||||
|
|
||||||
dp_mon_rx_enable_mpdu_logging(soc->dp_soc, msg_word, htt_tlv_filter);
|
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);
|
dp_mon_rx_enable_phy_errors(msg_word, htt_tlv_filter);
|
||||||
|
|
||||||
/* word 14*/
|
/* word 14*/
|
||||||
msg_word += 3;
|
msg_word += 3;
|
||||||
|
|
||||||
/* word 15*/
|
/* word 15*/
|
||||||
msg_word++;
|
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
|
#ifdef FW_SUPPORT_NOT_YET
|
||||||
/* word 17*/
|
/* word 20 and 21*/
|
||||||
msg_word += 3;
|
msg_word += 4;
|
||||||
*msg_word = 0;
|
*msg_word = 0;
|
||||||
|
|
||||||
dp_mon_rx_enable_fpmo(soc->dp_soc, msg_word, htt_tlv_filter);
|
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) 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
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* 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;
|
||||||
u_int32_t phy_err_mask_cont;
|
u_int32_t phy_err_mask_cont;
|
||||||
#endif
|
#endif
|
||||||
#if defined(QCA_MONITOR_2_0_SUPPORT) || defined(CONFIG_WORD_BASED_TLV)
|
#if defined(QCA_MONITOR_2_0_SUPPORT) || defined(CONFIG_WORD_BASED_TLV) || \
|
||||||
uint16_t rx_mpdu_start_wmask;
|
defined(CONFIG_MON_WORD_BASED_TLV)
|
||||||
|
uint32_t rx_mpdu_start_wmask;
|
||||||
uint16_t rx_mpdu_end_wmask;
|
uint16_t rx_mpdu_end_wmask;
|
||||||
uint32_t rx_msdu_end_wmask;
|
uint32_t rx_msdu_end_wmask;
|
||||||
uint16_t rx_pkt_tlv_offset;
|
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
|
#ifdef WLAN_TELEMETRY_STATS_SUPPORT
|
||||||
static inline
|
static inline
|
||||||
void dp_monitor_peer_telemetry_stats(struct dp_peer *peer,
|
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_packet_length_set = NULL;
|
||||||
mon_ops->rx_mon_enable = NULL;
|
mon_ops->rx_mon_enable = NULL;
|
||||||
mon_ops->rx_wmask_subscribe = 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_mpdu_logging = NULL;
|
||||||
mon_ops->rx_enable_fpmo = NULL;
|
mon_ops->rx_enable_fpmo = NULL;
|
||||||
mon_ops->mon_neighbour_peers_detach = dp_neighbour_peers_detach;
|
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_packet_length_set = dp_rx_mon_packet_length_set;
|
||||||
mon_ops->rx_mon_enable = dp_rx_mon_enable_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_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->rx_enable_mpdu_logging = dp_rx_mon_enable_mpdu_logging;
|
||||||
mon_ops->mon_neighbour_peers_detach = NULL;
|
mon_ops->mon_neighbour_peers_detach = NULL;
|
||||||
mon_ops->mon_vdev_set_monitor_mode_buf_rings =
|
mon_ops->mon_vdev_set_monitor_mode_buf_rings =
|
||||||
|
@@ -179,22 +179,67 @@ void
|
|||||||
dp_rx_mon_word_mask_subscribe(uint32_t *msg_word,
|
dp_rx_mon_word_mask_subscribe(uint32_t *msg_word,
|
||||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
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 */
|
/* word 15 */
|
||||||
msg_word++;
|
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 */
|
/* word 16 */
|
||||||
msg_word++;
|
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;
|
*msg_word = 0;
|
||||||
if (tlv_filter->rx_pkt_tlv_offset) {
|
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_ENABLE_RX_PKT_TLV_OFFSET_SET(*msg_word, 1);
|
||||||
HTT_RX_RING_SELECTION_CFG_RX_PKT_TLV_OFFSET_SET(*msg_word,
|
HTT_RX_RING_SELECTION_CFG_RX_PKT_TLV_OFFSET_SET(*msg_word,
|
||||||
tlv_filter->rx_pkt_tlv_offset);
|
tlv_filter->rx_pkt_tlv_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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.ctrl_mpdu_log = DP_MON_MSDU_LOGGING;
|
||||||
filter->tlv_filter.data_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) {
|
if (mon_pdev->mon_filter_mode & MON_FILTER_OTHER) {
|
||||||
filter->tlv_filter.enable_mo = 1;
|
filter->tlv_filter.enable_mo = 1;
|
||||||
filter->tlv_filter.mo_mgmt_filter = FILTER_MGMT_ALL;
|
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 =
|
tlv_filter->data_mpdu_log =
|
||||||
src_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
|
* set hdr tlv length
|
||||||
*/
|
*/
|
||||||
|
@@ -76,6 +76,15 @@ void
|
|||||||
dp_rx_mon_word_mask_subscribe(uint32_t *msg_word,
|
dp_rx_mon_word_mask_subscribe(uint32_t *msg_word,
|
||||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
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
|
* dp_rx_mon_enable_mpdu_logging() - Setup rx monitor per packet mpdu logging
|
||||||
* @msg_word: msg word
|
* @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_hdr_length_set = NULL;
|
||||||
mon_ops->rx_packet_length_set = NULL;
|
mon_ops->rx_packet_length_set = NULL;
|
||||||
mon_ops->rx_wmask_subscribe = 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_mpdu_logging = NULL;
|
||||||
mon_ops->rx_enable_fpmo = NULL;
|
mon_ops->rx_enable_fpmo = NULL;
|
||||||
mon_ops->mon_neighbour_peers_detach = NULL;
|
mon_ops->mon_neighbour_peers_detach = NULL;
|
||||||
|
@@ -793,6 +793,8 @@ struct dp_mon_ops {
|
|||||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||||
void (*rx_wmask_subscribe)(uint32_t *msg_word,
|
void (*rx_wmask_subscribe)(uint32_t *msg_word,
|
||||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
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,
|
void (*rx_enable_mpdu_logging)(uint32_t *msg_word,
|
||||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||||
void (*rx_enable_fpmo)(uint32_t *msg_word,
|
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
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_MON_WORD_BASED_TLV)
|
||||||
static inline void
|
static inline void
|
||||||
dp_mon_rx_wmask_subscribe(struct dp_soc *soc, uint32_t *msg_word,
|
dp_mon_rx_wmask_subscribe(struct dp_soc *soc, uint32_t *msg_word,
|
||||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
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);
|
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
|
static inline void
|
||||||
dp_mon_rx_enable_mpdu_logging(struct dp_soc *soc, uint32_t *msg_word,
|
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
|
PHYRX_RSSI_LEGACY_PREAMBLE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
|
||||||
#endif
|
#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
|
#ifdef CONFIG_MON_WORD_BASED_TLV
|
||||||
#ifndef BIG_ENDIAN_HOST
|
#ifndef BIG_ENDIAN_HOST
|
||||||
struct rx_mpdu_start_mon_data {
|
struct rx_mpdu_start_mon_data {
|
||||||
|
uint32_t peer_meta_data : 32;
|
||||||
uint32_t rxpcu_mpdu_filter_in_category : 2,
|
uint32_t rxpcu_mpdu_filter_in_category : 2,
|
||||||
sw_frame_group_id : 7,
|
sw_frame_group_id : 7,
|
||||||
ndp_frame : 1,
|
ndp_frame : 1,
|
||||||
@@ -136,6 +141,19 @@ struct rx_mpdu_start_mon_data {
|
|||||||
encrypted : 1,
|
encrypted : 1,
|
||||||
mpdu_retry : 1,
|
mpdu_retry : 1,
|
||||||
mpdu_sequence_number : 12;
|
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,
|
uint32_t mpdu_length : 14,
|
||||||
first_mpdu : 1,
|
first_mpdu : 1,
|
||||||
mcast_bcast : 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_31_0 : 32;
|
||||||
uint32_t mac_addr_ad1_47_32 : 16,
|
uint32_t mac_addr_ad1_47_32 : 16,
|
||||||
mac_addr_ad2_15_0 : 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 {
|
struct rx_msdu_end_mon_data {
|
||||||
@@ -167,33 +192,140 @@ struct rx_msdu_end_mon_data {
|
|||||||
sw_frame_group_id : 7,
|
sw_frame_group_id : 7,
|
||||||
reserved_0 : 7,
|
reserved_0 : 7,
|
||||||
phy_ppdu_id : 16;
|
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,
|
sa_idx_timeout : 1,
|
||||||
da_idx_timeout : 1,
|
da_idx_timeout : 1,
|
||||||
msdu_limit_error : 1,
|
to_ds : 1,
|
||||||
flow_idx_timeout : 1,
|
tid : 4,
|
||||||
flow_idx_invalid : 1,
|
|
||||||
wifi_parser_error : 1,
|
|
||||||
amsdu_parser_error : 1,
|
|
||||||
sa_is_valid : 1,
|
sa_is_valid : 1,
|
||||||
da_is_valid : 1,
|
da_is_valid : 1,
|
||||||
da_is_mcbc : 1,
|
da_is_mcbc : 1,
|
||||||
l3_header_padding : 2,
|
l3_header_padding : 2,
|
||||||
first_msdu : 1,
|
first_msdu : 1,
|
||||||
last_msdu : 1,
|
last_msdu : 1,
|
||||||
tcp_udp_chksum_fail : 1,
|
fr_ds : 1,
|
||||||
ip_chksum_fail : 1;
|
ip_chksum_fail_copy : 1;
|
||||||
|
uint32_t sa_idx : 16,
|
||||||
|
da_idx_or_sw_peer_id : 16;
|
||||||
uint32_t msdu_drop : 1,
|
uint32_t msdu_drop : 1,
|
||||||
reo_destination_indication : 5,
|
reo_destination_indication : 5,
|
||||||
flow_idx : 20,
|
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 fse_metadata : 32;
|
||||||
uint32_t cce_metadata : 16,
|
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
|
#else
|
||||||
struct rx_mpdu_start_mon_data {
|
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,
|
reserved_0a : 2,
|
||||||
ast_based_lookup_valid : 1,
|
ast_based_lookup_valid : 1,
|
||||||
protocol_version_err : 1,
|
protocol_version_err : 1,
|
||||||
@@ -201,10 +333,10 @@ struct rx_mpdu_start_mon_data {
|
|||||||
phy_err : 1,
|
phy_err : 1,
|
||||||
ndp_frame : 1,
|
ndp_frame : 1,
|
||||||
sw_frame_group_id : 7,
|
sw_frame_group_id : 7,
|
||||||
rxpcu_mpdu_filter_in_category : 2,
|
rxpcu_mpdu_filter_in_category : 2;
|
||||||
uint32_t sw_peer_id : 16;
|
uint32_t sw_peer_id : 16,
|
||||||
ast_index : 16,
|
ast_index : 16;
|
||||||
uint32_t mpdu_sequence_number : 12;
|
uint32_t mpdu_sequence_number : 12,
|
||||||
mpdu_retry : 1,
|
mpdu_retry : 1,
|
||||||
encrypted : 1,
|
encrypted : 1,
|
||||||
to_ds : 1,
|
to_ds : 1,
|
||||||
@@ -221,7 +353,20 @@ struct rx_mpdu_start_mon_data {
|
|||||||
mac_addr_ad2_valid : 1,
|
mac_addr_ad2_valid : 1,
|
||||||
mac_addr_ad1_valid : 1,
|
mac_addr_ad1_valid : 1,
|
||||||
mpdu_duration_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;
|
uint32_t reserved_13 : 1;
|
||||||
amsdu_present : 1,
|
amsdu_present : 1,
|
||||||
directed : 1,
|
directed : 1,
|
||||||
@@ -241,52 +386,174 @@ struct rx_mpdu_start_mon_data {
|
|||||||
mcast_bcast : 1,
|
mcast_bcast : 1,
|
||||||
first_mpdu : 1,
|
first_mpdu : 1,
|
||||||
mpdu_length : 14,
|
mpdu_length : 14,
|
||||||
uint32_t mpdu_duration_field : 16;
|
uint32_t mpdu_duration_field : 16,
|
||||||
mpdu_frame_control_field : 16,
|
mpdu_frame_control_field : 16;
|
||||||
uint32_t mac_addr_ad1_31_0 : 32;
|
uint32_t mac_addr_ad1_31_0 : 32;
|
||||||
uint32_t mac_addr_ad2_15_0 : 16;
|
uint32_t mac_addr_ad2_15_0 : 16,
|
||||||
mac_addr_ad1_47_32 : 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 {
|
struct rx_msdu_end_mon_data {
|
||||||
uint32_t phy_ppdu_id : 16;
|
uint32_t phy_ppdu_id : 16,
|
||||||
reserved_0 : 7,
|
reserved_0 : 7,
|
||||||
sw_frame_group_id : 7,
|
sw_frame_group_id : 7,
|
||||||
rxpcu_mpdu_filter_in_category : 2,
|
rxpcu_mpdu_filter_in_category : 2;
|
||||||
uint32_t ip_chksum_fail : 1;
|
uint32_t reserved_1a : 2,
|
||||||
tcp_udp_chksum_fail : 1,
|
reported_mpdu_length : 14,
|
||||||
|
ip_hdr_chksum : 16;
|
||||||
|
uint32_t ip_chksum_fail_copy : 1,
|
||||||
|
fr_ds : 1,
|
||||||
last_msdu : 1,
|
last_msdu : 1,
|
||||||
first_msdu : 1,
|
first_msdu : 1,
|
||||||
l3_header_padding : 2,
|
l3_header_padding : 2,
|
||||||
da_is_mcbc : 1,
|
da_is_mcbc : 1,
|
||||||
da_is_valid : 1,
|
da_is_valid : 1,
|
||||||
sa_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,
|
amsdu_parser_error : 1,
|
||||||
wifi_parser_error : 1,
|
cce_match : 1,
|
||||||
flow_idx_invalid : 1,
|
flow_idx_invalid : 1,
|
||||||
flow_idx_timeout : 1,
|
flow_idx_timeout : 1,
|
||||||
msdu_limit_error : 1,
|
msdu_limit_error : 1,
|
||||||
da_idx_timeout : 1,
|
tcp_udp_chksum_fail_copy : 1,
|
||||||
sa_idx_timeout : 1,
|
fisa_timeout : 1,
|
||||||
tcp_udp_chksum : 16,
|
flow_aggregation_continuation : 1,
|
||||||
uint32_t reserved_12a : 6;
|
aggregation_count : 8;
|
||||||
flow_idx : 20,
|
uint32_t l4_offset : 8,
|
||||||
reo_destination_indication : 5,
|
ipsec_ah : 1,
|
||||||
msdu_drop : 1,
|
l3_offset : 7,
|
||||||
uint32_t fse_metadata : 32;
|
ipsec_esp : 1,
|
||||||
uint32_t sa_sw_peer_id : 16;
|
stbc : 1,
|
||||||
cce_metadata : 16,
|
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
|
#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 */
|
/* 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_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
|
#else
|
||||||
|
|
||||||
typedef struct rx_mpdu_start hal_rx_mon_mpdu_start_t;
|
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_msdu_end hal_rx_mon_msdu_end_t;
|
||||||
|
typedef struct rx_ppdu_end_user_stats hal_rx_mon_ppdu_end_user_t;
|
||||||
#endif
|
#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)
|
defined(RX_PPDU_END_USER_STATS_SW_RESPONSE_REFERENCE_PTR_EXT_OFFSET)
|
||||||
|
|
||||||
static inline void
|
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)
|
struct mon_rx_user_status *mon_rx_user_status)
|
||||||
{
|
{
|
||||||
mon_rx_user_status->mu_ul_user_v0_word0 =
|
mon_rx_user_status->mu_ul_user_v0_word0 =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->sw_response_reference_ptr;
|
||||||
SW_RESPONSE_REFERENCE_PTR);
|
|
||||||
|
|
||||||
mon_rx_user_status->mu_ul_user_v0_word1 =
|
mon_rx_user_status->mu_ul_user_v0_word1 =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->sw_response_reference_ptr_ext;
|
||||||
SW_RESPONSE_REFERENCE_PTR_EXT);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void
|
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)
|
struct mon_rx_user_status *mon_rx_user_status)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline void
|
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)
|
struct mon_rx_user_status *mon_rx_user_status)
|
||||||
{
|
{
|
||||||
uint32_t mpdu_ok_byte_count;
|
mon_rx_user_status->mpdu_ok_byte_count =
|
||||||
uint32_t mpdu_err_byte_count;
|
rx_ppdu_end_user->mpdu_ok_byte_count;
|
||||||
|
mon_rx_user_status->mpdu_err_byte_count =
|
||||||
mpdu_ok_byte_count = HAL_RX_GET_64(rx_tlv,
|
rx_ppdu_end_user->mpdu_err_byte_count;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
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_user_status *mon_rx_user_status)
|
||||||
{
|
{
|
||||||
struct mon_rx_info *mon_rx_info;
|
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]));
|
sizeof(ppdu_info->com_info.mpdu_fcs_ok_bitmap[0]));
|
||||||
mon_rx_user_status->retry_mpdu =
|
mon_rx_user_status->retry_mpdu =
|
||||||
ppdu_info->rx_status.mpdu_retry_cnt;
|
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, \
|
#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
|
#ifdef WLAN_TX_PKT_CAPTURE_ENH
|
||||||
static inline void
|
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)
|
struct hal_rx_ppdu_info *ppdu_info)
|
||||||
{
|
{
|
||||||
ppdu_info->rx_info.qos_control_info_valid =
|
ppdu_info->rx_info.qos_control_info_valid =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->qos_control_info_valid;
|
||||||
QOS_CONTROL_INFO_VALID);
|
|
||||||
|
|
||||||
if (ppdu_info->rx_info.qos_control_info_valid)
|
if (ppdu_info->rx_info.qos_control_info_valid)
|
||||||
ppdu_info->rx_info.qos_control =
|
ppdu_info->rx_info.qos_control =
|
||||||
HAL_RX_GET_64(rx_tlv,
|
rx_ppdu_end_user->qos_control_field;
|
||||||
RX_PPDU_END_USER_STATS,
|
|
||||||
QOS_CONTROL_FIELD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
@@ -649,7 +906,7 @@ hal_get_mac_addr1(hal_rx_mon_mpdu_start_t *rx_mpdu_start,
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void
|
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)
|
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
|
#ifdef QCA_MONITOR_2_0_SUPPORT
|
||||||
static inline void
|
static inline void
|
||||||
hal_rx_status_get_mpdu_retry_cnt(struct hal_rx_ppdu_info *ppdu_info,
|
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 =
|
ppdu_info->rx_status.mpdu_retry_cnt =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->retried_mpdu_count;
|
||||||
RETRIED_MPDU_COUNT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
@@ -1912,7 +2168,7 @@ hal_rx_update_ppdu_drop_cnt(uint8_t *rx_tlv,
|
|||||||
#else
|
#else
|
||||||
static inline void
|
static inline void
|
||||||
hal_rx_status_get_mpdu_retry_cnt(struct hal_rx_ppdu_info *ppdu_info,
|
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;
|
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:
|
case WIFIRX_PPDU_END_USER_STATS_E:
|
||||||
{
|
{
|
||||||
|
hal_rx_mon_ppdu_end_user_t *rx_ppdu_end_user = rx_tlv;
|
||||||
unsigned long tid = 0;
|
unsigned long tid = 0;
|
||||||
uint16_t seq = 0;
|
uint16_t seq = 0;
|
||||||
|
|
||||||
ppdu_info->rx_status.ast_index =
|
ppdu_info->rx_status.ast_index =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->ast_index;
|
||||||
AST_INDEX);
|
|
||||||
|
|
||||||
tid = HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
tid = rx_ppdu_end_user->received_qos_data_tid_bitmap;
|
||||||
RECEIVED_QOS_DATA_TID_BITMAP);
|
|
||||||
ppdu_info->rx_status.tid = qdf_find_first_bit(&tid,
|
ppdu_info->rx_status.tid = qdf_find_first_bit(&tid,
|
||||||
sizeof(tid) * 8);
|
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.tid = HAL_TID_INVALID;
|
||||||
|
|
||||||
ppdu_info->rx_status.tcp_msdu_count =
|
ppdu_info->rx_status.tcp_msdu_count =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->tcp_msdu_count +
|
||||||
TCP_MSDU_COUNT) +
|
rx_ppdu_end_user->tcp_ack_msdu_count;
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
|
||||||
TCP_ACK_MSDU_COUNT);
|
|
||||||
ppdu_info->rx_status.udp_msdu_count =
|
ppdu_info->rx_status.udp_msdu_count =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->udp_msdu_count;
|
||||||
UDP_MSDU_COUNT);
|
|
||||||
ppdu_info->rx_status.other_msdu_count =
|
ppdu_info->rx_status.other_msdu_count =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->other_msdu_count;
|
||||||
OTHER_MSDU_COUNT);
|
|
||||||
hal_rx_status_get_mpdu_retry_cnt(ppdu_info, rx_tlv);
|
hal_rx_status_get_mpdu_retry_cnt(ppdu_info, rx_ppdu_end_user);
|
||||||
|
|
||||||
if (ppdu_info->sw_frame_group_id
|
if (ppdu_info->sw_frame_group_id
|
||||||
!= HAL_MPDU_SW_FRAME_GROUP_NULL_DATA) {
|
!= HAL_MPDU_SW_FRAME_GROUP_NULL_DATA) {
|
||||||
ppdu_info->rx_status.frame_control_info_valid =
|
ppdu_info->rx_status.frame_control_info_valid =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->frame_control_info_valid;
|
||||||
FRAME_CONTROL_INFO_VALID);
|
|
||||||
|
|
||||||
if (ppdu_info->rx_status.frame_control_info_valid)
|
if (ppdu_info->rx_status.frame_control_info_valid)
|
||||||
ppdu_info->rx_status.frame_control =
|
ppdu_info->rx_status.frame_control =
|
||||||
HAL_RX_GET_64(rx_tlv,
|
rx_ppdu_end_user->frame_control_field;
|
||||||
RX_PPDU_END_USER_STATS,
|
|
||||||
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 =
|
ppdu_info->rx_status.data_sequence_control_info_valid =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->data_sequence_control_info_valid;
|
||||||
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)
|
if (ppdu_info->rx_status.data_sequence_control_info_valid)
|
||||||
ppdu_info->rx_status.first_data_seq_ctrl = seq;
|
ppdu_info->rx_status.first_data_seq_ctrl = seq;
|
||||||
|
|
||||||
ppdu_info->rx_status.preamble_type =
|
ppdu_info->rx_status.preamble_type =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->ht_control_field_pkt_type;
|
||||||
HT_CONTROL_FIELD_PKT_TYPE);
|
|
||||||
|
|
||||||
ppdu_info->end_user_stats_cnt++;
|
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 =
|
ppdu_info->com_info.mpdu_cnt_fcs_ok =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->mpdu_cnt_fcs_ok;
|
||||||
MPDU_CNT_FCS_OK);
|
|
||||||
ppdu_info->com_info.mpdu_cnt_fcs_err =
|
ppdu_info->com_info.mpdu_cnt_fcs_err =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->mpdu_cnt_fcs_err;
|
||||||
MPDU_CNT_FCS_ERR);
|
|
||||||
if ((ppdu_info->com_info.mpdu_cnt_fcs_ok |
|
if ((ppdu_info->com_info.mpdu_cnt_fcs_ok |
|
||||||
ppdu_info->com_info.mpdu_cnt_fcs_err) > 1)
|
ppdu_info->com_info.mpdu_cnt_fcs_err) > 1)
|
||||||
ppdu_info->rx_status.rs_flags |= IEEE80211_AMPDU_FLAG;
|
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);
|
(~IEEE80211_AMPDU_FLAG);
|
||||||
|
|
||||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[0] =
|
ppdu_info->com_info.mpdu_fcs_ok_bitmap[0] =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->fcs_ok_bitmap_31_0;
|
||||||
FCS_OK_BITMAP_31_0);
|
|
||||||
|
|
||||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[1] =
|
ppdu_info->com_info.mpdu_fcs_ok_bitmap[1] =
|
||||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS,
|
rx_ppdu_end_user->fcs_ok_bitmap_63_32;
|
||||||
FCS_OK_BITMAP_63_32);
|
|
||||||
|
|
||||||
if (user_id < HAL_MAX_UL_MU_USERS) {
|
if (user_id < HAL_MAX_UL_MU_USERS) {
|
||||||
mon_rx_user_status =
|
mon_rx_user_status =
|
||||||
&ppdu_info->rx_user_status[user_id];
|
&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++;
|
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,
|
user_id,
|
||||||
mon_rx_user_status);
|
mon_rx_user_status);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user