qcacld-3.0: Create object manager API files in HDD
Create HDD object manager API files and move HDD object manager APIs implementation inside it. Change-Id: I762c8a4aafb67c35ef1eb07a7efa5b826659754e CRs-Fixed: 1108557
This commit is contained in:
3
Kbuild
3
Kbuild
@@ -393,7 +393,8 @@ HDD_OBJS := $(HDD_SRC_DIR)/wlan_hdd_assoc.o \
|
|||||||
$(HDD_SRC_DIR)/wlan_hdd_trace.o \
|
$(HDD_SRC_DIR)/wlan_hdd_trace.o \
|
||||||
$(HDD_SRC_DIR)/wlan_hdd_wext.o \
|
$(HDD_SRC_DIR)/wlan_hdd_wext.o \
|
||||||
$(HDD_SRC_DIR)/wlan_hdd_wmm.o \
|
$(HDD_SRC_DIR)/wlan_hdd_wmm.o \
|
||||||
$(HDD_SRC_DIR)/wlan_hdd_wowl.o
|
$(HDD_SRC_DIR)/wlan_hdd_wowl.o \
|
||||||
|
$(HDD_SRC_DIR)/wlan_hdd_object_manager.o
|
||||||
|
|
||||||
ifeq ($(CONFIG_WLAN_FEATURE_DSRC), y)
|
ifeq ($(CONFIG_WLAN_FEATURE_DSRC), y)
|
||||||
HDD_OBJS+= $(HDD_SRC_DIR)/wlan_hdd_ocb.o
|
HDD_OBJS+= $(HDD_SRC_DIR)/wlan_hdd_ocb.o
|
||||||
|
@@ -77,6 +77,7 @@
|
|||||||
#include "wlan_hdd_green_ap.h"
|
#include "wlan_hdd_green_ap.h"
|
||||||
#include "ol_rx_fwd.h"
|
#include "ol_rx_fwd.h"
|
||||||
#include "wlan_hdd_power.h"
|
#include "wlan_hdd_power.h"
|
||||||
|
#include "wlan_hdd_object_manager.h"
|
||||||
|
|
||||||
#define IS_UP(_dev) \
|
#define IS_UP(_dev) \
|
||||||
(((_dev)->flags & (IFF_RUNNING|IFF_UP)) == (IFF_RUNNING|IFF_UP))
|
(((_dev)->flags & (IFF_RUNNING|IFF_UP)) == (IFF_RUNNING|IFF_UP))
|
||||||
|
@@ -106,12 +106,7 @@
|
|||||||
#include <wlan_hdd_napi.h>
|
#include <wlan_hdd_napi.h>
|
||||||
#include "wlan_hdd_disa.h"
|
#include "wlan_hdd_disa.h"
|
||||||
#include <dispatcher_init_deinit.h>
|
#include <dispatcher_init_deinit.h>
|
||||||
#include <wlan_objmgr_cmn.h>
|
#include "wlan_hdd_object_manager.h"
|
||||||
#include <wlan_objmgr_global_obj.h>
|
|
||||||
#include <wlan_objmgr_psoc_obj.h>
|
|
||||||
#include <wlan_objmgr_pdev_obj.h>
|
|
||||||
#include <wlan_objmgr_vdev_obj.h>
|
|
||||||
#include <wlan_objmgr_peer_obj.h>
|
|
||||||
|
|
||||||
#ifdef MODULE
|
#ifdef MODULE
|
||||||
#define WLAN_MODULE_NAME module_name(THIS_MODULE)
|
#define WLAN_MODULE_NAME module_name(THIS_MODULE)
|
||||||
@@ -10043,192 +10038,6 @@ bool hdd_is_roaming_in_progress(void)
|
|||||||
return hdd_ctx->roaming_in_progress;
|
return hdd_ctx->roaming_in_progress;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS hdd_create_and_store_psoc(hdd_context_t *hdd_ctx, uint8_t psoc_id)
|
|
||||||
{
|
|
||||||
struct wlan_objmgr_psoc *psoc;
|
|
||||||
|
|
||||||
psoc = wlan_objmgr_psoc_obj_create(psoc_id, WLAN_DEV_OL);
|
|
||||||
if (!psoc)
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
|
|
||||||
hdd_ctx->hdd_psoc = psoc;
|
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS hdd_release_and_destroy_psoc(hdd_context_t *hdd_ctx)
|
|
||||||
{
|
|
||||||
struct wlan_objmgr_psoc *psoc = hdd_ctx->hdd_psoc;
|
|
||||||
|
|
||||||
hdd_ctx->hdd_psoc = NULL;
|
|
||||||
if (psoc) {
|
|
||||||
wlan_objmgr_psoc_obj_delete(psoc);
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
} else
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS hdd_create_and_store_pdev(hdd_context_t *hdd_ctx)
|
|
||||||
{
|
|
||||||
struct wlan_objmgr_psoc *psoc = hdd_ctx->hdd_psoc;
|
|
||||||
struct wlan_objmgr_pdev *pdev;
|
|
||||||
|
|
||||||
if (!psoc) {
|
|
||||||
hdd_err("Psoc NULL");
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
pdev = wlan_objmgr_pdev_obj_create(psoc, NULL);
|
|
||||||
if (!pdev) {
|
|
||||||
hdd_err("pdev obj create failed");
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
hdd_ctx->hdd_pdev = pdev;
|
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS hdd_release_and_destroy_pdev(hdd_context_t *hdd_ctx)
|
|
||||||
{
|
|
||||||
struct wlan_objmgr_pdev *pdev = hdd_ctx->hdd_pdev;
|
|
||||||
|
|
||||||
hdd_ctx->hdd_pdev = NULL;
|
|
||||||
if (pdev) {
|
|
||||||
wlan_objmgr_pdev_obj_delete(pdev);
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
} else
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS hdd_create_and_store_vdev(struct wlan_objmgr_pdev *pdev,
|
|
||||||
hdd_adapter_t *adapter)
|
|
||||||
{
|
|
||||||
struct wlan_objmgr_vdev *vdev;
|
|
||||||
struct wlan_objmgr_peer *peer;
|
|
||||||
struct wlan_vdev_create_params vdev_params;
|
|
||||||
|
|
||||||
vdev_params.opmode = adapter->device_mode;
|
|
||||||
qdf_mem_copy(vdev_params.macaddr, adapter->macAddressCurrent.bytes,
|
|
||||||
QDF_NET_MAC_ADDR_MAX_LEN);
|
|
||||||
if (!pdev) {
|
|
||||||
hdd_err("pdev NULL");
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
vdev = wlan_objmgr_vdev_obj_create(pdev, &vdev_params);
|
|
||||||
if (!vdev) {
|
|
||||||
hdd_err("vdev obj create fails");
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (adapter->sessionId != wlan_vdev_get_id(vdev)) {
|
|
||||||
hdd_err("session id and vdev id mismatch");
|
|
||||||
wlan_objmgr_vdev_obj_delete(vdev);
|
|
||||||
QDF_ASSERT(0);
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
peer = wlan_objmgr_peer_obj_create(vdev, WLAN_PEER_SELF,
|
|
||||||
vdev_params.macaddr);
|
|
||||||
if (!peer) {
|
|
||||||
hdd_err("obj manager self peer create fails for adapter %d",
|
|
||||||
adapter->device_mode);
|
|
||||||
wlan_objmgr_vdev_obj_delete(vdev);
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
wlan_objmgr_peer_ref_peer(peer);
|
|
||||||
adapter->hdd_vdev = vdev;
|
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS hdd_release_and_destroy_vdev(hdd_adapter_t *adapter)
|
|
||||||
{
|
|
||||||
struct wlan_objmgr_vdev *vdev = adapter->hdd_vdev;
|
|
||||||
|
|
||||||
adapter->hdd_vdev = NULL;
|
|
||||||
if (vdev) {
|
|
||||||
if (hdd_remove_peer_object(vdev,
|
|
||||||
wlan_vdev_mlme_get_macaddr(vdev))) {
|
|
||||||
hdd_err("Self peer delete fails");
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
wlan_objmgr_vdev_obj_delete(vdev);
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
} else
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS hdd_add_peer_object(struct wlan_objmgr_vdev *vdev,
|
|
||||||
enum tQDF_ADAPTER_MODE adapter_mode,
|
|
||||||
uint8_t *mac_addr)
|
|
||||||
{
|
|
||||||
enum wlan_peer_type peer_type;
|
|
||||||
|
|
||||||
if ((adapter_mode == QDF_STA_MODE) ||
|
|
||||||
(adapter_mode == QDF_P2P_CLIENT_MODE))
|
|
||||||
peer_type = WLAN_PEER_AP;
|
|
||||||
else if ((adapter_mode == QDF_SAP_MODE) ||
|
|
||||||
(adapter_mode == QDF_P2P_GO_MODE))
|
|
||||||
peer_type = WLAN_PEER_STA;
|
|
||||||
else if (adapter_mode == QDF_IBSS_MODE)
|
|
||||||
peer_type = WLAN_PEER_IBSS;
|
|
||||||
else {
|
|
||||||
hdd_err("Unsupported device mode %d", adapter_mode);
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vdev) {
|
|
||||||
hdd_err("vdev NULL");
|
|
||||||
QDF_ASSERT(0);
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!wlan_objmgr_peer_obj_create(vdev, peer_type, mac_addr))
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
|
|
||||||
hdd_info("Peer object "MAC_ADDRESS_STR" add success!",
|
|
||||||
MAC_ADDR_ARRAY(mac_addr));
|
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS hdd_remove_peer_object(struct wlan_objmgr_vdev *vdev,
|
|
||||||
uint8_t *mac_addr)
|
|
||||||
{
|
|
||||||
struct wlan_objmgr_psoc *psoc;
|
|
||||||
struct wlan_objmgr_peer *peer;
|
|
||||||
|
|
||||||
if (!vdev) {
|
|
||||||
hdd_err("vdev NULL");
|
|
||||||
QDF_ASSERT(0);
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
psoc = wlan_vdev_get_psoc(vdev);
|
|
||||||
if (!psoc) {
|
|
||||||
hdd_err("Psoc NUll");
|
|
||||||
QDF_ASSERT(0);
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
peer = wlan_objmgr_find_peer(psoc, mac_addr);
|
|
||||||
if (peer) {
|
|
||||||
if (wlan_objmgr_peer_obj_delete(peer))
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
|
|
||||||
hdd_info("Peer obj "MAC_ADDRESS_STR" deleted",
|
|
||||||
MAC_ADDR_ARRAY(mac_addr));
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
hdd_err("Peer obj "MAC_ADDRESS_STR" not found",
|
|
||||||
MAC_ADDR_ARRAY(mac_addr));
|
|
||||||
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Register the module init/exit functions */
|
/* Register the module init/exit functions */
|
||||||
module_init(hdd_module_init);
|
module_init(hdd_module_init);
|
||||||
module_exit(hdd_module_exit);
|
module_exit(hdd_module_exit);
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
#include "wma_api.h"
|
#include "wma_api.h"
|
||||||
#include "wlan_hdd_assoc.h"
|
#include "wlan_hdd_assoc.h"
|
||||||
#include "sme_nan_datapath.h"
|
#include "sme_nan_datapath.h"
|
||||||
|
#include "wlan_hdd_object_manager.h"
|
||||||
|
|
||||||
/* NLA policy */
|
/* NLA policy */
|
||||||
static const struct nla_policy
|
static const struct nla_policy
|
||||||
|
223
core/hdd/src/wlan_hdd_object_manager.c
Normal file
223
core/hdd/src/wlan_hdd_object_manager.c
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was originally distributed by Qualcomm Atheros, Inc.
|
||||||
|
* under proprietary terms before Copyright ownership was assigned
|
||||||
|
* to the Linux Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: HDD object manager API source file to create/destroy PSOC,
|
||||||
|
* PDEV, VDEV and PEER objects.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <wlan_hdd_object_manager.h>
|
||||||
|
|
||||||
|
QDF_STATUS hdd_create_and_store_psoc(hdd_context_t *hdd_ctx, uint8_t psoc_id)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
|
||||||
|
psoc = wlan_objmgr_psoc_obj_create(psoc_id, WLAN_DEV_OL);
|
||||||
|
if (!psoc)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
hdd_ctx->hdd_psoc = psoc;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS hdd_release_and_destroy_psoc(hdd_context_t *hdd_ctx)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc = hdd_ctx->hdd_psoc;
|
||||||
|
|
||||||
|
hdd_ctx->hdd_psoc = NULL;
|
||||||
|
if (!psoc)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
wlan_objmgr_psoc_obj_delete(psoc);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS hdd_create_and_store_pdev(hdd_context_t *hdd_ctx)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc = hdd_ctx->hdd_psoc;
|
||||||
|
struct wlan_objmgr_pdev *pdev;
|
||||||
|
|
||||||
|
if (!psoc) {
|
||||||
|
hdd_err("Psoc NULL");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pdev = wlan_objmgr_pdev_obj_create(psoc, NULL);
|
||||||
|
if (!pdev) {
|
||||||
|
hdd_err("pdev obj create failed");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
hdd_ctx->hdd_pdev = pdev;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS hdd_release_and_destroy_pdev(hdd_context_t *hdd_ctx)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_pdev *pdev = hdd_ctx->hdd_pdev;
|
||||||
|
|
||||||
|
hdd_ctx->hdd_pdev = NULL;
|
||||||
|
if (!pdev)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
wlan_objmgr_pdev_obj_delete(pdev);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS hdd_create_and_store_vdev(struct wlan_objmgr_pdev *pdev,
|
||||||
|
hdd_adapter_t *adapter)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
struct wlan_objmgr_peer *peer;
|
||||||
|
struct wlan_vdev_create_params vdev_params;
|
||||||
|
|
||||||
|
vdev_params.opmode = adapter->device_mode;
|
||||||
|
qdf_mem_copy(vdev_params.macaddr, adapter->macAddressCurrent.bytes,
|
||||||
|
QDF_NET_MAC_ADDR_MAX_LEN);
|
||||||
|
if (!pdev) {
|
||||||
|
hdd_err("pdev NULL");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev = wlan_objmgr_vdev_obj_create(pdev, &vdev_params);
|
||||||
|
if (!vdev) {
|
||||||
|
hdd_err("vdev obj create fails");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (adapter->sessionId != wlan_vdev_get_id(vdev)) {
|
||||||
|
hdd_err("session id and vdev id mismatch");
|
||||||
|
wlan_objmgr_vdev_obj_delete(vdev);
|
||||||
|
QDF_ASSERT(0);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
peer = wlan_objmgr_peer_obj_create(vdev, WLAN_PEER_SELF,
|
||||||
|
vdev_params.macaddr);
|
||||||
|
if (!peer) {
|
||||||
|
hdd_err("obj manager self peer create fails for adapter %d",
|
||||||
|
adapter->device_mode);
|
||||||
|
wlan_objmgr_vdev_obj_delete(vdev);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
adapter->hdd_vdev = vdev;
|
||||||
|
|
||||||
|
wlan_objmgr_peer_ref_peer(peer);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS hdd_release_and_destroy_vdev(hdd_adapter_t *adapter)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_vdev *vdev = adapter->hdd_vdev;
|
||||||
|
|
||||||
|
adapter->hdd_vdev = NULL;
|
||||||
|
if (!vdev)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
if (hdd_remove_peer_object(vdev,
|
||||||
|
wlan_vdev_mlme_get_macaddr(vdev))) {
|
||||||
|
hdd_err("Self peer delete fails");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wlan_objmgr_vdev_obj_delete(vdev);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS hdd_add_peer_object(struct wlan_objmgr_vdev *vdev,
|
||||||
|
enum tQDF_ADAPTER_MODE adapter_mode,
|
||||||
|
uint8_t *mac_addr)
|
||||||
|
{
|
||||||
|
enum wlan_peer_type peer_type;
|
||||||
|
|
||||||
|
if ((adapter_mode == QDF_STA_MODE) ||
|
||||||
|
(adapter_mode == QDF_P2P_CLIENT_MODE)) {
|
||||||
|
peer_type = WLAN_PEER_AP;
|
||||||
|
} else if ((adapter_mode == QDF_SAP_MODE) ||
|
||||||
|
(adapter_mode == QDF_P2P_GO_MODE)) {
|
||||||
|
peer_type = WLAN_PEER_STA;
|
||||||
|
} else if (adapter_mode == QDF_IBSS_MODE) {
|
||||||
|
peer_type = WLAN_PEER_IBSS;
|
||||||
|
} else {
|
||||||
|
hdd_err("Unsupported device mode %d", adapter_mode);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
hdd_err("vdev NULL");
|
||||||
|
QDF_ASSERT(0);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!wlan_objmgr_peer_obj_create(vdev, peer_type, mac_addr))
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
hdd_info("Peer object "MAC_ADDRESS_STR" add success!",
|
||||||
|
MAC_ADDR_ARRAY(mac_addr));
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS hdd_remove_peer_object(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint8_t *mac_addr)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
struct wlan_objmgr_peer *peer;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
hdd_err("vdev NULL");
|
||||||
|
QDF_ASSERT(0);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
psoc = wlan_vdev_get_psoc(vdev);
|
||||||
|
if (!psoc) {
|
||||||
|
hdd_err("Psoc NUll");
|
||||||
|
QDF_ASSERT(0);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
peer = wlan_objmgr_find_peer(psoc, mac_addr);
|
||||||
|
if (peer) {
|
||||||
|
if (wlan_objmgr_peer_obj_delete(peer))
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
hdd_info("Peer obj "MAC_ADDRESS_STR" deleted",
|
||||||
|
MAC_ADDR_ARRAY(mac_addr));
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
hdd_err("Peer obj "MAC_ADDRESS_STR" not found",
|
||||||
|
MAC_ADDR_ARRAY(mac_addr));
|
||||||
|
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
160
core/hdd/src/wlan_hdd_object_manager.h
Normal file
160
core/hdd/src/wlan_hdd_object_manager.h
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
||||||
|
*
|
||||||
|
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was originally distributed by Qualcomm Atheros, Inc.
|
||||||
|
* under proprietary terms before Copyright ownership was assigned
|
||||||
|
* to the Linux Foundation.
|
||||||
|
*/
|
||||||
|
#if !defined(WLAN_HDD_OBJECT_MANAGER_H)
|
||||||
|
#define WLAN_HDD_OBJECT_MANAGER_H
|
||||||
|
/**
|
||||||
|
* DOC: HDD object manager API file to create/destroy psoc, pdev, vdev
|
||||||
|
* and peer objects by calling object manager APIs
|
||||||
|
*
|
||||||
|
* Common object model has 1 : N mapping between PSOC and PDEV but for MCL
|
||||||
|
* PSOC and PDEV has 1 : 1 mapping.
|
||||||
|
*
|
||||||
|
* MCL object model view is:
|
||||||
|
*
|
||||||
|
* --------
|
||||||
|
* | PSOC |
|
||||||
|
* --------
|
||||||
|
* |
|
||||||
|
* |
|
||||||
|
* --------------------------
|
||||||
|
* | PDEV |
|
||||||
|
* --------------------------
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* ---------- -------------
|
||||||
|
* | vdev 0 | | vdev n |
|
||||||
|
* ---------- -------------
|
||||||
|
* | | | |
|
||||||
|
* ---------- ---------- ---------- ----------
|
||||||
|
* | peer 1 | | peer n | | peer 1 | | peer n |
|
||||||
|
* ---------- ---------- ---------- -----------
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "wlan_hdd_main.h"
|
||||||
|
#include <wlan_objmgr_cmn.h>
|
||||||
|
#include <wlan_objmgr_global_obj.h>
|
||||||
|
#include <wlan_objmgr_psoc_obj.h>
|
||||||
|
#include <wlan_objmgr_pdev_obj.h>
|
||||||
|
#include <wlan_objmgr_vdev_obj.h>
|
||||||
|
#include <wlan_objmgr_peer_obj.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_create_and_store_psoc() - Create psoc object and store in hdd context
|
||||||
|
* @hdd_ctx: Hdd context
|
||||||
|
* @psoc_id: Psoc Id
|
||||||
|
*
|
||||||
|
* This API creates Psoc object with given @psoc_id and store the psoc reference
|
||||||
|
* to hdd context
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS hdd_create_and_store_psoc(hdd_context_t *hdd_ctx, uint8_t psoc_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_release_and_destroy_psoc() - Deletes the psoc object
|
||||||
|
* @hdd_ctx: Hdd context
|
||||||
|
*
|
||||||
|
* This API deletes psoc object and release its reference from hdd context
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS hdd_release_and_destroy_psoc(hdd_context_t *hdd_ctx);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_create_and_store_pdev() - Create pdev object and store in hdd context
|
||||||
|
* @hdd_ctx: Hdd context
|
||||||
|
*
|
||||||
|
* This API creates the pdev object and store the pdev reference to hdd context
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS hdd_create_and_store_pdev(hdd_context_t *hdd_ctx);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_release_and_destroy_pdev() - Deletes the pdev object
|
||||||
|
* @hdd_ctx: Hdd context
|
||||||
|
*
|
||||||
|
* This API deletes pdev object and release its reference from hdd context
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS hdd_release_and_destroy_pdev(hdd_context_t *hdd_ctx);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_create_and_store_vdev() - Create vdev object and store in hdd adapter
|
||||||
|
* @pdev: pdev pointer
|
||||||
|
* @adapter: hdd adapter
|
||||||
|
*
|
||||||
|
* This API creates the vdev object and store the vdev reference to the
|
||||||
|
* given @adapter. Also, creates a self peer for the vdev. If the adapter
|
||||||
|
* session id and vdev id of the new vdev object doesnot match, destroys the
|
||||||
|
* created vdev object and returns failure
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS hdd_create_and_store_vdev(struct wlan_objmgr_pdev *pdev,
|
||||||
|
hdd_adapter_t *adapter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_release_and_destroy_vdev() - Delete the vdev object
|
||||||
|
* @hdd_ctx: Hdd context
|
||||||
|
*
|
||||||
|
* This API deletes vdev object and release its reference from hdd adapter
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS hdd_release_and_destroy_vdev(hdd_adapter_t *adapter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_add_peer_object() - Create and add the peer object to the vdev
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
* @adapter_mode: adapter mode
|
||||||
|
* @mac_addr: Peer mac address
|
||||||
|
*
|
||||||
|
* This API creates and adds the peer object to the given @vdev. The peer type
|
||||||
|
* (STA, AP or IBSS) is assigned based on adapter mode. For example, if adapter
|
||||||
|
* mode is STA, peer is AP.
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS hdd_add_peer_object(struct wlan_objmgr_vdev *vdev,
|
||||||
|
enum tQDF_ADAPTER_MODE adapter_mode,
|
||||||
|
uint8_t *mac_addr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_remove_peer_object() - Delete and remove the peer from vdev
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
* @mac_addr: Peer Mac address
|
||||||
|
*
|
||||||
|
* This API finds the peer object from given @mac_addr and deletes the same.
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS hdd_remove_peer_object(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint8_t *mac_addr);
|
||||||
|
#endif /* end #if !defined(WLAN_HDD_OBJECT_MANAGER_H) */
|
Reference in New Issue
Block a user