qcacmn: Get deterministic stats from DP mon_peer
Add cdp layer API to get stats and Copy peer deterministic stats from dp_mon_peer to cdp structure CRs-Fixed: 3380939 Change-Id: Ic90b9c9f5c7463ad0d5b7c2bb7a371e4d4fef070
This commit is contained in:

committed by
Madan Koyyalamudi

parent
e657b7999f
commit
444c6f16aa
@@ -1,6 +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-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021-2023 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
|
||||||
@@ -1034,6 +1034,33 @@ static inline QDF_STATUS cdp_get_peer_telemetry_stats(
|
|||||||
return soc->ops->host_stats_ops->txrx_peer_telemetry_stats(
|
return soc->ops->host_stats_ops->txrx_peer_telemetry_stats(
|
||||||
soc, addr, stats);
|
soc, addr, stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cdp_get_peer_deter_stats(): function to get peer deterministic stats
|
||||||
|
* @soc: soc handle
|
||||||
|
* @addr: peer address
|
||||||
|
* @stats: pointer to peer telemetry stats
|
||||||
|
*
|
||||||
|
* return: status
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS cdp_get_peer_deter_stats(
|
||||||
|
ol_txrx_soc_handle soc,
|
||||||
|
uint8_t *addr,
|
||||||
|
struct cdp_peer_deter_stats *stats)
|
||||||
|
{
|
||||||
|
if (!soc || !soc->ops) {
|
||||||
|
dp_cdp_debug("Invalid Instance");
|
||||||
|
QDF_BUG(0);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!soc->ops->host_stats_ops ||
|
||||||
|
!soc->ops->host_stats_ops->txrx_peer_deter_stats)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
return soc->ops->host_stats_ops->txrx_peer_deter_stats(
|
||||||
|
soc, addr, stats);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1244,6 +1244,11 @@ struct cdp_host_stats_ops {
|
|||||||
struct cdp_soc_t *soc,
|
struct cdp_soc_t *soc,
|
||||||
uint8_t *addr,
|
uint8_t *addr,
|
||||||
struct cdp_peer_telemetry_stats *stats);
|
struct cdp_peer_telemetry_stats *stats);
|
||||||
|
QDF_STATUS
|
||||||
|
(*txrx_peer_deter_stats)(
|
||||||
|
struct cdp_soc_t *soc,
|
||||||
|
uint8_t *addr,
|
||||||
|
struct cdp_peer_deter_stats *stats);
|
||||||
#endif
|
#endif
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
(*txrx_get_peer_extd_rate_link_stats)
|
(*txrx_get_peer_extd_rate_link_stats)
|
||||||
|
@@ -2947,6 +2947,18 @@ struct cdp_peer_rx_deter {
|
|||||||
uint64_t avg_rate;
|
uint64_t avg_rate;
|
||||||
uint32_t mode_cnt;
|
uint32_t mode_cnt;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct cdp_peer_deter_stats- Structure to hold peer deterministic stats
|
||||||
|
* @dl_det: TX DL deterministic stats
|
||||||
|
* @ul_det: TX UL deterministic stats
|
||||||
|
* @rx_det: RX deterministic stats
|
||||||
|
*/
|
||||||
|
struct cdp_peer_deter_stats {
|
||||||
|
struct cdp_peer_tx_dl_deter dl_det[MSDUQ_INDEX_MAX][TX_MODE_DL_MAX];
|
||||||
|
struct cdp_peer_tx_ul_deter ul_det[TX_MODE_UL_MAX];
|
||||||
|
struct cdp_peer_rx_deter rx_det;
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* struct cdp_pdev_stats - pdev stats
|
/* struct cdp_pdev_stats - pdev stats
|
||||||
|
@@ -966,6 +966,12 @@ void dp_monitor_peer_telemetry_stats(struct dp_peer *peer,
|
|||||||
struct cdp_peer_telemetry_stats *stats)
|
struct cdp_peer_telemetry_stats *stats)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_monitor_peer_deter_stats(struct dp_peer *peer,
|
||||||
|
struct cdp_peer_telemetry_stats *stats)
|
||||||
|
{
|
||||||
|
}
|
||||||
#endif /* WLAN_TELEMETRY_STATS_SUPPORT */
|
#endif /* WLAN_TELEMETRY_STATS_SUPPORT */
|
||||||
#endif /* !WIFI_MONITOR_SUPPORT */
|
#endif /* !WIFI_MONITOR_SUPPORT */
|
||||||
|
|
||||||
@@ -4221,6 +4227,19 @@ dp_get_pdev_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
|||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
|
dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
|
||||||
struct cdp_peer_telemetry_stats *stats);
|
struct cdp_peer_telemetry_stats *stats);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dp_get_peer_deter_stats- API to get peer deterministic stats
|
||||||
|
* @soc_hdl: soc handle
|
||||||
|
* @addr: peer mac
|
||||||
|
* @stats: pointer to peer deterministic stats
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS: Success
|
||||||
|
* QDF_STATUS_E_FAILURE: Error
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
|
||||||
|
struct cdp_peer_deter_stats *stats);
|
||||||
#endif /* WLAN_TELEMETRY_STATS_SUPPORT */
|
#endif /* WLAN_TELEMETRY_STATS_SUPPORT */
|
||||||
|
|
||||||
#ifdef CONNECTIVITY_PKTLOG
|
#ifdef CONNECTIVITY_PKTLOG
|
||||||
|
@@ -14202,6 +14202,7 @@ static struct cdp_host_stats_ops dp_ops_host_stats = {
|
|||||||
#ifdef WLAN_TELEMETRY_STATS_SUPPORT
|
#ifdef WLAN_TELEMETRY_STATS_SUPPORT
|
||||||
.txrx_pdev_telemetry_stats = dp_get_pdev_telemetry_stats,
|
.txrx_pdev_telemetry_stats = dp_get_pdev_telemetry_stats,
|
||||||
.txrx_peer_telemetry_stats = dp_get_peer_telemetry_stats,
|
.txrx_peer_telemetry_stats = dp_get_peer_telemetry_stats,
|
||||||
|
.txrx_peer_deter_stats = dp_get_peer_deter_stats,
|
||||||
#endif
|
#endif
|
||||||
.txrx_get_peer_extd_rate_link_stats =
|
.txrx_get_peer_extd_rate_link_stats =
|
||||||
dp_get_peer_extd_rate_link_stats,
|
dp_get_peer_extd_rate_link_stats,
|
||||||
|
@@ -9286,4 +9286,21 @@ dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
|
|||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
|
||||||
|
struct cdp_peer_deter_stats *stats)
|
||||||
|
{
|
||||||
|
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
|
||||||
|
struct dp_peer *peer = dp_peer_find_hash_find(soc, addr, 0, DP_VDEV_ALL,
|
||||||
|
DP_MOD_ID_MISC);
|
||||||
|
|
||||||
|
if (!peer)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
dp_monitor_peer_deter_stats(peer, stats);
|
||||||
|
dp_peer_unref_delete(peer, DP_MOD_ID_MISC);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -4452,6 +4452,21 @@ void dp_monitor_peer_telemetry_stats(struct dp_peer *peer,
|
|||||||
stats->rx_mpdu_total = mon_peer_stats->rx.rx_mpdus;
|
stats->rx_mpdu_total = mon_peer_stats->rx.rx_mpdus;
|
||||||
stats->snr = CDP_SNR_OUT(mon_peer_stats->rx.avg_snr);
|
stats->snr = CDP_SNR_OUT(mon_peer_stats->rx.avg_snr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_monitor_peer_deter_stats(struct dp_peer *peer,
|
||||||
|
struct cdp_peer_deter_stats *stats)
|
||||||
|
{
|
||||||
|
struct dp_mon_peer_stats *mon_peer_stats = NULL;
|
||||||
|
struct dp_mon_peer_deterministic *deter_stats;
|
||||||
|
|
||||||
|
if (qdf_unlikely(!peer->monitor_peer))
|
||||||
|
return;
|
||||||
|
|
||||||
|
mon_peer_stats = &peer->monitor_peer->stats;
|
||||||
|
deter_stats = mon_peer_stats->deter_stats;
|
||||||
|
qdf_mem_copy(stats, deter_stats, sizeof(*stats) * CDP_DATA_TID_MAX);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user