blob: adac92e8b21a283fdf06beb4ba4df3accb350702 [file] [log] [blame]
/*
* 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_objmgr_create_and_store_psoc() - Create psoc 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: 0 for success, negative error code for failure
*/
int hdd_objmgr_create_and_store_psoc(hdd_context_t *hdd_ctx, uint8_t psoc_id);
/**
* hdd_objmgr_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: 0 for success, negative error code for failure
*/
int hdd_objmgr_release_and_destroy_psoc(hdd_context_t *hdd_ctx);
/**
* hdd_objmgr_create_and_store_pdev() - Create pdev and store in hdd context
* @hdd_ctx: Hdd context
*
* This API creates the pdev object and store the pdev reference to hdd context
*
* Return: 0 for success, negative error code for failure
*/
int hdd_objmgr_create_and_store_pdev(hdd_context_t *hdd_ctx);
/**
* hdd_objmgr_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: 0 for success, negative error code for failure
*/
int hdd_objmgr_release_and_destroy_pdev(hdd_context_t *hdd_ctx);
/**
* hdd_objmgr_create_and_store_vdev() - Create vdev 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.
*
* Return: 0 for success, negative error code for failure
*/
int hdd_objmgr_create_and_store_vdev(struct wlan_objmgr_pdev *pdev,
hdd_adapter_t *adapter);
/**
* hdd_objmgr_destroy_vdev() - Delete vdev
* @adapter: hdd adapter
*
* This function logically destroys the vdev in object manager. Physical
* deletion is prevented until the vdev is released via a call to
* hdd_objmgr_release_vdev(). E.g.
*
* hdd_objmgr_destroy_vdev(...);
* sme_close_session(...);
* hdd_objmgr_release_vdev(...);
*
* Return: 0 for success, negative error code for failure
*/
int hdd_objmgr_destroy_vdev(hdd_adapter_t *adapter);
/**
* hdd_objmgr_release_vdev() - releases the vdev from adapter
* @adapter: hdd adapter
*
* See also hdd_objmgr_destroy_vdev()
*
* Return: 0 for success, negative error code for failure
*/
int hdd_objmgr_release_vdev(hdd_adapter_t *adapter);
/**
* hdd_objmgr_release_and_destroy_vdev() - Delete vdev and remove from adapter
* @adapter: hdd adapter
*
* This API deletes vdev object and release its reference from hdd adapter
*
* Return: 0 for success, negative error code for failure
*/
int hdd_objmgr_release_and_destroy_vdev(hdd_adapter_t *adapter);
/**
* hdd_objmgr_add_peer_object() - Create and add the peer to the vdev
* @vdev: vdev pointer
* @adapter_mode: adapter mode
* @mac_addr: Peer mac address
* @is_p2p_type: TRUE if peer is p2p type
*
* This API creates and adds the peer object to the given @vdev. The peer type
* (STA, AP, P2P or IBSS) is assigned based on adapter mode. For example, if
* adapter mode is STA, peer is AP.
*
* Return: 0 for success, negative error code for failure
*/
int hdd_objmgr_add_peer_object(struct wlan_objmgr_vdev *vdev,
enum tQDF_ADAPTER_MODE adapter_mode,
uint8_t *mac_addr,
bool is_p2p_type);
/**
* hdd_objmgr_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: 0 for success, negative error code for failure
*/
int hdd_objmgr_remove_peer_object(struct wlan_objmgr_vdev *vdev,
uint8_t *mac_addr);
/**
* hdd_objmgr_set_peer_mlme_auth_state() - set the peer mlme auth state
* @vdev: vdev pointer
* @is_authenticated: Peer mlme auth state true/false
*
* This API set the peer mlme auth state
*
* Return: 0 for success, negative error code for failure
*/
int hdd_objmgr_set_peer_mlme_auth_state(struct wlan_objmgr_vdev *vdev,
bool is_authenticated);
/**
* hdd_objmgr_set_peer_mlme_state() - set the peer mlme state
* @vdev: vdev pointer
* @peer_state: Peer mlme state
*
* This API set the peer mlme state
*
* Return: 0 for success, negative error code for failure
*/
int hdd_objmgr_set_peer_mlme_state(struct wlan_objmgr_vdev *vdev,
enum wlan_peer_state peer_state);
#endif /* end #if !defined(WLAN_HDD_OBJECT_MANAGER_H) */