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
このコミットが含まれているのは:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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)
|
||||
{
|
||||
|
新しいイシューから参照
ユーザーをブロックする