diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index 13a990dbc5..198ff33150 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -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; diff --git a/dp/wifi3.0/dp_htt.h b/dp/wifi3.0/dp_htt.h index 768f2cc6d4..3ae874576f 100644 --- a/dp/wifi3.0/dp_htt.h +++ b/dp/wifi3.0/dp_htt.h @@ -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 diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 322374dd24..ac036c34d4 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -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; } diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index db98da06f0..32e374cea2 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -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, diff --git a/hal/wifi3.0/be/hal_be_reo.h b/hal/wifi3.0/be/hal_be_reo.h index 01bfa74925..e1252451cb 100644 --- a/hal/wifi3.0/be/hal_be_reo.h +++ b/hal/wifi3.0/be/hal_be_reo.h @@ -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, diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c index 7dd8aace10..11ff816fbf 100644 --- a/wlan_cfg/wlan_cfg.c +++ b/wlan_cfg/wlan_cfg.c @@ -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 diff --git a/wlan_cfg/wlan_cfg.h b/wlan_cfg/wlan_cfg.h index b6feebb617..b1d0b6844a 100644 --- a/wlan_cfg/wlan_cfg.h +++ b/wlan_cfg/wlan_cfg.h @@ -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