diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index e7866ada4f6f..dc5bfb9d71ec 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -1121,6 +1121,45 @@ static QDF_STATUS send_peer_delete_cmd_tlv(wmi_unified_t wmi, return 0; } +/** + * send_peer_delete_all_cmd_tlv() - send PEER delete all command to fw + * @wmi: wmi handle + * @param: pointer to hold peer delete all parameter + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +static QDF_STATUS send_peer_delete_all_cmd_tlv( + wmi_unified_t wmi, + struct peer_delete_all_params *param) +{ + wmi_vdev_delete_all_peer_cmd_fixed_param *cmd; + wmi_buf_t buf; + int32_t len = sizeof(*cmd); + + buf = wmi_buf_alloc(wmi, len); + if (!buf) + return QDF_STATUS_E_NOMEM; + + cmd = (wmi_vdev_delete_all_peer_cmd_fixed_param *)wmi_buf_data(buf); + WMITLV_SET_HDR( + &cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_vdev_delete_all_peer_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_vdev_delete_all_peer_cmd_fixed_param)); + cmd->vdev_id = param->vdev_id; + + WMI_LOGD("%s: vdev_id %d", __func__, cmd->vdev_id); + wmi_mtrace(WMI_VDEV_DELETE_ALL_PEER_CMDID, cmd->vdev_id, 0); + if (wmi_unified_cmd_send(wmi, buf, len, + WMI_VDEV_DELETE_ALL_PEER_CMDID)) { + WMI_LOGP("%s: Failed to send peer del all command", __func__); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} + /** * crash_on_send_peer_rx_reorder_queue_remove_cmd() - crash on reorder queue cmd * @@ -11705,6 +11744,7 @@ struct wmi_ops tlv_ops = { .send_vdev_stop_cmd = send_vdev_stop_cmd_tlv, .send_peer_create_cmd = send_peer_create_cmd_tlv, .send_peer_delete_cmd = send_peer_delete_cmd_tlv, + .send_peer_delete_all_cmd = send_peer_delete_all_cmd_tlv, .send_peer_rx_reorder_queue_setup_cmd = send_peer_rx_reorder_queue_setup_cmd_tlv, .send_peer_rx_reorder_queue_remove_cmd = @@ -12008,6 +12048,8 @@ static void populate_tlv_events_id(uint32_t *event_ids) event_ids[wmi_peer_state_event_id] = WMI_PEER_STATE_EVENTID; event_ids[wmi_peer_delete_response_event_id] = WMI_PEER_DELETE_RESP_EVENTID; + event_ids[wmi_peer_delete_all_response_event_id] = + WMI_VDEV_DELETE_ALL_PEER_RESP_EVENTID; event_ids[wmi_mgmt_rx_event_id] = WMI_MGMT_RX_EVENTID; event_ids[wmi_host_swba_event_id] = WMI_HOST_SWBA_EVENTID; event_ids[wmi_tbttoffset_update_event_id] = @@ -12562,6 +12604,8 @@ static void populate_tlv_service(uint32_t *wmi_service) WMI_SERVICE_TX_COMPL_TSF64; wmi_service[wmi_service_data_stall_recovery_support] = WMI_SERVICE_DSM_ROAM_FILTER; + wmi_service[wmi_service_vdev_delete_all_peer] = + WMI_SERVICE_DELETE_ALL_PEER_SUPPORT; } /**