diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 1589404def..a74a0860ee 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -895,6 +895,7 @@ typedef enum { WMI_HOST_REQUEST_PEER_ADV_STATS = 0x4000, WMI_HOST_REQUEST_PMF_BCN_PROTECT_STAT = 0x8000, WMI_HOST_REQUEST_VDEV_PRB_FILS_STAT = 0x10000, + WMI_HOST_REQUEST_PDEV_EXTD_STAT = 0x20000, WMI_HOST_REQUEST_PDEV_TELEMETRY_STAT = 0x40000, } wmi_host_stats_id; @@ -4216,6 +4217,14 @@ struct wmi_host_peer_adv_stats { * @rx_mcs: RX MCS array * @tx_mcs: TX MCS array * @ack_rssi: Ack rssi + * @my_rx_count: What portion of time, as measured by the MAC HW clock was + * occupied by receiving PPDUs addressed to one of the vdevs + * within this pdev. + * @rx_matched_11ax_msdu_cnt: number of Rx 11ax MSDUs with matching BSS color + * counter updated at EOP (end of packet) + * @rx_other_11ax_msdu_cnt: number of Rx 11ax MSDUs with other BSS color counter + * updated at EOP (end of packet) + * @pdev_id: pdev id */ typedef struct { uint32_t rx_rssi_comb; @@ -4226,6 +4235,10 @@ typedef struct { uint32_t rx_mcs[10]; uint32_t tx_mcs[10]; uint32_t ack_rssi; + uint32_t my_rx_count; + uint32_t rx_matched_11ax_msdu_cnt; + uint32_t rx_other_11ax_msdu_cnt; + uint32_t pdev_id; } wmi_host_pdev_ext_stats; /** diff --git a/wmi/src/wmi_unified_cp_stats_tlv.c b/wmi/src/wmi_unified_cp_stats_tlv.c index bea8ff1538..0087289397 100644 --- a/wmi/src/wmi_unified_cp_stats_tlv.c +++ b/wmi/src/wmi_unified_cp_stats_tlv.c @@ -641,6 +641,12 @@ extract_all_stats_counts_tlv(wmi_unified_t wmi_handle, void *evt_buf, stats_param->stats_id |= WMI_HOST_REQUEST_VDEV_PRB_FILS_STAT; break; + + case WMI_REQUEST_PDEV_EXTD_STAT: + stats_param->stats_id |= + WMI_HOST_REQUEST_PDEV_EXTD_STAT; + break; + case WMI_REQUEST_PDEV_TELEMETRY_STAT: stats_param->stats_id |= WMI_HOST_REQUEST_PDEV_TELEMETRY_STAT; @@ -672,7 +678,7 @@ extract_all_stats_counts_tlv(wmi_unified_t wmi_handle, void *evt_buf, stats_param->last_event = ev->last_event; stats_param->num_pdev_stats = ev->num_pdev_stats; - stats_param->num_pdev_ext_stats = 0; + stats_param->num_pdev_ext_stats = param_buf->num_pdev_extd_stats; stats_param->num_vdev_stats = ev->num_vdev_stats; stats_param->num_peer_stats = ev->num_peer_stats; stats_param->num_peer_extd_stats = ev->num_peer_extd_stats; @@ -797,7 +803,7 @@ extract_pdev_stats_tlv(wmi_unified_t wmi_handle, void *evt_buf, uint32_t index, param_buf = (WMI_UPDATE_STATS_EVENTID_param_tlvs *) evt_buf; ev_param = (wmi_stats_event_fixed_param *) param_buf->fixed_param; pdev_stats->pdev_id = - wmi_handle->ops->convert_pdev_id_target_to_host(wmi_handle, + wmi_handle->ops->convert_target_pdev_id_to_host(wmi_handle, ev_param->pdev_id); data = param_buf->data; diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 97dc6a7b55..e01cba94f4 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -12407,6 +12407,26 @@ static QDF_STATUS extract_unit_test_tlv(wmi_unified_t wmi_handle, static QDF_STATUS extract_pdev_ext_stats_tlv(wmi_unified_t wmi_handle, void *evt_buf, uint32_t index, wmi_host_pdev_ext_stats *pdev_ext_stats) { + WMI_UPDATE_STATS_EVENTID_param_tlvs *param_buf; + wmi_pdev_extd_stats *ev; + + param_buf = evt_buf; + if (!param_buf) + return QDF_STATUS_E_FAILURE; + + if (!param_buf->pdev_extd_stats) + return QDF_STATUS_E_FAILURE; + + ev = param_buf->pdev_extd_stats + index; + + pdev_ext_stats->pdev_id = + wmi_handle->ops->convert_target_pdev_id_to_host( + wmi_handle, + ev->pdev_id); + pdev_ext_stats->my_rx_count = ev->my_rx_count; + pdev_ext_stats->rx_matched_11ax_msdu_cnt = ev->rx_matched_11ax_msdu_cnt; + pdev_ext_stats->rx_other_11ax_msdu_cnt = ev->rx_other_11ax_msdu_cnt; + return QDF_STATUS_SUCCESS; }