瀏覽代碼

qcacld-3.0: Make sure to initialize global target_if before soc create

Make sure to initialize global target_if before soc create
as part of this psoc notifications are registered.

Change-Id: Id5491a2aac49450774532fe69ee24e18c9a7c594
CRs-Fixed: 2351426
Arif Hussain 6 年之前
父節點
當前提交
49698119d9
共有 3 個文件被更改,包括 31 次插入26 次删除
  1. 8 1
      core/hdd/src/wlan_hdd_main.c
  2. 10 0
      core/wma/inc/wma.h
  3. 13 25
      core/wma/src/wma_main.c

+ 8 - 1
core/hdd/src/wlan_hdd_main.c

@@ -13021,10 +13021,14 @@ static QDF_STATUS hdd_component_init(void)
 	QDF_STATUS status;
 
 	/* initialize converged components */
-	status = dispatcher_init();
+	status = target_if_init(wma_get_psoc_from_scn_handle);
 	if (QDF_IS_STATUS_ERROR(status))
 		return status;
 
+	status = dispatcher_init();
+	if (QDF_IS_STATUS_ERROR(status))
+		goto target_if_deinit;
+
 	/* initialize non-converged components */
 	status = ucfg_mlme_init();
 	if (QDF_IS_STATUS_ERROR(status))
@@ -13094,6 +13098,8 @@ mlme_deinit:
 	ucfg_mlme_deinit();
 dispatcher_deinit:
 	dispatcher_deinit();
+target_if_deinit:
+	target_if_deinit();
 
 	return status;
 }
@@ -13120,6 +13126,7 @@ static void hdd_component_deinit(void)
 
 	/* deinitialize converged components */
 	dispatcher_deinit();
+	target_if_deinit();
 }
 
 QDF_STATUS hdd_component_psoc_open(struct wlan_objmgr_psoc *psoc)

+ 10 - 0
core/wma/inc/wma.h

@@ -2590,4 +2590,14 @@ void wma_check_and_set_wake_timer(uint32_t time);
  */
 uint8_t wma_rx_invalid_peer_ind(uint8_t vdev_id, void *wh);
 
+/**
+ * wma_get_psoc_from_scn_handle() - API to get psoc from scn handle
+ * @scn_handle: opaque wma handle
+ *
+ * API to get psoc from scn handle
+ *
+ * Return: psoc context or null in case of failure
+ */
+struct wlan_objmgr_psoc *wma_get_psoc_from_scn_handle(void *scn_handle);
+
 #endif

+ 13 - 25
core/wma/src/wma_main.c

@@ -2289,27 +2289,6 @@ static void wma_target_if_close(tp_wma_handle wma_handle)
 	wlan_global_lmac_if_close(psoc);
 }
 
-/**
- * wma_get_psoc_from_scn_handle() - API to get psoc from scn handle
- * @scn_handle: opaque wma handle
- *
- * API to get psoc from scn handle
- *
- * Return: None
- */
-static struct wlan_objmgr_psoc *wma_get_psoc_from_scn_handle(void *scn_handle)
-{
-	tp_wma_handle wma_handle;
-
-	if (!scn_handle) {
-		WMA_LOGE("invalid scn handle");
-		return NULL;
-	}
-	wma_handle = (tp_wma_handle)scn_handle;
-
-	return wma_handle->psoc;
-}
-
 /**
  * wma_get_pdev_from_scn_handle() - API to get pdev from scn handle
  * @scn_handle: opaque wma handle
@@ -3094,6 +3073,19 @@ static void wma_register_apf_events(tp_wma_handle wma_handle)
 }
 #endif /* FEATURE_WLAN_APF */
 
+struct wlan_objmgr_psoc *wma_get_psoc_from_scn_handle(void *scn_handle)
+{
+	tp_wma_handle wma_handle;
+
+	if (!scn_handle) {
+		WMA_LOGE("invalid scn handle");
+		return NULL;
+	}
+	wma_handle = (tp_wma_handle)scn_handle;
+
+	return wma_handle->psoc;
+}
+
 /**
  * wma_get_phy_mode_cb() - Callback to get current PHY Mode.
  * @chan: channel number
@@ -3217,9 +3209,7 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
 	}
 	wma_handle->psoc = psoc;
 
-	/* Open target_if layer and register wma callback */
 	wma_target_if_open(wma_handle);
-	target_if_open(wma_get_psoc_from_scn_handle);
 
 	/*
 	 * Allocate locally used params with its rx_ops member,
@@ -3691,7 +3681,6 @@ err_scn_context:
 	OS_FREE(wmi_handle);
 
 err_wma_handle:
-	target_if_close();
 	wlan_objmgr_psoc_release_ref(psoc, WLAN_LEGACY_WMA_ID);
 err_get_psoc_ref:
 	target_if_free_psoc_tgt_info(psoc);
@@ -4800,7 +4789,6 @@ QDF_STATUS wma_close(void)
 
 	wlan_objmgr_psoc_release_ref(wma_handle->psoc, WLAN_LEGACY_WMA_ID);
 	wma_handle->psoc = NULL;
-	target_if_close();
 	wma_target_if_close(wma_handle);
 
 	WMA_LOGD("%s: Exit", __func__);