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
Этот коммит содержится в:
Pragaspathi Thilagaraj
2020-07-26 23:36:11 +05:30
коммит произвёл snandini
родитель 364c0b641e
Коммит 5fb48b5750
7 изменённых файлов: 452 добавлений и 0 удалений

Просмотреть файл

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