qcacld-3.0: Converge on Initial Host-FW handshake

Initial changes for the init deinit convergence wherein
service ready, extended service ready and init cmd are
converged.

Change-Id: I1c1fd50f51362f4f09561c259961e6761429fcd0
CRs-Fixed: 2178590
diff --git a/Kbuild b/Kbuild
index 77d8815..b6e169f 100644
--- a/Kbuild
+++ b/Kbuild
@@ -962,7 +962,6 @@
 		$(UMAC_OBJMGR_DIR)/src/wlan_objmgr_pdev_obj.o \
 		$(UMAC_OBJMGR_DIR)/src/wlan_objmgr_peer_obj.o \
 		$(UMAC_OBJMGR_DIR)/src/wlan_objmgr_psoc_obj.o \
-		$(UMAC_OBJMGR_DIR)/src/wlan_objmgr_psoc_service_ready_api.o \
 		$(UMAC_OBJMGR_DIR)/src/wlan_objmgr_vdev_obj.o
 
 ###########  UMAC MGMT TXRX ##########
@@ -1122,10 +1121,13 @@
 		 -I$(WLAN_COMMON_INC)/target_if/tdls/inc
 
 TARGET_IF_OBJ := $(TARGET_IF_DIR)/core/src/target_if_main.o \
-		$(TARGET_IF_DIR)/init_deinit/src/service_ready_event_handler.o \
 		$(TARGET_IF_DIR)/p2p/src/target_if_p2p.o \
 		$(TARGET_IF_DIR)/regulatory/src/target_if_reg.o \
-		$(TARGET_IF_DIR)/tdls/src/target_if_tdls.o
+		$(TARGET_IF_DIR)/tdls/src/target_if_tdls.o \
+		$(TARGET_IF_DIR)/init_deinit/src/init_cmd_api.o \
+		$(TARGET_IF_DIR)/init_deinit/src/init_deinit_ucfg.o \
+		$(TARGET_IF_DIR)/init_deinit/src/init_event_handler.o \
+		$(TARGET_IF_DIR)/init_deinit/src/service_ready_util.o \
 
 ########### GLOBAL_LMAC_IF ##########
 GLOBAL_LMAC_IF_DIR := $(WLAN_COMMON_ROOT)/global_lmac_if
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c
index 6645318..d9f44fc 100644
--- a/core/cds/src/cds_api.c
+++ b/core/cds/src/cds_api.c
@@ -619,14 +619,14 @@
 
 	if (TARGET_TYPE_QCA6290 == hdd_ctx->target_type)
 		gp_cds_context->dp_soc = cdp_soc_attach(LITHIUM_DP,
-			gp_cds_context->pHIFContext, scn,
+			gp_cds_context->pHIFContext, psoc,
 			gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx,
-			&dp_ol_if_ops, psoc);
+			&dp_ol_if_ops);
 	else
 		gp_cds_context->dp_soc = cdp_soc_attach(MOB_DRV_LEGACY_DP,
-			gp_cds_context->pHIFContext, scn,
+			gp_cds_context->pHIFContext, psoc,
 			gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx,
-			&dp_ol_if_ops, psoc);
+			&dp_ol_if_ops);
 
 	if (!gp_cds_context->dp_soc) {
 		status = QDF_STATUS_E_FAILURE;
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index fb10b39..1f79725 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -130,6 +130,7 @@
 #include <cdp_txrx_cmn_struct.h>
 #include "wlan_hdd_sysfs.h"
 #include "wlan_disa_ucfg_api.h"
+#include <target_if.h>
 
 #ifdef CNSS_GENL
 #include <net/cnss_nl.h>
@@ -10066,6 +10067,7 @@
 	bool is_recovery_stop = cds_is_driver_recovering();
 	bool is_idle_stop = !cds_is_driver_unloading() && !is_recovery_stop;
 	int active_threads;
+	struct target_psoc_info *tgt_hdl;
 
 	ENTER();
 	hdd_alert("stop WLAN module: entering driver status=%d",
@@ -10178,7 +10180,10 @@
 	 * next module start same psoc is used to populate new service
 	 * ready data
 	 */
-	hdd_ctx->hdd_psoc->total_mac_phy = 0;
+	tgt_hdl = wlan_psoc_get_tgt_if_handle(hdd_ctx->hdd_psoc);
+	if (tgt_hdl)
+		target_psoc_set_total_mac_phy_cnt(tgt_hdl, 0);
+
 
 	hif_ctx = cds_get_context(QDF_MODULE_ID_HIF);
 	if (!hif_ctx) {
diff --git a/core/hdd/src/wlan_hdd_object_manager.c b/core/hdd/src/wlan_hdd_object_manager.c
index c782517..337f65b 100644
--- a/core/hdd/src/wlan_hdd_object_manager.c
+++ b/core/hdd/src/wlan_hdd_object_manager.c
@@ -32,6 +32,8 @@
 
 #include <wlan_hdd_object_manager.h>
 #include <wlan_osif_priv.h>
+#include <wlan_reg_ucfg_api.h>
+#include <target_if.h>
 
 #define LOW_2GHZ_FREQ 2312
 #define HIGH_2GHZ_FREQ 2732
@@ -140,7 +142,7 @@
 		return -ENOMEM;
 	}
 
-	reg_cap_ptr = psoc->ext_service_param.reg_cap;
+	reg_cap_ptr = ucfg_reg_get_hal_reg_cap(psoc);
 	reg_cap_ptr->phy_id = 0;
 	reg_cap_ptr->low_2ghz_chan = LOW_2GHZ_FREQ;
 	reg_cap_ptr->high_2ghz_chan = HIGH_2GHZ_FREQ;
@@ -150,7 +152,8 @@
 	pdev = wlan_objmgr_pdev_obj_create(psoc, priv);
 	if (!pdev) {
 		hdd_err("pdev obj create failed");
-		return -ENOMEM;
+		status = QDF_STATUS_E_NOMEM;
+		goto free_priv;
 	}
 
 	status = wlan_objmgr_pdev_try_get_ref(pdev, WLAN_HDD_ID_OBJ_MGR);
@@ -160,17 +163,20 @@
 		goto pdev_destroy;
 	}
 
+	status = target_if_alloc_pdev_tgt_info(pdev);
+	if (status != QDF_STATUS_SUCCESS) {
+		hdd_err("pdev tgt info alloc failed");
+		goto pdev_destroy;
+	}
+
 	hdd_ctx->hdd_pdev = pdev;
 	sme_store_pdev(hdd_ctx->hHal, hdd_ctx->hdd_pdev);
 	hdd_init_pdev_os_priv(hdd_ctx, priv);
-	wlan_pdev_obj_lock(pdev);
-	wlan_pdev_set_tgt_if_handle(pdev, psoc->tgt_if_handle);
-	wlan_pdev_obj_unlock(pdev);
-
 	return 0;
 
 pdev_destroy:
 	wlan_objmgr_pdev_obj_delete(pdev);
+free_priv:
 	qdf_mem_free(priv);
 
 	return qdf_status_to_os_return(status);
@@ -188,8 +194,9 @@
 	if (!pdev)
 		return -EINVAL;
 
-	hdd_deinit_pdev_os_priv(pdev);
+	target_if_free_pdev_tgt_info(pdev);
 
+	hdd_deinit_pdev_os_priv(pdev);
 	osif_priv = wlan_pdev_get_ospriv(pdev);
 	wlan_pdev_reset_ospriv(pdev);
 	qdf_mem_free(osif_priv);
diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h
index 9406ba2..c9f8cd8 100644
--- a/core/wma/inc/wma.h
+++ b/core/wma/inc/wma.h
@@ -1228,11 +1228,9 @@
 /**
  * struct t_wma_handle - wma context
  * @wmi_handle: wmi handle
- * @htc_handle: htc handle
  * @cds_context: cds handle
  * @mac_context: mac context
  * @psoc: psoc context
- * @wma_ready_event: wma rx ready event
  * @wma_resume_event: wma resume event
  * @target_suspend: target suspend event
  * @recovery_event: wma FW recovery event
@@ -1369,12 +1367,10 @@
  */
 typedef struct {
 	void *wmi_handle;
-	void *htc_handle;
 	void *cds_context;
 	void *mac_context;
 	struct wlan_objmgr_psoc *psoc;
 	struct wlan_objmgr_pdev *pdev;
-	qdf_event_t wma_ready_event;
 	qdf_event_t wma_resume_event;
 	qdf_event_t target_suspend;
 	qdf_event_t runtime_suspend;
diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h
index c87d468..029c3d4 100644
--- a/core/wma/inc/wma_types.h
+++ b/core/wma/inc/wma_types.h
@@ -734,11 +734,11 @@
 /**
  * wma_open() - Allocate wma context and initialize it.
  * @psoc: Psoc pointer
- * @wma_tgt_cfg_cb: tgt config callback fun
+ * @pTgtUpdCB: tgt config update callback fun
  * @cds_cfg:  mac parameters
  * @target_type: Target type
  *
- * Return: 0 on success, errno on failure
+ * Return: QDF_STATUS
  */
 QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
 		    wma_tgt_cfg_cb pTgtUpdCB, struct cds_config_info *cds_cfg,
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c
index 08121ab..6d3abbd 100644
--- a/core/wma/src/wma_dev_if.c
+++ b/core/wma/src/wma_dev_if.c
@@ -81,6 +81,7 @@
 #include "wma_he.h"
 #include "wlan_roam_debug.h"
 #include "wlan_ocb_ucfg_api.h"
+#include "init_deinit_ucfg.h"
 
 /**
  * wma_find_vdev_by_addr() - find vdev_id from mac address
@@ -4923,6 +4924,13 @@
 void wma_add_sta(tp_wma_handle wma, tpAddStaParams add_sta)
 {
 	uint8_t oper_mode = BSS_OPERATIONAL_MODE_STA;
+	void *htc_handle;
+
+	htc_handle = ucfg_get_htc_hdl(wma->psoc);
+	if (!htc_handle) {
+		WMA_LOGE(":%sHTC handle is NULL:%d", __func__, __LINE__);
+		return;
+	}
 
 	WMA_LOGD("%s: add_sta->sessionId = %d.", __func__,
 		 add_sta->smesessionId);
@@ -4945,7 +4953,7 @@
 	/* IBSS should share the same code as AP mode */
 	case BSS_OPERATIONAL_MODE_IBSS:
 	case BSS_OPERATIONAL_MODE_AP:
-		htc_vote_link_up(wma->htc_handle);
+		htc_vote_link_up(htc_handle);
 		wma_add_sta_req_ap_mode(wma, add_sta);
 		break;
 	case BSS_OPERATIONAL_MODE_NDI:
@@ -4975,6 +4983,13 @@
 	uint8_t oper_mode = BSS_OPERATIONAL_MODE_STA;
 	uint8_t smesession_id = del_sta->smesessionId;
 	bool rsp_requested = del_sta->respReqd;
+	void *htc_handle;
+
+	htc_handle = ucfg_get_htc_hdl(wma->psoc);
+	if (!htc_handle) {
+		WMA_LOGE(":%sHTC handle is NULL:%d", __func__, __LINE__);
+		return;
+	}
 
 	if (wma_is_vdev_in_ap_mode(wma, smesession_id))
 		oper_mode = BSS_OPERATIONAL_MODE_AP;
@@ -5005,7 +5020,7 @@
 
 	case BSS_OPERATIONAL_MODE_IBSS: /* IBSS shares AP code */
 	case BSS_OPERATIONAL_MODE_AP:
-		htc_vote_link_down(wma->htc_handle);
+		htc_vote_link_down(htc_handle);
 		wma_delete_sta_req_ap_mode(wma, del_sta);
 		/* free the memory here only if sync feature is not enabled */
 		if (!rsp_requested &&
diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c
index 9fd57e2..6032db0 100644
--- a/core/wma/src/wma_main.c
+++ b/core/wma/src/wma_main.c
@@ -42,7 +42,6 @@
 #include "wni_api.h"
 #include "ani_global.h"
 #include "wmi_unified.h"
-#include "service_ready_event_handler.h"
 #include "wni_cfg.h"
 #include "cfg_api.h"
 #if defined(CONFIG_HL_SUPPORT)
@@ -64,7 +63,6 @@
 #endif /* REMOVE_PKT_LOG */
 
 #include "dbglog_host.h"
-#include "wmi_version_whitelist.h"
 #include "csr_api.h"
 #include "ol_fw.h"
 
@@ -95,6 +93,8 @@
 #include "hif_main.h"
 #include <target_if_spectral.h>
 #include <wlan_spectral_utils_api.h>
+#include "init_event_handler.h"
+#include "init_deinit_ucfg.h"
 
 #define WMA_LOG_COMPLETION_TIMER 3000 /* 3 seconds */
 #define WMI_TLV_HEADROOM 128
@@ -2209,13 +2209,19 @@
 						  uint8_t *event_data,
 						  uint32_t length)
 {
-	if (wmi_service_ready_event_id == event_id)
+	switch (event_id) {
+	case wmi_service_ready_event_id:
 		return wma_rx_service_ready_event(handle, event_data, length);
-	else if (wmi_service_ready_ext_event_id == event_id)
+	case wmi_service_ready_ext_event_id:
 		return wma_rx_service_ready_ext_event(handle, event_data,
 						      length);
-	else
+	case wmi_ready_event_id:
+		return wma_rx_ready_event(handle, event_data, length);
+	default:
+		WMA_LOGE("Legacy callback invoked with invalid event_id:%d",
+			 event_id);
 		QDF_BUG(0);
+	}
 
 	return 0;
 }
@@ -2752,49 +2758,6 @@
 	vdev->is_waiting_for_key = false;
 }
 
-/**
- * wma_rx_service_available_event() - service available event handler
- * @handle: pointer to wma handle
- * @cmd_param_info: Pointer to service available event TLVs
- * @length: length of the event buffer received
- *
- * Return: zero on success, error code on failure
- */
-static int wma_rx_service_available_event(void *handle, uint8_t *cmd_param_info,
-					uint32_t length)
-{
-	tp_wma_handle wma_handle = (tp_wma_handle) handle;
-	WMI_SERVICE_AVAILABLE_EVENTID_param_tlvs *param_buf;
-	wmi_service_available_event_fixed_param *ev;
-
-	param_buf = (WMI_SERVICE_AVAILABLE_EVENTID_param_tlvs *) cmd_param_info;
-	if (!(handle && param_buf)) {
-		WMA_LOGE("%s: Invalid arguments", __func__);
-		return -EINVAL;
-	}
-
-	ev = param_buf->fixed_param;
-	if (!ev) {
-		WMA_LOGE("%s: Invalid buffer", __func__);
-		return -EINVAL;
-	}
-
-	WMA_LOGD("WMA <-- WMI_SERVICE_AVAILABLE_EVENTID");
-
-	wma_handle->wmi_service_ext_offset = ev->wmi_service_segment_offset;
-	qdf_mem_copy(wma_handle->wmi_service_ext_bitmap,
-				&ev->wmi_service_segment_bitmap[0],
-				WMI_SERVICE_EXT_BM_SIZE32 * sizeof(A_UINT32));
-
-	if (wmi_save_ext_service_bitmap(wma_handle->wmi_handle,
-				cmd_param_info, NULL)
-			!= QDF_STATUS_SUCCESS)
-		qdf_print("Failed to save ext service bitmap\n");
-
-
-	return 0;
-}
-
 QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
 		    wma_tgt_cfg_cb tgt_cfg_cb,
 		    struct cds_config_info *cds_cfg,
@@ -2845,10 +2808,10 @@
 
 	qdf_mem_zero(wma_handle, sizeof(t_wma_handle));
 
-	tgt_psoc_info = qdf_mem_malloc(sizeof(*tgt_psoc_info));
-	if (!tgt_psoc_info) {
-		WMA_LOGE("%s: failed to allocate mem for tgt info", __func__);
-		return QDF_STATUS_E_NOMEM;
+	if (target_if_alloc_psoc_tgt_info(psoc)) {
+		WMA_LOGE("%s target psoc info allocation failed", __func__);
+		qdf_status = QDF_STATUS_E_NOMEM;
+		goto err_free_wma_handle;
 	}
 
 	if (cds_get_conparam() != QDF_GLOBAL_FTM_MODE) {
@@ -2877,8 +2840,7 @@
 	qdf_status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_LEGACY_WMA_ID);
 	if (QDF_IS_STATUS_ERROR(qdf_status)) {
 		WMA_LOGE("%s: PSOC get_ref fails", __func__);
-		qdf_mem_free(tgt_psoc_info);
-		return qdf_status;
+		goto err_wma_handle;
 	}
 	wma_handle->psoc = psoc;
 
@@ -2903,35 +2865,19 @@
 	WMA_LOGA("WMA --> wmi_unified_attach - success");
 
 	/* store the wmi handle in tgt_if_handle */
-	tgt_psoc_info->wmi_handle = wmi_handle;
-	tgt_psoc_info->target_type = target_type;
-	wlan_psoc_obj_lock(psoc);
-	wlan_psoc_set_tgt_if_handle(psoc, tgt_psoc_info);
-	wlan_psoc_obj_unlock(psoc);
+	tgt_psoc_info = wlan_psoc_get_tgt_if_handle(psoc);
 
-	wmi_unified_register_event_handler(wmi_handle,
-					   wmi_service_available_event_id,
-					   wma_rx_service_available_event,
-					   WMA_RX_SERIALIZER_CTX);
-	wmi_unified_register_event_handler(wmi_handle,
-					   wmi_service_ready_event_id,
-					   init_deinit_service_ready_event_handler,
-					   WMA_RX_SERIALIZER_CTX);
-	wmi_unified_register_event_handler(wmi_handle,
-					   wmi_service_ready_ext_event_id,
-					   init_deinit_service_ext_ready_event_handler,
-					   WMA_RX_SERIALIZER_CTX);
-	wmi_unified_register_event_handler(wmi_handle,
-					   wmi_ready_event_id,
-					   wma_rx_ready_event,
-					   WMA_RX_SERIALIZER_CTX);
 	/* Save the WMI & HTC handle */
+	target_psoc_set_wmi_hdl(tgt_psoc_info, wmi_handle);
 	wma_handle->wmi_handle = wmi_handle;
-	wma_handle->htc_handle = htc_handle;
+	target_psoc_set_htc_hdl(tgt_psoc_info, htc_handle);
 	wma_handle->cds_context = cds_context;
 	wma_handle->qdf_dev = qdf_dev;
 	wma_handle->max_scan = cds_cfg->max_scan;
 
+	/* Register Converged Event handlers */
+	init_deinit_register_tgt_psoc_ev_handlers(psoc);
+
 	/* Initialize max_no_of_peers for wma_get_number_of_peers_supported() */
 	wma_init_max_no_of_peers(wma_handle, cds_cfg->max_station);
 	/* Cap maxStation based on the target version */
@@ -3010,12 +2956,6 @@
 	wma_handle->saved_chan.num_channels = 0;
 	wma_handle->fw_timeout_crash = cds_cfg->fw_timeout_crash;
 
-	qdf_status = qdf_event_create(&wma_handle->wma_ready_event);
-	if (qdf_status != QDF_STATUS_SUCCESS) {
-		WMA_LOGE("%s: wma_ready_event initialization failed", __func__);
-		goto err_event_init;
-	}
-
 	qdf_status = qdf_mc_timer_init(&wma_handle->service_ready_ext_timer,
 					QDF_TIMER_TYPE_SW,
 					wma_service_ready_ext_evt_timeout,
@@ -3339,7 +3279,7 @@
 	OS_FREE(wmi_handle);
 
 err_wma_handle:
-	qdf_mem_free(tgt_psoc_info);
+	target_if_free_psoc_tgt_info(psoc);
 	if (cds_get_conparam() != QDF_GLOBAL_FTM_MODE) {
 #ifdef FEATURE_WLAN_EXTSCAN
 		qdf_wake_lock_destroy(&wma_handle->extscan_wake_lock);
@@ -3353,7 +3293,7 @@
 		qdf_wake_lock_destroy(&wma_handle->wow_auto_shutdown_wl);
 		qdf_wake_lock_destroy(&wma_handle->roam_ho_wl);
 	}
-
+err_free_wma_handle:
 	cds_free_context(QDF_MODULE_ID_WMA, wma_handle);
 
 	WMA_LOGD("%s: Exit", __func__);
@@ -3369,9 +3309,9 @@
 QDF_STATUS wma_pre_start(void)
 {
 	QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
-	A_STATUS status = A_OK;
 	tp_wma_handle wma_handle;
 	struct scheduler_msg wma_msg = { 0 };
+	void *htc_handle;
 
 	WMA_LOGD("%s: Enter", __func__);
 
@@ -3379,16 +3319,23 @@
 
 	/* Validate the wma_handle */
 	if (NULL == wma_handle) {
-		WMA_LOGE("%s: invalid argument", __func__);
+		WMA_LOGE("%s: invalid wma handle", __func__);
 		qdf_status = QDF_STATUS_E_INVAL;
 		goto end;
 	}
-	/* Open endpoint for ctrl path - WMI <--> HTC */
-	status = wmi_unified_connect_htc_service(wma_handle->wmi_handle,
-						 wma_handle->htc_handle);
-	if (A_OK != status) {
-		WMA_LOGE("%s: wmi_unified_connect_htc_service", __func__);
 
+	htc_handle = ucfg_get_htc_hdl(wma_handle->psoc);
+	if (!htc_handle) {
+		WMA_LOGE("%s: invalid htc handle", __func__);
+		qdf_status = QDF_STATUS_E_INVAL;
+		goto end;
+	}
+
+	/* Open endpoint for ctrl path - WMI <--> HTC */
+	qdf_status = wmi_unified_connect_htc_service(wma_handle->wmi_handle,
+						     htc_handle);
+	if (qdf_status != QDF_STATUS_SUCCESS) {
+		WMA_LOGE("%s: wmi_unified_connect_htc_service", __func__);
 		if (!cds_is_fw_down())
 			QDF_BUG(0);
 
@@ -4067,6 +4014,7 @@
 		qdf_status = QDF_STATUS_E_FAILURE;
 		goto end;
 	}
+
 	cmd_ops.wmi_spectral_configure_cmd_send =
 			wmi_unified_vdev_spectral_configure_cmd_send;
 	cmd_ops.wmi_spectral_enable_cmd_send =
@@ -4348,9 +4296,7 @@
 QDF_STATUS wma_close(void)
 {
 	tp_wma_handle wma_handle;
-	uint32_t idx;
 	QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
-	struct target_psoc_info *tgt_psoc_info;
 
 	WMA_LOGD("%s: Enter", __func__);
 
@@ -4394,8 +4340,6 @@
 	if (qdf_status != QDF_STATUS_SUCCESS)
 		WMA_LOGE("%s: dbglog_deinit failed", __func__);
 
-	/* close the qdf events */
-	qdf_event_destroy(&wma_handle->wma_ready_event);
 	qdf_status = qdf_mc_timer_destroy(&wma_handle->service_ready_ext_timer);
 	if (!QDF_IS_STATUS_SUCCESS(qdf_status))
 		WMA_LOGE("%s: Failed to destroy service ready ext event timer",
@@ -4413,16 +4357,6 @@
 	qdf_runtime_lock_deinit(&wma_handle->wmi_cmd_rsp_runtime_lock);
 	qdf_spinlock_destroy(&wma_handle->vdev_respq_lock);
 	qdf_spinlock_destroy(&wma_handle->wma_hold_req_q_lock);
-	for (idx = 0; idx < wma_handle->num_mem_chunks; ++idx) {
-		qdf_mem_free_consistent(wma_handle->qdf_dev,
-					wma_handle->qdf_dev->dev,
-					wma_handle->mem_chunks[idx].len,
-					wma_handle->mem_chunks[idx].vaddr,
-					wma_handle->mem_chunks[idx].paddr,
-					qdf_get_dma_mem_context(
-					    (&(wma_handle->mem_chunks[idx])),
-					    memctx));
-	}
 
 	if (NULL != wma_handle->pGetRssiReq) {
 		qdf_mem_free(wma_handle->pGetRssiReq);
@@ -4437,12 +4371,6 @@
 		wma_handle->pdev = NULL;
 	}
 
-	tgt_psoc_info = wlan_psoc_get_tgt_if_handle(wma_handle->psoc);
-	if (tgt_psoc_info) {
-		qdf_mem_free(tgt_psoc_info);
-		wlan_psoc_set_tgt_if_handle(wma_handle->psoc, NULL);
-	}
-
 	pmo_unregister_pause_bitmap_notifier(wma_handle->psoc,
 		wma_vdev_update_pause_bitmap);
 	pmo_unregister_get_pause_bitmap(wma_handle->psoc,
@@ -4450,6 +4378,8 @@
 	pmo_unregister_is_device_in_low_pwr_mode(wma_handle->psoc,
 		wma_vdev_is_device_in_low_pwr_mode);
 
+	target_if_free_psoc_tgt_info(wma_handle->psoc);
+
 	wlan_objmgr_psoc_release_ref(wma_handle->psoc, WLAN_LEGACY_WMA_ID);
 	wma_handle->psoc = NULL;
 	target_if_close();
@@ -4488,91 +4418,6 @@
 }
 
 /**
- * wma_alloc_host_mem_chunk() - allocate host memory
- * @wma_handle: wma handle
- * @req_id: request id
- * @idx: index
- * @num_units: number of units
- * @unit_len: unit length
- *
- * allocate a chunk of memory at the index indicated and
- * if allocation fail allocate smallest size possiblr and
- * return number of units allocated.
- *
- * Return: number of units or 0 for error.
- */
-static uint32_t wma_alloc_host_mem_chunk(tp_wma_handle wma_handle,
-					 uint32_t req_id, uint32_t idx,
-					 uint32_t num_units, uint32_t unit_len)
-{
-	qdf_dma_addr_t paddr;
-
-	if (!num_units || !unit_len)
-		return 0;
-	wma_handle->mem_chunks[idx].vaddr = NULL;
-	/** reduce the requested allocation by half until allocation succeeds */
-	while (wma_handle->mem_chunks[idx].vaddr == NULL && num_units) {
-		wma_handle->mem_chunks[idx].vaddr =
-			qdf_mem_alloc_consistent(wma_handle->qdf_dev,
-						 wma_handle->qdf_dev->dev,
-						    num_units * unit_len,
-						    &paddr);
-		if (wma_handle->mem_chunks[idx].vaddr == NULL) {
-			num_units = (num_units >> 1);/* reduce length by half */
-		} else {
-			wma_handle->mem_chunks[idx].paddr = paddr;
-			wma_handle->mem_chunks[idx].len = num_units * unit_len;
-			wma_handle->mem_chunks[idx].req_id = req_id;
-		}
-	}
-	return num_units;
-}
-
-#define HOST_MEM_SIZE_UNIT 4
-/**
- * wma_alloc_host_mem() - allocate amount of memory requested by FW.
- * @wma_handle: wma handle
- * @req_id: request id
- * @num_units: number of units
- * @unit_len: unit length
- *
- * Return: none
- */
-static void wma_alloc_host_mem(tp_wma_handle wma_handle, uint32_t req_id,
-			       uint32_t num_units, uint32_t unit_len)
-{
-	uint32_t remaining_units, allocated_units, idx;
-
-	/* adjust the length to nearest multiple of unit size */
-	unit_len = (unit_len + (HOST_MEM_SIZE_UNIT - 1)) &
-		   (~(HOST_MEM_SIZE_UNIT - 1));
-	idx = wma_handle->num_mem_chunks;
-	remaining_units = num_units;
-	while (remaining_units) {
-		allocated_units = wma_alloc_host_mem_chunk(wma_handle, req_id,
-							   idx, remaining_units,
-							   unit_len);
-		if (allocated_units == 0) {
-			WMA_LOGE("FAILED TO ALLOCATED memory unit len %d units requested %d units allocated %d ",
-				 unit_len, num_units,
-				 (num_units - remaining_units));
-			wma_handle->num_mem_chunks = idx;
-			break;
-		}
-		remaining_units -= allocated_units;
-		++idx;
-		if (idx == MAX_MEM_CHUNKS) {
-			WMA_LOGE("RWACHED MAX CHUNK LIMIT for memory units %d unit len %d requested by FW, only allocated %d ",
-				 num_units, unit_len,
-				 (num_units - remaining_units));
-			wma_handle->num_mem_chunks = idx;
-			break;
-		}
-	}
-	wma_handle->num_mem_chunks = idx;
-}
-
-/**
  * wma_set_tx_partition_base() - set TX MSDU ID partition base for IPA
  * @value:  TX MSDU ID partition base
  *
@@ -5274,78 +5119,6 @@
 }
 
 /**
- * wma_setup_wmi_init_msg() - fill wmi init message buffer
- * @wma_handle: wma handle
- * @ev: ready event fixed params
- * @param_buf: redy event TLVs
- * @len: buffer length
- *
- * Return: wmi buffer or NULL for error
- */
-static int wma_setup_wmi_init_msg(tp_wma_handle wma_handle,
-				wmi_service_ready_event_fixed_param *ev,
-				WMI_SERVICE_READY_EVENTID_param_tlvs *param_buf)
-{
-	wlan_host_mem_req *ev_mem_reqs;
-	wmi_abi_version my_vers;
-	wmi_abi_version host_abi_vers;
-	int num_whitelist;
-	uint16_t idx;
-	uint32_t num_units;
-
-	ev_mem_reqs = param_buf->mem_reqs;
-
-	/* allocate memory requested by FW */
-	if (ev->num_mem_reqs > WMI_MAX_MEM_REQS) {
-		QDF_ASSERT(0);
-		return QDF_STATUS_E_NOMEM;
-	}
-
-	for (idx = 0; idx < ev->num_mem_reqs; ++idx) {
-		num_units = ev_mem_reqs[idx].num_units;
-		if (ev_mem_reqs[idx].num_unit_info & NUM_UNITS_IS_NUM_PEERS) {
-			/*
-			 * number of units to allocate is number
-			 * of peers, 1 extra for self peer on
-			 * target. this needs to be fied, host
-			 * and target can get out of sync
-			 */
-			num_units = wma_handle->wlan_resource_config.num_peers +
-									 1;
-		}
-		WMA_LOGD("idx %d req %d  num_units %d num_unit_info %d unit size %d actual units %d ",
-			idx, ev_mem_reqs[idx].req_id,
-			ev_mem_reqs[idx].num_units,
-			ev_mem_reqs[idx].num_unit_info,
-			ev_mem_reqs[idx].unit_size, num_units);
-		wma_alloc_host_mem(wma_handle, ev_mem_reqs[idx].req_id,
-				   num_units, ev_mem_reqs[idx].unit_size);
-	}
-
-	qdf_mem_copy(&wma_handle->target_abi_vers,
-		     &param_buf->fixed_param->fw_abi_vers,
-		     sizeof(wmi_abi_version));
-	num_whitelist = sizeof(version_whitelist) /
-			sizeof(wmi_whitelist_version_info);
-	my_vers.abi_version_0 = WMI_ABI_VERSION_0;
-	my_vers.abi_version_1 = WMI_ABI_VERSION_1;
-	my_vers.abi_version_ns_0 = WMI_ABI_VERSION_NS_0;
-	my_vers.abi_version_ns_1 = WMI_ABI_VERSION_NS_1;
-	my_vers.abi_version_ns_2 = WMI_ABI_VERSION_NS_2;
-	my_vers.abi_version_ns_3 = WMI_ABI_VERSION_NS_3;
-
-	wmi_cmp_and_set_abi_version(num_whitelist, version_whitelist,
-				    &my_vers,
-				    &param_buf->fixed_param->fw_abi_vers,
-				    &host_abi_vers);
-
-	qdf_mem_copy(&wma_handle->final_abi_vers, &host_abi_vers,
-		     sizeof(wmi_abi_version));
-
-	return QDF_STATUS_SUCCESS;
-}
-
-/**
  * wma_dump_dbs_hw_mode() - Print the DBS HW modes
  * @wma_handle: WMA handle
  *
@@ -5445,9 +5218,16 @@
 	uint32_t *ev_wlan_dbs_hw_mode_list;
 	QDF_STATUS ret;
 	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
+	struct target_psoc_info *tgt_hdl;
 
 	WMA_LOGD("%s: Enter", __func__);
 
+	tgt_hdl = wlan_psoc_get_tgt_if_handle(wma_handle->psoc);
+	if (!tgt_hdl) {
+		WMA_LOGE("%s: target psoc info is NULL", __func__);
+		return QDF_STATUS_E_INVAL;
+	}
+
 	param_buf = (WMI_SERVICE_READY_EVENTID_param_tlvs *) cmd_param_info;
 	if (!(handle && param_buf)) {
 		WMA_LOGE("%s: Invalid arguments", __func__);
@@ -5710,43 +5490,10 @@
 		return -EINVAL;
 	}
 
-	status = wma_setup_wmi_init_msg(wma_handle, ev, param_buf);
-	if (status != EOK) {
-		WMA_LOGE("Failed to setup for wma init command");
-		return -EINVAL;
-	}
-
-	/* A host, which supports WMI_SERVICE_READY_EXT_EVENTID, would need to
-	 * check the WMI_SERVICE_READY message for an "extension" flag, and if
-	 * this flag is set, then hold off on sending the WMI_INIT message until
-	 * WMI_SERVICE_READY_EXT_EVENTID is received.
-	 */
-	if (!wmi_service_enabled(wma_handle->wmi_handle,
-				wmi_service_ext_msg)) {
-		/* No service extended message support.
-		 * Send INIT command immediately
-		 */
-		struct wmi_init_cmd_param init_param = {0};
-		init_param.res_cfg = &wma_handle->wlan_resource_config;
-		init_param.num_mem_chunks = wma_handle->num_mem_chunks;
-		init_param.mem_chunks = wma_handle->mem_chunks;
-		init_param.hw_mode_id = WMI_HOST_HW_MODE_MAX;
-		WMA_LOGA("WMA --> WMI_INIT_CMDID");
-		status = wmi_unified_init_cmd_send(wma_handle->wmi_handle,
-			&init_param);
-		if (status != EOK) {
-			WMA_LOGE("Failed to send WMI_INIT_CMDID command");
-			return -EINVAL;
-		}
-	} else {
-		ret = qdf_mc_timer_start(&wma_handle->service_ready_ext_timer,
-				WMA_SERVICE_READY_EXT_TIMEOUT);
-		if (!QDF_IS_STATUS_SUCCESS(ret))
-			WMA_LOGE("Failed to start the service ready ext timer");
-
-		WMA_LOGD("%s: WMA waiting for WMI_SERVICE_READY_EXT_EVENTID",
-				__func__);
-	}
+	ret = qdf_mc_timer_start(&wma_handle->service_ready_ext_timer,
+				 WMA_SERVICE_READY_EXT_TIMEOUT);
+	if (!QDF_IS_STATUS_SUCCESS(ret))
+		WMA_LOGE("Failed to start the service ready ext timer");
 
 	if (wmi_service_enabled(wma_handle->wmi_handle,
 				   wmi_service_8ss_tx_bfee))
@@ -5754,6 +5501,8 @@
 	else
 		wma_handle->tx_bfee_8ss_enabled = false;
 
+	target_psoc_set_num_radios(tgt_hdl, 1);
+
 	return 0;
 }
 
@@ -6447,9 +6196,8 @@
 	tp_wma_handle wma_handle = (tp_wma_handle) handle;
 	WMI_SERVICE_READY_EXT_EVENTID_param_tlvs *param_buf;
 	wmi_service_ready_ext_event_fixed_param *ev;
-	int status;
 	QDF_STATUS ret;
-	struct wmi_init_cmd_param init_param = {0};
+	struct target_psoc_info *tgt_hdl;
 
 	WMA_LOGD("%s: Enter", __func__);
 
@@ -6458,6 +6206,12 @@
 		return -EINVAL;
 	}
 
+	tgt_hdl = wlan_psoc_get_tgt_if_handle(wma_handle->psoc);
+	if (!tgt_hdl) {
+		WMA_LOGE("%s: target psoc info is NULL", __func__);
+		return -EINVAL;
+	}
+
 	param_buf = (WMI_SERVICE_READY_EXT_EVENTID_param_tlvs *) event;
 	if (!param_buf) {
 		WMA_LOGE("%s: Invalid event", __func__);
@@ -6491,21 +6245,12 @@
 
 	WMA_LOGD("WMA --> WMI_INIT_CMDID");
 
-	init_param.res_cfg = &wma_handle->wlan_resource_config;
-	init_param.num_mem_chunks = wma_handle->num_mem_chunks;
-	init_param.mem_chunks = wma_handle->mem_chunks;
-	init_param.hw_mode_id = WMI_HOST_HW_MODE_MAX;
-	status = wmi_unified_init_cmd_send(wma_handle->wmi_handle, &init_param);
-	if (status != EOK)
-		/* In success case, WMI layer will free after getting copy
-		 * engine TX complete interrupt
-		 */
-		WMA_LOGE("Failed to send WMI_INIT_CMDID command");
-
 	wma_init_scan_fw_mode_config(wma_handle,
 				ev->default_conc_scan_config_bits,
 				ev->default_fw_config_bits);
 	wma_handle->target_fw_vers_ext = ev->fw_build_vers_ext;
+
+	target_psoc_set_num_radios(tgt_hdl, 1);
 	return 0;
 }
 
@@ -6546,39 +6291,6 @@
 	wma_handle->wmi_ready = true;
 	wma_handle->wlan_init_status = ev->status;
 
-	/*
-	 * We need to check the WMI versions and make sure both
-	 * host and fw are compatible.
-	 */
-	if (!wmi_versions_are_compatible(&wma_handle->final_abi_vers,
-					 &ev->fw_abi_vers)) {
-		/*
-		 * Error: Our host version and the given firmware version
-		 * are incompatible.
-		 */
-		WMA_LOGE("%s: Error: Incompatible WMI version.", __func__);
-		WMA_LOGE("%s: Host: %d,%d,0x%x 0x%x 0x%x 0x%x, FW: %d,%d,0x%x 0x%x 0x%x 0x%x",
-			 __func__,
-			 WMI_VER_GET_MAJOR(wma_handle->final_abi_vers.
-					   abi_version_0),
-			 WMI_VER_GET_MINOR(wma_handle->final_abi_vers.
-					   abi_version_0),
-			 wma_handle->final_abi_vers.abi_version_ns_0,
-			 wma_handle->final_abi_vers.abi_version_ns_1,
-			 wma_handle->final_abi_vers.abi_version_ns_2,
-			 wma_handle->final_abi_vers.abi_version_ns_3,
-			 WMI_VER_GET_MAJOR(ev->fw_abi_vers.abi_version_0),
-			 WMI_VER_GET_MINOR(ev->fw_abi_vers.abi_version_0),
-			 ev->fw_abi_vers.abi_version_ns_0,
-			 ev->fw_abi_vers.abi_version_ns_1,
-			 ev->fw_abi_vers.abi_version_ns_2,
-			 ev->fw_abi_vers.abi_version_ns_3);
-		if (wma_handle->wlan_init_status == WLAN_INIT_STATUS_SUCCESS) {
-			/* Failed this connection to FW */
-			wma_handle->wlan_init_status =
-				WLAN_INIT_STATUS_GEN_FAILED;
-		}
-	}
 	qdf_mem_copy(&wma_handle->final_abi_vers, &ev->fw_abi_vers,
 		     sizeof(wmi_abi_version));
 	qdf_mem_copy(&wma_handle->target_abi_vers, &ev->fw_abi_vers,
@@ -6589,9 +6301,8 @@
 	WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->mac_addr, wma_handle->hwaddr);
 
 	wma_update_hdd_cfg(wma_handle);
-
-	qdf_event_set(&wma_handle->wma_ready_event);
-
+	target_pdev_set_wmi_handle(wma_handle->pdev->tgt_if_handle,
+				   wma_handle->wmi_handle);
 	WMA_LOGD("Exit");
 
 	return 0;
@@ -6653,17 +6364,29 @@
 {
 	tp_wma_handle wma_handle = (tp_wma_handle) handle;
 	QDF_STATUS qdf_status;
+	struct target_psoc_info *tgt_hdl;
+	int timeleft;
 
-	/* wait until WMI_READY_EVENTID received from FW */
-	qdf_status = qdf_wait_for_event_completion(
-					&wma_handle->wma_ready_event,
-					WMA_READY_EVENTID_TIMEOUT);
+	tgt_hdl = wlan_psoc_get_tgt_if_handle(wma_handle->psoc);
+	if (!tgt_hdl) {
+		WMA_LOGE("%s: target psoc info is NULL", __func__);
+		return QDF_STATUS_E_INVAL;
+	}
 
-	if (QDF_STATUS_SUCCESS != qdf_status) {
+	timeleft = qdf_wait_queue_timeout(
+			tgt_hdl->info.event_queue,
+			((tgt_hdl->info.wmi_service_ready) &&
+			(tgt_hdl->info.wmi_ready)),
+			WMA_READY_EVENTID_TIMEOUT);
+	if (!timeleft) {
 		WMA_LOGE("%s: Timeout waiting for ready event from FW",
 			 __func__);
 		qdf_status = QDF_STATUS_E_FAILURE;
+	} else {
+		WMA_LOGI("%s Ready event received from FW", __func__);
+		qdf_status = QDF_STATUS_SUCCESS;
 	}
+
 	return qdf_status;
 }