qcacld-3.0: Connection manager add ucfg API for sme roam operations
Add changes to handle north bound roaming operations/ configurations in connection manager. Add equivalent connection manager api for userspace triggered roaming operations & driver internally triggered roaming offload operations: sme_enable_roaming() - ucfg_cm_rso_init_deinit : Driver internally triggered sme_config_fast_roaming() - ucfg_user_space_enable_disable_rso: Userspace triggered sme_start_roaming() - ucfg_cm_enable_rso() - Driver internally triggered sme_stop_roaming() - ucfg_cm_disable_rso() - Driver internally triggered sme_abort_roam_scan() - ucfg_user_space_abort_roam_scan() -User space triggered Change-Id: I65130f69f2afff61b9ef7334ec365d3ce7519930 CRs-Fixed: 2741055
Этот коммит содержится в:

коммит произвёл
snandini

родитель
364c0b641e
Коммит
5fb48b5750
@@ -134,6 +134,29 @@ wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* cm_roam_acquire_lock - Wrapper for sme_acquire_global_lock.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_roam_acquire_lock(void);
|
||||
|
||||
/**
|
||||
* cm_roam_release_lock - Wrapper for sme_release_global_lock()
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_roam_release_lock(void);
|
||||
|
||||
/**
|
||||
* cm_roam_get_requestor_string - RSO control requestor to string api
|
||||
* @requestor: Requestor of type enum wlan_cm_rso_control_requestor
|
||||
*
|
||||
* Return: Pointer to converted string
|
||||
*/
|
||||
char
|
||||
*cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor);
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
|
@@ -23,4 +23,60 @@
|
||||
#ifndef _WLAN_CM_ROAM_UCFG_API_H_
|
||||
#define _WLAN_CM_ROAM_UCFG_API_H_
|
||||
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
/**
|
||||
* ucfg_user_space_enable_disable_rso - Enable/Disable Roam Scan offload
|
||||
* to firmware.
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @is_fast_roam_enabled: Value provided by userspace.
|
||||
* is_fast_roam_enabled - true: enable RSO if FastRoamEnabled ini is enabled
|
||||
* false: disable RSO
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
ucfg_user_space_enable_disable_rso(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
const bool is_fast_roam_enabled);
|
||||
|
||||
/**
|
||||
* ucfg_cm_rso_init_deinit - Init or Deinit roaming module at firmware
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @enable: true: Send RSO init and RSO enable
|
||||
* false: Send RSO stop
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id, bool enable);
|
||||
|
||||
/**
|
||||
* ucfg_cm_disable_rso - Disable roam scan offload to firmware
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @requestor: RSO disable requestor
|
||||
* @reason: Reason for RSO disable
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||
enum wlan_cm_rso_control_requestor requestor,
|
||||
uint8_t reason);
|
||||
|
||||
/**
|
||||
* ucfg_cm_enable_rso - Enable roam scan offload to firmware
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @requestor: RSO disable requestor
|
||||
* @reason: Reason for RSO disable
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS ucfg_cm_enable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||
enum wlan_cm_rso_control_requestor requestor,
|
||||
uint8_t reason);
|
||||
#endif
|
||||
#endif
|
||||
|
@@ -329,3 +329,26 @@ wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
char *cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor)
|
||||
{
|
||||
switch (requestor) {
|
||||
case RSO_INVALID_REQUESTOR:
|
||||
default:
|
||||
return "No requestor";
|
||||
case RSO_START_BSS:
|
||||
return "SAP start";
|
||||
case RSO_CHANNEL_SWITCH:
|
||||
return "CSA";
|
||||
case RSO_CONNECT_START:
|
||||
return "STA connection";
|
||||
case RSO_SAP_CHANNEL_CHANGE:
|
||||
return "SAP Ch switch";
|
||||
case RSO_NDP_CON_ON_NDI:
|
||||
return "NDP connection";
|
||||
case RSO_SET_PCL:
|
||||
return "Set PCL";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@@ -22,3 +22,127 @@
|
||||
|
||||
#include "wlan_cm_roam_ucfg_api.h"
|
||||
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
QDF_STATUS
|
||||
ucfg_user_space_enable_disable_rso(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
const bool is_fast_roam_enabled)
|
||||
{
|
||||
bool supplicant_disabled_roaming;
|
||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||
QDF_STATUS status;
|
||||
|
||||
/*
|
||||
* If the ini "FastRoamEnabled" is disabled, don't allow the
|
||||
* userspace to enable roam offload
|
||||
*/
|
||||
ucfg_mlme_is_lfr_enabled(psoc, &lfr_enabled);
|
||||
if (!lfr_enabled) {
|
||||
mlme_legacy_debug("ROAM_CONFIG: Fast roam ini is disabled");
|
||||
if (!is_fast_roam_enabled)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Supplicant_disabled_roaming flag is the global flag to control
|
||||
* roam offload from supplicant. Driver cannot enable roaming if
|
||||
* supplicant disabled roaming is set.
|
||||
* is_fast_roam_enabled: true - enable RSO if not disabled by driver
|
||||
* false - Disable RSO. Send RSO stop if false
|
||||
* is set.
|
||||
*/
|
||||
supplicant_disabled_roaming =
|
||||
mlme_get_supplicant_disabled_roaming(psoc, vdev_id);
|
||||
if (!is_fast_roam_enabled && supplicant_disabled_roaming) {
|
||||
mlme_legacy_debug("ROAM_CONFIG: RSO already disabled by supplicant");
|
||||
return QDF_STATUS_E_ALREADY;
|
||||
}
|
||||
|
||||
mlme_set_supplicant_disabled_roaming(psoc, vdev_id,
|
||||
!is_fast_roam_enabled);
|
||||
|
||||
state = (is_fast_roam_enabled) ?
|
||||
WLAN_ROAM_RSO_ENABLED : WLAN_ROAM_RSO_STOPPED;
|
||||
status = cm_roam_state_change(pdev, vdev_id, state,
|
||||
REASON_SUPPLICANT_DISABLED_ROAMING);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* Driver internally invoked RSO operation/configuration APIs.
|
||||
*/
|
||||
QDF_STATUS
|
||||
ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id, bool enable)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||
uint8_t reason = REASON_SUPPLICANT_DE_INIT_ROAMING;
|
||||
QDF_STATUS status;
|
||||
|
||||
status = cm_roam_acquire_lock();
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
if (enable)
|
||||
reason = REASON_SUPPLICANT_INIT_ROAMING;
|
||||
|
||||
status = cm_roam_state_change(
|
||||
pdev, vdev_id,
|
||||
enable ? WLAN_ROAM_RSO_ENABLED : WLAN_ROAM_DEINIT,
|
||||
reason);
|
||||
cm_roam_release_lock();
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||
enum wlan_cm_rso_control_requestor requestor,
|
||||
uint8_t reason)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||
QDF_STATUS status;
|
||||
|
||||
status = cm_roam_acquire_lock();
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
if (reason == REASON_DRIVER_DISABLED && requestor)
|
||||
mlme_set_operations_bitmap(psoc, vdev_id, requestor, false);
|
||||
|
||||
mlme_legacy_debug("ROAM_CONFIG: vdev[%d] Disable roaming - requestor:%s",
|
||||
vdev_id, cm_roam_get_requestor_string(requestor));
|
||||
|
||||
status = cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_RSO_STOPPED,
|
||||
REASON_DRIVER_DISABLED);
|
||||
cm_roam_release_lock();
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_cm_enable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||
enum wlan_cm_rso_control_requestor requestor,
|
||||
uint8_t reason)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||
QDF_STATUS status;
|
||||
|
||||
if (reason == REASON_DRIVER_DISABLED && requestor)
|
||||
mlme_set_operations_bitmap(mac->psoc, vdev_id, requestor, true);
|
||||
|
||||
status = cm_roam_acquire_lock();
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
mlme_legacy_debug("ROAM_CONFIG: vdev[%d] Enable roaming - requestor:%s",
|
||||
vdev_id, cm_roam_get_requestor_string(requestor));
|
||||
|
||||
status = cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_RSO_STARTED,
|
||||
REASON_DRIVER_ENABLED);
|
||||
cm_roam_release_lock();
|
||||
|
||||
return status;
|
||||
}
|
||||
#endif
|
||||
|
Ссылка в новой задаче
Block a user