qcacmn: Define NAN components's get/set and utility APIs

Define set/get and utility APIs to be used by NAN and other UMAC
components.

Change-Id: Ib3c3c9711ab823dfdf538099d30078b703566fe1
CRs-Fixed: 2014795
This commit is contained in:
Naveen Rawat
2017-03-25 18:54:14 -07:00
committed by Sandeep Puligilla
parent 5b3602a617
commit 207fb4ead9
4 changed files with 479 additions and 0 deletions

View File

@@ -19,3 +19,40 @@
/** /**
* DOC: contains core nan function definitions * DOC: contains core nan function definitions
*/ */
#include "nan_main_i.h"
#include "wlan_objmgr_psoc_obj.h"
#include "wlan_objmgr_pdev_obj.h"
#include "wlan_objmgr_vdev_obj.h"
struct nan_vdev_priv_obj *nan_get_vdev_priv_obj(
struct wlan_objmgr_vdev *vdev)
{
struct nan_vdev_priv_obj *obj;
if (!vdev) {
nan_err("vdev is null");
return NULL;
}
wlan_vdev_obj_lock(vdev);
obj = wlan_objmgr_vdev_get_comp_private_obj(vdev, WLAN_UMAC_COMP_NAN);
wlan_vdev_obj_unlock(vdev);
return obj;
}
struct nan_psoc_priv_obj *nan_get_psoc_priv_obj(
struct wlan_objmgr_psoc *psoc)
{
struct nan_psoc_priv_obj *obj;
if (!psoc) {
nan_err("psoc is null");
return NULL;
}
wlan_psoc_obj_lock(psoc);
obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_NAN);
wlan_psoc_obj_unlock(psoc);
return obj;
}

View File

@@ -88,4 +88,20 @@ struct nan_vdev_priv_obj {
uint32_t ndi_delete_rsp_status; uint32_t ndi_delete_rsp_status;
}; };
/**
* nan_get_vdev_priv_obj: get NAN priv object from vdev object
* @vdev: pointer to vdev object
*
* Return: pointer to NAN vdev private object
*/
struct nan_vdev_priv_obj *nan_get_vdev_priv_obj(struct wlan_objmgr_vdev *vdev);
/**
* nan_get_psoc_priv_obj: get NAN priv object from psoc object
* @psoc: pointer to psoc object
*
* Return: pointer to NAN psoc private object
*/
struct nan_psoc_priv_obj *nan_get_psoc_priv_obj(struct wlan_objmgr_psoc *psoc);
#endif #endif

View File

@@ -19,3 +19,155 @@
/** /**
* DOC: contains interface prototypes for OS_IF layer * DOC: contains interface prototypes for OS_IF layer
*/ */
#ifndef _NAN_UCFG_API_H_
#define _NAN_UCFG_API_H_
#include "qdf_types.h"
#include "qdf_status.h"
struct nan_callbacks;
struct wlan_objmgr_vdev;
struct wlan_objmgr_psoc;
/**
* ucfg_nan_set_ndi_state: set ndi state
* @vdev: pointer to vdev object
* @state: value to set
*
* Return: status of operation
*/
QDF_STATUS ucfg_nan_set_ndi_state(struct wlan_objmgr_vdev *vdev,
uint32_t state);
/**
* ucfg_nan_get_ndi_state: get ndi state from vdev obj
* @vdev: pointer to vdev object
*
* Return: ndi state
*/
enum nan_datapath_state ucfg_nan_get_ndi_state(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_nan_set_active_peers: set active ndi peer
* @vdev: pointer to vdev object
* @val: value to set
*
* Return: status of operation
*/
QDF_STATUS ucfg_nan_set_active_peers(struct wlan_objmgr_vdev *vdev,
uint32_t val);
/**
* ucfg_nan_get_active_peers: get active ndi peer from vdev obj
* @vdev: pointer to vdev object
*
* Return: active ndi peer
*/
uint32_t ucfg_nan_get_active_peers(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_nan_set_active_ndp_sessions: set active ndp sessions
* @vdev: pointer to vdev object
*
* Return: status of operation
*/
QDF_STATUS ucfg_nan_set_active_ndp_sessions(struct wlan_objmgr_vdev *vdev,
uint32_t val, uint8_t idx);
/**
* ucfg_nan_get_active_ndp_sessions: get active ndp sessions from vdev obj
* @vdev: pointer to vdev object
*
* Return: pointer to NAN psoc private object
*/
uint32_t ucfg_nan_get_active_ndp_sessions(struct wlan_objmgr_vdev *vdev,
uint8_t idx);
/**
* ucfg_nan_set_ndp_create_transaction_id: set ndp create transaction id
* @vdev: pointer to vdev object
* @val: value to set
*
* Return: status of operation
*/
QDF_STATUS ucfg_nan_set_ndp_create_transaction_id(struct wlan_objmgr_vdev *vdev,
uint16_t val);
/**
* ucfg_nan_get_ndp_create_transaction_id: get ndp create transaction id
* vdev obj
* @vdev: pointer to vdev object
*
* Return: ndp create transaction_id
*/
uint16_t ucfg_nan_get_ndp_create_transaction_id(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_nan_set_ndp_delete_transaction_id: set ndp delete transaction id
* @vdev: pointer to vdev object
* @val: value to set
*
* Return: status of operation
*/
QDF_STATUS ucfg_nan_set_ndp_delete_transaction_id(struct wlan_objmgr_vdev *vdev,
uint16_t val);
/**
* ucfg_nan_get_ndp_delete_transaction_id: get ndp delete transaction id from
* vdev obj
* @vdev: pointer to vdev object
*
* Return: ndp delete transaction_id
*/
uint16_t ucfg_nan_get_ndp_delete_transaction_id(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_nan_set_ndi_delete_rsp_reason: set ndi delete response reason
* @vdev: pointer to vdev object
* @val: value to set
*
* Return: status of operation
*/
QDF_STATUS ucfg_nan_set_ndi_delete_rsp_reason(struct wlan_objmgr_vdev *vdev,
uint32_t val);
/**
* ucfg_nan_get_ndi_delete_rsp_reason: get ndi delete response reason from vdev
* obj
* @vdev: pointer to vdev object
*
* Return: ndi delete rsp reason
*/
uint32_t ucfg_nan_get_ndi_delete_rsp_reason(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_nan_set_ndi_delete_rsp_status: set ndi delete response reason
* @vdev: pointer to vdev object
* @val: value to set
*
* Return: status of operation
*/
QDF_STATUS ucfg_nan_set_ndi_delete_rsp_status(struct wlan_objmgr_vdev *vdev,
uint32_t val);
/**
* ucfg_nan_get_ndi_delete_rsp_status: get ndi delete response status from vdev
* obj
* @vdev: pointer to vdev object
*
* Return: ndi delete rsp status
*/
uint32_t ucfg_nan_get_ndi_delete_rsp_status(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_nan_get_callbacks: ucfg API to return callbacks
* @psoc: pointer to psoc object
* @cb_obj: callback struct to populate
*
* Return: callback struct on sucess, NULL otherwise
*/
QDF_STATUS ucfg_nan_get_callbacks(struct wlan_objmgr_psoc *psoc,
struct nan_callbacks *cb_obj);
#endif /* _NAN_UCFG_API_H_ */

View File

@@ -20,3 +20,277 @@
* DOC: contains interface definitions for OS_IF layer * DOC: contains interface definitions for OS_IF layer
*/ */
#include "nan_ucfg_api.h"
#include "nan_public_structs.h"
#include "../../core/src/nan_main_i.h"
inline QDF_STATUS ucfg_nan_set_ndi_state(struct wlan_objmgr_vdev *vdev,
uint32_t state)
{
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return QDF_STATUS_E_NULL_VALUE;
}
qdf_spin_lock_bh(&priv_obj->lock);
priv_obj->state = state;
qdf_spin_unlock_bh(&priv_obj->lock);
return QDF_STATUS_SUCCESS;
}
inline enum nan_datapath_state ucfg_nan_get_ndi_state(
struct wlan_objmgr_vdev *vdev)
{
enum nan_datapath_state val;
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return NAN_DATA_INVALID_STATE;
}
qdf_spin_lock_bh(&priv_obj->lock);
val = priv_obj->state;
qdf_spin_unlock_bh(&priv_obj->lock);
return val;
}
inline QDF_STATUS ucfg_nan_set_active_peers(struct wlan_objmgr_vdev *vdev,
uint32_t val)
{
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return QDF_STATUS_E_NULL_VALUE;
}
qdf_spin_lock_bh(&priv_obj->lock);
priv_obj->active_ndp_peers = val;
qdf_spin_unlock_bh(&priv_obj->lock);
return QDF_STATUS_SUCCESS;
}
inline uint32_t ucfg_nan_get_active_peers(struct wlan_objmgr_vdev *vdev)
{
uint32_t val;
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return 0;
}
qdf_spin_lock_bh(&priv_obj->lock);
val = priv_obj->active_ndp_peers;
qdf_spin_unlock_bh(&priv_obj->lock);
return val;
}
inline QDF_STATUS ucfg_nan_set_active_ndp_sessions(
struct wlan_objmgr_vdev *vdev, uint32_t val, uint8_t idx)
{
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return QDF_STATUS_E_NULL_VALUE;
}
if (idx > MAX_PEERS) {
nan_err("peer_idx(%d) is greater than MAX(%d) is null",
idx, MAX_PEERS);
return QDF_STATUS_E_NULL_VALUE;
}
qdf_spin_lock_bh(&priv_obj->lock);
priv_obj->active_ndp_sessions[idx] = val;
qdf_spin_unlock_bh(&priv_obj->lock);
return QDF_STATUS_SUCCESS;
}
inline uint32_t ucfg_nan_get_active_ndp_sessions(struct wlan_objmgr_vdev *vdev,
uint8_t idx)
{
uint32_t val;
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return 0;
}
if (idx > MAX_PEERS) {
nan_err("peer_idx(%d) is greater than MAX(%d) is null",
idx, MAX_PEERS);
return 0;
}
qdf_spin_lock_bh(&priv_obj->lock);
val = priv_obj->active_ndp_sessions[idx];
qdf_spin_unlock_bh(&priv_obj->lock);
return val;
}
inline QDF_STATUS ucfg_nan_set_ndp_create_transaction_id(
struct wlan_objmgr_vdev *vdev, uint16_t val)
{
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return QDF_STATUS_E_NULL_VALUE;
}
qdf_spin_lock_bh(&priv_obj->lock);
priv_obj->ndp_create_transaction_id = val;
qdf_spin_unlock_bh(&priv_obj->lock);
return QDF_STATUS_SUCCESS;
}
inline uint16_t ucfg_nan_get_ndp_create_transaction_id(
struct wlan_objmgr_vdev *vdev)
{
uint16_t val;
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return 0;
}
qdf_spin_lock_bh(&priv_obj->lock);
val = priv_obj->ndp_create_transaction_id;
qdf_spin_unlock_bh(&priv_obj->lock);
return val;
}
inline QDF_STATUS ucfg_nan_set_ndp_delete_transaction_id(
struct wlan_objmgr_vdev *vdev, uint16_t val)
{
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return QDF_STATUS_E_NULL_VALUE;
}
qdf_spin_lock_bh(&priv_obj->lock);
priv_obj->ndp_delete_transaction_id = val;
qdf_spin_unlock_bh(&priv_obj->lock);
return QDF_STATUS_SUCCESS;
}
inline uint16_t ucfg_nan_get_ndp_delete_transaction_id(
struct wlan_objmgr_vdev *vdev)
{
uint16_t val;
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return 0;
}
qdf_spin_lock_bh(&priv_obj->lock);
val = priv_obj->ndp_delete_transaction_id;
qdf_spin_unlock_bh(&priv_obj->lock);
return val;
}
inline QDF_STATUS ucfg_nan_set_ndi_delete_rsp_reason(
struct wlan_objmgr_vdev *vdev, uint32_t val)
{
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return QDF_STATUS_E_NULL_VALUE;
}
qdf_spin_lock_bh(&priv_obj->lock);
priv_obj->ndi_delete_rsp_reason = val;
qdf_spin_unlock_bh(&priv_obj->lock);
return QDF_STATUS_SUCCESS;
}
inline uint32_t ucfg_nan_get_ndi_delete_rsp_reason(
struct wlan_objmgr_vdev *vdev)
{
uint32_t val;
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return 0;
}
qdf_spin_lock_bh(&priv_obj->lock);
val = priv_obj->ndi_delete_rsp_reason;
qdf_spin_unlock_bh(&priv_obj->lock);
return val;
}
inline QDF_STATUS ucfg_nan_set_ndi_delete_rsp_status(
struct wlan_objmgr_vdev *vdev, uint32_t val)
{
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return QDF_STATUS_E_NULL_VALUE;
}
qdf_spin_lock_bh(&priv_obj->lock);
priv_obj->ndi_delete_rsp_status = val;
qdf_spin_unlock_bh(&priv_obj->lock);
return QDF_STATUS_SUCCESS;
}
inline uint32_t ucfg_nan_get_ndi_delete_rsp_status(
struct wlan_objmgr_vdev *vdev)
{
uint32_t val;
struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
nan_err("priv_obj is null");
return QDF_STATUS_E_NULL_VALUE;
}
qdf_spin_lock_bh(&priv_obj->lock);
val = priv_obj->ndi_delete_rsp_status;
qdf_spin_unlock_bh(&priv_obj->lock);
return val;
}
inline QDF_STATUS ucfg_nan_get_callbacks(struct wlan_objmgr_psoc *psoc,
struct nan_callbacks *cb_obj)
{
struct nan_psoc_priv_obj *psoc_obj = nan_get_psoc_priv_obj(psoc);
if (!psoc_obj) {
nan_err("nan psoc priv object is NULL");
return QDF_STATUS_E_NULL_VALUE;
}
qdf_spin_lock_bh(&psoc_obj->lock);
qdf_mem_copy(cb_obj, &psoc_obj->cb_obj, sizeof(*cb_obj));
qdf_spin_unlock_bh(&psoc_obj->lock);
return QDF_STATUS_SUCCESS;
}