qcacmn: Define VDEV MLME component object
This change defines VDEV MLME object, and registers with object manager to be notified on creation/destroy, and also initializes MLME SM Change-Id: I75bb7de7326e4bbed21ef9653427c4e0694c3ffc CRs-Fixed: 2307722
This commit is contained in:

gecommit door
nshrivas

bovenliggende
bc7748c852
commit
be8dac4d5d
@@ -27,6 +27,7 @@
|
||||
#include <wlan_ftm_init_deinit_api.h>
|
||||
#include <wlan_mgmt_txrx_utils_api.h>
|
||||
#include <wlan_serialization_api.h>
|
||||
#include <wlan_vdev_mlme_main.h>
|
||||
#ifdef WLAN_POLICY_MGR_ENABLE
|
||||
#include "wlan_policy_mgr_api.h"
|
||||
#endif
|
||||
@@ -973,6 +974,9 @@ QDF_STATUS dispatcher_init(void)
|
||||
if (QDF_IS_STATUS_ERROR(cfg_dispatcher_init()))
|
||||
goto cfg_init_fail;
|
||||
|
||||
if (QDF_STATUS_SUCCESS != wlan_vdev_mlme_init())
|
||||
goto vdev_mlme_init_fail;
|
||||
|
||||
/*
|
||||
* scheduler INIT has to be the last as each component's
|
||||
* initialization has to happen first and then at the end
|
||||
@@ -984,6 +988,8 @@ QDF_STATUS dispatcher_init(void)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
scheduler_init_fail:
|
||||
wlan_vdev_mlme_deinit();
|
||||
vdev_mlme_init_fail:
|
||||
cfg_dispatcher_deinit();
|
||||
cfg_init_fail:
|
||||
dispatcher_ftm_deinit();
|
||||
@@ -1041,6 +1047,8 @@ QDF_STATUS dispatcher_deinit(void)
|
||||
|
||||
QDF_BUG(QDF_STATUS_SUCCESS == scheduler_deinit());
|
||||
|
||||
QDF_BUG(QDF_STATUS_SUCCESS == wlan_vdev_mlme_deinit());
|
||||
|
||||
status = cfg_dispatcher_deinit();
|
||||
QDF_BUG(QDF_IS_STATUS_SUCCESS(status));
|
||||
|
||||
|
@@ -361,6 +361,7 @@ typedef void (*qdf_timer_func_t)(void *);
|
||||
* @QDF_MODULE_ID_MBSSIE: MBSS IE ID
|
||||
* @QDF_MODULE_ID_FWOL: FW Offload module ID
|
||||
* @QDF_MODULE_ID_SM_ENGINE: SM engine module ID
|
||||
* @QDF_MODULE_ID_CMN_MLME: CMN MLME module ID
|
||||
* @QDF_MODULE_ID_ANY: anything
|
||||
* @QDF_MODULE_ID_MAX: Max place holder module ID
|
||||
*/
|
||||
@@ -469,6 +470,7 @@ typedef enum {
|
||||
QDF_MODULE_ID_MBSSIE,
|
||||
QDF_MODULE_ID_FWOL,
|
||||
QDF_MODULE_ID_SM_ENGINE,
|
||||
QDF_MODULE_ID_CMN_MLME,
|
||||
QDF_MODULE_ID_ANY,
|
||||
QDF_MODULE_ID_MAX,
|
||||
} QDF_MODULE_ID;
|
||||
|
@@ -2835,6 +2835,7 @@ struct category_name_info g_qdf_category_name[MAX_SUPPORTED_CATEGORY] = {
|
||||
[QDF_MODULE_ID_MBSSIE] = {"MBSSIE"},
|
||||
[QDF_MODULE_ID_FWOL] = {"fwol"},
|
||||
[QDF_MODULE_ID_SM_ENGINE] = {"SM_ENGINE"},
|
||||
[QDF_MODULE_ID_CMN_MLME] = {"CMN_MLME"},
|
||||
[QDF_MODULE_ID_ANY] = {"ANY"},
|
||||
};
|
||||
qdf_export_symbol(g_qdf_category_name);
|
||||
@@ -3285,6 +3286,7 @@ static void set_default_trace_levels(struct category_info *cinfo)
|
||||
[QDF_MODULE_ID_MBSSIE] = QDF_TRACE_LEVEL_INFO,
|
||||
[QDF_MODULE_ID_FWOL] = QDF_TRACE_LEVEL_NONE,
|
||||
[QDF_MODULE_ID_SM_ENGINE] = QDF_TRACE_LEVEL_DEBUG,
|
||||
[QDF_MODULE_ID_CMN_MLME] = QDF_TRACE_LEVEL_INFO,
|
||||
[QDF_MODULE_ID_ANY] = QDF_TRACE_LEVEL_INFO,
|
||||
};
|
||||
|
||||
|
@@ -104,6 +104,8 @@ INCS += -I$(obj)/$(DEPTH)/include -I$(obj)/$(DEPTH)/umac/include \
|
||||
-I$(obj)/$(DEPTH)/cmn_dev/umac/cmn_services/serialization/core/inc \
|
||||
-I$(obj)/$(DEPTH)/cmn_dev/umac/regulatory/dispatcher/inc \
|
||||
-I$(obj)/$(DEPTH)/cmn_dev/target_if/regulatory/inc \
|
||||
-I$(obj)/$(DEPTH)/cmn_dev/umac/mlme/mlme_objmgr/dispatcher/inc/ \
|
||||
-I$(obj)/$(DEPTH)/cmn_dev/umac/mlme/vdev_mgr/dispatcher/inc \
|
||||
|
||||
PERF_PWR_OFFLOAD_INC += -I$(PERF_PWR_OFFLOAD_DIR_PATH)/wlan/include \
|
||||
-I$(PERF_PWR_OFFLOAD_DIR_PATH)/wlan/ath_pktlog/include \
|
||||
|
@@ -442,12 +442,14 @@ enum wlan_peer_type {
|
||||
* @WLAN_BAND_2_4_GHZ: 2.4 GHz band
|
||||
* @WLAN_BAND_5_GHZ: 5 GHz band
|
||||
* @WLAN_BAND_4_9_GHZ: 4.9 GHz band
|
||||
* @WLAN_BAND_NUM_MAX: Max num band
|
||||
*/
|
||||
enum wlan_band {
|
||||
WLAN_BAND_ALL,
|
||||
WLAN_BAND_2_4_GHZ,
|
||||
WLAN_BAND_5_GHZ,
|
||||
WLAN_BAND_4_9_GHZ,
|
||||
WLAN_BAND_NUM_MAX,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -137,9 +137,11 @@ struct wlan_objmgr_pdev_nif {
|
||||
* struct wlan_objmgr_pdev_mlme - pdev object mlme structure
|
||||
* @pdev_op_flags: PDEV operation flags, can be used to know the
|
||||
* operation status (deletion progress, etc)
|
||||
* @mlme_register_ops: Call back to register MLME legacy APIs
|
||||
*/
|
||||
struct wlan_objmgr_pdev_mlme {
|
||||
uint32_t pdev_op_flags;
|
||||
QDF_STATUS (*mlme_register_ops)(void *vdev_mlme);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -284,7 +284,8 @@ struct wlan_channel {
|
||||
/**
|
||||
* struct wlan_objmgr_vdev_mlme - VDEV MLME specific sub structure
|
||||
* @vdev_opmode: Opmode of VDEV
|
||||
* @mlme_state: VDEV state
|
||||
* @mlme_state: VDEV MLME SM state
|
||||
* @mlme_state: VDEV MLME SM substate
|
||||
* @bss_chan: BSS channel
|
||||
* @des_chan: Desired channel, for STA Desired may not be used
|
||||
* @nss: Num. Spatial streams
|
||||
@@ -296,6 +297,7 @@ struct wlan_channel {
|
||||
* @vdev_feat_ext_caps: VDEV Extended feature caps
|
||||
* @max_rate: MAX rate
|
||||
* @tx_mgmt_rate: TX Mgmt. Rate
|
||||
* @per_band_mgmt_rate: Per-band TX Mgmt. Rate
|
||||
* @vdev_op_flags: Operation flags
|
||||
* @mataddr[]: MAT address
|
||||
* @macaddr[]: VDEV self MAC address
|
||||
@@ -305,8 +307,9 @@ struct wlan_channel {
|
||||
struct wlan_objmgr_vdev_mlme {
|
||||
enum QDF_OPMODE vdev_opmode;
|
||||
enum wlan_vdev_state mlme_state;
|
||||
struct wlan_channel *bss_chan; /* Define wlan_channel */
|
||||
struct wlan_channel *des_chan; /*TODO ??? */
|
||||
enum wlan_vdev_state mlme_substate;
|
||||
struct wlan_channel *bss_chan;
|
||||
struct wlan_channel *des_chan;
|
||||
uint8_t nss;
|
||||
uint8_t tx_chainmask;
|
||||
uint8_t rx_chainmask;
|
||||
@@ -316,6 +319,7 @@ struct wlan_objmgr_vdev_mlme {
|
||||
uint32_t vdev_feat_ext_caps;
|
||||
uint32_t max_rate;
|
||||
uint32_t tx_mgmt_rate;
|
||||
uint32_t per_band_mgmt_rate[WLAN_BAND_NUM_MAX];
|
||||
uint32_t vdev_op_flags;
|
||||
uint8_t mataddr[QDF_MAC_ADDR_SIZE];
|
||||
uint8_t macaddr[QDF_MAC_ADDR_SIZE];
|
||||
|
496
umac/mlme/include/wlan_vdev_mlme.h
Normal file
496
umac/mlme/include/wlan_vdev_mlme.h
Normal file
@@ -0,0 +1,496 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Define VDEV MLME structure and APIs
|
||||
*/
|
||||
#ifndef _WLAN_VDEV_MLME_H_
|
||||
#define _WLAN_VDEV_MLME_H_
|
||||
|
||||
struct vdev_mlme_obj;
|
||||
|
||||
/**
|
||||
* struct vdev_mlme_proto - VDEV protocol strucutre
|
||||
*/
|
||||
struct vdev_mlme_proto {
|
||||
};
|
||||
|
||||
/**
|
||||
* enum beacon_update_op - Beacon update op type
|
||||
* @BEACON_INIT: Initialize beacon
|
||||
* @BEACON_REINIT: Re-initialize beacon
|
||||
* @BEACON_UPDATE: Update dynamic fields of beacon
|
||||
* @BEACON_CSA: Enable CSA IE
|
||||
* @BEACON_FREE: Beacon buffer free
|
||||
*/
|
||||
enum beacon_update_op {
|
||||
BEACON_INIT,
|
||||
BEACON_REINIT,
|
||||
BEACON_UPDATE,
|
||||
BEACON_CSA,
|
||||
BEACON_FREE,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct vdev_mlme_ops - VDEV MLME operation callbacks strucutre
|
||||
* @mlme_vdev_validate_basic_params: callback to validate basic params of VDEV
|
||||
* @mlme_vdev_reset_proto_params: callback to Reset protocol params
|
||||
* @mlme_vdev_start_send: callback to initiate actions of VDEV MLME
|
||||
* start operation
|
||||
* @mlme_vdev_restart_send: callback to initiate actions of VDEV MLME
|
||||
* restart operation
|
||||
* @mlme_vdev_start_continue: callback to initiate operations on
|
||||
* LMAC/FW start response
|
||||
* @mlme_vdev_up_send: callback to initiate actions of VDEV MLME
|
||||
* up operation
|
||||
* @mlme_vdev_notify_up_complete: callback to notify VDEV MLME on moving to
|
||||
* UP state
|
||||
* @mlme_vdev_update_beacon: callback to initiate beacon update
|
||||
* @mlme_vdev_disconnect_peers: callback to initiate disconnection of
|
||||
* peers
|
||||
* @mlme_vdev_dfs_cac_timer_stop: callback to stop the DFS CAC timer
|
||||
* @mlme_vdev_stop_send: callback to initiate actions of VDEV MLME
|
||||
* stop operation
|
||||
* @mlme_vdev_stop_continue: callback to initiate operations on
|
||||
* LMAC/FW stop response
|
||||
* @mlme_vdev_bss_peer_delete_continue:callback to initiate operations on BSS
|
||||
* peer delete completion
|
||||
* @mlme_vdev_down_send: callback to initiate actions of VDEV MLME
|
||||
* down operation
|
||||
* @mlme_vdev_legacy_hdl_create: callback to invoke creation of legacy
|
||||
* vdev object
|
||||
* @mlme_vdev_legacy_hdl_post_create: callback to invoke post creation actions
|
||||
* of legacy vdev object
|
||||
* @mlme_vdev_legacy_hdl_destroy: callback to invoke destroy of legacy
|
||||
* vdev object
|
||||
*/
|
||||
struct vdev_mlme_ops {
|
||||
QDF_STATUS (*mlme_vdev_validate_basic_params)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_reset_proto_params)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_start_send)(struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_restart_send)(struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_start_continue)(struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_up_send)(struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_notify_up_complete)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_update_beacon)(struct vdev_mlme_obj *vdev_mlme,
|
||||
enum beacon_update_op op);
|
||||
QDF_STATUS (*mlme_vdev_disconnect_peers)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_dfs_cac_timer_stop)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_stop_send)(struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_stop_continue)(struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_bss_peer_delete_continue)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_down_send)(struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_notify_down_complete)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_legacy_hdl_create)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_legacy_hdl_post_create)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
QDF_STATUS (*mlme_vdev_legacy_hdl_destroy)(
|
||||
struct vdev_mlme_obj *vdev_mlme);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* struct vdev_mlme_obj - VDEV MLME component object
|
||||
* @vdev_proto: VDEV MLME proto substructure
|
||||
* @sm_lock: VDEV SM lock
|
||||
* @sm_hdl: VDEV SM handle
|
||||
* @ops: VDEV MLME callback table
|
||||
* @legacy_vdev_ptr: VDEV MLME legacy pointer
|
||||
*/
|
||||
struct vdev_mlme_obj {
|
||||
struct vdev_mlme_proto vdev_proto;
|
||||
#ifdef VDEV_SM_LOCK_SUPPORT
|
||||
qdf_spinlock_t sm_lock;
|
||||
#endif
|
||||
struct wlan_sm *sm_hdl;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct vdev_mlme_ops *ops;
|
||||
void *legacy_vdev_ptr;
|
||||
};
|
||||
|
||||
/**
|
||||
* mlme_vdev_validate_basic_params - Validate basic params
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API validate MLME VDEV basic parameters
|
||||
*
|
||||
* Return: SUCCESS on successful validation
|
||||
* FAILURE, if any parameter is not initialized
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_validate_basic_params(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params)
|
||||
ret = vdev_mlme->ops->mlme_vdev_validate_basic_params(
|
||||
vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_reset_proto_params - Reset VDEV protocol params
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API resets the protocol params fo vdev
|
||||
*
|
||||
* Return: SUCCESS on successful reset
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_reset_proto_params(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_reset_proto_params)
|
||||
ret = vdev_mlme->ops->mlme_vdev_reset_proto_params(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_start_send - Invokes VDEV start operation
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes VDEV start operation
|
||||
*
|
||||
* Return: SUCCESS on successful completion of start operation
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_start_send(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_send)
|
||||
ret = vdev_mlme->ops->mlme_vdev_start_send(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_restart_send - Invokes VDEV restart operation
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes VDEV restart operation
|
||||
*
|
||||
* Return: SUCCESS on successful completion of restart operation
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_restart_send(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_restart_send)
|
||||
ret = vdev_mlme->ops->mlme_vdev_restart_send(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_start_continue - VDEV start response handling
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes VDEV start response actions
|
||||
*
|
||||
* Return: SUCCESS on successful completion of start response operation
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_start_continue(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue)
|
||||
ret = vdev_mlme->ops->mlme_vdev_start_continue(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_up_send - VDEV up operation
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes VDEV up operations
|
||||
*
|
||||
* Return: SUCCESS on successful completion of up operation
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_up_send(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_up_send)
|
||||
ret = vdev_mlme->ops->mlme_vdev_up_send(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_notify_up_complete - VDEV up state transition notification
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API notifies MLME on moving to UP state
|
||||
*
|
||||
* Return: SUCCESS on successful completion of up notification
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_notify_up_complete(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_up_complete)
|
||||
ret = vdev_mlme->ops->mlme_vdev_notify_up_complete(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_update_beacon - Updates beacon
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
* @op: beacon update type
|
||||
*
|
||||
* API updates/allocates/frees the beacon
|
||||
*
|
||||
* Return: SUCCESS on successful update of beacon
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_update_beacon(
|
||||
struct vdev_mlme_obj *vdev_mlme,
|
||||
enum beacon_update_op op)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_update_beacon)
|
||||
ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_disconnect_peers - Disconnect peers
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API trigger stations disconnection with AP VDEV or AP disconnection with STA
|
||||
* VDEV
|
||||
*
|
||||
* Return: SUCCESS on successful invocation of station disconnection
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_disconnect_peers(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers)
|
||||
ret = vdev_mlme->ops->mlme_vdev_disconnect_peers(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_dfs_cac_timer_stop - Stop CAC timer
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API stops the CAC timer through DFS API
|
||||
*
|
||||
* Return: SUCCESS on successful CAC timer stop
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop)
|
||||
ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_stop_send - Invokes VDEV stop operation
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes VDEV stop operation
|
||||
*
|
||||
* Return: SUCCESS on successful completion of stop operation
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_stop_send(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send)
|
||||
ret = vdev_mlme->ops->mlme_vdev_stop_send(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_stop_continue - VDEV stop response handling
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes VDEV stop response actions
|
||||
*
|
||||
* Return: SUCCESS on successful completion of stop response operation
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_stop_continue(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue)
|
||||
ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_bss_peer_delete_continue - VDEV BSS peer delete complete
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes VDEV BSS peer delete complete operation
|
||||
*
|
||||
* Return: SUCCESS on successful completion of BSS peer delete handling
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_bss_peer_delete_continue(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) &&
|
||||
vdev_mlme->ops->mlme_vdev_bss_peer_delete_continue)
|
||||
ret = vdev_mlme->ops->mlme_vdev_bss_peer_delete_continue(
|
||||
vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_down_send - VDEV down operation
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes VDEV down operation
|
||||
*
|
||||
* Return: SUCCESS on successful completion of VDEV down operation
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_down_send(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send)
|
||||
ret = vdev_mlme->ops->mlme_vdev_down_send(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_notify_down_complete - VDEV init state transition notification
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API notifies MLME on moving to INIT state
|
||||
*
|
||||
* Return: SUCCESS on successful completion of down notification
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_notify_down_complete(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete)
|
||||
ret = vdev_mlme->ops->mlme_vdev_notify_down_complete(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_legacy_hdl_create - VDEV legacy pointer allocation
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes legacy pointer allocation and initialization
|
||||
*
|
||||
* Return: SUCCESS on successful creation of legacy handle
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_legacy_hdl_create(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_legacy_hdl_create)
|
||||
ret = vdev_mlme->ops->mlme_vdev_legacy_hdl_create(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_legacy_hdl_post_create - VDEV post legacy pointer allocation
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes post legacy pointer allocation operation
|
||||
*
|
||||
* Return: SUCCESS on successful creation of legacy handle
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_legacy_hdl_post_create(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_legacy_hdl_post_create)
|
||||
ret = vdev_mlme->ops->mlme_vdev_legacy_hdl_post_create(
|
||||
vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_legacy_hdl_destroy - VDEV legacy pointer free
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API invokes legacy pointer free
|
||||
*
|
||||
* Return: SUCCESS on successful free of legacy handle
|
||||
* FAILURE, if it fails due to any
|
||||
*/
|
||||
static inline QDF_STATUS mlme_vdev_legacy_hdl_destroy(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_legacy_hdl_destroy)
|
||||
ret = vdev_mlme->ops->mlme_vdev_legacy_hdl_destroy(vdev_mlme);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
43
umac/mlme/mlme_objmgr/dispatcher/inc/wlan_mlme_dbg.h
Normal file
43
umac/mlme/mlme_objmgr/dispatcher/inc/wlan_mlme_dbg.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
/**
|
||||
* DOC: Define the debug utils for MLME
|
||||
*/
|
||||
#ifndef _WLAN_MLME_DBG_H_
|
||||
#define _WLAN_MLME_DBG_H_
|
||||
|
||||
#include <qdf_types.h>
|
||||
#include <qdf_trace.h>
|
||||
|
||||
#define mlme_alert(format, args...) \
|
||||
QDF_TRACE_FATAL(QDF_MODULE_ID_CMN_MLME, format, ## args)
|
||||
|
||||
#define mlme_err(format, args...) \
|
||||
QDF_TRACE_ERROR(QDF_MODULE_ID_CMN_MLME, format, ## args)
|
||||
|
||||
#define mlme_warn(format, args...) \
|
||||
QDF_TRACE_WARN(QDF_MODULE_ID_CMN_MLME, format, ## args)
|
||||
|
||||
#define mlme_info(format, args...) \
|
||||
QDF_TRACE_INFO(QDF_MODULE_ID_CMN_MLME, format, ## args)
|
||||
|
||||
#define mlme_debug(format, args...) \
|
||||
QDF_TRACE_DEBUG(QDF_MODULE_ID_CMN_MLME, format, ## args)
|
||||
|
||||
#endif /* _WLAN_MLME_DBG_H_ */
|
||||
|
76
umac/mlme/mlme_objmgr/dispatcher/inc/wlan_vdev_mlme_main.h
Normal file
76
umac/mlme/mlme_objmgr/dispatcher/inc/wlan_vdev_mlme_main.h
Normal file
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Define VDEV MLME init/deinit APIs
|
||||
*/
|
||||
|
||||
#ifndef _WLAN_VDEV_MLME_MAIN_H_
|
||||
#define _WLAN_VDEV_MLME_MAIN_H_
|
||||
|
||||
#ifdef CMN_VDEV_MLME_SM_ENABLE
|
||||
/**
|
||||
* wlan_vdev_mlme_init - Initializes MLME component
|
||||
*
|
||||
* Registers callbacks with object manager for create/destroy
|
||||
*
|
||||
* Return: SUCCESS on successful registration
|
||||
* FAILURE, if registration fails
|
||||
*/
|
||||
QDF_STATUS wlan_vdev_mlme_init(void);
|
||||
|
||||
/**
|
||||
* wlan_vdev_mlme_deinit - Uninitializes MLME component
|
||||
*
|
||||
* Unregisters callbacks with object manager for create/destroy
|
||||
*
|
||||
* Return: SUCCESS on successful registration
|
||||
* FAILURE, if registration fails
|
||||
*/
|
||||
QDF_STATUS wlan_vdev_mlme_deinit(void);
|
||||
|
||||
#else
|
||||
|
||||
/**
|
||||
* wlan_vdev_mlme_init - Initializes MLME component
|
||||
*
|
||||
* Registers callbacks with object manager for create/destroy
|
||||
*
|
||||
* Return: SUCCESS on successful registration
|
||||
* FAILURE, if registration fails
|
||||
*/
|
||||
static inline QDF_STATUS wlan_vdev_mlme_init(void)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_vdev_mlme_deinit - Uninitializes MLME component
|
||||
*
|
||||
* Unregisters callbacks with object manager for create/destroy
|
||||
*
|
||||
* Return: SUCCESS on successful registration
|
||||
* FAILURE, if registration fails
|
||||
*/
|
||||
static inline QDF_STATUS wlan_vdev_mlme_deinit(void)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
158
umac/mlme/mlme_objmgr/dispatcher/src/wlan_vdev_mlme_main.c
Normal file
158
umac/mlme/mlme_objmgr/dispatcher/src/wlan_vdev_mlme_main.c
Normal file
@@ -0,0 +1,158 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Implements MLME component object creation/initialization/destroy
|
||||
*/
|
||||
|
||||
#include <wlan_objmgr_cmn.h>
|
||||
#include <wlan_objmgr_global_obj.h>
|
||||
#include <wlan_objmgr_vdev_obj.h>
|
||||
#include <wlan_mlme_dbg.h>
|
||||
#include "include/wlan_vdev_mlme.h"
|
||||
#include "vdev_mgr/core/src/vdev_mlme_sm.h"
|
||||
|
||||
static QDF_STATUS mlme_vdev_obj_create_handler(struct wlan_objmgr_vdev *vdev,
|
||||
void *arg)
|
||||
{
|
||||
struct vdev_mlme_obj *vdev_mlme;
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
|
||||
if (!vdev) {
|
||||
mlme_err(" VDEV is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
if (!pdev) {
|
||||
mlme_err(" PDEV 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;
|
||||
}
|
||||
|
||||
vdev_mlme->vdev = vdev;
|
||||
|
||||
if (pdev->pdev_mlme.mlme_register_ops(vdev_mlme)
|
||||
!= QDF_STATUS_SUCCESS) {
|
||||
mlme_err("Callbacks registration is failed");
|
||||
goto init_failed;
|
||||
}
|
||||
|
||||
if (mlme_vdev_sm_create(vdev_mlme) != QDF_STATUS_SUCCESS) {
|
||||
mlme_err("SME creation failed");
|
||||
goto init_failed;
|
||||
}
|
||||
|
||||
if (mlme_vdev_legacy_hdl_create(vdev_mlme) != QDF_STATUS_SUCCESS) {
|
||||
mlme_err("Legacy vdev object creation failed");
|
||||
goto legacy_hdl_create_failed;
|
||||
}
|
||||
|
||||
wlan_objmgr_vdev_component_obj_attach((struct wlan_objmgr_vdev *)vdev,
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
(void *)vdev_mlme,
|
||||
QDF_STATUS_SUCCESS);
|
||||
|
||||
if (mlme_vdev_legacy_hdl_post_create(vdev_mlme) != QDF_STATUS_SUCCESS) {
|
||||
mlme_err("Legacy vdev object post creation failed");
|
||||
goto legacy_hdl_post_create_failed;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
legacy_hdl_post_create_failed:
|
||||
mlme_vdev_legacy_hdl_destroy(vdev_mlme);
|
||||
wlan_objmgr_vdev_component_obj_detach(vdev, WLAN_UMAC_COMP_MLME,
|
||||
vdev_mlme);
|
||||
legacy_hdl_create_failed:
|
||||
mlme_vdev_sm_destroy(vdev_mlme);
|
||||
init_failed:
|
||||
qdf_mem_free(vdev_mlme);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
static QDF_STATUS mlme_vdev_obj_destroy_handler(struct wlan_objmgr_vdev *vdev,
|
||||
void *arg)
|
||||
{
|
||||
struct vdev_mlme_obj *vdev_mlme;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
mlme_vdev_sm_destroy(vdev_mlme);
|
||||
|
||||
mlme_vdev_legacy_hdl_destroy(vdev_mlme);
|
||||
|
||||
wlan_objmgr_vdev_component_obj_detach(vdev, WLAN_UMAC_COMP_MLME,
|
||||
vdev_mlme);
|
||||
qdf_mem_free(vdev_mlme);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_vdev_mlme_init(void)
|
||||
{
|
||||
if (wlan_objmgr_register_vdev_create_handler(WLAN_UMAC_COMP_MLME,
|
||||
mlme_vdev_obj_create_handler, NULL)
|
||||
!= QDF_STATUS_SUCCESS)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
if (wlan_objmgr_register_vdev_destroy_handler(WLAN_UMAC_COMP_MLME,
|
||||
mlme_vdev_obj_destroy_handler, NULL)
|
||||
!= QDF_STATUS_SUCCESS) {
|
||||
if (wlan_objmgr_unregister_vdev_create_handler(
|
||||
WLAN_UMAC_COMP_MLME,
|
||||
mlme_vdev_obj_create_handler, NULL)
|
||||
!= QDF_STATUS_SUCCESS)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_vdev_mlme_deinit(void)
|
||||
{
|
||||
if (wlan_objmgr_unregister_vdev_create_handler(WLAN_UMAC_COMP_MLME,
|
||||
mlme_vdev_obj_create_handler, NULL)
|
||||
!= QDF_STATUS_SUCCESS)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
if (wlan_objmgr_unregister_vdev_destroy_handler(WLAN_UMAC_COMP_MLME,
|
||||
mlme_vdev_obj_destroy_handler, NULL)
|
||||
!= QDF_STATUS_SUCCESS)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
51
umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.c
Normal file
51
umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.c
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Implements VDEV MLME SM
|
||||
*/
|
||||
|
||||
#include <wlan_mlme_dbg.h>
|
||||
#include <wlan_sm_engine.h>
|
||||
#include "include/wlan_vdev_mlme.h"
|
||||
#include "vdev_mlme_sm.h"
|
||||
|
||||
QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
struct wlan_sm *sm;
|
||||
|
||||
sm = wlan_sm_create("VDEV MLME", vdev_mlme, 0, NULL, 0, NULL, 0);
|
||||
if (!sm) {
|
||||
mlme_err("VDEV MLME SM allocation failed");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
vdev_mlme->sm_hdl = sm;
|
||||
|
||||
mlme_vdev_sm_spinlock_create(vdev_mlme);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS mlme_vdev_sm_destroy(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
mlme_vdev_sm_spinlock_destroy(vdev_mlme);
|
||||
|
||||
wlan_sm_delete(vdev_mlme->sm_hdl);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
125
umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.h
Normal file
125
umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.h
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Declares VDEV MLME SM APIs and structures
|
||||
*/
|
||||
|
||||
#ifndef _VDEV_MLME_SM_H_
|
||||
#define _VDEV_MLME_SM_H_
|
||||
|
||||
/**
|
||||
* mlme_vdev_sm_create - Invoke SME creation for VDEV
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API allocates VDEV MLME SM and initializes SM lock
|
||||
*
|
||||
* Return: SUCCESS on successful allocation
|
||||
* FAILURE, if registration fails
|
||||
*/
|
||||
QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme);
|
||||
|
||||
/**
|
||||
* mlme_vdev_sm_destroy - Invoke SME destroy for VDEV
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* API frees VDEV MLME SM and destroys the SM lock
|
||||
*
|
||||
* Return: SUCCESS on successful destroy
|
||||
* FAILURE, if registration fails
|
||||
*/
|
||||
QDF_STATUS mlme_vdev_sm_destroy(struct vdev_mlme_obj *vdev_mlme);
|
||||
|
||||
#ifdef VDEV_SM_LOCK_SUPPORT
|
||||
/**
|
||||
* mlme_vdev_sm_spinlock_create - Create VDEV MLME spinlock
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* Creates VDEV MLME spinlock
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void mlme_vdev_sm_spinlock_create(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
qdf_spinlock_create(&vdev_mlme->sm_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_sm_spinlock_destroy - Destroy VDEV MLME spinlock
|
||||
* @vdev_mlme_obj: VDEV MLME comp object
|
||||
*
|
||||
* Destroy VDEV MLME spinlock
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void mlme_vdev_sm_spinlock_destroy(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
qdf_spinlock_destroy(&vdev_mlme->sm_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_sm_spin_lock - acquire spinlock
|
||||
* @vdev_mlme_obj: vdev mlme comp object
|
||||
*
|
||||
* acquire vdev mlme spinlock
|
||||
*
|
||||
* return: void
|
||||
*/
|
||||
static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
qdf_spin_lock_bh(&vdev_mlme->sm_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* mlme_vdev_sm_spin_unlock - release spinlock
|
||||
* @vdev_mlme_obj: vdev mlme comp object
|
||||
*
|
||||
* release vdev mlme spinlock
|
||||
*
|
||||
* return: void
|
||||
*/
|
||||
static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
qdf_spin_unlock_bh(&vdev_mlme->sm_lock);
|
||||
}
|
||||
|
||||
#else
|
||||
static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
mlme_info("VDEV SM lock is disabled!!!");
|
||||
}
|
||||
|
||||
static inline void mlme_vdev_sm_spinlock_destroy(
|
||||
struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
mlme_info("VDEV SM lock is disabled!!!");
|
||||
}
|
||||
|
||||
static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
36
umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mlme_api.h
Normal file
36
umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mlme_api.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Define VDEV MLME public APIs
|
||||
*/
|
||||
|
||||
#ifndef _WLAN_VDEV_MLME_API_H_
|
||||
#define _WLAN_VDEV_MLME_API_H_
|
||||
|
||||
/**
|
||||
* wlan_vdev_mlme_get_legacy_hdl - Returns legacy handle
|
||||
*
|
||||
* Retrieves legacy handle from vdev mlme component object
|
||||
*
|
||||
* Return: legacy handle on SUCCESS
|
||||
* NULL, if it fails to retrieve
|
||||
*/
|
||||
void *wlan_vdev_mlme_get_legacy_hdl(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
#endif
|
46
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mlme_api.c
Normal file
46
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mlme_api.c
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Implements VDEV MLME public APIs
|
||||
*/
|
||||
|
||||
#include <wlan_objmgr_vdev_obj.h>
|
||||
#include <wlan_mlme_dbg.h>
|
||||
#include "include/wlan_vdev_mlme.h"
|
||||
|
||||
void *wlan_vdev_mlme_get_legacy_hdl(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct vdev_mlme_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->legacy_vdev_ptr;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_vdev_mlme_get_legacy_hdl);
|
Verwijs in nieuw issue
Block a user