qcacmn: Correct the offsets & byte cnt computation in HTT stats

Offsets used by host for HTT stats are not aligned as per the
structure declaration given in file htt.h .
Make change to use the correct offsets to get the correct stats.

Also make change for byte count computation.

Also make cleanup changes for FR65817.

Change-Id: I8bc6164cc4994c49536d7277779f25b258be1592
CRs-Fixed: 3082742
This commit is contained in:
Harsh Kumar Bijlani
2021-12-03 12:22:51 +05:30
committed by Madan Koyyalamudi
parent 95cb0e103f
commit 21fb667866
7 changed files with 51 additions and 28 deletions

View File

@@ -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
@@ -2174,27 +2175,27 @@ static void dp_vdev_txrx_hw_stats_handler(struct htt_soc *soc,
tag_buf = tlv_buf_temp + tag_buf = tlv_buf_temp +
HTT_VDEV_STATS_GET_INDEX(TX_SUCCESS_PKT_CNT); HTT_VDEV_STATS_GET_INDEX(TX_SUCCESS_PKT_CNT);
pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf); pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf);
tx_comp.num += pkt_count; tx_comp.num = pkt_count;
/* Extract tx success packet byte count from buffer */ /* Extract tx success packet byte count from buffer */
tag_buf = tlv_buf_temp + tag_buf = tlv_buf_temp +
HTT_VDEV_STATS_GET_INDEX(TX_SUCCESS_BYTE_CNT); HTT_VDEV_STATS_GET_INDEX(TX_SUCCESS_BYTE_CNT);
byte_count = HTT_VDEV_GET_STATS_U64(tag_buf); byte_count = HTT_VDEV_GET_STATS_U64(tag_buf);
tx_comp.bytes += byte_count; tx_comp.bytes = byte_count;
/* Extract tx retry packet count from buffer */ /* Extract tx retry packet count from buffer */
tag_buf = tlv_buf_temp + tag_buf = tlv_buf_temp +
HTT_VDEV_STATS_GET_INDEX(TX_RETRY_PKT_CNT); HTT_VDEV_STATS_GET_INDEX(TX_RETRY_PKT_CNT);
pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf); pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf);
tx_comp.num += pkt_count; tx_comp.num += pkt_count;
tx_failed.num += pkt_count; tx_failed.num = pkt_count;
/* Extract tx retry packet byte count from buffer */ /* Extract tx retry packet byte count from buffer */
tag_buf = tlv_buf_temp + tag_buf = tlv_buf_temp +
HTT_VDEV_STATS_GET_INDEX(TX_RETRY_BYTE_CNT); HTT_VDEV_STATS_GET_INDEX(TX_RETRY_BYTE_CNT);
pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf); byte_count = HTT_VDEV_GET_STATS_U64(tag_buf);
tx_comp.bytes += byte_count; tx_comp.bytes += byte_count;
tx_failed.bytes += byte_count; tx_failed.bytes = byte_count;
/* Extract tx drop packet count from buffer */ /* Extract tx drop packet count from buffer */
tag_buf = tlv_buf_temp + tag_buf = tlv_buf_temp +
@@ -2206,7 +2207,7 @@ static void dp_vdev_txrx_hw_stats_handler(struct htt_soc *soc,
/* Extract tx drop packet byte count from buffer */ /* Extract tx drop packet byte count from buffer */
tag_buf = tlv_buf_temp + tag_buf = tlv_buf_temp +
HTT_VDEV_STATS_GET_INDEX(TX_DROP_BYTE_CNT); HTT_VDEV_STATS_GET_INDEX(TX_DROP_BYTE_CNT);
pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf); byte_count = HTT_VDEV_GET_STATS_U64(tag_buf);
tx_comp.bytes += byte_count; tx_comp.bytes += byte_count;
tx_failed.bytes += byte_count; tx_failed.bytes += byte_count;
@@ -2220,7 +2221,7 @@ static void dp_vdev_txrx_hw_stats_handler(struct htt_soc *soc,
/* Extract tx age-out packet byte count from buffer */ /* Extract tx age-out packet byte count from buffer */
tag_buf = tlv_buf_temp + tag_buf = tlv_buf_temp +
HTT_VDEV_STATS_GET_INDEX(TX_AGE_OUT_BYTE_CNT); HTT_VDEV_STATS_GET_INDEX(TX_AGE_OUT_BYTE_CNT);
pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf); byte_count = HTT_VDEV_GET_STATS_U64(tag_buf);
tx_comp.bytes += byte_count; tx_comp.bytes += byte_count;
tx_failed.bytes += byte_count; tx_failed.bytes += byte_count;

View File

@@ -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
@@ -147,12 +148,12 @@ void htt_htc_pkt_pool_free(struct htt_soc *soc);
#define HTT_VDEV_STATS_TLV_RX_PKT_CNT_OFFSET 4 #define HTT_VDEV_STATS_TLV_RX_PKT_CNT_OFFSET 4
#define HTT_VDEV_STATS_TLV_TX_SUCCESS_BYTE_CNT_OFFSET 6 #define HTT_VDEV_STATS_TLV_TX_SUCCESS_BYTE_CNT_OFFSET 6
#define HTT_VDEV_STATS_TLV_TX_SUCCESS_PKT_CNT_OFFSET 8 #define HTT_VDEV_STATS_TLV_TX_SUCCESS_PKT_CNT_OFFSET 8
#define HTT_VDEV_STATS_TLV_TX_RETRY_BYTE_CNT_OFFSET 10 #define HTT_VDEV_STATS_TLV_TX_RETRY_PKT_CNT_OFFSET 10
#define HTT_VDEV_STATS_TLV_TX_RETRY_PKT_CNT_OFFSET 12 #define HTT_VDEV_STATS_TLV_TX_DROP_PKT_CNT_OFFSET 12
#define HTT_VDEV_STATS_TLV_TX_DROP_BYTE_CNT_OFFSET 14 #define HTT_VDEV_STATS_TLV_TX_AGE_OUT_PKT_CNT_OFFSET 14
#define HTT_VDEV_STATS_TLV_TX_DROP_PKT_CNT_OFFSET 16 #define HTT_VDEV_STATS_TLV_TX_RETRY_BYTE_CNT_OFFSET 16
#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_BYTE_CNT_OFFSET 18 #define HTT_VDEV_STATS_TLV_TX_DROP_BYTE_CNT_OFFSET 18
#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_PKT_CNT_OFFSET 20 #define HTT_VDEV_STATS_TLV_TX_AGE_OUT_BYTE_CNT_OFFSET 20
#define HTT_VDEV_STATS_GET_INDEX(index) \ #define HTT_VDEV_STATS_GET_INDEX(index) \
HTT_VDEV_STATS_TLV_##index##_OFFSET HTT_VDEV_STATS_TLV_##index##_OFFSET

View File

@@ -6411,11 +6411,11 @@ static QDF_STATUS dp_txrx_alloc_vdev_stats_id(struct cdp_soc_t *soc_hdl,
uint8_t id = 0; uint8_t id = 0;
if (!wlan_cfg_get_vdev_stats_hw_offload_config(soc->wlan_cfg_ctx)) { if (!wlan_cfg_get_vdev_stats_hw_offload_config(soc->wlan_cfg_ctx)) {
*vdev_stats_id = DP_INVALID_VDEV_STATS_ID; *vdev_stats_id = CDP_INVALID_VDEV_STATS_ID;
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
while (id < DP_MAX_VDEV_STATS_ID) { while (id < CDP_MAX_VDEV_STATS_ID) {
if (!qdf_atomic_test_and_set_bit(id, &soc->vdev_stats_id_map)) { if (!qdf_atomic_test_and_set_bit(id, &soc->vdev_stats_id_map)) {
*vdev_stats_id = id; *vdev_stats_id = id;
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
@@ -6423,7 +6423,7 @@ static QDF_STATUS dp_txrx_alloc_vdev_stats_id(struct cdp_soc_t *soc_hdl,
id++; id++;
} }
*vdev_stats_id = DP_INVALID_VDEV_STATS_ID; *vdev_stats_id = CDP_INVALID_VDEV_STATS_ID;
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
@@ -6440,7 +6440,7 @@ static void dp_txrx_reset_vdev_stats_id(struct cdp_soc_t *soc_hdl,
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl); struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
if ((!wlan_cfg_get_vdev_stats_hw_offload_config(soc->wlan_cfg_ctx)) || if ((!wlan_cfg_get_vdev_stats_hw_offload_config(soc->wlan_cfg_ctx)) ||
(vdev_stats_id >= DP_MAX_VDEV_STATS_ID)) (vdev_stats_id >= CDP_MAX_VDEV_STATS_ID))
return; return;
qdf_atomic_clear_bit(vdev_stats_id, &soc->vdev_stats_id_map); qdf_atomic_clear_bit(vdev_stats_id, &soc->vdev_stats_id_map);
@@ -6665,7 +6665,10 @@ void dp_peer_hw_txrx_stats_init(struct dp_soc *soc, struct dp_peer *peer)
} }
#else #else
static inline static inline
void dp_peer_hw_txrx_stats_init(struct dp_soc *soc, struct dp_peer *peer) {} void dp_peer_hw_txrx_stats_init(struct dp_soc *soc, struct dp_peer *peer)
{
peer->hw_txrx_stats_en = 0;
}
#endif #endif
/* /*
* dp_peer_create_wifi3() - attach txrx peer * dp_peer_create_wifi3() - attach txrx peer
@@ -9536,12 +9539,10 @@ dp_set_psoc_param(struct cdp_soc_t *cdp_soc,
case CDP_IPA_ENABLE: case CDP_IPA_ENABLE:
soc->wlan_cfg_ctx->ipa_enabled = val.cdp_ipa_enabled; soc->wlan_cfg_ctx->ipa_enabled = val.cdp_ipa_enabled;
break; break;
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
case CDP_SET_VDEV_STATS_HW_OFFLOAD: case CDP_SET_VDEV_STATS_HW_OFFLOAD:
wlan_cfg_ctx->vdev_stats_hw_offload_config = wlan_cfg_set_vdev_stats_hw_offload_config(wlan_cfg_ctx,
val.cdp_psoc_param_vdev_stats_hw_offload; val.cdp_psoc_param_vdev_stats_hw_offload);
break; break;
#endif
default: default:
break; break;
} }

View File

@@ -161,9 +161,6 @@
#define DP_SKIP_BAR_UPDATE_TIMEOUT 5000 #define DP_SKIP_BAR_UPDATE_TIMEOUT 5000
#endif #endif
#define DP_MAX_VDEV_STATS_ID CDP_MAX_VDEV_STATS_ID
#define DP_INVALID_VDEV_STATS_ID CDP_INVALID_VDEV_STATS_ID
enum rx_pktlog_mode { enum rx_pktlog_mode {
DP_RX_PKTLOG_DISABLED = 0, DP_RX_PKTLOG_DISABLED = 0,
DP_RX_PKTLOG_FULL, DP_RX_PKTLOG_FULL,

View File

@@ -28,14 +28,13 @@
#define HAL_MAX_REO2SW_RINGS 8 #define HAL_MAX_REO2SW_RINGS 8
#define HAL_NUM_RX_RING_PER_IX_MAP 8 #define HAL_NUM_RX_RING_PER_IX_MAP 8
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT #if defined(QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT) && \
defined(RX_REO_QUEUE_STATISTICS_COUNTER_INDEX_MASK)
static inline void hal_update_stats_counter_index(uint32_t *reo_queue_desc, static inline void hal_update_stats_counter_index(uint32_t *reo_queue_desc,
uint8_t vdev_stats_id) uint8_t vdev_stats_id)
{ {
#ifdef RX_REO_QUEUE_STATISTICS_COUNTER_INDEX_MASK
HAL_DESC_SET_FIELD(reo_queue_desc, RX_REO_QUEUE, HAL_DESC_SET_FIELD(reo_queue_desc, RX_REO_QUEUE,
STATISTICS_COUNTER_INDEX, vdev_stats_id); STATISTICS_COUNTER_INDEX, vdev_stats_id);
#endif
} }
#else #else
static inline void hal_update_stats_counter_index(uint32_t *reo_queue_desc, static inline void hal_update_stats_counter_index(uint32_t *reo_queue_desc,

View File

@@ -3141,6 +3141,13 @@ int wlan_cfg_get_vdev_stats_hw_offload_timer(struct wlan_cfg_dp_soc_ctxt *cfg)
{ {
return cfg->vdev_stats_hw_offload_timer; return cfg->vdev_stats_hw_offload_timer;
} }
void
wlan_cfg_set_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg,
bool val)
{
cfg->vdev_stats_hw_offload_config = val;
}
#else #else
bool bool
wlan_cfg_get_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg) wlan_cfg_get_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg)
@@ -3152,4 +3159,9 @@ int wlan_cfg_get_vdev_stats_hw_offload_timer(struct wlan_cfg_dp_soc_ctxt *cfg)
{ {
return 0; return 0;
} }
void
wlan_cfg_set_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg,
bool val)
{}
#endif #endif

View File

@@ -1954,6 +1954,18 @@ void
wlan_cfg_set_rx_rel_ring_id(struct wlan_cfg_dp_soc_ctxt *cfg, wlan_cfg_set_rx_rel_ring_id(struct wlan_cfg_dp_soc_ctxt *cfg,
uint8_t wbm2sw_ring_id); uint8_t wbm2sw_ring_id);
/**
* wlan_cfg_set_vdev_stats_hw_offload_config() - Set hw vdev stats offload
* config
* @cfg: config context
* @value: value to be set
*
* Return: none
*/
void
wlan_cfg_set_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg,
bool value);
/** /**
* wlan_cfg_get_vdev_stats_hw_offload_config() - Get hw vdev stats offload * wlan_cfg_get_vdev_stats_hw_offload_config() - Get hw vdev stats offload
* config * config