|
@@ -687,6 +687,10 @@ static void wma_vdev_start_rsp(tp_wma_handle wma,
|
|
|
resp_event)
|
|
|
{
|
|
|
struct beacon_info *bcn;
|
|
|
+ struct cdp_pdev *pdev;
|
|
|
+ void *peer = NULL;
|
|
|
+ uint8_t peer_id;
|
|
|
+ void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
|
|
|
|
|
#ifdef QCA_IBSS_SUPPORT
|
|
|
WMA_LOGD("%s: vdev start response received for %s mode", __func__,
|
|
@@ -743,6 +747,25 @@ static void wma_vdev_start_rsp(tp_wma_handle wma,
|
|
|
}
|
|
|
add_bss->smpsMode = host_map_smps_mode(resp_event->smps_mode);
|
|
|
send_fail_resp:
|
|
|
+ if (add_bss->status != QDF_STATUS_SUCCESS) {
|
|
|
+ WMA_LOGE("%s: ADD BSS failure %d", __func__, add_bss->status);
|
|
|
+
|
|
|
+ pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
|
|
+ if (NULL == pdev)
|
|
|
+ WMA_LOGE("%s: Failed to get pdev", __func__);
|
|
|
+
|
|
|
+ if (pdev)
|
|
|
+ peer = cdp_peer_find_by_addr(soc, pdev,
|
|
|
+ add_bss->bssId, &peer_id);
|
|
|
+ if (!peer)
|
|
|
+ WMA_LOGE("%s Failed to find peer %pM", __func__,
|
|
|
+ add_bss->bssId);
|
|
|
+
|
|
|
+ if (peer)
|
|
|
+ wma_remove_peer(wma, add_bss->bssId,
|
|
|
+ resp_event->vdev_id, peer, false);
|
|
|
+ }
|
|
|
+
|
|
|
/* Send vdev stop if vdev start was success */
|
|
|
if ((add_bss->status != QDF_STATUS_SUCCESS) &&
|
|
|
!resp_event->status)
|