|
@@ -1437,6 +1437,8 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info,
|
|
|
wmi_vdev_stopped_event_fixed_param *resp_event;
|
|
|
struct wma_target_req *req_msg;
|
|
|
struct cdp_pdev *pdev;
|
|
|
+ void *peer;
|
|
|
+ uint8_t peer_id;
|
|
|
struct wma_txrx_node *iface;
|
|
|
int32_t status = 0;
|
|
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
|
@@ -1590,6 +1592,24 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info,
|
|
|
resp_event->vdev_id);
|
|
|
wma_vdev_detach(wma, iface->del_staself_req, 1);
|
|
|
}
|
|
|
+ } else if (req_msg->msg_type == WMA_SET_LINK_STATE) {
|
|
|
+ tpLinkStateParams params =
|
|
|
+ (tpLinkStateParams) req_msg->user_data;
|
|
|
+
|
|
|
+ peer = cdp_peer_find_by_addr(soc, pdev, params->bssid, &peer_id);
|
|
|
+ if (peer) {
|
|
|
+ WMA_LOGP(FL("Deleting peer %pM vdev id %d"),
|
|
|
+ params->bssid, req_msg->vdev_id);
|
|
|
+ wma_remove_peer(wma, params->bssid, req_msg->vdev_id,
|
|
|
+ peer, false);
|
|
|
+ }
|
|
|
+ if (wmi_unified_vdev_down_send(wma->wmi_handle,
|
|
|
+ req_msg->vdev_id) !=
|
|
|
+ QDF_STATUS_SUCCESS) {
|
|
|
+ WMA_LOGE("Failed to send vdev down cmd: vdev %d",
|
|
|
+ req_msg->vdev_id);
|
|
|
+ }
|
|
|
+ wma_send_msg(wma, WMA_SET_LINK_STATE_RSP, (void *)params, 0);
|
|
|
}
|
|
|
|
|
|
free_req_msg:
|
|
@@ -2503,6 +2523,8 @@ void wma_vdev_resp_timer(void *data)
|
|
|
struct wma_target_req *tgt_req = (struct wma_target_req *)data;
|
|
|
struct cdp_pdev *pdev;
|
|
|
struct wma_target_req *msg;
|
|
|
+ uint8_t peer_id;
|
|
|
+ void *peer;
|
|
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
|
struct scheduler_msg sme_msg = { 0 };
|
|
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
|
@@ -2697,6 +2719,27 @@ void wma_vdev_resp_timer(void *data)
|
|
|
} else if (tgt_req->msg_type == WMA_HIDDEN_SSID_VDEV_RESTART) {
|
|
|
WMA_LOGE("Hidden ssid vdev restart Timed Out; vdev_id: %d, type = %d",
|
|
|
tgt_req->vdev_id, tgt_req->type);
|
|
|
+ } else if (tgt_req->msg_type == WMA_SET_LINK_STATE) {
|
|
|
+ tpLinkStateParams params =
|
|
|
+ (tpLinkStateParams) tgt_req->user_data;
|
|
|
+
|
|
|
+ peer = cdp_peer_find_by_addr(soc, pdev, params->bssid, &peer_id);
|
|
|
+ if (peer) {
|
|
|
+ WMA_LOGP(FL("Deleting peer %pM vdev id %d"),
|
|
|
+ params->bssid, tgt_req->vdev_id);
|
|
|
+ wma_remove_peer(wma, params->bssid, tgt_req->vdev_id,
|
|
|
+ peer, false);
|
|
|
+ }
|
|
|
+ if (wmi_unified_vdev_down_send(wma->wmi_handle,
|
|
|
+ tgt_req->vdev_id) !=
|
|
|
+ QDF_STATUS_SUCCESS) {
|
|
|
+ WMA_LOGE("Failed to send vdev down cmd: vdev %d",
|
|
|
+ tgt_req->vdev_id);
|
|
|
+ }
|
|
|
+ params->status = QDF_STATUS_E_TIMEOUT;
|
|
|
+ WMA_LOGA("%s: WMA_SET_LINK_STATE timedout vdev %d", __func__,
|
|
|
+ tgt_req->vdev_id);
|
|
|
+ wma_send_msg(wma, WMA_SET_LINK_STATE_RSP, (void *)params, 0);
|
|
|
}
|
|
|
free_tgt_req:
|
|
|
qdf_mc_timer_destroy(&tgt_req->event_timeout);
|