qcacmn: Add MSDU counters to account for 11BE puncturing BW stats
Add MSDU counters to account for 11BE puncturing BW stats. Change-Id: I2c1d420b8d8b4533dcbf64f206783c07555cac99 CRs-Fixed: 3171770
This commit is contained in:

gecommit door
Madan Koyyalamudi

bovenliggende
4ccecd0b01
commit
484198b257
@@ -1862,6 +1862,8 @@ struct cdp_delayed_tx_completion_ppdu_user {
|
||||
* @peer_last_delayed_ba: flag to indicate peer last delayed ba
|
||||
* @phy_tx_time_us: Phy TX duration for the User
|
||||
* @mpdu_bytes: accumulated bytes per mpdu for mem limit feature
|
||||
* @punc_mode: puncutured mode to indicate punctured bw
|
||||
* @punc_pattern_bitmap: bitmap indicating punctured pattern
|
||||
*/
|
||||
struct cdp_tx_completion_ppdu_user {
|
||||
uint32_t completion_status:8,
|
||||
@@ -1965,6 +1967,8 @@ struct cdp_tx_completion_ppdu_user {
|
||||
|
||||
uint16_t phy_tx_time_us;
|
||||
uint32_t mpdu_bytes;
|
||||
uint8_t punc_mode;
|
||||
uint16_t punc_pattern_bitmap;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -47,6 +47,7 @@
|
||||
#ifdef WLAN_FEATURE_11BE
|
||||
#define MAX_MCS (16 + 1)
|
||||
#define MAX_MCS_11BE 16
|
||||
#define MAX_PUNCTURED_MODE 5
|
||||
#else
|
||||
#define MAX_MCS (14 + 1)
|
||||
#endif
|
||||
@@ -1364,6 +1365,7 @@ struct protocol_trace_count {
|
||||
* @last_tx_ts: last timestamp in jiffies when tx comp occurred
|
||||
* @su_be_ppdu_cnt: SU Tx packet count
|
||||
* @mu_be_ppdu_cnt: MU Tx packet count
|
||||
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured BW
|
||||
*/
|
||||
struct cdp_tx_stats {
|
||||
struct cdp_pkt_info comp_pkt;
|
||||
@@ -1479,6 +1481,7 @@ struct cdp_tx_stats {
|
||||
#ifdef WLAN_FEATURE_11BE
|
||||
struct cdp_pkt_type su_be_ppdu_cnt;
|
||||
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
|
||||
uint32_t punc_bw[MAX_PUNCTURED_MODE];
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -1567,6 +1570,7 @@ struct cdp_tx_stats {
|
||||
* @mpdu_retry_cnt: retries of mpdu in rx
|
||||
* @su_be_ppdu_cnt: SU Rx packet count for BE
|
||||
* @mu_be_ppdu_cnt: MU rx packet count for BE
|
||||
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured BW
|
||||
*/
|
||||
struct cdp_rx_stats {
|
||||
struct cdp_pkt_info to_stack;
|
||||
@@ -1652,6 +1656,7 @@ struct cdp_rx_stats {
|
||||
#ifdef WLAN_FEATURE_11BE
|
||||
struct cdp_pkt_type su_be_ppdu_cnt;
|
||||
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
|
||||
uint32_t punc_bw[MAX_PUNCTURED_MODE];
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@@ -1508,6 +1508,10 @@ void dp_update_vdev_stats_on_peer_unmap(struct dp_vdev *vdev,
|
||||
_srcobj->rx.mu_be_ppdu_cnt[mu_type].mcs_count[i]; \
|
||||
} \
|
||||
} \
|
||||
for (i = 0; i < MAX_PUNCTURED_MODE; i++) { \
|
||||
_tgtobj->tx.punc_bw[i] += _srcobj->tx.punc_bw[i]; \
|
||||
_tgtobj->rx.punc_bw[i] += _srcobj->rx.punc_bw[i]; \
|
||||
} \
|
||||
} while (0)
|
||||
#else
|
||||
#define DP_UPDATE_11BE_STATS(_tgtobj, _srcobj)
|
||||
|
@@ -5659,7 +5659,7 @@ dp_print_mu_be_ppdu_rates_info(struct cdp_pkt_type *pkt_type_array)
|
||||
|
||||
DP_PRINT_STATS(" %s = %d",
|
||||
dp_mu_be_rate_string[pkt_type][mcs].mcs_type,
|
||||
pkt_type_array->mcs_count[mcs]);
|
||||
pkt_type_array[pkt_type].mcs_count[mcs]);
|
||||
}
|
||||
|
||||
DP_PRINT_STATS("\n");
|
||||
@@ -6052,6 +6052,12 @@ void dp_print_peer_txrx_stats_be(struct cdp_peer_stats *peer_stats,
|
||||
peer_stats->tx.bw[CMN_BW_80MHZ],
|
||||
peer_stats->tx.bw[CMN_BW_160MHZ],
|
||||
peer_stats->tx.bw[CMN_BW_320MHZ]);
|
||||
DP_PRINT_STATS("Punctured BW Counts = NO_PUNC %d 20MHz %d 40MHz %d 80MHz %d 120MHz %d\n",
|
||||
peer_stats->tx.punc_bw[NO_PUNCTURE],
|
||||
peer_stats->tx.punc_bw[PUNCTURED_20MHZ],
|
||||
peer_stats->tx.punc_bw[PUNCTURED_40MHZ],
|
||||
peer_stats->tx.punc_bw[PUNCTURED_80MHZ],
|
||||
peer_stats->tx.punc_bw[PUNCTURED_120MHZ]);
|
||||
DP_PRINT_STATS("RU Locations RU[26 52 52_26 106 106_26 242 484 484_242 996 996_484 996_484_242 2X996 2X996_484 3X996 3X996_484 4X996]:");
|
||||
for (i = 0; i < RU_INDEX_MAX; i++)
|
||||
DP_PRINT_STATS("%s: %d", cdp_ru_string[i].ru_type,
|
||||
@@ -6067,6 +6073,12 @@ void dp_print_peer_txrx_stats_be(struct cdp_peer_stats *peer_stats,
|
||||
peer_stats->rx.bw[CMN_BW_80MHZ],
|
||||
peer_stats->rx.bw[CMN_BW_160MHZ],
|
||||
peer_stats->rx.bw[CMN_BW_320MHZ]);
|
||||
DP_PRINT_STATS("Punctured BW Counts = NO_PUNC %d 20MHz %d 40MHz %d 80MHz %d 120MHz %d\n",
|
||||
peer_stats->rx.punc_bw[NO_PUNCTURE],
|
||||
peer_stats->rx.punc_bw[PUNCTURED_20MHZ],
|
||||
peer_stats->rx.punc_bw[PUNCTURED_40MHZ],
|
||||
peer_stats->rx.punc_bw[PUNCTURED_80MHZ],
|
||||
peer_stats->rx.punc_bw[PUNCTURED_120MHZ]);
|
||||
dp_print_common_ppdu_rates_info(&peer_stats->rx.su_be_ppdu_cnt,
|
||||
DOT11_BE);
|
||||
dp_print_mu_be_ppdu_rates_info(&peer_stats->rx.mu_be_ppdu_cnt[0]);
|
||||
|
@@ -3521,6 +3521,7 @@ struct dp_peer_per_pkt_tx_stats {
|
||||
* @mpdu_success_with_retries: mpdu retry count in case of successful tx
|
||||
* @su_be_ppdu_cnt: SU Tx packet count for 11BE
|
||||
* @mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX]: MU Tx packet count for 11BE
|
||||
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured bw
|
||||
*/
|
||||
struct dp_peer_extd_tx_stats {
|
||||
uint32_t stbc;
|
||||
@@ -3569,6 +3570,7 @@ struct dp_peer_extd_tx_stats {
|
||||
#ifdef WLAN_FEATURE_11BE
|
||||
struct cdp_pkt_type su_be_ppdu_cnt;
|
||||
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
|
||||
uint32_t punc_bw[MAX_PUNCTURED_MODE];
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -3681,6 +3683,7 @@ struct dp_peer_per_pkt_rx_stats {
|
||||
* @mpdu_retry_cnt: retries of mpdu in rx
|
||||
* @su_be_ppdu_cnt: SU Rx packet count for BE
|
||||
* @mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX]: MU rx packet count for BE
|
||||
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured bw
|
||||
*/
|
||||
struct dp_peer_extd_rx_stats {
|
||||
struct cdp_pkt_type pkt_type[DOT11_MAX];
|
||||
@@ -3724,6 +3727,7 @@ struct dp_peer_extd_rx_stats {
|
||||
#ifdef WLAN_FEATURE_11BE
|
||||
struct cdp_pkt_type su_be_ppdu_cnt;
|
||||
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
|
||||
uint32_t punc_bw[MAX_PUNCTURED_MODE];
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@@ -942,6 +942,19 @@ static bool dp_ppdu_stats_feat_enable_check_1_0(struct dp_pdev *pdev)
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_mon_tx_stats_update_1_0 - Update Tx stats from HTT PPDU completion path
|
||||
*
|
||||
* @monitor: Monitor peer
|
||||
* @ppdu: Tx PPDU user completion info
|
||||
*/
|
||||
void
|
||||
dp_mon_tx_stats_update_1_0(struct dp_mon_peer *mon_peer,
|
||||
struct cdp_tx_completion_ppdu_user *ppdu)
|
||||
{
|
||||
ppdu->punc_mode = NO_PUNCTURE;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef QCA_SUPPORT_FULL_MON
|
||||
@@ -1081,9 +1094,7 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc)
|
||||
#else
|
||||
mon_ops->mon_ppdu_desc_deliver = dp_ppdu_desc_deliver_1_0;
|
||||
#endif
|
||||
#ifdef WLAN_FEATURE_11BE
|
||||
mon_ops->mon_tx_stats_update = NULL;
|
||||
#endif
|
||||
mon_ops->mon_tx_stats_update = dp_mon_tx_stats_update_1_0;
|
||||
#endif
|
||||
#if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
|
||||
mon_ops->mon_filter_setup_smart_monitor =
|
||||
|
@@ -475,12 +475,16 @@ void
|
||||
dp_mon_tx_stats_update_2_0(struct dp_mon_peer *mon_peer,
|
||||
struct cdp_tx_completion_ppdu_user *ppdu)
|
||||
{
|
||||
uint8_t preamble;
|
||||
uint8_t mcs;
|
||||
uint8_t preamble, mcs, punc_mode;
|
||||
|
||||
preamble = ppdu->preamble;
|
||||
mcs = ppdu->mcs;
|
||||
|
||||
punc_mode = dp_mon_get_puncture_type(ppdu->punc_pattern_bitmap,
|
||||
ppdu->bw);
|
||||
ppdu->punc_mode = punc_mode;
|
||||
|
||||
DP_STATS_INC(mon_peer, tx.punc_bw[punc_mode], ppdu->num_msdu);
|
||||
DP_STATS_INCC(mon_peer,
|
||||
tx.pkt_type[preamble].mcs_count[MAX_MCS - 1],
|
||||
ppdu->num_msdu,
|
||||
@@ -525,6 +529,9 @@ dp_mon_get_puncture_type(uint16_t puncture_pattern, uint8_t bw)
|
||||
uint16_t mask;
|
||||
uint8_t punctured_bits;
|
||||
|
||||
if (!puncture_pattern)
|
||||
return NO_PUNCTURE;
|
||||
|
||||
switch (bw) {
|
||||
case CMN_BW_80MHZ:
|
||||
mask = PUNCTURE_80MHZ_MASK;
|
||||
@@ -584,6 +591,7 @@ void
|
||||
dp_mon_tx_stats_update_2_0(struct dp_mon_peer *mon_peer,
|
||||
struct cdp_tx_completion_ppdu_user *ppdu)
|
||||
{
|
||||
ppdu->punc_mode = NO_PUNCTURE;
|
||||
}
|
||||
|
||||
enum cdp_punctured_modes
|
||||
|
@@ -630,12 +630,13 @@ void dp_rx_mon_stats_update_2_0(struct dp_mon_peer *mon_peer,
|
||||
struct cdp_rx_indication_ppdu *ppdu,
|
||||
struct cdp_rx_stats_ppdu_user *ppdu_user)
|
||||
{
|
||||
uint8_t mcs, preamble, ppdu_type;
|
||||
uint8_t mcs, preamble, ppdu_type, punc_mode;
|
||||
uint32_t num_msdu;
|
||||
|
||||
preamble = ppdu->u.preamble;
|
||||
ppdu_type = ppdu->u.ppdu_type;
|
||||
num_msdu = ppdu_user->num_msdu;
|
||||
punc_mode = ppdu->punc_bw;
|
||||
|
||||
if (ppdu_type == HAL_RX_TYPE_SU)
|
||||
mcs = ppdu->u.mcs;
|
||||
@@ -643,6 +644,7 @@ void dp_rx_mon_stats_update_2_0(struct dp_mon_peer *mon_peer,
|
||||
mcs = ppdu_user->mcs;
|
||||
|
||||
DP_STATS_INC(mon_peer, rx.mpdu_retry_cnt, ppdu_user->mpdu_retries);
|
||||
DP_STATS_INC(mon_peer, rx.punc_bw[punc_mode], num_msdu);
|
||||
DP_STATS_INCC(mon_peer,
|
||||
rx.pkt_type[preamble].mcs_count[MAX_MCS - 1], num_msdu,
|
||||
((mcs >= MAX_MCS_11BE) && (preamble == DOT11_BE)));
|
||||
|
@@ -2411,7 +2411,6 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
|
||||
uint32_t rix;
|
||||
uint16_t ratecode = 0;
|
||||
struct dp_mon_peer *mon_peer = NULL;
|
||||
enum cdp_punctured_modes punc_mode = NO_PUNCTURE;
|
||||
|
||||
if (!peer || !ppdu)
|
||||
return;
|
||||
@@ -2428,7 +2427,7 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
|
||||
ppdu->nss,
|
||||
ppdu->preamble,
|
||||
ppdu->bw,
|
||||
punc_mode,
|
||||
ppdu->punc_mode,
|
||||
&rix,
|
||||
&ratecode);
|
||||
|
||||
|
Verwijs in nieuw issue
Block a user