diff --git a/wmi/src/wmi_unified_ap_tlv.c b/wmi/src/wmi_unified_ap_tlv.c index 67fc2bc6e2..da35789de7 100644 --- a/wmi/src/wmi_unified_ap_tlv.c +++ b/wmi/src/wmi_unified_ap_tlv.c @@ -2488,6 +2488,48 @@ send_peer_chan_width_switch_cmd_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +static QDF_STATUS extract_multi_vdev_restart_resp_event_tlv( + wmi_unified_t wmi_hdl, void *evt_buf, + struct multi_vdev_restart_resp *param) +{ + WMI_PDEV_MULTIPLE_VDEV_RESTART_RESP_EVENTID_param_tlvs *param_buf; + wmi_pdev_multiple_vdev_restart_resp_event_fixed_param *ev; + + param_buf = + (WMI_PDEV_MULTIPLE_VDEV_RESTART_RESP_EVENTID_param_tlvs *)evt_buf; + if (!param_buf) { + WMI_LOGE("Invalid buf multi_vdev restart response"); + return QDF_STATUS_E_INVAL; + } + + ev = (wmi_pdev_multiple_vdev_restart_resp_event_fixed_param *) + param_buf->fixed_param; + if (!ev) { + WMI_LOGE("Invalid ev multi_vdev restart response"); + return QDF_STATUS_E_INVAL; + } + + param->pdev_id = ev->pdev_id; + param->status = ev->status; + + if (!param_buf->num_vdev_ids_bitmap) + return QDF_STATUS_E_FAILURE; + + if (param_buf->num_vdev_ids_bitmap > sizeof(param->vdev_id_bmap)) { + WMI_LOGE("vdevId bitmap overflow size:%d", + param_buf->num_vdev_ids_bitmap); + return QDF_STATUS_E_FAILURE; + } + + qdf_mem_copy(param->vdev_id_bmap, param_buf->vdev_ids_bitmap, + param_buf->num_vdev_ids_bitmap); + + WMI_LOGD("vdev_id_bmap :0x%x%x", param->vdev_id_bmap[1], + param->vdev_id_bmap[0]); + + return QDF_STATUS_SUCCESS; +} + void wmi_ap_attach_tlv(wmi_unified_t wmi_handle) { struct wmi_ops *ops = wmi_handle->ops; @@ -2557,4 +2599,6 @@ void wmi_ap_attach_tlv(wmi_unified_t wmi_handle) set_rx_pkt_type_routing_tag_update_tlv; #endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */ ops->send_peer_vlan_config_cmd = send_peer_vlan_config_cmd_tlv; + ops->extract_multi_vdev_restart_resp_event = + extract_multi_vdev_restart_resp_event_tlv; }