qcacld-3.0: Infra for mlme_priv_obj with VDEV_SM enable/disable
Define two different mlme priv obj structures based upon the flag CONFIG_VDEV_SM, for the support of dynamic nss, chains update. Change-Id: I00f39eb82973da86233ddfc8bdcc94b6ca8a439a CRs-Fixed: 2349200
Tento commit je obsažen v:
@@ -26,6 +26,8 @@
|
||||
#include <wlan_objmgr_psoc_obj.h>
|
||||
#include <wlan_objmgr_global_obj.h>
|
||||
#include <wlan_cmn.h>
|
||||
#include <wlan_objmgr_vdev_obj.h>
|
||||
|
||||
|
||||
#define mlme_fatal(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_MLME, params)
|
||||
#define mlme_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_MLME, params)
|
||||
@@ -41,6 +43,78 @@ struct wlan_mlme_psoc_obj {
|
||||
struct wlan_mlme_cfg cfg;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_VDEV_SM
|
||||
|
||||
/**
|
||||
* enum vdev_assoc_type - VDEV associate/reassociate type
|
||||
* @VDEV_ASSOC: associate
|
||||
* @VDEV_REASSOC: reassociate
|
||||
* @VDEV_FT_REASSOC: fast reassociate
|
||||
*/
|
||||
enum vdev_assoc_type {
|
||||
VDEV_ASSOC,
|
||||
VDEV_REASSOC,
|
||||
VDEV_FT_REASSOC
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mlme_legacy_priv - VDEV MLME legacy priv object
|
||||
* @chan_switch_in_progress: flag to indicate that channel switch is in progress
|
||||
* @hidden_ssid_restart_in_progress: flag to indicate hidden ssid restart is
|
||||
* in progress
|
||||
* @vdev_start_failed: flag to indicate that vdev start failed.
|
||||
* @connection_fail: flag to indicate connection failed
|
||||
* @assoc_type: vdev associate/reassociate type
|
||||
* @dynamic_cfg: current configuration of nss, chains for vdev.
|
||||
* @ini_cfg: Max configuration of nss, chains supported for vdev.
|
||||
*/
|
||||
struct mlme_legacy_priv {
|
||||
bool chan_switch_in_progress;
|
||||
bool hidden_ssid_restart_in_progress;
|
||||
bool vdev_start_failed;
|
||||
bool connection_fail;
|
||||
enum vdev_assoc_type assoc_type;
|
||||
struct wlan_mlme_nss_chains dynamic_cfg;
|
||||
struct wlan_mlme_nss_chains ini_cfg;
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
/**
|
||||
* struct vdev_mlme_obj - VDEV MLME component object
|
||||
*/
|
||||
struct vdev_mlme_priv_obj {
|
||||
};
|
||||
|
||||
/**
|
||||
* mlme_vdev_object_created_notification(): mlme vdev create handler
|
||||
* @vdev: vdev which is going to created by objmgr
|
||||
* @arg: argument for vdev create handler
|
||||
*
|
||||
* Register this api with objmgr to detect vdev is created
|
||||
*
|
||||
* Return: QDF_STATUS status in case of success else return error
|
||||
*/
|
||||
|
||||
QDF_STATUS
|
||||
mlme_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev,
|
||||
void *arg);
|
||||
|
||||
/**
|
||||
* mlme_vdev_object_destroyed_notification(): mlme vdev delete handler
|
||||
* @psoc: vdev which is going to delete by objmgr
|
||||
* @arg: argument for vdev delete handler
|
||||
*
|
||||
* Register this api with objmgr to detect vdev is deleted
|
||||
*
|
||||
* Return: QDF_STATUS status in case of success else return error
|
||||
*/
|
||||
QDF_STATUS
|
||||
mlme_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev,
|
||||
void *arg);
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* mlme_psoc_object_created_notification(): mlme psoc create handler
|
||||
* @psoc: psoc which is going to created by objmgr
|
||||
|
@@ -25,39 +25,7 @@
|
||||
#ifdef CONFIG_VDEV_SM
|
||||
#include <wlan_objmgr_vdev_obj.h>
|
||||
#include "include/wlan_vdev_mlme.h"
|
||||
|
||||
/**
|
||||
* enum vdev_assoc_type - VDEV associate/reassociate type
|
||||
* @VDEV_ASSOC: associate
|
||||
* @VDEV_REASSOC: reassociate
|
||||
* @VDEV_FT_REASSOC: fast reassociate
|
||||
*/
|
||||
enum vdev_assoc_type {
|
||||
VDEV_ASSOC,
|
||||
VDEV_REASSOC,
|
||||
VDEV_FT_REASSOC
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mlme_legacy_priv - VDEV MLME legacy priv object
|
||||
* @chan_switch_in_progress: flag to indicate that channel switch is in progress
|
||||
* @hidden_ssid_restart_in_progress: flag to indicate hidden ssid restart is
|
||||
* in progress
|
||||
* @vdev_start_failed: flag to indicate that vdev start failed.
|
||||
* @connection_fail: flag to indicate connection failed
|
||||
* @assoc_type: vdev associate/reassociate type
|
||||
* @dynamic_cfg: current configuration of nss, chains for vdev.
|
||||
* @ini_cfg: Max configuration of nss, chains supported for vdev.
|
||||
*/
|
||||
struct mlme_legacy_priv {
|
||||
bool chan_switch_in_progress;
|
||||
bool hidden_ssid_restart_in_progress;
|
||||
bool vdev_start_failed;
|
||||
bool connection_fail;
|
||||
enum vdev_assoc_type assoc_type;
|
||||
struct wlan_mlme_nss_chains dynamic_cfg;
|
||||
struct wlan_mlme_nss_chains ini_cfg;
|
||||
};
|
||||
#include "wlan_mlme_main.h"
|
||||
|
||||
/**
|
||||
* mlme_register_vdev_mgr_ops() - Register vdev mgr ops
|
||||
@@ -145,24 +113,6 @@ bool mlme_is_connection_fail(struct wlan_objmgr_vdev *vdev);
|
||||
QDF_STATUS
|
||||
mlme_set_connection_fail(struct wlan_objmgr_vdev *vdev, bool val);
|
||||
|
||||
/**
|
||||
* mlme_get_dynamic_vdev_config() - get the vdev dynamic config params
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* Return: pointer to the dynamic vdev config structure
|
||||
*/
|
||||
struct wlan_mlme_nss_chains *mlme_get_dynamic_vdev_config(
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlme_get_ini_vdev_config() - get the vdev ini config params
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* Return: pointer to the ini vdev config structure
|
||||
*/
|
||||
struct wlan_mlme_nss_chains *mlme_get_ini_vdev_config(
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlme_get_vdev_start_failed() - get mlme priv vdev restart fail flag
|
||||
* @vdev: vdev pointer
|
||||
|
@@ -20,9 +20,11 @@
|
||||
*/
|
||||
|
||||
#include "wlan_mlme_main.h"
|
||||
#include "include/wlan_vdev_mlme.h"
|
||||
#include "cfg_ucfg_api.h"
|
||||
#include "wmi_unified.h"
|
||||
#include "wlan_scan_public_structs.h"
|
||||
#include "wlan_vdev_mlme_api.h"
|
||||
|
||||
#define NUM_OF_SOUNDING_DIMENSIONS 1 /*Nss - 1, (Nss = 2 for 2x2)*/
|
||||
|
||||
@@ -37,6 +39,92 @@ struct wlan_mlme_psoc_obj *mlme_get_psoc_obj(struct wlan_objmgr_psoc *psoc)
|
||||
return mlme_obj;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_VDEV_SM
|
||||
|
||||
#else
|
||||
|
||||
static struct vdev_mlme_priv_obj *
|
||||
wlan_vdev_mlme_get_priv_obj(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct vdev_mlme_priv_obj *vdev_mlme;
|
||||
|
||||
if (!vdev) {
|
||||
mlme_err("vdev is NULL");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(vdev,
|
||||
WLAN_UMAC_COMP_MLME);
|
||||
if (!vdev_mlme) {
|
||||
mlme_err(" MLME component object is NULL");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return vdev_mlme;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
mlme_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev,
|
||||
void *arg)
|
||||
{
|
||||
struct vdev_mlme_priv_obj *vdev_mlme;
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!vdev) {
|
||||
mlme_err(" VDEV is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev_mlme = qdf_mem_malloc(sizeof(*vdev_mlme));
|
||||
if (!vdev_mlme) {
|
||||
mlme_err(" MLME component object alloc failed");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_vdev_component_obj_attach(vdev,
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
(void *)vdev_mlme,
|
||||
QDF_STATUS_SUCCESS);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_err("unable to attach vdev priv obj to vdev obj");
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
mlme_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev,
|
||||
void *arg)
|
||||
{
|
||||
struct vdev_mlme_priv_obj *vdev_mlme;
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!vdev) {
|
||||
mlme_err(" VDEV is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(vdev,
|
||||
WLAN_UMAC_COMP_MLME);
|
||||
if (!vdev_mlme) {
|
||||
mlme_err(" VDEV MLME component object is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_vdev_component_obj_detach(vdev,
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
vdev_mlme);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_err("unable to detach vdev priv obj to vdev obj");
|
||||
|
||||
qdf_mem_free(vdev_mlme);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
QDF_STATUS
|
||||
mlme_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc,
|
||||
void *arg)
|
||||
|
@@ -595,40 +595,6 @@ mlme_set_vdev_start_failed(struct wlan_objmgr_vdev *vdev, bool val)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
struct wlan_mlme_nss_chains *mlme_get_dynamic_vdev_config(
|
||||
struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct vdev_mlme_obj *vdev_mlme;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||
if (!vdev_mlme) {
|
||||
mlme_err("vdev component object is NULL");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mlme_priv = vdev_mlme->legacy_vdev_ptr;
|
||||
|
||||
return &mlme_priv->dynamic_cfg;
|
||||
}
|
||||
|
||||
struct wlan_mlme_nss_chains *mlme_get_ini_vdev_config(
|
||||
struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct vdev_mlme_obj *vdev_mlme;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||
if (!vdev_mlme) {
|
||||
mlme_err("vdev component object is NULL");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mlme_priv = vdev_mlme->legacy_vdev_ptr;
|
||||
|
||||
return &mlme_priv->ini_cfg;
|
||||
}
|
||||
|
||||
bool mlme_get_vdev_start_failed(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct vdev_mlme_obj *vdev_mlme;
|
||||
|
@@ -27,7 +27,7 @@
|
||||
#include <wlan_objmgr_global_obj.h>
|
||||
#include <wlan_cmn.h>
|
||||
#include <wlan_mlme_api.h>
|
||||
#include <wlan_mlme_vdev_mgr_interface.h>
|
||||
#include <wlan_mlme_main.h>
|
||||
|
||||
/**
|
||||
* ucfg_mlme_init() - initialize mlme_ctx context.
|
||||
|
@@ -27,6 +27,67 @@
|
||||
#include "wlan_objmgr_pdev_obj.h"
|
||||
#include "wlan_mlme_vdev_mgr_interface.h"
|
||||
|
||||
#ifdef CONFIG_VDEV_SM
|
||||
static QDF_STATUS ucfg_mlme_vdev_init(void)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS ucfg_mlme_vdev_deinit(void)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#else
|
||||
static QDF_STATUS ucfg_mlme_vdev_init(void)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
status = wlan_objmgr_register_vdev_create_handler(
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
mlme_vdev_object_created_notification,
|
||||
NULL);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mlme_err("unable to register vdev create handle");
|
||||
return status;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_register_vdev_destroy_handler(
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
mlme_vdev_object_destroyed_notification,
|
||||
NULL);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_err("unable to register vdev create handle");
|
||||
|
||||
return status;
|
||||
|
||||
}
|
||||
|
||||
static QDF_STATUS ucfg_mlme_vdev_deinit(void)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
status = wlan_objmgr_unregister_vdev_destroy_handler(
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
mlme_vdev_object_destroyed_notification,
|
||||
NULL);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_err("unable to unregister vdev destroy handle");
|
||||
|
||||
status = wlan_objmgr_unregister_vdev_create_handler(
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
mlme_vdev_object_created_notification,
|
||||
NULL);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_err("unable to unregister vdev create handle");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
QDF_STATUS ucfg_mlme_init(void)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
@@ -44,8 +105,11 @@ QDF_STATUS ucfg_mlme_init(void)
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
mlme_psoc_object_destroyed_notification,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
mlme_err("unable to register psoc create handle");
|
||||
return status;
|
||||
}
|
||||
status = ucfg_mlme_vdev_init();
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -54,22 +118,25 @@ QDF_STATUS ucfg_mlme_deinit(void)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
status = wlan_objmgr_unregister_psoc_create_handler(
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
mlme_psoc_object_created_notification,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
mlme_err("unable to unregister psoc create handle");
|
||||
return status;
|
||||
}
|
||||
status = ucfg_mlme_vdev_deinit();
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_err("unable to unregister vdev destroy handle");
|
||||
|
||||
status = wlan_objmgr_unregister_psoc_destroy_handler(
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
mlme_psoc_object_destroyed_notification,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_err("unable to unregister psoc destroy handle");
|
||||
|
||||
status = wlan_objmgr_unregister_psoc_create_handler(
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
mlme_psoc_object_created_notification,
|
||||
NULL);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
mlme_err("unable to unregister psoc create handle");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele