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
This commit is contained in:
gaurank kathpalia 2018-11-13 15:37:49 +05:30 committed by nshrivas
parent b414bce3b7
commit 24ed0f4056
10 changed files with 248 additions and 99 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -64,6 +64,7 @@
#include "cfg_mlme_obss_ht40.h"
#include "cfg_ucfg_api.h"
#include "lim_ft.h"
#include "wlan_mlme_main.h"
#define ASCII_SPACE_CHARACTER 0x20

View File

@ -60,6 +60,7 @@
#include <qca_vendor.h>
#include <wlan_spectral_utils_api.h>
#include "wlan_mlme_public_struct.h"
#include "wlan_mlme_main.h"
static tSelfRecoveryStats g_self_recovery_stats;
@ -4807,7 +4808,7 @@ static uint8_t sme_get_nss_chain_shift(enum QDF_OPMODE device_mode)
}
static void
sme_fill_nss_chain_params(struct sAniSirGlobal *mac_ctx,
sme_fill_nss_chain_params(struct mac_context *mac_ctx,
struct wlan_mlme_nss_chains *vdev_ini_cfg,
enum QDF_OPMODE device_mode,
enum nss_chains_band_info band,
@ -4872,7 +4873,7 @@ void sme_populate_nss_chain_params(mac_handle_t mac_handle,
enum QDF_OPMODE device_mode,
uint8_t rf_chains_supported)
{
struct sAniSirGlobal *mac_ctx = MAC_CONTEXT(mac_handle);
struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
enum nss_chains_band_info band;
for (band = NSS_CHAINS_BAND_2GHZ; band < NSS_CHAINS_BAND_MAX; band++)
@ -5069,7 +5070,7 @@ sme_nss_chains_update(mac_handle_t mac_handle,
struct wlan_mlme_nss_chains *user_cfg,
uint8_t vdev_id)
{
struct sAniSirGlobal *mac_ctx = MAC_CONTEXT(mac_handle);
struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
QDF_STATUS status;
struct wlan_mlme_nss_chains *dynamic_cfg;
struct wlan_objmgr_vdev *vdev =

View File

@ -76,6 +76,7 @@
#include <target_if.h>
#include "wlan_mlme_public_struct.h"
#include "wlan_mlme_api.h"
#include "wlan_mlme_main.h"
/**
* wma_find_vdev_by_addr() - find vdev_id from mac address

View File

@ -61,6 +61,7 @@
#include "cds_reg_service.h"
#include "target_if.h"
#include <wlan_utility.h>
#include <wlan_mlme_main.h>
/* MCS Based rate table */