qcacmn: Add scan public APIs for non-osif component
Adds wlan_scan_get_scan_id, wlan_scan_init_default_params, wlan_scan_register_requester and wlan_scan_unregister_requester APIs to use from non-osif component, as ucfg_* API should only be used from OSIF. Change-Id: Ia90313030e853c957ca85e47ff2b67097490ef87 CRs-Fixed: 2791549
Цей коміт міститься в:
@@ -318,4 +318,64 @@ QDF_STATUS wlan_scan_start(struct scan_start_request *req);
|
||||
*/
|
||||
QDF_STATUS wlan_scan_cancel(struct scan_cancel_request *req);
|
||||
|
||||
/**
|
||||
* wlan_scan_get_scan_id() - Public API to allocate scan ID
|
||||
* @psoc: psoc object
|
||||
*
|
||||
* Public API, allocates a new scan id for caller
|
||||
*
|
||||
* Return: newly allocated scan ID
|
||||
*/
|
||||
wlan_scan_id
|
||||
wlan_scan_get_scan_id(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* wlan_scan_init_default_params() - Public API to initialize scan params
|
||||
* @vdev: vdev object
|
||||
* @req: scan request object
|
||||
*
|
||||
* Public API to initialize scan start request with defaults scan params
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or error code
|
||||
*/
|
||||
QDF_STATUS
|
||||
wlan_scan_init_default_params(struct wlan_objmgr_vdev *vdev,
|
||||
struct scan_start_request *req);
|
||||
|
||||
/**
|
||||
* wlan_scan_register_requester() - Public API, assigns requester ID
|
||||
* to caller and registers scan event call back handler
|
||||
* @psoc: psoc object
|
||||
* @module_name:name of requester module
|
||||
* @event_cb: event callback function pointer
|
||||
* @arg: argument to @event_cb
|
||||
*
|
||||
* API, allows other components to allocate requester id.
|
||||
* Normally used by modules at init time to register their callback
|
||||
* and get one requester id. @event_cb will be invoked for
|
||||
* all scan events whose requester id matches with @requester.
|
||||
*
|
||||
* Return: assigned non zero requester id for success
|
||||
* zero (0) for failure
|
||||
*/
|
||||
wlan_scan_requester
|
||||
wlan_scan_register_requester(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *module_name,
|
||||
scan_event_handler event_cb,
|
||||
void *arg);
|
||||
|
||||
/**
|
||||
* wlan_scan_unregister_requester() -Public API, reclaims previously
|
||||
* allocated requester ID
|
||||
* @psoc: psoc object
|
||||
* @requester: requester ID to reclaim.
|
||||
*
|
||||
* API, reclaims previously allocated requester id.
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void
|
||||
wlan_scan_unregister_requester(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_scan_requester requester);
|
||||
|
||||
#endif
|
||||
|
@@ -31,14 +31,14 @@
|
||||
#include "wlan_scan_api.h"
|
||||
|
||||
/**
|
||||
* ucfg_scan_register_requester() - assigns requester ID to caller and
|
||||
* registers scan event call back handler
|
||||
* ucfg_scan_register_requester() - Public ucfg API, assigns requester ID
|
||||
* to caller and registers scan event call back handler
|
||||
* @psoc: psoc object
|
||||
* @module_name:name of requester module
|
||||
* @event_cb: event callback function pointer
|
||||
* @arg: argument to @event_cb
|
||||
*
|
||||
* API, allows other components to allocate requester id
|
||||
* API, allows other components to allocate requester id.
|
||||
* Normally used by modules at init time to register their callback
|
||||
* and get one requester id. @event_cb will be invoked for
|
||||
* all scan events whose requester id matches with @requester.
|
||||
@@ -46,23 +46,29 @@
|
||||
* Return: assigned non zero requester id for success
|
||||
* zero (0) for failure
|
||||
*/
|
||||
wlan_scan_requester
|
||||
static inline wlan_scan_requester
|
||||
ucfg_scan_register_requester(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *module_name, scan_event_handler event_cb, void *arg);
|
||||
uint8_t *module_name, scan_event_handler event_cb, void *arg)
|
||||
{
|
||||
return wlan_scan_register_requester(psoc, module_name, event_cb, arg);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_scan_unregister_requester() -reclaims previously allocated requester ID
|
||||
* ucfg_scan_unregister_requester() -Public ucfg API, reclaims previously
|
||||
* allocated requester ID
|
||||
* @psoc: psoc object
|
||||
* @requester: requester ID to reclaim.
|
||||
*
|
||||
* API, reclaims previously allocated requester id by
|
||||
* ucfg_scan_get_req_id_reg_cb()
|
||||
* API, reclaims previously allocated requester id.
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline
|
||||
void ucfg_scan_unregister_requester(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_scan_requester requester);
|
||||
|
||||
wlan_scan_requester requester)
|
||||
{
|
||||
return wlan_scan_unregister_requester(psoc, requester);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_get_scan_requester_name()- returns module name of requester ID owner
|
||||
@@ -76,18 +82,19 @@ void ucfg_scan_unregister_requester(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *ucfg_get_scan_requester_name(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_scan_requester requester);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* ucfg_scan_get_scan_id() - allocates scan ID
|
||||
* ucfg_scan_get_scan_id() - Public ucfg API to allocate scan ID
|
||||
* @psoc: psoc object
|
||||
*
|
||||
* API, allocates a new scan id for caller
|
||||
* Public ucfg API, allocates a new scan id for caller
|
||||
*
|
||||
* Return: newly allocated scan ID
|
||||
*/
|
||||
wlan_scan_id
|
||||
ucfg_scan_get_scan_id(struct wlan_objmgr_psoc *psoc);
|
||||
static inline
|
||||
wlan_scan_id ucfg_scan_get_scan_id(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return wlan_scan_get_scan_id(psoc);
|
||||
}
|
||||
|
||||
#ifdef FEATURE_WLAN_SCAN_PNO
|
||||
/**
|
||||
@@ -454,17 +461,20 @@ ucfg_scan_unregister_event_handler(struct wlan_objmgr_pdev *pdev,
|
||||
scan_event_handler event_cb, void *arg);
|
||||
|
||||
/**
|
||||
* ucfg_scan_init_default_params() - get the defaults scan params
|
||||
* ucfg_scan_init_default_params() - Public ucfg API to initialize scan params
|
||||
* @vdev: vdev object
|
||||
* @req: scan request object
|
||||
*
|
||||
* get the defaults scan params
|
||||
* Public ucfg API to initialize scan start request with defaults scan params
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or error code
|
||||
*/
|
||||
QDF_STATUS
|
||||
static inline QDF_STATUS
|
||||
ucfg_scan_init_default_params(struct wlan_objmgr_vdev *vdev,
|
||||
struct scan_start_request *req);
|
||||
struct scan_start_request *req)
|
||||
{
|
||||
return wlan_scan_init_default_params(vdev, req);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_scan_init_ssid_params() - initialize scan request ssid list
|
||||
|
@@ -418,3 +418,161 @@ req_free:
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
wlan_scan_id
|
||||
wlan_scan_get_scan_id(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
wlan_scan_id id;
|
||||
struct wlan_scan_obj *scan;
|
||||
|
||||
if (!psoc) {
|
||||
QDF_ASSERT(0);
|
||||
scm_err("null psoc");
|
||||
return 0;
|
||||
}
|
||||
|
||||
scan = wlan_psoc_get_scan_obj(psoc);
|
||||
if (!scan) {
|
||||
scm_err("scan object null");
|
||||
return 0;
|
||||
}
|
||||
|
||||
id = qdf_atomic_inc_return(&scan->scan_ids);
|
||||
id = id & WLAN_SCAN_ID_MASK;
|
||||
/* Mark this scan request as triggered by host
|
||||
* by setting WLAN_HOST_SCAN_REQ_ID_PREFIX flag.
|
||||
*/
|
||||
id = id | WLAN_HOST_SCAN_REQ_ID_PREFIX;
|
||||
scm_debug("scan_id: 0x%x", id);
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_scan_init_default_params(struct wlan_objmgr_vdev *vdev,
|
||||
struct scan_start_request *req)
|
||||
{
|
||||
struct scan_default_params *def;
|
||||
|
||||
if (!vdev | !req) {
|
||||
scm_err("vdev: 0x%pK, req: 0x%pK", vdev, req);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
def = wlan_vdev_get_def_scan_params(vdev);
|
||||
if (!def) {
|
||||
scm_err("wlan_vdev_get_def_scan_params returned NULL");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
/* Zero out everything and explicitly set fields as required */
|
||||
qdf_mem_zero(req, sizeof(*req));
|
||||
|
||||
req->vdev = vdev;
|
||||
req->scan_req.vdev_id = wlan_vdev_get_id(vdev);
|
||||
req->scan_req.scan_type = SCAN_TYPE_DEFAULT;
|
||||
req->scan_req.scan_priority = def->scan_priority;
|
||||
req->scan_req.dwell_time_active = def->active_dwell;
|
||||
req->scan_req.dwell_time_active_2g = def->active_dwell_2g;
|
||||
req->scan_req.dwell_time_active_6g = def->active_dwell_6g;
|
||||
req->scan_req.dwell_time_passive_6g = def->passive_dwell_6g;
|
||||
req->scan_req.dwell_time_passive = def->passive_dwell;
|
||||
req->scan_req.min_rest_time = def->min_rest_time;
|
||||
req->scan_req.max_rest_time = def->max_rest_time;
|
||||
req->scan_req.repeat_probe_time = def->repeat_probe_time;
|
||||
req->scan_req.probe_spacing_time = def->probe_spacing_time;
|
||||
req->scan_req.idle_time = def->idle_time;
|
||||
req->scan_req.max_scan_time = def->max_scan_time;
|
||||
req->scan_req.probe_delay = def->probe_delay;
|
||||
req->scan_req.burst_duration = def->burst_duration;
|
||||
req->scan_req.n_probes = def->num_probes;
|
||||
req->scan_req.adaptive_dwell_time_mode =
|
||||
def->adaptive_dwell_time_mode;
|
||||
req->scan_req.scan_flags = def->scan_flags;
|
||||
req->scan_req.scan_events = def->scan_events;
|
||||
req->scan_req.scan_random.randomize = def->enable_mac_spoofing;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
wlan_scan_requester
|
||||
wlan_scan_register_requester(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *name,
|
||||
scan_event_handler event_cb,
|
||||
void *arg)
|
||||
{
|
||||
int i, j;
|
||||
struct wlan_scan_obj *scan;
|
||||
struct scan_requester_info *requesters;
|
||||
wlan_scan_requester requester = {0};
|
||||
|
||||
if (!psoc) {
|
||||
scm_err("null psoc");
|
||||
return 0;
|
||||
}
|
||||
scan = wlan_psoc_get_scan_obj(psoc);
|
||||
if (!scan)
|
||||
return 0;
|
||||
|
||||
requesters = scan->requesters;
|
||||
qdf_spin_lock_bh(&scan->lock);
|
||||
for (i = 0; i < WLAN_MAX_REQUESTORS; ++i) {
|
||||
if (requesters[i].requester == 0) {
|
||||
requesters[i].requester =
|
||||
WLAN_SCAN_REQUESTER_ID_PREFIX | i;
|
||||
j = 0;
|
||||
while (name[j] && (j < (WLAN_MAX_MODULE_NAME - 1))) {
|
||||
requesters[i].module[j] = name[j];
|
||||
++j;
|
||||
}
|
||||
requesters[i].module[j] = 0;
|
||||
requesters[i].ev_handler.func = event_cb;
|
||||
requesters[i].ev_handler.arg = arg;
|
||||
requester = requesters[i].requester;
|
||||
break;
|
||||
}
|
||||
}
|
||||
qdf_spin_unlock_bh(&scan->lock);
|
||||
scm_debug("module: %s, event_cb: 0x%pK, arg: 0x%pK, reqid: %d",
|
||||
name, event_cb, arg, requester);
|
||||
|
||||
return requester;
|
||||
}
|
||||
|
||||
void
|
||||
wlan_scan_unregister_requester(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_scan_requester requester)
|
||||
{
|
||||
int idx;
|
||||
struct wlan_scan_obj *scan;
|
||||
struct scan_requester_info *requesters;
|
||||
|
||||
idx = requester & WLAN_SCAN_REQUESTER_ID_PREFIX;
|
||||
if (idx != WLAN_SCAN_REQUESTER_ID_PREFIX) {
|
||||
scm_err("prefix didn't match for requester id %d", requester);
|
||||
return;
|
||||
}
|
||||
|
||||
idx = requester & WLAN_SCAN_REQUESTER_ID_MASK;
|
||||
if (idx >= WLAN_MAX_REQUESTORS) {
|
||||
scm_err("requester id %d greater than max value", requester);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!psoc) {
|
||||
scm_err("null psoc");
|
||||
return;
|
||||
}
|
||||
scan = wlan_psoc_get_scan_obj(psoc);
|
||||
if (!scan)
|
||||
return;
|
||||
requesters = scan->requesters;
|
||||
scm_debug("reqid: %d", requester);
|
||||
|
||||
qdf_spin_lock_bh(&scan->lock);
|
||||
requesters[idx].requester = 0;
|
||||
requesters[idx].module[0] = 0;
|
||||
requesters[idx].ev_handler.func = NULL;
|
||||
requesters[idx].ev_handler.arg = NULL;
|
||||
qdf_spin_unlock_bh(&scan->lock);
|
||||
}
|
||||
|
||||
|
@@ -644,86 +644,6 @@ ucfg_scan_cancel_sync(struct scan_cancel_request *req)
|
||||
return status;
|
||||
}
|
||||
|
||||
wlan_scan_requester
|
||||
ucfg_scan_register_requester(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *name, scan_event_handler event_cb, void *arg)
|
||||
{
|
||||
int i, j;
|
||||
struct wlan_scan_obj *scan;
|
||||
struct scan_requester_info *requesters;
|
||||
wlan_scan_requester requester = {0};
|
||||
|
||||
if (!psoc) {
|
||||
scm_err("null psoc");
|
||||
return 0;
|
||||
}
|
||||
scan = wlan_psoc_get_scan_obj(psoc);
|
||||
if (!scan)
|
||||
return 0;
|
||||
|
||||
requesters = scan->requesters;
|
||||
qdf_spin_lock_bh(&scan->lock);
|
||||
for (i = 0; i < WLAN_MAX_REQUESTORS; ++i) {
|
||||
if (requesters[i].requester == 0) {
|
||||
requesters[i].requester =
|
||||
WLAN_SCAN_REQUESTER_ID_PREFIX | i;
|
||||
j = 0;
|
||||
while (name[j] && (j < (WLAN_MAX_MODULE_NAME - 1))) {
|
||||
requesters[i].module[j] = name[j];
|
||||
++j;
|
||||
}
|
||||
requesters[i].module[j] = 0;
|
||||
requesters[i].ev_handler.func = event_cb;
|
||||
requesters[i].ev_handler.arg = arg;
|
||||
requester = requesters[i].requester;
|
||||
break;
|
||||
}
|
||||
}
|
||||
qdf_spin_unlock_bh(&scan->lock);
|
||||
scm_debug("module: %s, event_cb: 0x%pK, arg: 0x%pK, reqid: %d",
|
||||
name, event_cb, arg, requester);
|
||||
|
||||
return requester;
|
||||
}
|
||||
|
||||
void
|
||||
ucfg_scan_unregister_requester(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_scan_requester requester)
|
||||
{
|
||||
int idx;
|
||||
struct wlan_scan_obj *scan;
|
||||
struct scan_requester_info *requesters;
|
||||
|
||||
idx = requester & WLAN_SCAN_REQUESTER_ID_PREFIX;
|
||||
if (idx != WLAN_SCAN_REQUESTER_ID_PREFIX) {
|
||||
scm_err("prefix didn't match for requester id %d", requester);
|
||||
return;
|
||||
}
|
||||
|
||||
idx = requester & WLAN_SCAN_REQUESTER_ID_MASK;
|
||||
if (idx >= WLAN_MAX_REQUESTORS) {
|
||||
scm_err("requester id %d greater than max value", requester);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!psoc) {
|
||||
scm_err("null psoc");
|
||||
return;
|
||||
}
|
||||
scan = wlan_psoc_get_scan_obj(psoc);
|
||||
if (!scan)
|
||||
return;
|
||||
requesters = scan->requesters;
|
||||
scm_debug("reqid: %d", requester);
|
||||
|
||||
qdf_spin_lock_bh(&scan->lock);
|
||||
requesters[idx].requester = 0;
|
||||
requesters[idx].module[0] = 0;
|
||||
requesters[idx].ev_handler.func = NULL;
|
||||
requesters[idx].ev_handler.arg = NULL;
|
||||
qdf_spin_unlock_bh(&scan->lock);
|
||||
}
|
||||
|
||||
uint8_t*
|
||||
ucfg_get_scan_requester_name(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_scan_requester requester)
|
||||
@@ -750,35 +670,6 @@ ucfg_get_scan_requester_name(struct wlan_objmgr_psoc *psoc,
|
||||
return (uint8_t *)"unknown";
|
||||
}
|
||||
|
||||
wlan_scan_id
|
||||
ucfg_scan_get_scan_id(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
wlan_scan_id id;
|
||||
struct wlan_scan_obj *scan;
|
||||
|
||||
if (!psoc) {
|
||||
QDF_ASSERT(0);
|
||||
scm_err("null psoc");
|
||||
return 0;
|
||||
}
|
||||
|
||||
scan = wlan_psoc_get_scan_obj(psoc);
|
||||
if (!scan) {
|
||||
scm_err("scan object null");
|
||||
return 0;
|
||||
}
|
||||
|
||||
id = qdf_atomic_inc_return(&scan->scan_ids);
|
||||
id = id & WLAN_SCAN_ID_MASK;
|
||||
/* Mark this scan request as triggered by host
|
||||
* by setting WLAN_HOST_SCAN_REQ_ID_PREFIX flag.
|
||||
*/
|
||||
id = id | WLAN_HOST_SCAN_REQ_ID_PREFIX;
|
||||
scm_debug("scan_id: 0x%x", id);
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
scm_add_scan_event_handler(struct pdev_scan_ev_handler *pdev_ev_handler,
|
||||
scan_event_handler event_cb, void *arg)
|
||||
@@ -1041,52 +932,6 @@ ucfg_scan_unregister_event_handler(struct wlan_objmgr_pdev *pdev,
|
||||
(found ? "removed" : "not found"), handler_cnt);
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
ucfg_scan_init_default_params(struct wlan_objmgr_vdev *vdev,
|
||||
struct scan_start_request *req)
|
||||
{
|
||||
struct scan_default_params *def;
|
||||
|
||||
if (!vdev | !req) {
|
||||
scm_err("vdev: 0x%pK, req: 0x%pK", vdev, req);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
def = wlan_vdev_get_def_scan_params(vdev);
|
||||
if (!def) {
|
||||
scm_err("wlan_vdev_get_def_scan_params returned NULL");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
/* Zero out everything and explicitly set fields as required */
|
||||
qdf_mem_zero(req, sizeof(*req));
|
||||
|
||||
req->vdev = vdev;
|
||||
req->scan_req.vdev_id = wlan_vdev_get_id(vdev);
|
||||
req->scan_req.scan_type = SCAN_TYPE_DEFAULT;
|
||||
req->scan_req.scan_priority = def->scan_priority;
|
||||
req->scan_req.dwell_time_active = def->active_dwell;
|
||||
req->scan_req.dwell_time_active_2g = def->active_dwell_2g;
|
||||
req->scan_req.dwell_time_active_6g = def->active_dwell_6g;
|
||||
req->scan_req.dwell_time_passive_6g = def->passive_dwell_6g;
|
||||
req->scan_req.dwell_time_passive = def->passive_dwell;
|
||||
req->scan_req.min_rest_time = def->min_rest_time;
|
||||
req->scan_req.max_rest_time = def->max_rest_time;
|
||||
req->scan_req.repeat_probe_time = def->repeat_probe_time;
|
||||
req->scan_req.probe_spacing_time = def->probe_spacing_time;
|
||||
req->scan_req.idle_time = def->idle_time;
|
||||
req->scan_req.max_scan_time = def->max_scan_time;
|
||||
req->scan_req.probe_delay = def->probe_delay;
|
||||
req->scan_req.burst_duration = def->burst_duration;
|
||||
req->scan_req.n_probes = def->num_probes;
|
||||
req->scan_req.adaptive_dwell_time_mode =
|
||||
def->adaptive_dwell_time_mode;
|
||||
req->scan_req.scan_flags = def->scan_flags;
|
||||
req->scan_req.scan_events = def->scan_events;
|
||||
req->scan_req.scan_random.randomize = def->enable_mac_spoofing;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
ucfg_scan_init_ssid_params(struct scan_start_request *req,
|
||||
uint32_t num_ssid, struct wlan_ssid *ssid_list)
|
||||
|
Посилання в новій задачі
Заблокувати користувача