qcacmn: rx stats update for WKK
Add function pointer to update stats for LI and WKK Add new fields in structure cdp rx stats CRs-Fixed: 3071271 Change-Id: I6a1d7afbdfe47d171335d55bf66d210d785f5a03
This commit is contained in:

committed by
Madan Koyyalamudi

parent
b093d034a4
commit
b726e009e7
@@ -1,5 +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 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
|
||||||
@@ -30,6 +31,9 @@ enum CMN_BW_TYPES {
|
|||||||
CMN_BW_80MHZ,
|
CMN_BW_80MHZ,
|
||||||
CMN_BW_160MHZ,
|
CMN_BW_160MHZ,
|
||||||
CMN_BW_80_80MHZ,
|
CMN_BW_80_80MHZ,
|
||||||
|
#ifdef WLAN_FEATURE_11BE
|
||||||
|
CMN_BW_320MHZ,
|
||||||
|
#endif
|
||||||
CMN_BW_CNT,
|
CMN_BW_CNT,
|
||||||
CMN_BW_IDLE = 0xFF, /*default BW state */
|
CMN_BW_IDLE = 0xFF, /*default BW state */
|
||||||
};
|
};
|
||||||
|
@@ -2248,6 +2248,7 @@ struct cdp_tx_completion_msdu {
|
|||||||
* @mpdu_fcs_ok_bitmap - MPDU with fcs ok bitmap
|
* @mpdu_fcs_ok_bitmap - MPDU with fcs ok bitmap
|
||||||
* @retries - number of retries
|
* @retries - number of retries
|
||||||
* @rx_ratekpbs - rx rate in kbps
|
* @rx_ratekpbs - rx rate in kbps
|
||||||
|
* @mpdu_retries - retries of mpdu in rx
|
||||||
*/
|
*/
|
||||||
struct cdp_rx_stats_ppdu_user {
|
struct cdp_rx_stats_ppdu_user {
|
||||||
uint16_t peer_id;
|
uint16_t peer_id;
|
||||||
@@ -2285,6 +2286,7 @@ struct cdp_rx_stats_ppdu_user {
|
|||||||
uint32_t mpdu_err_byte_count;
|
uint32_t mpdu_err_byte_count;
|
||||||
uint32_t retries;
|
uint32_t retries;
|
||||||
uint32_t rx_ratekbps;
|
uint32_t rx_ratekbps;
|
||||||
|
uint32_t mpdu_retries;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2334,6 +2336,7 @@ struct cdp_rx_stats_ppdu_user {
|
|||||||
* @user: per user stats in MU-user case
|
* @user: per user stats in MU-user case
|
||||||
* @nf: noise floor
|
* @nf: noise floor
|
||||||
* @per_chain_rssi: rssi per antenna
|
* @per_chain_rssi: rssi per antenna
|
||||||
|
* @punc_bw: puncered bw
|
||||||
*/
|
*/
|
||||||
struct cdp_rx_indication_ppdu {
|
struct cdp_rx_indication_ppdu {
|
||||||
uint32_t ppdu_id;
|
uint32_t ppdu_id;
|
||||||
@@ -2394,6 +2397,7 @@ struct cdp_rx_indication_ppdu {
|
|||||||
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
||||||
struct cdp_rx_ppdu_cfr_info cfr_info;
|
struct cdp_rx_ppdu_cfr_info cfr_info;
|
||||||
#endif
|
#endif
|
||||||
|
uint8_t punc_bw;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1424,6 +1424,9 @@ struct cdp_tx_stats {
|
|||||||
* <enum 3 3_2_us_sgi > HE
|
* <enum 3 3_2_us_sgi > HE
|
||||||
* @preamble_info: preamble
|
* @preamble_info: preamble
|
||||||
* @to_stack_twt: Total packets sent up the stack in TWT session
|
* @to_stack_twt: Total packets sent up the stack in TWT session
|
||||||
|
* @mpdu_retry_cnt: retries of mpdu in rx
|
||||||
|
* @su_be_ppdu_cnt: SU Rx packet count for BE
|
||||||
|
* @rx_mu_be: MU rx packet count for BE
|
||||||
*/
|
*/
|
||||||
struct cdp_rx_stats {
|
struct cdp_rx_stats {
|
||||||
struct cdp_pkt_info to_stack;
|
struct cdp_pkt_info to_stack;
|
||||||
@@ -1505,6 +1508,11 @@ struct cdp_rx_stats {
|
|||||||
gi_info:4,
|
gi_info:4,
|
||||||
preamble_info:4;
|
preamble_info:4;
|
||||||
struct cdp_pkt_info to_stack_twt;
|
struct cdp_pkt_info to_stack_twt;
|
||||||
|
uint32_t mpdu_retry_cnt;
|
||||||
|
#ifdef WLAN_FEATURE_11BE
|
||||||
|
struct cdp_pkt_type su_be_ppdu_cnt;
|
||||||
|
struct cdp_pkt_type rx_mu_be[TXRX_TYPE_MU_MAX];
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/* struct cdp_tx_ingress_stats - Tx ingress Stats
|
/* struct cdp_tx_ingress_stats - Tx ingress Stats
|
||||||
|
@@ -53,6 +53,15 @@ extern enum timer_yield_status
|
|||||||
dp_should_timer_irq_yield(struct dp_soc *soc, uint32_t work_done,
|
dp_should_timer_irq_yield(struct dp_soc *soc, uint32_t work_done,
|
||||||
uint64_t start_time);
|
uint64_t start_time);
|
||||||
|
|
||||||
|
#ifdef QCA_ENHANCED_STATS_SUPPORT
|
||||||
|
void
|
||||||
|
dp_mon_populate_ppdu_info_1_0(struct hal_rx_ppdu_info *hal_ppdu_info,
|
||||||
|
struct cdp_rx_indication_ppdu *ppdu)
|
||||||
|
{
|
||||||
|
ppdu->punc_bw = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef QCA_SUPPORT_FULL_MON
|
#ifdef QCA_SUPPORT_FULL_MON
|
||||||
static QDF_STATUS
|
static QDF_STATUS
|
||||||
dp_config_full_mon_mode(struct cdp_soc_t *soc_handle,
|
dp_config_full_mon_mode(struct cdp_soc_t *soc_handle,
|
||||||
@@ -945,6 +954,11 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc)
|
|||||||
dp_vdev_set_monitor_mode_buf_rings;
|
dp_vdev_set_monitor_mode_buf_rings;
|
||||||
mon_ops->mon_vdev_set_monitor_mode_rings =
|
mon_ops->mon_vdev_set_monitor_mode_rings =
|
||||||
dp_vdev_set_monitor_mode_rings;
|
dp_vdev_set_monitor_mode_rings;
|
||||||
|
#ifdef QCA_ENHANCED_STATS_SUPPORT
|
||||||
|
mon_ops->mon_rx_stats_update = NULL;
|
||||||
|
mon_ops->mon_rx_populate_ppdu_usr_info = NULL;
|
||||||
|
mon_ops->mon_rx_populate_ppdu_info = dp_mon_populate_ppdu_info_1_0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dp_mon_ops monitor_ops_1_0 = {
|
struct dp_mon_ops monitor_ops_1_0 = {
|
||||||
|
@@ -926,6 +926,12 @@ dp_mon_register_feature_ops_2_0(struct dp_soc *soc)
|
|||||||
dp_vdev_set_monitor_mode_buf_rings_2_0;
|
dp_vdev_set_monitor_mode_buf_rings_2_0;
|
||||||
mon_ops->mon_vdev_set_monitor_mode_rings =
|
mon_ops->mon_vdev_set_monitor_mode_rings =
|
||||||
dp_vdev_set_monitor_mode_rings_2_0;
|
dp_vdev_set_monitor_mode_rings_2_0;
|
||||||
|
#ifdef QCA_ENHANCED_STATS_SUPPORT
|
||||||
|
mon_ops->mon_rx_stats_update = dp_mon_rx_stats_update_2_0;
|
||||||
|
mon_ops->mon_rx_populate_ppdu_usr_info =
|
||||||
|
dp_mon_populate_ppdu_usr_info_2_0;
|
||||||
|
mon_ops->mon_rx_populate_ppdu_info = dp_mon_populate_ppdu_info_2_0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dp_mon_ops monitor_ops_2_0 = {
|
struct dp_mon_ops monitor_ops_2_0 = {
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
@@ -198,3 +199,78 @@ dp_rx_mon_buffers_alloc(struct dp_soc *soc)
|
|||||||
mon_soc->rx_mon_ring_fill_level,
|
mon_soc->rx_mon_ring_fill_level,
|
||||||
&desc_list, &tail);
|
&desc_list, &tail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef QCA_ENHANCED_STATS_SUPPORT
|
||||||
|
void
|
||||||
|
dp_mon_populate_ppdu_usr_info_2_0(struct mon_rx_user_status *rx_user_status,
|
||||||
|
struct cdp_rx_stats_ppdu_user *ppdu_user)
|
||||||
|
{
|
||||||
|
ppdu_user->mpdu_retries = rx_user_status->retry_mpdu;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11BE
|
||||||
|
void dp_mon_rx_stats_update_2_0(struct dp_peer *peer,
|
||||||
|
struct cdp_rx_indication_ppdu *ppdu,
|
||||||
|
struct cdp_rx_stats_ppdu_user *ppdu_user)
|
||||||
|
{
|
||||||
|
uint8_t mcs, preamble, ppdu_type;
|
||||||
|
|
||||||
|
preamble = ppdu->u.preamble;
|
||||||
|
ppdu_type = ppdu->u.ppdu_type;
|
||||||
|
if (ppdu_type == HAL_RX_TYPE_SU)
|
||||||
|
mcs = ppdu->u.mcs;
|
||||||
|
else
|
||||||
|
mcs = ppdu_user->mcs;
|
||||||
|
|
||||||
|
DP_STATS_INC(peer, rx.mpdu_retry_cnt, ppdu_user->mpdu_retries);
|
||||||
|
DP_STATS_INCC(peer,
|
||||||
|
rx.su_be_ppdu_cnt.mcs_count[MAX_MCS - 1], 1,
|
||||||
|
((mcs >= (MAX_MCS - 1)) && (preamble == DOT11_BE) &&
|
||||||
|
(ppdu_type == HAL_RX_TYPE_SU)));
|
||||||
|
DP_STATS_INCC(peer,
|
||||||
|
rx.su_be_ppdu_cnt.mcs_count[mcs], 1,
|
||||||
|
((mcs < (MAX_MCS - 1)) && (preamble == DOT11_BE) &&
|
||||||
|
(ppdu_type == HAL_RX_TYPE_SU)));
|
||||||
|
DP_STATS_INCC(peer,
|
||||||
|
rx.rx_mu_be[TXRX_TYPE_MU_OFDMA].ppdu.mcs_count[MAX_MCS - 1],
|
||||||
|
1, ((mcs >= (MAX_MCS - 1)) &&
|
||||||
|
(preamble == DOT11_BE) &&
|
||||||
|
(ppdu_type == HAL_RX_TYPE_MU_OFDMA)));
|
||||||
|
DP_STATS_INCC(peer,
|
||||||
|
rx.rx_mu_be[TXRX_TYPE_MU_OFDMA].ppdu.mcs_count[mcs],
|
||||||
|
1, ((mcs < (MAX_MCS - 1)) &&
|
||||||
|
(preamble == DOT11_BE) &&
|
||||||
|
(ppdu_type == HAL_RX_TYPE_MU_OFDMA)));
|
||||||
|
DP_STATS_INCC(peer,
|
||||||
|
rx.rx_mu_be[TXRX_TYPE_MU_MIMO].ppdu.mcs_count[MAX_MCS - 1],
|
||||||
|
1, ((mcs >= (MAX_MCS - 1)) &&
|
||||||
|
(preamble == DOT11_BE) &&
|
||||||
|
(ppdu_type == HAL_RX_TYPE_MU_MIMO)));
|
||||||
|
DP_STATS_INCC(peer,
|
||||||
|
rx.rx_mu_be[TXRX_TYPE_MU_MIMO].ppdu.mcs_count[mc],
|
||||||
|
1, ((mcs < (MAX_MCS - 1)) &&
|
||||||
|
(preamble == DOT11_BE) &&
|
||||||
|
(ppdu_type == HAL_RX_TYPE_MU_MIMO)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
dp_mon_populate_ppdu_info_2_0(struct hal_rx_ppdu_info *hal_ppdu_info,
|
||||||
|
struct cdp_rx_indication_ppdu *ppdu)
|
||||||
|
{
|
||||||
|
ppdu->punc_bw = hal_ppdu_info->rx_status.punctured_bw;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void dp_mon_rx_stats_update_2_0(struct dp_peer *peer,
|
||||||
|
struct cdp_rx_indication_ppdu *ppdu,
|
||||||
|
struct cdp_rx_stats_ppdu_user *ppdu_user)
|
||||||
|
{
|
||||||
|
DP_STATS_INC(peer, rx.mpdu_retry_cnt, ppdu_user->mpdu_retries);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
dp_mon_populate_ppdu_info_2_0(struct hal_rx_ppdu_info *hal_ppdu_info,
|
||||||
|
struct cdp_rx_indication_ppdu *ppdu)
|
||||||
|
{
|
||||||
|
ppdu->punc_bw = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -568,6 +568,15 @@ struct dp_mon_ops {
|
|||||||
void (*mon_register_intr_ops)(struct dp_soc *soc);
|
void (*mon_register_intr_ops)(struct dp_soc *soc);
|
||||||
#endif
|
#endif
|
||||||
void (*mon_register_feature_ops)(struct dp_soc *soc);
|
void (*mon_register_feature_ops)(struct dp_soc *soc);
|
||||||
|
#ifdef QCA_ENHANCED_STATS_SUPPORT
|
||||||
|
void (*mon_rx_stats_update)(struct dp_peer *peer,
|
||||||
|
struct cdp_rx_indication_ppdu *ppdu,
|
||||||
|
struct cdp_rx_stats_ppdu_user *ppdu_user);
|
||||||
|
void (*mon_rx_populate_ppdu_usr_info)(struct mon_rx_user_status *rx_user_status,
|
||||||
|
struct cdp_rx_stats_ppdu_user *ppdu_user);
|
||||||
|
void (*mon_rx_populate_ppdu_info)(struct hal_rx_ppdu_info *hal_ppdu_info,
|
||||||
|
struct cdp_rx_indication_ppdu *ppdu);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dp_mon_soc {
|
struct dp_mon_soc {
|
||||||
|
@@ -404,6 +404,7 @@ dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev,
|
|||||||
int ru_size;
|
int ru_size;
|
||||||
bool is_data = false;
|
bool is_data = false;
|
||||||
uint32_t num_users;
|
uint32_t num_users;
|
||||||
|
struct dp_mon_ops *mon_ops;
|
||||||
|
|
||||||
num_users = ppdu_info->com_info.num_users;
|
num_users = ppdu_info->com_info.num_users;
|
||||||
for (i = 0; i < num_users; i++) {
|
for (i = 0; i < num_users; i++) {
|
||||||
@@ -493,6 +494,11 @@ dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev,
|
|||||||
rx_stats_peruser->vdev_id = peer->vdev->vdev_id;
|
rx_stats_peruser->vdev_id = peer->vdev->vdev_id;
|
||||||
rx_stats_peruser->mu_ul_info_valid = 0;
|
rx_stats_peruser->mu_ul_info_valid = 0;
|
||||||
|
|
||||||
|
mon_ops = dp_mon_ops_get(soc);
|
||||||
|
if (mon_ops && mon_ops->mon_rx_populate_ppdu_usr_info)
|
||||||
|
mon_ops->mon_rx_populate_ppdu_usr_info(rx_user_status,
|
||||||
|
rx_stats_peruser);
|
||||||
|
|
||||||
dp_peer_unref_delete(peer, DP_MOD_ID_RX_PPDU_STATS);
|
dp_peer_unref_delete(peer, DP_MOD_ID_RX_PPDU_STATS);
|
||||||
if (cdp_rx_ppdu->u.ppdu_type == HAL_RX_TYPE_MU_OFDMA ||
|
if (cdp_rx_ppdu->u.ppdu_type == HAL_RX_TYPE_MU_OFDMA ||
|
||||||
cdp_rx_ppdu->u.ppdu_type == HAL_RX_TYPE_MU_MIMO) {
|
cdp_rx_ppdu->u.ppdu_type == HAL_RX_TYPE_MU_MIMO) {
|
||||||
@@ -546,6 +552,7 @@ dp_rx_populate_cdp_indication_ppdu(struct dp_pdev *pdev,
|
|||||||
struct dp_ast_entry *ast_entry;
|
struct dp_ast_entry *ast_entry;
|
||||||
uint32_t ast_index;
|
uint32_t ast_index;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
struct dp_mon_ops *mon_ops;
|
||||||
|
|
||||||
cdp_rx_ppdu->first_data_seq_ctrl =
|
cdp_rx_ppdu->first_data_seq_ctrl =
|
||||||
ppdu_info->rx_status.first_data_seq_ctrl;
|
ppdu_info->rx_status.first_data_seq_ctrl;
|
||||||
@@ -635,6 +642,11 @@ dp_rx_populate_cdp_indication_ppdu(struct dp_pdev *pdev,
|
|||||||
dp_rx_populate_su_evm_details(ppdu_info, cdp_rx_ppdu);
|
dp_rx_populate_su_evm_details(ppdu_info, cdp_rx_ppdu);
|
||||||
cdp_rx_ppdu->rx_antenna = ppdu_info->rx_status.rx_antenna;
|
cdp_rx_ppdu->rx_antenna = ppdu_info->rx_status.rx_antenna;
|
||||||
|
|
||||||
|
mon_ops = dp_mon_ops_get(pdev->soc);
|
||||||
|
if (mon_ops && mon_ops->mon_rx_populate_ppdu_info)
|
||||||
|
mon_ops->mon_rx_populate_ppdu_info(ppdu_info,
|
||||||
|
cdp_rx_ppdu);
|
||||||
|
|
||||||
cdp_rx_ppdu->nf = ppdu_info->rx_status.chan_noise_floor;
|
cdp_rx_ppdu->nf = ppdu_info->rx_status.chan_noise_floor;
|
||||||
for (i = 0; i < MAX_CHAIN; i++)
|
for (i = 0; i < MAX_CHAIN; i++)
|
||||||
cdp_rx_ppdu->per_chain_rssi[i] = ppdu_info->rx_status.rssi[i];
|
cdp_rx_ppdu->per_chain_rssi[i] = ppdu_info->rx_status.rssi[i];
|
||||||
@@ -724,6 +736,65 @@ static inline void dp_rx_rate_stats_update(struct dp_peer *peer,
|
|||||||
peer->vdev->stats.rx.last_rx_rate = ratekbps;
|
peer->vdev->stats.rx.last_rx_rate = ratekbps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11BE
|
||||||
|
static inline uint8_t dp_get_bw_offset_frm_bw(struct dp_soc *soc,
|
||||||
|
enum CMN_BW_TYPES bw)
|
||||||
|
{
|
||||||
|
uint8_t pkt_bw_offset;
|
||||||
|
|
||||||
|
switch (bw) {
|
||||||
|
case CMN_BW_20MHZ:
|
||||||
|
pkt_bw_offset = PKT_BW_GAIN_20MHZ;
|
||||||
|
break;
|
||||||
|
case CMN_BW_40MHZ:
|
||||||
|
pkt_bw_offset = PKT_BW_GAIN_40MHZ;
|
||||||
|
break;
|
||||||
|
case CMN_BW_80MHZ:
|
||||||
|
pkt_bw_offset = PKT_BW_GAIN_80MHZ;
|
||||||
|
break;
|
||||||
|
case CMN_BW_160MHZ:
|
||||||
|
pkt_bw_offset = PKT_BW_GAIN_160MHZ;
|
||||||
|
break;
|
||||||
|
case CMN_BW_320MHZ:
|
||||||
|
pkt_bw_offset = PKT_BW_GAIN_320MHZ;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pkt_bw_offset = 0;
|
||||||
|
dp_rx_mon_status_debug("%pK: Invalid BW index = %d",
|
||||||
|
soc, bw);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pkt_bw_offset;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline uint8_t dp_get_bw_offset_frm_bw(struct dp_soc *soc,
|
||||||
|
enum CMN_BW_TYPES bw)
|
||||||
|
{
|
||||||
|
uint8_t pkt_bw_offset;
|
||||||
|
|
||||||
|
switch (bw) {
|
||||||
|
case CMN_BW_20MHZ:
|
||||||
|
pkt_bw_offset = PKT_BW_GAIN_20MHZ;
|
||||||
|
break;
|
||||||
|
case CMN_BW_40MHZ:
|
||||||
|
pkt_bw_offset = PKT_BW_GAIN_40MHZ;
|
||||||
|
break;
|
||||||
|
case CMN_BW_80MHZ:
|
||||||
|
pkt_bw_offset = PKT_BW_GAIN_80MHZ;
|
||||||
|
break;
|
||||||
|
case CMN_BW_160MHZ:
|
||||||
|
pkt_bw_offset = PKT_BW_GAIN_160MHZ;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pkt_bw_offset = 0;
|
||||||
|
dp_rx_mon_status_debug("%pK: Invalid BW index = %d",
|
||||||
|
soc, bw);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pkt_bw_offset;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void dp_rx_stats_update(struct dp_pdev *pdev,
|
static void dp_rx_stats_update(struct dp_pdev *pdev,
|
||||||
struct cdp_rx_indication_ppdu *ppdu)
|
struct cdp_rx_indication_ppdu *ppdu)
|
||||||
{
|
{
|
||||||
@@ -735,6 +806,7 @@ static void dp_rx_stats_update(struct dp_pdev *pdev,
|
|||||||
struct cdp_rx_stats_ppdu_user *ppdu_user;
|
struct cdp_rx_stats_ppdu_user *ppdu_user;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
enum cdp_mu_packet_type mu_pkt_type;
|
enum cdp_mu_packet_type mu_pkt_type;
|
||||||
|
struct dp_mon_ops *mon_ops;
|
||||||
|
|
||||||
if (pdev)
|
if (pdev)
|
||||||
soc = pdev->soc;
|
soc = pdev->soc;
|
||||||
@@ -768,25 +840,8 @@ static void dp_rx_stats_update(struct dp_pdev *pdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
num_msdu = ppdu_user->num_msdu;
|
num_msdu = ppdu_user->num_msdu;
|
||||||
switch (ppdu->u.bw) {
|
|
||||||
case CMN_BW_20MHZ:
|
|
||||||
pkt_bw_offset = PKT_BW_GAIN_20MHZ;
|
|
||||||
break;
|
|
||||||
case CMN_BW_40MHZ:
|
|
||||||
pkt_bw_offset = PKT_BW_GAIN_40MHZ;
|
|
||||||
break;
|
|
||||||
case CMN_BW_80MHZ:
|
|
||||||
pkt_bw_offset = PKT_BW_GAIN_80MHZ;
|
|
||||||
break;
|
|
||||||
case CMN_BW_160MHZ:
|
|
||||||
pkt_bw_offset = PKT_BW_GAIN_160MHZ;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
pkt_bw_offset = 0;
|
|
||||||
dp_rx_mon_status_debug("%pK: Invalid BW index = %d",
|
|
||||||
soc, ppdu->u.bw);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
pkt_bw_offset = dp_get_bw_offset_frm_bw(soc, ppdu->u.bw);
|
||||||
DP_STATS_UPD(peer, rx.snr, (ppdu->rssi + pkt_bw_offset));
|
DP_STATS_UPD(peer, rx.snr, (ppdu->rssi + pkt_bw_offset));
|
||||||
|
|
||||||
if (peer->stats.rx.avg_snr == CDP_INVALID_SNR)
|
if (peer->stats.rx.avg_snr == CDP_INVALID_SNR)
|
||||||
@@ -907,6 +962,11 @@ static void dp_rx_stats_update(struct dp_pdev *pdev,
|
|||||||
|
|
||||||
if (ppdu->tid != HAL_TID_INVALID)
|
if (ppdu->tid != HAL_TID_INVALID)
|
||||||
DP_STATS_INC(peer, rx.wme_ac_type[ac], num_msdu);
|
DP_STATS_INC(peer, rx.wme_ac_type[ac], num_msdu);
|
||||||
|
|
||||||
|
mon_ops = dp_mon_ops_get(soc);
|
||||||
|
if (mon_ops && mon_ops->mon_rx_stats_update)
|
||||||
|
mon_ops->mon_rx_stats_update(peer, ppdu, ppdu_user);
|
||||||
|
|
||||||
dp_peer_stats_notify(pdev, peer);
|
dp_peer_stats_notify(pdev, peer);
|
||||||
DP_STATS_UPD(peer, rx.last_snr, ppdu->rssi);
|
DP_STATS_UPD(peer, rx.last_snr, ppdu->rssi);
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2014-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2014-2021 The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2021 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
|
||||||
@@ -307,6 +308,8 @@
|
|||||||
* @start_seq: starting sequence number
|
* @start_seq: starting sequence number
|
||||||
* @ba_bitmap: 256 bit block ack bitmap
|
* @ba_bitmap: 256 bit block ack bitmap
|
||||||
* @add_rtap_ext2: add radiotap extension2
|
* @add_rtap_ext2: add radiotap extension2
|
||||||
|
* @mpdu_retry_cnt: Rx mpdu retry count
|
||||||
|
* @punctured_bw: puntured bw
|
||||||
*/
|
*/
|
||||||
struct mon_rx_status {
|
struct mon_rx_status {
|
||||||
uint64_t tsft;
|
uint64_t tsft;
|
||||||
@@ -394,6 +397,10 @@ struct mon_rx_status {
|
|||||||
uint16_t start_seq;
|
uint16_t start_seq;
|
||||||
uint32_t ba_bitmap[8];
|
uint32_t ba_bitmap[8];
|
||||||
bool add_rtap_ext2;
|
bool add_rtap_ext2;
|
||||||
|
uint32_t mpdu_retry_cnt;
|
||||||
|
#ifdef WLAN_FEATURE_11BE
|
||||||
|
uint8_t punctured_bw;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -428,6 +435,7 @@ struct mon_rx_status {
|
|||||||
* @mpdu_ok_byte_count: mpdu byte count with fcs ok
|
* @mpdu_ok_byte_count: mpdu byte count with fcs ok
|
||||||
* @mpdu_err_byte_count: mpdu byte count with fcs err
|
* @mpdu_err_byte_count: mpdu byte count with fcs err
|
||||||
* @sw_peer_id: software peer id
|
* @sw_peer_id: software peer id
|
||||||
|
* @retry_mpdu: mpdu retry count
|
||||||
*/
|
*/
|
||||||
struct mon_rx_user_status {
|
struct mon_rx_user_status {
|
||||||
uint32_t mcs:4,
|
uint32_t mcs:4,
|
||||||
@@ -459,6 +467,7 @@ struct mon_rx_user_status {
|
|||||||
uint32_t mpdu_ok_byte_count;
|
uint32_t mpdu_ok_byte_count;
|
||||||
uint32_t mpdu_err_byte_count;
|
uint32_t mpdu_err_byte_count;
|
||||||
uint16_t sw_peer_id;
|
uint16_t sw_peer_id;
|
||||||
|
uint32_t retry_mpdu;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user