Browse Source

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
Naveen Rawat 8 years ago
parent
commit
207fb4ead9

+ 37 - 0
umac/nan/core/src/nan_main.c

@@ -19,3 +19,40 @@
 /**
  * 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;
+}

+ 16 - 0
umac/nan/core/src/nan_main_i.h

@@ -88,4 +88,20 @@ struct nan_vdev_priv_obj {
 	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

+ 152 - 0
umac/nan/dispatcher/inc/nan_ucfg_api.h

@@ -19,3 +19,155 @@
 /**
  * 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_ */

+ 274 - 0
umac/nan/dispatcher/src/nan_ucfg_api.c

@@ -20,3 +20,277 @@
  * 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;
+}