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) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* 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 +
HTT_VDEV_STATS_GET_INDEX(TX_SUCCESS_PKT_CNT);
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 */
tag_buf = tlv_buf_temp +
HTT_VDEV_STATS_GET_INDEX(TX_SUCCESS_BYTE_CNT);
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 */
tag_buf = tlv_buf_temp +
HTT_VDEV_STATS_GET_INDEX(TX_RETRY_PKT_CNT);
pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf);
tx_comp.num += pkt_count;
tx_failed.num += pkt_count;
tx_failed.num = pkt_count;
/* Extract tx retry packet byte count from buffer */
tag_buf = tlv_buf_temp +
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_failed.bytes += byte_count;
tx_failed.bytes = byte_count;
/* Extract tx drop packet count from buffer */
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 */
tag_buf = tlv_buf_temp +
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_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 */
tag_buf = tlv_buf_temp +
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_failed.bytes += byte_count;

View File

@@ -1,5 +1,6 @@
/*
* 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
* 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_TX_SUCCESS_BYTE_CNT_OFFSET 6
#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 12
#define HTT_VDEV_STATS_TLV_TX_DROP_BYTE_CNT_OFFSET 14
#define HTT_VDEV_STATS_TLV_TX_DROP_PKT_CNT_OFFSET 16
#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_BYTE_CNT_OFFSET 18
#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_PKT_CNT_OFFSET 20
#define HTT_VDEV_STATS_TLV_TX_RETRY_PKT_CNT_OFFSET 10
#define HTT_VDEV_STATS_TLV_TX_DROP_PKT_CNT_OFFSET 12
#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_PKT_CNT_OFFSET 14
#define HTT_VDEV_STATS_TLV_TX_RETRY_BYTE_CNT_OFFSET 16
#define HTT_VDEV_STATS_TLV_TX_DROP_BYTE_CNT_OFFSET 18
#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_BYTE_CNT_OFFSET 20
#define HTT_VDEV_STATS_GET_INDEX(index) \
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;
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;
}
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)) {
*vdev_stats_id = id;
return QDF_STATUS_SUCCESS;
@@ -6423,7 +6423,7 @@ static QDF_STATUS dp_txrx_alloc_vdev_stats_id(struct cdp_soc_t *soc_hdl,
id++;
}
*vdev_stats_id = DP_INVALID_VDEV_STATS_ID;
*vdev_stats_id = CDP_INVALID_VDEV_STATS_ID;
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);
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;
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
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
/*
* 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:
soc->wlan_cfg_ctx->ipa_enabled = val.cdp_ipa_enabled;
break;
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
case CDP_SET_VDEV_STATS_HW_OFFLOAD:
wlan_cfg_ctx->vdev_stats_hw_offload_config =
val.cdp_psoc_param_vdev_stats_hw_offload;
wlan_cfg_set_vdev_stats_hw_offload_config(wlan_cfg_ctx,
val.cdp_psoc_param_vdev_stats_hw_offload);
break;
#endif
default:
break;
}

View File

@@ -161,9 +161,6 @@
#define DP_SKIP_BAR_UPDATE_TIMEOUT 5000
#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 {
DP_RX_PKTLOG_DISABLED = 0,
DP_RX_PKTLOG_FULL,

View File

@@ -28,14 +28,13 @@
#define HAL_MAX_REO2SW_RINGS 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,
uint8_t vdev_stats_id)
{
#ifdef RX_REO_QUEUE_STATISTICS_COUNTER_INDEX_MASK
HAL_DESC_SET_FIELD(reo_queue_desc, RX_REO_QUEUE,
STATISTICS_COUNTER_INDEX, vdev_stats_id);
#endif
}
#else
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;
}
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
bool
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;
}
void
wlan_cfg_set_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg,
bool val)
{}
#endif

View File

@@ -1954,6 +1954,18 @@ void
wlan_cfg_set_rx_rel_ring_id(struct wlan_cfg_dp_soc_ctxt *cfg,
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
* config