qcacmn: Add cdp function to get rate/link stats
Add cdp function to get the peer extended rate and link stats. This change is to support user level command to flush mld/link peer extended link and rate stats. cfg80211tool wifiX get_peer_extd_rate_link_stats <mac_addr> Change-Id: I20cd2b38b242008b95aedc5f9914088a149093dd CRs-Fixed: 3278042
This commit is contained in:

committed by
Madan Koyyalamudi

parent
3e3726cc7a
commit
8267333021
@@ -12744,6 +12744,102 @@ dp_flush_rate_stats_req(struct cdp_soc_t *soc_hdl,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
/**
|
||||
* dp_get_peer_extd_rate_link_stats(): function to get peer
|
||||
* extended rate and link stats
|
||||
* @soc_hdl: dp soc handler
|
||||
* @mac_addr: mac address of peer
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
dp_get_peer_extd_rate_link_stats(struct cdp_soc_t *soc_hdl, uint8_t *mac_addr)
|
||||
{
|
||||
uint8_t i;
|
||||
struct dp_peer *link_peer;
|
||||
struct dp_soc *link_peer_soc;
|
||||
struct dp_mld_link_peers link_peers_info;
|
||||
struct dp_peer *peer = NULL;
|
||||
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
|
||||
|
||||
if (!mac_addr) {
|
||||
dp_err("NULL peer mac addr\n");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
peer = dp_peer_find_hash_find(soc, mac_addr, 0,
|
||||
DP_VDEV_ALL, DP_MOD_ID_CDP);
|
||||
if (!peer) {
|
||||
dp_err("Invalid peer\n");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (IS_MLO_DP_MLD_PEER(peer)) {
|
||||
dp_get_link_peers_ref_from_mld_peer(soc, peer,
|
||||
&link_peers_info,
|
||||
DP_MOD_ID_CDP);
|
||||
for (i = 0; i < link_peers_info.num_links; i++) {
|
||||
link_peer = link_peers_info.link_peers[i];
|
||||
link_peer_soc = link_peer->vdev->pdev->soc;
|
||||
dp_wdi_event_handler(WDI_EVENT_FLUSH_RATE_STATS_REQ,
|
||||
link_peer_soc,
|
||||
dp_monitor_peer_get_peerstats_ctx
|
||||
(link_peer_soc, link_peer),
|
||||
link_peer->peer_id,
|
||||
WDI_NO_VAL,
|
||||
link_peer->vdev->pdev->pdev_id);
|
||||
}
|
||||
dp_release_link_peers_ref(&link_peers_info, DP_MOD_ID_CDP);
|
||||
} else {
|
||||
dp_wdi_event_handler(
|
||||
WDI_EVENT_FLUSH_RATE_STATS_REQ, soc,
|
||||
dp_monitor_peer_get_peerstats_ctx(soc, peer),
|
||||
peer->peer_id,
|
||||
WDI_NO_VAL, peer->vdev->pdev->pdev_id);
|
||||
}
|
||||
|
||||
dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#else
|
||||
static QDF_STATUS
|
||||
dp_get_peer_extd_rate_link_stats(struct cdp_soc_t *soc_hdl, uint8_t *mac_addr)
|
||||
{
|
||||
struct dp_peer *peer = NULL;
|
||||
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
|
||||
|
||||
if (!mac_addr) {
|
||||
dp_err("NULL peer mac addr\n");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
peer = dp_peer_find_hash_find(soc, mac_addr, 0,
|
||||
DP_VDEV_ALL, DP_MOD_ID_CDP);
|
||||
if (!peer) {
|
||||
dp_err("Invalid peer\n");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
dp_wdi_event_handler(
|
||||
WDI_EVENT_FLUSH_RATE_STATS_REQ, soc,
|
||||
dp_monitor_peer_get_peerstats_ctx(soc, peer),
|
||||
peer->peer_id,
|
||||
WDI_NO_VAL, peer->vdev->pdev->pdev_id);
|
||||
|
||||
dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
static inline QDF_STATUS
|
||||
dp_get_peer_extd_rate_link_stats(struct cdp_soc_t *soc_hdl, uint8_t *mac_addr)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void *dp_peer_get_peerstats_ctx(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t vdev_id,
|
||||
uint8_t *mac_addr)
|
||||
@@ -13684,6 +13780,8 @@ static struct cdp_host_stats_ops dp_ops_host_stats = {
|
||||
.txrx_pdev_telemetry_stats = dp_get_pdev_telemetry_stats,
|
||||
.txrx_peer_telemetry_stats = dp_get_peer_telemetry_stats,
|
||||
#endif
|
||||
.txrx_get_peer_extd_rate_link_stats =
|
||||
dp_get_peer_extd_rate_link_stats,
|
||||
/* TODO */
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user