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
This commit is contained in:
Abhishek Singh
2020-09-09 08:35:14 +05:30
committed by snandini
szülő 90dea34ae2
commit 5c7a12059f
4 fájl változott, egészen pontosan 120 új sor hozzáadva és 95 régi sor törölve

Fájl megtekintése

@@ -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

Fájl megtekintése

@@ -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

Fájl megtekintése

@@ -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;
}

Fájl megtekintése

@@ -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)
{