qcacmn: Update deterministic stats per pdev

Adding tx mode count per num of users and mode count
per tx mode

CRs-Fixed: 3380939
Change-Id: I7e50ce6cfc7cfc23bde6e58b4afa478008b6af9e
This commit is contained in:
aloksing
2023-01-12 16:18:06 +05:30
committed by Madan Koyyalamudi
parent 444c6f16aa
commit e03fabab41
3 changed files with 143 additions and 0 deletions

View File

@@ -2318,6 +2318,12 @@ struct cdp_tx_mgmt_comp_info {
* @htt_seq_type: Seq type
* @txmode_type: tx mode type UL/DL
* @txmode: tx mode
* @num_ul_users: Number of UL expected users
* @ch_access_delay: Channel access delay
* @backoff_ac_valid: Backoff AC valid
* @backoff_ac: Backoff AC
* @num_ul_user_resp_valid: Number of UL users response valid
* @num_ul_user_resp: Number of UL users response
* @user: per-User stats (array of per-user structures)
*/
struct cdp_tx_completion_ppdu {
@@ -2366,6 +2372,12 @@ struct cdp_tx_completion_ppdu {
uint8_t htt_seq_type;
uint8_t txmode_type;
uint8_t txmode;
uint32_t num_ul_users;
uint32_t ch_access_delay;
uint32_t backoff_ac_valid;
uint32_t backoff_ac;
uint32_t num_ul_user_resp_valid;
uint32_t num_ul_user_resp;
struct cdp_tx_completion_ppdu_user user[];
};

View File

@@ -43,6 +43,7 @@
#define TXRX_STATS_LEVEL TXRX_STATS_LEVEL_BASIC
#endif
#define CDP_MU_MAX_USERS 37
/* 1 additional MCS is for invalid values */
#ifdef WLAN_FEATURE_11BE
#define MAX_MCS (16 + 1)
@@ -2959,6 +2960,28 @@ struct cdp_peer_deter_stats {
struct cdp_peer_tx_ul_deter ul_det[TX_MODE_UL_MAX];
struct cdp_peer_rx_deter rx_det;
};
/**
* struct cdp_pdev_deter_stats- Structure to hold pdev deterministic stats
* @dl_ofdma_usr: num_user counter for dl ofdma
* @ul_ofdma_usr: num_user counter for ul ofdma
* @dl_mimo_usr: num_user counter for dl mimo
* @ul_mimo_usr: num_user counter for ul mimo
* @dl_mode_cnt: DL tx mode counter
* @ul_mode_cnt: UL tx mode counter
* @ch_access_delay
*/
struct cdp_pdev_deter_stats {
uint64_t dl_ofdma_usr[CDP_MU_MAX_USERS];
uint64_t ul_ofdma_usr[CDP_MU_MAX_USERS];
uint64_t dl_mimo_usr[CDP_MU_MAX_USERS];
uint64_t ul_mimo_usr[CDP_MU_MAX_USERS];
uint64_t dl_mode_cnt[TX_MODE_DL_MAX];
uint64_t ul_mode_cnt[TX_MODE_UL_MAX];
uint32_t ch_access_delay[WME_AC_MAX];
uint64_t trigger_success;
uint64_t trigger_fail;
};
#endif
/* struct cdp_pdev_stats - pdev stats
@@ -3112,6 +3135,7 @@ struct cdp_pdev_stats {
uint32_t peer_unauth_rx_pkt_drop;
#ifdef WLAN_TELEMETRY_STATS_SUPPORT
struct cdp_pdev_telemetry_stats telemetry_stats;
struct cdp_pdev_deter_stats deter_stats;
#endif
};

View File

@@ -3065,6 +3065,79 @@ void dp_ppdu_desc_get_txmode(struct cdp_tx_completion_ppdu *ppdu)
}
}
/*
* dp_pdev_update_deter_stats() - Update pdev deterministic stats
* @pdev: Datapath pdev handle
* @ppdu: PPDU Descriptor
*
* Return: None
*/
static inline void
dp_pdev_update_deter_stats(struct dp_pdev *pdev,
struct cdp_tx_completion_ppdu *ppdu)
{
if (!pdev || !ppdu)
return;
if (ppdu->frame_type != CDP_PPDU_FTYPE_DATA)
return;
if (ppdu->txmode_type == TX_MODE_TYPE_UNKNOWN)
return;
if (ppdu->backoff_ac_valid)
DP_STATS_UPD(pdev,
deter_stats.ch_access_delay[ppdu->backoff_ac],
ppdu->ch_access_delay);
if (ppdu->num_ul_user_resp_valid &&
(ppdu->txmode_type == TX_MODE_TYPE_UL)) {
if (ppdu->num_ul_user_resp) {
DP_STATS_INC(pdev,
deter_stats.trigger_success,
1);
} else {
DP_STATS_INC(pdev,
deter_stats.trigger_fail,
1);
}
}
if (ppdu->txmode_type == TX_MODE_TYPE_DL) {
DP_STATS_INC(pdev,
deter_stats.dl_mode_cnt[ppdu->txmode],
1);
switch (ppdu->txmode) {
case TX_MODE_DL_OFDMA_DATA:
DP_STATS_INC(pdev,
deter_stats.dl_ofdma_usr[ppdu->num_users],
1);
break;
case TX_MODE_DL_MUMIMO_DATA:
DP_STATS_INC(pdev,
deter_stats.dl_mimo_usr[ppdu->num_users],
1);
break;
}
} else {
DP_STATS_INC(pdev,
deter_stats.ul_mode_cnt[ppdu->txmode],
1);
switch (ppdu->txmode) {
case TX_MODE_UL_OFDMA_BASIC_TRIGGER_DATA:
DP_STATS_INC(pdev,
deter_stats.ul_ofdma_usr[ppdu->num_ul_users],
1);
break;
case TX_MODE_UL_MUMIMO_BASIC_TRIGGER_DATA:
DP_STATS_INC(pdev,
deter_stats.ul_mimo_usr[ppdu->num_ul_users],
1);
break;
}
}
}
/*
* dp_ppdu_desc_get_msduq() - Get msduq index from bitmap
* @ppdu: PPDU Descriptor
@@ -3186,6 +3259,11 @@ dp_pdev_telemetry_stats_update(
struct dp_pdev *pdev,
struct cdp_tx_completion_ppdu_user *ppdu)
{ }
static inline void
dp_pdev_update_deter_stats(struct dp_pdev *pdev,
struct cdp_tx_completion_ppdu *ppdu)
{ }
#endif
/**
@@ -3430,7 +3508,9 @@ dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev,
struct dp_soc *soc = NULL;
struct cdp_tx_completion_ppdu *ppdu_desc = NULL;
uint64_t ppdu_start_timestamp;
uint32_t eval_start_timestamp;
uint32_t *start_tag_buf;
uint32_t *ts_tag_buf;
start_tag_buf = tag_buf;
ppdu_desc =
@@ -3483,6 +3563,10 @@ dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev,
tag_buf = start_tag_buf + HTT_GET_STATS_CMN_INDEX(FES_DUR_US);
ppdu_desc->tx_duration = *tag_buf;
tag_buf = start_tag_buf +
HTT_GET_STATS_CMN_INDEX(SCH_EVAL_START_TSTMP_L32_US);
eval_start_timestamp = *tag_buf;
tag_buf = start_tag_buf + HTT_GET_STATS_CMN_INDEX(START_TSTMP_L32_US);
ppdu_desc->ppdu_start_timestamp = *tag_buf;
@@ -3516,6 +3600,8 @@ dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev,
HTT_PPDU_STATS_COMMON_TLV_DOPPLER_INDICATION_GET(*tag_buf);
ppdu_desc->spatial_reuse =
HTT_PPDU_STATS_COMMON_TLV_SPATIAL_REUSE_GET(*tag_buf);
ppdu_desc->num_ul_users =
HTT_PPDU_STATS_COMMON_TLV_NUM_UL_EXPECTED_USERS_GET(*tag_buf);
dp_tx_capture_htt_frame_counter(pdev, frame_type);
@@ -3543,6 +3629,26 @@ dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev,
tag_buf = start_tag_buf + HTT_GET_STATS_CMN_INDEX(BSSCOLOR_OBSS_PSR);
ppdu_desc->bss_color =
HTT_PPDU_STATS_COMMON_TLV_BSS_COLOR_ID_GET(*tag_buf);
ppdu_desc->backoff_ac_valid =
HTT_PPDU_STATS_COMMON_TLV_BACKOFF_AC_VALID_GET(*tag_buf);
if (ppdu_desc->backoff_ac_valid) {
ppdu_desc->backoff_ac =
HTT_PPDU_STATS_COMMON_TLV_BACKOFF_AC_GET(*tag_buf);
ts_tag_buf = start_tag_buf +
HTT_GET_STATS_CMN_INDEX(SCH_EVAL_START_TSTMP_L32_US);
eval_start_timestamp = *ts_tag_buf;
ts_tag_buf = start_tag_buf +
HTT_GET_STATS_CMN_INDEX(START_TSTMP_L32_US);
ppdu_desc->ch_access_delay =
*ts_tag_buf - eval_start_timestamp;
}
ppdu_desc->num_ul_user_resp_valid =
HTT_PPDU_STATS_COMMON_TLV_NUM_UL_USER_RESPONSES_VALID_GET(*tag_buf);
if (ppdu_desc->num_ul_user_resp_valid)
ppdu_desc->num_ul_user_resp =
HTT_PPDU_STATS_COMMON_TLV_NUM_UL_USER_RESPONSES_GET(*tag_buf);
}
/**
@@ -4720,6 +4826,7 @@ dp_ppdu_desc_user_stats_update(struct dp_pdev *pdev,
qdf_assert_always(ppdu_desc->num_users <= ppdu_desc->max_users);
dp_ppdu_desc_get_txmode(ppdu_desc);
dp_pdev_update_deter_stats(pdev, ppdu_desc);
for (i = 0; i < num_users; i++) {
ppdu_desc->num_mpdu += ppdu_desc->user[i].num_mpdu;