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:

committed by
Madan Koyyalamudi

parent
95cb0e103f
commit
21fb667866
@@ -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;
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user