diff --git a/components/nan/core/src/nan_main_i.h b/components/nan/core/src/nan_main_i.h
index b133eb54cc..b7df0539a8 100644
--- a/components/nan/core/src/nan_main_i.h
+++ b/components/nan/core/src/nan_main_i.h
@@ -83,6 +83,7 @@ enum nan_disc_state {
* wait to kickout peer if peer is not reachable
* @support_mp0_discovery: To support discovery of NAN cluster with Master
* Preference (MP) as 0 when a new device is enabling NAN
+ * @max_ndp_sessions: max ndp sessions host supports
*/
struct nan_cfg_params {
bool enable;
@@ -92,6 +93,7 @@ struct nan_cfg_params {
bool nan_separate_iface_support;
uint16_t ndp_keep_alive_period;
bool support_mp0_discovery;
+ uint32_t max_ndp_sessions;
};
/**
diff --git a/components/nan/dispatcher/inc/cfg_nan.h b/components/nan/dispatcher/inc/cfg_nan.h
index 9537794181..31b74ef461 100644
--- a/components/nan/dispatcher/inc/cfg_nan.h
+++ b/components/nan/dispatcher/inc/cfg_nan.h
@@ -168,6 +168,32 @@
CFG_VALUE_OR_DEFAULT, \
"Keep alive timeout of a peer")
+/*
+ *
+ * ndp_max_sessions - To configure max ndp sessions
+ * supported by host.
+ *
+ * @Min: 1
+ * @Max: 8
+ * @Default: 8
+ *
+ * Related: None
+ *
+ * Supported Feature: NAN
+ *
+ * Usage: Internal
+ *
+ *
+ */
+
+#define CFG_NDP_MAX_SESSIONS CFG_INI_UINT( \
+ "ndp_max_sessions", \
+ 1, \
+ 8, \
+ 8, \
+ CFG_VALUE_OR_DEFAULT, \
+ "max ndp sessions host supports")
+
/*
*
* gSupportMp0Discovery - To support discovery of NAN cluster with
@@ -204,6 +230,7 @@
#endif
#define CFG_NAN_ALL CFG_NAN_DISC \
- CFG_NAN_DP
+ CFG_NAN_DP \
+ CFG(CFG_NDP_MAX_SESSIONS)
#endif
diff --git a/components/nan/dispatcher/inc/cfg_nan_api.h b/components/nan/dispatcher/inc/cfg_nan_api.h
index 0bb4c38e9b..e6c501ffac 100644
--- a/components/nan/dispatcher/inc/cfg_nan_api.h
+++ b/components/nan/dispatcher/inc/cfg_nan_api.h
@@ -74,6 +74,16 @@ QDF_STATUS cfg_nan_get_ndp_inactivity_timeout(struct wlan_objmgr_psoc *psoc,
QDF_STATUS cfg_nan_get_ndp_keepalive_period(struct wlan_objmgr_psoc *psoc,
uint16_t *val);
+/**
+ * cfg_nan_get_ndp_max_sessions() - get NDP max sessions host supports
+ * @psoc: pointer to psoc object
+ * @val: pointer to hold max ndp sessions
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS cfg_nan_get_ndp_max_sessions(struct wlan_objmgr_psoc *psoc,
+ uint32_t *val);
+
/**
* cfg_nan_get_support_mp0_discovery() - get value of config support mp0
* discovery
@@ -127,6 +137,13 @@ QDF_STATUS cfg_nan_get_ndp_keepalive_period(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
+static inline
+QDF_STATUS cfg_nan_get_ndp_max_sessions(struct wlan_objmgr_psoc *psoc,
+ uint32_t *val)
+{
+ return QDF_STATUS_SUCCESS;
+}
+
static inline bool cfg_nan_get_support_mp0_discovery(
struct wlan_objmgr_psoc *psoc)
{
diff --git a/components/nan/dispatcher/src/cfg_nan.c b/components/nan/dispatcher/src/cfg_nan.c
index efc017eb83..fa841749b2 100644
--- a/components/nan/dispatcher/src/cfg_nan.c
+++ b/components/nan/dispatcher/src/cfg_nan.c
@@ -24,6 +24,8 @@
#include "cfg_nan_api.h"
#include "../../core/src/nan_main_i.h"
#include "wlan_mlme_ucfg_api.h"
+#include "cfg_ucfg_api.h"
+#include "cfg_nan.h"
static inline struct nan_psoc_priv_obj
*cfg_nan_get_priv_obj(struct wlan_objmgr_psoc *psoc)
@@ -96,6 +98,21 @@ QDF_STATUS cfg_nan_get_ndp_keepalive_period(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
+QDF_STATUS cfg_nan_get_ndp_max_sessions(struct wlan_objmgr_psoc *psoc,
+ uint32_t *val)
+{
+ struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
+
+ if (!nan_obj) {
+ nan_err("NAN obj null");
+ *val = cfg_default(CFG_NDP_MAX_SESSIONS);
+ return QDF_STATUS_E_INVAL;
+ }
+
+ *val = nan_obj->cfg_param.max_ndp_sessions;
+ return QDF_STATUS_SUCCESS;
+}
+
bool cfg_nan_get_support_mp0_discovery(struct wlan_objmgr_psoc *psoc)
{
struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
diff --git a/components/nan/dispatcher/src/nan_ucfg_api.c b/components/nan/dispatcher/src/nan_ucfg_api.c
index c8c198c9cf..4a738251e1 100644
--- a/components/nan/dispatcher/src/nan_ucfg_api.c
+++ b/components/nan/dispatcher/src/nan_ucfg_api.c
@@ -54,6 +54,8 @@ static void nan_cfg_init(struct wlan_objmgr_psoc *psoc,
nan_obj->cfg_param.ndp_keep_alive_period =
cfg_get(psoc,
CFG_NDP_KEEP_ALIVE_PERIOD);
+ nan_obj->cfg_param.max_ndp_sessions = cfg_get(psoc,
+ CFG_NDP_MAX_SESSIONS);
}
/**
diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c
index 0a12631ab8..7aae994601 100644
--- a/core/wma/src/wma_main.c
+++ b/core/wma/src/wma_main.c
@@ -347,6 +347,9 @@ static void wma_set_default_tgt_config(tp_wma_handle wma_handle,
if (cds_get_conparam() == QDF_GLOBAL_MONITOR_MODE)
tgt_cfg->rx_decap_mode = CFG_TGT_RX_DECAP_MODE_RAW;
+ cfg_nan_get_ndp_max_sessions(wma_handle->psoc,
+ &tgt_cfg->max_ndp_sessions);
+
wma_set_ipa_disable_config(tgt_cfg);
}