diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index de8d0c73ec..e2c4ca6c19 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -4757,6 +4757,7 @@ typedef struct { * @fd_fail_cnt: Toatl number of Fils discovery failed count * @unsolicited_prb_succ_cnt: Successful unsolicited probe response frames cnt * @unsolicited_prb_fail_cnt: Failed unsolictied probe response frames cnt + * @is_mlo_vdev_active: is the mlo vdev currently active */ struct wmi_host_vdev_prb_fils_stats { uint32_t vdev_id; @@ -4764,6 +4765,7 @@ struct wmi_host_vdev_prb_fils_stats { uint32_t fd_fail_cnt; uint32_t unsolicited_prb_succ_cnt; uint32_t unsolicited_prb_fail_cnt; + bool is_mlo_vdev_active; }; /** diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 0ab05a95ef..23742997dd 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -6928,6 +6928,7 @@ static QDF_STATUS send_unified_ll_stats_get_sta_cmd_tlv( WMI_REQUEST_PEER_STAT | WMI_REQUEST_VDEV_STAT | WMI_REQUEST_PDEV_STAT | + WMI_REQUEST_VDEV_EXTD_STAT | WMI_REQUEST_PEER_EXTD2_STAT | WMI_REQUEST_RSSI_PER_CHAIN_STAT); unified_cmd->pdev_id = wmi_handle->ops->convert_pdev_id_host_to_target( @@ -13692,6 +13693,45 @@ static QDF_STATUS extract_bcn_stats_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +#ifdef WLAN_FEATURE_11BE_MLO +/** + * wmi_is_mlo_vdev_active() - get if mlo vdev is active or not + * @flag: vdev link status info + * + * Return: True if active, else False + */ +static bool wmi_is_mlo_vdev_active(uint32_t flag) +{ + if ((flag & WMI_VDEV_STATS_FLAGS_LINK_ACTIVE_FLAG_IS_VALID_MASK) && + (flag & WMI_VDEV_STATS_FLAGS_IS_LINK_ACTIVE_MASK)) + return true; + + return false; +} + +static QDF_STATUS +extract_mlo_vdev_status_info(WMI_UPDATE_STATS_EVENTID_param_tlvs *param_buf, + wmi_vdev_extd_stats *ev, + struct wmi_host_vdev_prb_fils_stats *vdev_stats) +{ + if (!param_buf->num_vdev_extd_stats) { + wmi_err("No vdev_extd_stats in the event buffer"); + return QDF_STATUS_E_INVAL; + } + + vdev_stats->is_mlo_vdev_active = wmi_is_mlo_vdev_active(ev->flags); + return QDF_STATUS_SUCCESS; +} +#else +static QDF_STATUS +extract_mlo_vdev_status_info(WMI_UPDATE_STATS_EVENTID_param_tlvs *param_buf, + wmi_vdev_extd_stats *ev, + struct wmi_host_vdev_prb_fils_stats *vdev_stats) +{ + return QDF_STATUS_SUCCESS; +} +#endif + /** * extract_vdev_prb_fils_stats_tlv() - extract vdev probe and fils * stats from event @@ -13709,6 +13749,7 @@ extract_vdev_prb_fils_stats_tlv(wmi_unified_t wmi_handle, { WMI_UPDATE_STATS_EVENTID_param_tlvs *param_buf; wmi_vdev_extd_stats *ev; + QDF_STATUS status = QDF_STATUS_SUCCESS; param_buf = (WMI_UPDATE_STATS_EVENTID_param_tlvs *)evt_buf; @@ -13722,13 +13763,15 @@ extract_vdev_prb_fils_stats_tlv(wmi_unified_t wmi_handle, ev->unsolicited_prb_succ_cnt; vdev_stats->unsolicited_prb_fail_cnt = ev->unsolicited_prb_fail_cnt; + status = extract_mlo_vdev_status_info(param_buf, ev, + vdev_stats); wmi_debug("vdev: %d, fd_s: %d, fd_f: %d, prb_s: %d, prb_f: %d", ev->vdev_id, ev->fd_succ_cnt, ev->fd_fail_cnt, ev->unsolicited_prb_succ_cnt, ev->unsolicited_prb_fail_cnt); } - return QDF_STATUS_SUCCESS; + return status; } /**