diff --git a/umac/nan/core/src/nan_api.c b/umac/nan/core/src/nan_api.c
index f35a7f18ba43..d23b3e548232 100644
--- a/umac/nan/core/src/nan_api.c
+++ b/umac/nan/core/src/nan_api.c
@@ -29,6 +29,57 @@
#include "wlan_objmgr_psoc_obj.h"
#include "wlan_objmgr_pdev_obj.h"
#include "wlan_objmgr_vdev_obj.h"
+#include "cfg_nan.h"
+#include "cfg_ucfg_api.h"
+
+/**
+ * nan_cfg_init() - Initialize NAN config params
+ * @psoc: Pointer to PSOC Object
+ * @nan_obj: Pointer to NAN private object
+ *
+ * This function initialize NAN config params
+ */
+#ifdef WLAN_FEATURE_NAN
+static void nan_cfg_init(struct wlan_objmgr_psoc *psoc,
+ struct nan_psoc_priv_obj *nan_obj)
+{
+ if (!psoc || !nan_obj)
+ return;
+
+ nan_obj->cfg_param.enable = cfg_get(psoc, CFG_NAN_ENABLE);
+}
+#else
+static void nan_cfg_init(struct wlan_objmgr_psoc *psoc,
+ struct nan_psoc_priv_obj *nan_obj)
+{
+}
+#endif
+
+/**
+ * nan_cfg_dp_init() - Initialize NAN Datapath config params
+ * @psoc: Pointer to PSOC Object
+ * @nan_obj: Pointer to NAN private object
+ *
+ * This function initialize NAN config params
+ */
+#ifdef WLAN_FEATURE_NAN_DATAPATH
+static void nan_cfg_dp_init(struct wlan_objmgr_psoc *psoc,
+ struct nan_psoc_priv_obj *nan_obj)
+{
+ if (!psoc || !nan_obj)
+ return;
+ nan_obj->cfg_param.dp_enable = cfg_get(psoc,
+ CFG_NAN_DATAPATH_ENABLE);
+ nan_obj->cfg_param.ndi_ch = cfg_get(psoc, CFG_NAN_NDI_CHANNEL);
+ nan_obj->cfg_param.ndi_mac_randomize =
+ cfg_get(psoc, CFG_NAN_RANDOMIZE_NDI_MAC);
+}
+#else
+static void nan_cfg_dp_init(struct wlan_objmgr_psoc *psoc,
+ struct nan_psoc_priv_obj *nan_obj)
+{
+}
+#endif
static QDF_STATUS nan_psoc_obj_created_notification(
struct wlan_objmgr_psoc *psoc, void *arg_list)
@@ -52,6 +103,9 @@ static QDF_STATUS nan_psoc_obj_created_notification(
goto nan_psoc_notif_failed;
}
+ nan_cfg_init(psoc, nan_obj);
+ nan_cfg_dp_init(psoc, nan_obj);
+
return QDF_STATUS_SUCCESS;
nan_psoc_notif_failed:
diff --git a/umac/nan/core/src/nan_main_i.h b/umac/nan/core/src/nan_main_i.h
index be7ab2b611c5..235bf397a9e9 100644
--- a/umac/nan/core/src/nan_main_i.h
+++ b/umac/nan/core/src/nan_main_i.h
@@ -50,6 +50,24 @@ struct scheduler_msg;
#define MAX_PEERS 32
#endif
+/**
+ * struct nan_cfg_params - NAN INI config params
+ * @enable: NAN feature enable
+ * @dp_enable: NAN Datapath feature enable
+ * @ndi_ch: NAN Datapath channel
+ * @ndi_mac_randomize: Randomize NAN datapath interface MAC
+ */
+struct nan_cfg_params {
+#ifdef WLAN_FEATURE_NAN
+ bool enable;
+#endif
+#ifdef WLAN_FEATURE_NAN_DATAPATH
+ bool dp_enable;
+ uint32_t ndi_ch;
+ bool ndi_mac_randomize;
+#endif
+};
+
/**
* struct nan_psoc_priv_obj - nan private psoc obj
* @lock: lock to be acquired before reading or writing to object
@@ -58,6 +76,7 @@ struct scheduler_msg;
struct nan_psoc_priv_obj {
qdf_spinlock_t lock;
struct nan_callbacks cb_obj;
+ struct nan_cfg_params cfg_param;
};
/**
diff --git a/umac/nan/dispatcher/inc/cfg_nan.h b/umac/nan/dispatcher/inc/cfg_nan.h
new file mode 100644
index 000000000000..394ff20d4d90
--- /dev/null
+++ b/umac/nan/dispatcher/inc/cfg_nan.h
@@ -0,0 +1,138 @@
+/*
+ * 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.
+ */
+
+#if !defined(__NAN_CFG_H__)
+#define __NAN_CFG_H__
+
+/**
+ *
+ * DOC: nan_cfg.h
+ *
+ * NAN feature INI configuration parameter definitions
+ */
+#include "cfg_define.h"
+#include "cfg_converged.h"
+#include "qdf_types.h"
+
+/*
+ *
+ * gEnableNanSupport - NAN feature support configuration
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * When set to 1 NAN feature will be enabled.
+ *
+ * Related: None
+ *
+ * Supported Feature: NAN
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_NAN_ENABLE CFG_INI_BOOL("gEnableNanSupport", \
+ 0, \
+ "Enable NAN Support")
+/*
+ *
+ * genable_nan_datapath - Enable NaN data path feature. NaN data path
+ * enables NAN supported devices to exchange
+ * data over TCP/UDP network stack.
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * When set to 1 NAN Datapath feature will be enabled.
+ *
+ * Related: gEnableNanSupport
+ *
+ * Supported Feature: NAN
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_NAN_DATAPATH_ENABLE CFG_INI_BOOL("genable_nan_datapath", \
+ 0, \
+ "Enable NAN Datapath support")
+
+/*
+ *
+ * gnan_datapath_ndi_channel - Default channel for NAN Datapath
+ * @Min: 6
+ * @Max: 149
+ * @Default: 6
+ *
+ * Host suggests this channel for NAN datapath. But FW is free to
+ * choose other channels based on system constraints.
+ *
+ * Related: genable_nan_datapath
+ *
+ * Supported Feature: NAN
+ *
+ * Usage: External
+ *
+ *
+ */
+/*
+ * NAN channel on which NAN data interface to start
+ */
+#define CFG_NAN_NDI_CHANNEL CFG_INI_UINT("gnan_datapath_ndi_channel", \
+ 6, 149, 6, \
+ CFG_VALUE_OR_DEFAULT, \
+ "NAN Datapath Channel")
+/*
+ *
+ * gEnableNDIMacRandomization - When enabled this will randomize NDI Mac
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * When enabled this will randomize NDI Mac
+ *
+ * Related: gEnableNanSupport
+ *
+ * Supported Feature: NAN
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_NAN_RANDOMIZE_NDI_MAC CFG_INI_BOOL("gEnableNDIMacRandomization", \
+ 1, \
+ "Enable NAN MAC Randomization")
+
+#ifdef WLAN_FEATURE_NAN
+#define CFG_NAN_DISC CFG(CFG_NAN_ENABLE)
+#else
+#define CFG_NAN_DISC
+#endif
+
+#ifdef WLAN_FEATURE_NAN_DATAPATH
+#define CFG_NAN_DP CFG(CFG_NAN_DATAPATH_ENABLE) \
+ CFG(CFG_NAN_NDI_CHANNEL) \
+ CFG(CFG_NAN_RANDOMIZE_NDI_MAC)
+#else
+#define CFG_NAN_DP
+#endif
+
+#define CFG_NAN_ALL CFG_NAN_DISC \
+ CFG_NAN_DP
+
+#endif
diff --git a/umac/nan/dispatcher/inc/cfg_nan_api.h b/umac/nan/dispatcher/inc/cfg_nan_api.h
new file mode 100644
index 000000000000..c37821c97357
--- /dev/null
+++ b/umac/nan/dispatcher/inc/cfg_nan_api.h
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ */
+
+#if !defined(__NAN_CFG_API_H__)
+#define __NAN_CFG_API_H__
+
+/**
+ *
+ * DOC: nan_cfg_api.h
+ *
+ * NAN feature INI configuration parameters get/set APIs
+ */
+#include "qdf_types.h"
+
+struct wlan_objmgr_psoc;
+
+#ifdef WLAN_FEATURE_NAN
+/**
+ * cfg_nan_get_enable() - get NAN support enable status
+ * @psoc: pointer to psoc object
+ *
+ * This function returns NAN enable status
+ */
+bool cfg_nan_get_enable(struct wlan_objmgr_psoc *psoc);
+#else
+static inline bool cfg_nan_get_enable(struct wlan_objmgr_psoc *psoc)
+{
+ return false;
+}
+#endif
+
+#ifdef WLAN_FEATURE_NAN_DATAPATH
+/**
+ * cfg_nan_get_datapath_enable() - get NAN Datapath support enable status
+ * @psoc: pointer to psoc object
+ *
+ * This function returns NAN Datapath enable status
+ */
+bool cfg_nan_get_datapath_enable(struct wlan_objmgr_psoc *psoc);
+
+/**
+ * cfg_nan_get_ndi_channel() - get NAN Datapath channel
+ * @psoc: pointer to psoc object
+ *
+ * This function returns NAN Datapath channel
+ */
+uint32_t cfg_nan_get_ndi_channel(struct wlan_objmgr_psoc *psoc);
+
+/**
+ * cfg_nan_get_ndi_mac_randomize() - get NDI MAC randomize enable status
+ * @psoc: pointer to psoc object
+ *
+ * This function returns NAN Datapath Interface MAC randomization status
+ */
+bool cfg_nan_get_ndi_mac_randomize(struct wlan_objmgr_psoc *psoc);
+#else
+static inline bool cfg_nan_get_datapath_enable(struct wlan_objmgr_psoc *psoc)
+{
+ return false;
+}
+
+static inline uint32_t cfg_nan_get_ndi_channel(struct wlan_objmgr_psoc *psoc)
+{
+ return 0;
+}
+
+static inline bool cfg_nan_get_ndi_mac_randomize(struct wlan_objmgr_psoc *psoc)
+{
+ return false;
+}
+#endif
+#endif
+
diff --git a/umac/nan/dispatcher/src/cfg_nan.c b/umac/nan/dispatcher/src/cfg_nan.c
new file mode 100644
index 000000000000..5b852da1f947
--- /dev/null
+++ b/umac/nan/dispatcher/src/cfg_nan.c
@@ -0,0 +1,80 @@
+/*
+ * 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: contains NAN INI configurations
+ */
+
+#include "wlan_objmgr_psoc_obj.h"
+#include "cfg_nan_api.h"
+#include "../../core/src/nan_main_i.h"
+
+static inline struct nan_psoc_priv_obj
+ *cfg_nan_get_priv_obj(struct wlan_objmgr_psoc *psoc)
+{
+ if (!psoc) {
+ nan_err("PSOC obj null");
+ return NULL;
+ }
+ return wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_NAN);
+}
+
+bool cfg_nan_get_enable(struct wlan_objmgr_psoc *psoc)
+{
+ struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
+
+ if (!nan_obj) {
+ nan_err("NAN obj null");
+ return false;
+ }
+ return nan_obj->cfg_param.enable;
+}
+
+bool cfg_nan_get_datapath_enable(struct wlan_objmgr_psoc *psoc)
+{
+ struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
+
+ if (!nan_obj) {
+ nan_err("NAN obj null");
+ return false;
+ }
+ return nan_obj->cfg_param.dp_enable;
+}
+
+uint32_t cfg_nan_get_ndi_channel(struct wlan_objmgr_psoc *psoc)
+{
+ struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
+
+ if (!nan_obj) {
+ nan_err("NAN obj null");
+ return 0;
+ }
+ return nan_obj->cfg_param.ndi_ch;
+}
+
+bool cfg_nan_get_ndi_mac_randomize(struct wlan_objmgr_psoc *psoc)
+{
+ struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
+
+ if (!nan_obj) {
+ nan_err("NAN obj null");
+ return false;
+ }
+ return nan_obj->cfg_param.ndi_mac_randomize;
+}
+