qcacmn: clearing jitter statistics
adding support for clearing jitter statistics for command "cfg80211tool athX txrx_stats 257" Change-Id: Iaac9a6e6a849bbb08935ca581fa58c93ef51bdbd
这个提交包含在:
@@ -1085,10 +1085,12 @@ struct ol_if_ops {
|
|||||||
uint16_t peer_id, uint8_t vdev_id, uint8_t *peer_mac_addr);
|
uint16_t peer_id, uint8_t vdev_id, uint8_t *peer_mac_addr);
|
||||||
#endif
|
#endif
|
||||||
int (*get_soc_nss_cfg)(struct cdp_ctrl_objmgr_psoc *ol_soc_handle);
|
int (*get_soc_nss_cfg)(struct cdp_ctrl_objmgr_psoc *ol_soc_handle);
|
||||||
/* TODO: Add any other control path calls required to OL_IF/WMA layer */
|
|
||||||
|
|
||||||
char *(*get_device_name)(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
|
char *(*get_device_name)(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
|
||||||
uint8_t pdev_id);
|
uint8_t pdev_id);
|
||||||
|
QDF_STATUS(*nss_stats_clr)(struct cdp_ctrl_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id);
|
||||||
|
/* TODO: Add any other control path calls required to OL_IF/WMA layer */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef DP_PEER_EXTENDED_API
|
#ifdef DP_PEER_EXTENDED_API
|
||||||
|
@@ -1271,6 +1271,23 @@ struct cdp_peer_stats {
|
|||||||
struct cdp_rx_stats rx;
|
struct cdp_rx_stats rx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* struct cdp_peer_tid_stats - Per peer and per TID stats
|
||||||
|
* @tx_avg_jitter: tx average jitter
|
||||||
|
* @tx_avg_delay: tx average delay
|
||||||
|
* @tx_avg_err: tx average error
|
||||||
|
* @tx_total_success: tx total success
|
||||||
|
* @tx_drop: tx drop
|
||||||
|
*/
|
||||||
|
struct cdp_peer_tid_stats {
|
||||||
|
#ifdef WLAN_PEER_JITTER
|
||||||
|
uint32_t tx_avg_jitter;
|
||||||
|
uint32_t tx_avg_delay;
|
||||||
|
uint64_t tx_avg_err;
|
||||||
|
uint64_t tx_total_success;
|
||||||
|
uint64_t tx_drop;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
/* struct cdp_interface_peer_stats - interface structure for txrx peer stats
|
/* struct cdp_interface_peer_stats - interface structure for txrx peer stats
|
||||||
* @peer_mac: peer mac address
|
* @peer_mac: peer mac address
|
||||||
* @vdev_id : vdev_id for the peer
|
* @vdev_id : vdev_id for the peer
|
||||||
|
@@ -7303,17 +7303,29 @@ void dp_print_napi_stats(struct dp_soc *soc)
|
|||||||
/**
|
/**
|
||||||
* dp_txrx_host_stats_clr(): Reinitialize the txrx stats
|
* dp_txrx_host_stats_clr(): Reinitialize the txrx stats
|
||||||
* @vdev: DP_VDEV handle
|
* @vdev: DP_VDEV handle
|
||||||
|
* @dp_soc: DP_SOC handle
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
static inline QDF_STATUS
|
static inline QDF_STATUS
|
||||||
dp_txrx_host_stats_clr(struct dp_vdev *vdev)
|
dp_txrx_host_stats_clr(struct dp_vdev *vdev, struct dp_soc *soc)
|
||||||
{
|
{
|
||||||
struct dp_peer *peer = NULL;
|
struct dp_peer *peer = NULL;
|
||||||
|
|
||||||
if (!vdev || !vdev->pdev)
|
if (!vdev || !vdev->pdev)
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* if NSS offload is enabled, then send message
|
||||||
|
* to NSS FW to clear the stats. Once NSS FW clears the statistics
|
||||||
|
* then clear host statistics.
|
||||||
|
*/
|
||||||
|
if (wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx)) {
|
||||||
|
if (soc->cdp_soc.ol_ops->nss_stats_clr)
|
||||||
|
soc->cdp_soc.ol_ops->nss_stats_clr(soc->ctrl_psoc,
|
||||||
|
vdev->vdev_id);
|
||||||
|
}
|
||||||
|
|
||||||
DP_STATS_CLR(vdev->pdev);
|
DP_STATS_CLR(vdev->pdev);
|
||||||
DP_STATS_CLR(vdev->pdev->soc);
|
DP_STATS_CLR(vdev->pdev->soc);
|
||||||
DP_STATS_CLR(vdev);
|
DP_STATS_CLR(vdev);
|
||||||
@@ -7321,10 +7333,15 @@ dp_txrx_host_stats_clr(struct dp_vdev *vdev)
|
|||||||
hif_clear_napi_stats(vdev->pdev->soc->hif_handle);
|
hif_clear_napi_stats(vdev->pdev->soc->hif_handle);
|
||||||
|
|
||||||
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
|
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
|
||||||
if (!peer)
|
struct dp_rx_tid *rx_tid;
|
||||||
return QDF_STATUS_E_FAILURE;
|
uint8_t tid;
|
||||||
DP_STATS_CLR(peer);
|
|
||||||
|
|
||||||
|
for (tid = 0; tid < DP_MAX_TIDS; tid++) {
|
||||||
|
rx_tid = &peer->rx_tid[tid];
|
||||||
|
DP_STATS_CLR(rx_tid);
|
||||||
|
}
|
||||||
|
|
||||||
|
DP_STATS_CLR(peer);
|
||||||
#if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE
|
#if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE
|
||||||
dp_wdi_event_handler(WDI_EVENT_UPDATE_DP_STATS, vdev->pdev->soc,
|
dp_wdi_event_handler(WDI_EVENT_UPDATE_DP_STATS, vdev->pdev->soc,
|
||||||
&peer->stats, peer->peer_id,
|
&peer->stats, peer->peer_id,
|
||||||
@@ -7424,13 +7441,15 @@ static void dp_txrx_stats_help(void)
|
|||||||
/**
|
/**
|
||||||
* dp_print_host_stats()- Function to print the stats aggregated at host
|
* dp_print_host_stats()- Function to print the stats aggregated at host
|
||||||
* @vdev_handle: DP_VDEV handle
|
* @vdev_handle: DP_VDEV handle
|
||||||
* @type: host stats type
|
* @req: host stats type
|
||||||
|
* @soc: dp soc handler
|
||||||
*
|
*
|
||||||
* Return: 0 on success, print error message in case of failure
|
* Return: 0 on success, print error message in case of failure
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
dp_print_host_stats(struct dp_vdev *vdev,
|
dp_print_host_stats(struct dp_vdev *vdev,
|
||||||
struct cdp_txrx_stats_req *req)
|
struct cdp_txrx_stats_req *req,
|
||||||
|
struct dp_soc *soc)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)vdev->pdev;
|
struct dp_pdev *pdev = (struct dp_pdev *)vdev->pdev;
|
||||||
enum cdp_host_txrx_stats type =
|
enum cdp_host_txrx_stats type =
|
||||||
@@ -7440,7 +7459,7 @@ dp_print_host_stats(struct dp_vdev *vdev,
|
|||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TXRX_CLEAR_STATS:
|
case TXRX_CLEAR_STATS:
|
||||||
dp_txrx_host_stats_clr(vdev);
|
dp_txrx_host_stats_clr(vdev, soc);
|
||||||
break;
|
break;
|
||||||
case TXRX_RX_RATE_STATS:
|
case TXRX_RX_RATE_STATS:
|
||||||
dp_print_rx_rates(vdev);
|
dp_print_rx_rates(vdev);
|
||||||
@@ -8996,7 +9015,7 @@ QDF_STATUS dp_txrx_stats_request(struct cdp_soc_t *soc_handle,
|
|||||||
|
|
||||||
if ((host_stats != TXRX_HOST_STATS_INVALID) &&
|
if ((host_stats != TXRX_HOST_STATS_INVALID) &&
|
||||||
(host_stats <= TXRX_HOST_STATS_MAX))
|
(host_stats <= TXRX_HOST_STATS_MAX))
|
||||||
return dp_print_host_stats(vdev, req);
|
return dp_print_host_stats(vdev, req, soc);
|
||||||
else
|
else
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||||
"Wrong Input for TxRx Stats");
|
"Wrong Input for TxRx Stats");
|
||||||
|
@@ -5366,11 +5366,11 @@ static void dp_print_jitter_stats(struct dp_peer *peer, struct dp_pdev *pdev)
|
|||||||
"Total Success Count : %llu\n"
|
"Total Success Count : %llu\n"
|
||||||
"Total Drop : %llu\n",
|
"Total Drop : %llu\n",
|
||||||
rx_tid->tid,
|
rx_tid->tid,
|
||||||
rx_tid->tx_avg_jitter,
|
rx_tid->stats.tx_avg_jitter,
|
||||||
rx_tid->tx_avg_delay,
|
rx_tid->stats.tx_avg_delay,
|
||||||
rx_tid->tx_avg_err,
|
rx_tid->stats.tx_avg_err,
|
||||||
rx_tid->tx_total_success,
|
rx_tid->stats.tx_total_success,
|
||||||
rx_tid->tx_drop);
|
rx_tid->stats.tx_drop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@@ -653,14 +653,8 @@ struct dp_rx_tid {
|
|||||||
/* Coex Override preserved windows size 1 based */
|
/* Coex Override preserved windows size 1 based */
|
||||||
uint16_t rx_ba_win_size_override;
|
uint16_t rx_ba_win_size_override;
|
||||||
|
|
||||||
#ifdef WLAN_PEER_JITTER
|
/* Peer TID statistics */
|
||||||
/* Tx Jitter stats */
|
struct cdp_peer_tid_stats stats;
|
||||||
uint32_t tx_avg_jitter;
|
|
||||||
uint32_t tx_avg_delay;
|
|
||||||
uint64_t tx_avg_err;
|
|
||||||
uint64_t tx_total_success;
|
|
||||||
uint64_t tx_drop;
|
|
||||||
#endif /* WLAN_PEER_JITTER */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
在新工单中引用
屏蔽一个用户