Forráskód Böngészése

qcacmn: Add scan start/cancel public APIs for non-osif component

Adds wlan_scan_start and wlan_scan_cancel public APIs to use
from non-osif component, as ucfg_* API should only be used from
OSIF.

Change-Id: If603e49a57641dba26163454bce12327660b20fd
CRs-Fixed: 2773612
Abhishek Singh 4 éve
szülő
commit
5c7a12059f

+ 20 - 0
umac/scan/dispatcher/inc/wlan_scan_api.h

@@ -238,4 +238,24 @@ static inline qdf_list_t *wlan_scan_get_result(struct wlan_objmgr_pdev *pdev,
 	return scm_get_scan_result(pdev, filter);
 }
 
+/**
+ * wlan_scan_start() - Public API to start a scan
+ * @req: start scan req params
+ *
+ * The Public API to start a scan. Post a msg to target_if queue
+ *
+ * Return: QDF_STATUS.
+ */
+QDF_STATUS wlan_scan_start(struct scan_start_request *req);
+
+/**
+ * wlan_scan_cancel() - Public API to stop a scan
+ * @req: stop scan request params
+ *
+ * The Public API to stop a scan. Post a msg to target_if queue
+ *
+ * Return: QDF_STATUS.
+ */
+QDF_STATUS wlan_scan_cancel(struct scan_cancel_request *req);
+
 #endif

+ 15 - 10
umac/scan/dispatcher/inc/wlan_scan_ucfg_api.h

@@ -171,15 +171,17 @@ ucfg_scan_get_pno_match(struct wlan_objmgr_vdev *vdev)
 QDF_STATUS ucfg_scm_scan_free_scan_request_mem(struct scan_start_request *req);
 
 /**
- * ucfg_scan_start() - Public API to start a scan
+ * ucfg_scan_start() - ucfg Public API to start a scan
  * @req: start scan req params
  *
- * The Public API to start a scan. Post a msg to target_if queue
+ * The ucfg public API to start a scan. Post a msg to target_if queue
  *
- * Return: 0 for success or error code.
+ * Return: QDF_STATUS
  */
-QDF_STATUS
-ucfg_scan_start(struct scan_start_request *req);
+static inline QDF_STATUS ucfg_scan_start(struct scan_start_request *req)
+{
+	return wlan_scan_start(req);
+}
 
 /**
  * ucfg_scan_set_psoc_enable() - Public API to enable scans for psoc
@@ -309,16 +311,19 @@ ucfg_scan_config_hidden_ssid_for_bssid(struct wlan_objmgr_pdev *pdev,
 	return QDF_STATUS_SUCCESS;
 }
 #endif /* WLAN_DFS_CHAN_HIDDEN_SSID */
+
 /**
- * ucfg_scan_cancel() - Public API to stop a scan
+ * ucfg_scan_cancel() - ucfg Public API to cancel the scan
  * @req: stop scan request params
  *
- * The Public API to stop a scan. Post a msg to target_if queue
+ * The ucfg public API to stop a scan. Post a msg to target_if queue
  *
- * Return: 0 for success or error code.
+ * Return: QDF_STATUS.
  */
-QDF_STATUS
-ucfg_scan_cancel(struct scan_cancel_request *req);
+static inline QDF_STATUS ucfg_scan_cancel(struct scan_cancel_request *req)
+{
+	return wlan_scan_cancel(req);
+}
 
 /**
  * ucfg_scan_cancel_sync() - Public API to stop a scan and wait

+ 85 - 0
umac/scan/dispatcher/src/wlan_scan_api.c

@@ -22,6 +22,7 @@
 
 #include "cfg_ucfg_api.h"
 #include "wlan_scan_api.h"
+#include "../../core/src/wlan_scan_manager.h"
 
 void wlan_scan_cfg_get_passive_dwelltime(struct wlan_objmgr_psoc *psoc,
 					 uint32_t *dwell_time)
@@ -275,3 +276,87 @@ qdf_time_t wlan_scan_get_aging_time(struct wlan_objmgr_psoc *psoc)
 
 	return scan_obj->scan_def.scan_cache_aging_time;
 }
+
+QDF_STATUS wlan_scan_start(struct scan_start_request *req)
+{
+	struct scheduler_msg msg = {0};
+	QDF_STATUS status;
+
+	if (!req || !req->vdev) {
+		scm_err("req or vdev within req is NULL");
+		if (req)
+			scm_scan_free_scan_request_mem(req);
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	if (!scm_is_scan_allowed(req->vdev)) {
+		scm_err_rl("scan disabled, rejecting the scan req");
+		scm_scan_free_scan_request_mem(req);
+		return QDF_STATUS_E_AGAIN;
+	}
+
+	/*
+	 * Try to get vdev reference. Return if reference could
+	 * not be taken. Reference will be released once scan
+	 * request handling completes along with free of @req.
+	 */
+	status = wlan_objmgr_vdev_try_get_ref(req->vdev, WLAN_SCAN_ID);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		scm_info("unable to get reference");
+		scm_scan_free_scan_request_mem(req);
+		return status;
+	}
+
+	msg.bodyptr = req;
+	msg.callback = scm_scan_start_req;
+	msg.flush_callback = scm_scan_start_flush_callback;
+
+	status = scheduler_post_message(QDF_MODULE_ID_OS_IF,
+					QDF_MODULE_ID_SCAN,
+					QDF_MODULE_ID_OS_IF, &msg);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		wlan_objmgr_vdev_release_ref(req->vdev, WLAN_SCAN_ID);
+		scm_scan_free_scan_request_mem(req);
+	}
+
+	return status;
+}
+
+QDF_STATUS wlan_scan_cancel(struct scan_cancel_request *req)
+{
+	struct scheduler_msg msg = {0};
+	QDF_STATUS status;
+
+	if (!req || !req->vdev) {
+		scm_err("req or vdev within req is NULL");
+		if (req)
+			qdf_mem_free(req);
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	status = wlan_objmgr_vdev_try_get_ref(req->vdev, WLAN_SCAN_ID);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		scm_info("Failed to get vdev ref; status:%d", status);
+		goto req_free;
+	}
+
+	msg.bodyptr = req;
+	msg.callback = scm_scan_cancel_req;
+	msg.flush_callback = scm_scan_cancel_flush_callback;
+
+	status = scheduler_post_message(QDF_MODULE_ID_OS_IF,
+					QDF_MODULE_ID_SCAN,
+					QDF_MODULE_ID_OS_IF, &msg);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto vdev_put;
+
+	return QDF_STATUS_SUCCESS;
+
+vdev_put:
+	wlan_objmgr_vdev_release_ref(req->vdev, WLAN_SCAN_ID);
+
+req_free:
+	qdf_mem_free(req);
+
+	return status;
+}

+ 0 - 85
umac/scan/dispatcher/src/wlan_scan_ucfg_api.c

@@ -435,51 +435,6 @@ ucfg_scm_scan_free_scan_request_mem(struct scan_start_request *req)
 	return scm_scan_free_scan_request_mem(req);
 }
 
-QDF_STATUS
-ucfg_scan_start(struct scan_start_request *req)
-{
-	struct scheduler_msg msg = {0};
-	QDF_STATUS status;
-
-	if (!req || !req->vdev) {
-		scm_err("req or vdev within req is NULL");
-		if (req)
-			scm_scan_free_scan_request_mem(req);
-		return QDF_STATUS_E_NULL_VALUE;
-	}
-
-	if (!scm_is_scan_allowed(req->vdev)) {
-		scm_err_rl("scan disabled, rejecting the scan req");
-		scm_scan_free_scan_request_mem(req);
-		return QDF_STATUS_E_AGAIN;
-	}
-
-	/* Try to get vdev reference. Return if reference could
-	 * not be taken. Reference will be released once scan
-	 * request handling completes along with free of @req.
-	 */
-	status = wlan_objmgr_vdev_try_get_ref(req->vdev, WLAN_SCAN_ID);
-	if (QDF_IS_STATUS_ERROR(status)) {
-		scm_info("unable to get reference");
-		scm_scan_free_scan_request_mem(req);
-		return status;
-	}
-
-	msg.bodyptr = req;
-	msg.callback = scm_scan_start_req;
-	msg.flush_callback = scm_scan_start_flush_callback;
-
-	status = scheduler_post_message(QDF_MODULE_ID_OS_IF,
-					QDF_MODULE_ID_SCAN,
-					QDF_MODULE_ID_OS_IF, &msg);
-	if (QDF_IS_STATUS_ERROR(status)) {
-		wlan_objmgr_vdev_release_ref(req->vdev, WLAN_SCAN_ID);
-		scm_scan_free_scan_request_mem(req);
-	}
-
-	return status;
-}
-
 QDF_STATUS ucfg_scan_psoc_set_enable(struct wlan_objmgr_psoc *psoc,
 				     enum scan_disable_reason reason)
 {
@@ -637,46 +592,6 @@ ucfg_scan_config_hidden_ssid_for_bssid(struct wlan_objmgr_pdev *pdev,
 }
 #endif /* WLAN_DFS_CHAN_HIDDEN_SSID */
 
-QDF_STATUS
-ucfg_scan_cancel(struct scan_cancel_request *req)
-{
-	struct scheduler_msg msg = {0};
-	QDF_STATUS status;
-
-	if (!req || !req->vdev) {
-		scm_err("req or vdev within req is NULL");
-		if (req)
-			qdf_mem_free(req);
-		return QDF_STATUS_E_NULL_VALUE;
-	}
-
-	status = wlan_objmgr_vdev_try_get_ref(req->vdev, WLAN_SCAN_ID);
-	if (QDF_IS_STATUS_ERROR(status)) {
-		scm_info("Failed to get vdev ref; status:%d", status);
-		goto req_free;
-	}
-
-	msg.bodyptr = req;
-	msg.callback = scm_scan_cancel_req;
-	msg.flush_callback = scm_scan_cancel_flush_callback;
-
-	status = scheduler_post_message(QDF_MODULE_ID_OS_IF,
-					QDF_MODULE_ID_SCAN,
-					QDF_MODULE_ID_OS_IF, &msg);
-	if (QDF_IS_STATUS_ERROR(status))
-		goto vdev_put;
-
-	return QDF_STATUS_SUCCESS;
-
-vdev_put:
-	wlan_objmgr_vdev_release_ref(req->vdev, WLAN_SCAN_ID);
-
-req_free:
-	qdf_mem_free(req);
-
-	return status;
-}
-
 QDF_STATUS
 ucfg_scan_cancel_sync(struct scan_cancel_request *req)
 {