Explorar el Código

qcacld-3.0: Add ini support to configure max ndp sessions in fw

Introduce INI "ndp_max_sessions" to configure max number of ndp
sessions host supports. Firmware advertises max number of ndp
sessions supported in wmi_service_ready_ext2 event. If the firmware
advertises non-zero value of max ndp sessions then host configures
max ndp sessions support in firmware using WMI_INIT_CMD.

Host uses a minimum of "ndp_max_sessions" value and firmware
advertised max ndp session value to configure max number of ndp
sessions in firmware.

Change-Id: I613815f384f9b0a61711324c85ecfa095d133360
CRs-Fixed: 2673120
Abhishek Ambure hace 4 años
padre
commit
a6afc073d0

+ 2 - 0
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;
 };
 
 /**

+ 28 - 1
components/nan/dispatcher/inc/cfg_nan.h

@@ -168,6 +168,32 @@
 			CFG_VALUE_OR_DEFAULT, \
 			"Keep alive timeout of a peer")
 
+/*
+ * <ini>
+ * ndp_max_sessions - To configure max ndp sessions
+ * supported by host.
+ *
+ * @Min: 1
+ * @Max: 8
+ * @Default: 8
+ *
+ * Related: None
+ *
+ * Supported Feature: NAN
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+
+#define CFG_NDP_MAX_SESSIONS CFG_INI_UINT( \
+			"ndp_max_sessions", \
+			1, \
+			8, \
+			8, \
+			CFG_VALUE_OR_DEFAULT, \
+			"max ndp sessions host supports")
+
 /*
  * <ini>
  * 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

+ 17 - 0
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)
 {

+ 17 - 0
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);

+ 2 - 0
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);
 }
 
 /**

+ 3 - 0
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);
 }