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
@@ -1035,4 +1035,30 @@ static inline QDF_STATUS cdp_get_peer_telemetry_stats(
|
|||||||
soc, addr, stats);
|
soc, addr, stats);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cdp_get_peer_extd_rate_link_stats(): cdp function to get peer
|
||||||
|
* extended rate and link stats
|
||||||
|
* @soc: soc handle
|
||||||
|
* @addr: mac address
|
||||||
|
*
|
||||||
|
* return: status
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS cdp_get_peer_extd_rate_link_stats(
|
||||||
|
ol_txrx_soc_handle soc,
|
||||||
|
uint8_t *mac_addr)
|
||||||
|
{
|
||||||
|
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_get_peer_extd_rate_link_stats)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
return soc->ops->host_stats_ops->txrx_get_peer_extd_rate_link_stats(
|
||||||
|
soc, mac_addr);
|
||||||
|
}
|
||||||
#endif /* _CDP_TXRX_HOST_STATS_H_ */
|
#endif /* _CDP_TXRX_HOST_STATS_H_ */
|
||||||
|
@@ -1204,6 +1204,9 @@ struct cdp_host_stats_ops {
|
|||||||
uint8_t *addr,
|
uint8_t *addr,
|
||||||
struct cdp_peer_telemetry_stats *stats);
|
struct cdp_peer_telemetry_stats *stats);
|
||||||
#endif
|
#endif
|
||||||
|
QDF_STATUS
|
||||||
|
(*txrx_get_peer_extd_rate_link_stats)
|
||||||
|
(struct cdp_soc_t *soc, uint8_t *mac_addr);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cdp_wds_ops {
|
struct cdp_wds_ops {
|
||||||
|
@@ -12744,6 +12744,102 @@ dp_flush_rate_stats_req(struct cdp_soc_t *soc_hdl,
|
|||||||
}
|
}
|
||||||
#endif
|
#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,
|
static void *dp_peer_get_peerstats_ctx(struct cdp_soc_t *soc_hdl,
|
||||||
uint8_t vdev_id,
|
uint8_t vdev_id,
|
||||||
uint8_t *mac_addr)
|
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_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,
|
||||||
#endif
|
#endif
|
||||||
|
.txrx_get_peer_extd_rate_link_stats =
|
||||||
|
dp_get_peer_extd_rate_link_stats,
|
||||||
/* TODO */
|
/* TODO */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user