diff --git a/wmi_unified_tlv.c b/wmi_unified_tlv.c index 6026e208ce..6410e67795 100644 --- a/wmi_unified_tlv.c +++ b/wmi_unified_tlv.c @@ -30,6 +30,8 @@ #include "wmi_version.h" #include "wmi_unified_priv.h" #include "wmi_version_whitelist.h" +#include + #ifdef CONVERGED_P2P_ENABLE #include "wlan_p2p_public_struct.h" #endif @@ -7430,8 +7432,7 @@ static QDF_STATUS send_get_stats_cmd_tlv(wmi_unified_t wmi_handle, WMITLV_GET_STRUCT_TLVLEN (wmi_request_stats_cmd_fixed_param)); cmd->stats_id = - WMI_REQUEST_PEER_STAT | WMI_REQUEST_PDEV_STAT | - WMI_REQUEST_VDEV_STAT | WMI_REQUEST_RSSI_PER_CHAIN_STAT; + WMI_REQUEST_PDEV_STAT; cmd->vdev_id = get_stats_param->session_id; WMI_CHAR_ARRAY_TO_MAC_ADDR(addr, &cmd->peer_macaddr); WMI_LOGD("STATS REQ VDEV_ID:%d-->", cmd->vdev_id); @@ -16360,10 +16361,69 @@ static QDF_STATUS extract_all_stats_counts_tlv(wmi_unified_t wmi_handle, stats_param->num_peer_stats = ev->num_peer_stats; stats_param->num_bcnflt_stats = ev->num_bcnflt_stats; stats_param->num_chan_stats = ev->num_chan_stats; + stats_param->pdev_id = 0; return QDF_STATUS_SUCCESS; } +/** + * extract_pdev_tx_stats() - extract pdev tx stats from event + */ +static void extract_pdev_tx_stats(wmi_host_dbg_tx_stats *tx, struct wlan_dbg_tx_stats *tx_stats) +{ + /* Tx Stats */ + tx->comp_queued = tx_stats->comp_queued; + tx->comp_delivered = tx_stats->comp_delivered; + tx->msdu_enqued = tx_stats->msdu_enqued; + tx->mpdu_enqued = tx_stats->mpdu_enqued; + tx->wmm_drop = tx_stats->wmm_drop; + tx->local_enqued = tx_stats->local_enqued; + tx->local_freed = tx_stats->local_freed; + tx->hw_queued = tx_stats->hw_queued; + tx->hw_reaped = tx_stats->hw_reaped; + tx->underrun = tx_stats->underrun; + tx->tx_abort = tx_stats->tx_abort; + tx->mpdus_requed = tx_stats->mpdus_requed; + tx->data_rc = tx_stats->data_rc; + tx->self_triggers = tx_stats->self_triggers; + tx->sw_retry_failure = tx_stats->sw_retry_failure; + tx->illgl_rate_phy_err = tx_stats->illgl_rate_phy_err; + tx->pdev_cont_xretry = tx_stats->pdev_cont_xretry; + tx->pdev_tx_timeout = tx_stats->pdev_tx_timeout; + tx->pdev_resets = tx_stats->pdev_resets; + tx->stateless_tid_alloc_failure = tx_stats->stateless_tid_alloc_failure; + tx->phy_underrun = tx_stats->phy_underrun; + tx->txop_ovf = tx_stats->txop_ovf; + + return; +} + + +/** + * extract_pdev_rx_stats() - extract pdev rx stats from event + */ +static void extract_pdev_rx_stats(wmi_host_dbg_rx_stats *rx, struct wlan_dbg_rx_stats *rx_stats) +{ + /* Rx Stats */ + rx->mid_ppdu_route_change = rx_stats->mid_ppdu_route_change; + rx->status_rcvd = rx_stats->status_rcvd; + rx->r0_frags = rx_stats->r0_frags; + rx->r1_frags = rx_stats->r1_frags; + rx->r2_frags = rx_stats->r2_frags; + /* Only TLV */ + rx->r3_frags = 0; + rx->htt_msdus = rx_stats->htt_msdus; + rx->htt_mpdus = rx_stats->htt_mpdus; + rx->loc_msdus = rx_stats->loc_msdus; + rx->loc_mpdus = rx_stats->loc_mpdus; + rx->oversize_amsdu = rx_stats->oversize_amsdu; + rx->phy_errs = rx_stats->phy_errs; + rx->phy_err_drop = rx_stats->phy_err_drop; + rx->mpdu_errs = rx_stats->mpdu_errs; + + return; +} + /** * extract_pdev_stats_tlv() - extract pdev stats from event * @wmi_handle: wmi handle @@ -16376,6 +16436,33 @@ static QDF_STATUS extract_all_stats_counts_tlv(wmi_unified_t wmi_handle, static QDF_STATUS extract_pdev_stats_tlv(wmi_unified_t wmi_handle, void *evt_buf, uint32_t index, wmi_host_pdev_stats *pdev_stats) { + WMI_UPDATE_STATS_EVENTID_param_tlvs *param_buf; + wmi_stats_event_fixed_param *ev_param; + uint8_t *data; + + param_buf = (WMI_UPDATE_STATS_EVENTID_param_tlvs *) evt_buf; + ev_param = (wmi_stats_event_fixed_param *) param_buf->fixed_param; + + data = param_buf->data; + + if (index < ev_param->num_pdev_stats) { + wmi_pdev_stats *ev = (wmi_pdev_stats *) ((data) + + (index * sizeof(wmi_pdev_stats))); + + pdev_stats->chan_nf = ev->chan_nf; + pdev_stats->tx_frame_count = ev->tx_frame_count; + pdev_stats->rx_frame_count = ev->rx_frame_count; + pdev_stats->rx_clear_count = ev->rx_clear_count; + pdev_stats->cycle_count = ev->cycle_count; + pdev_stats->phy_err_count = ev->phy_err_count; + pdev_stats->chan_tx_pwr = ev->chan_tx_pwr; + + extract_pdev_tx_stats(&(pdev_stats->pdev_stats.tx), + &(ev->pdev_stats.tx)); + extract_pdev_rx_stats(&(pdev_stats->pdev_stats.rx), + &(ev->pdev_stats.rx)); + } + return QDF_STATUS_SUCCESS; }