فهرست منبع

qcacld-3.0: Add policy mgr changes to manage NAN Discovery

Add NAN Discovery specific modes, modules that manage NAN
Discovery interface. Add cases and exceptions that manage
concurrent operations alongside NAN Discovery.

Add policy manager changes to manage NAN Discovery.

Change-Id: Ib9a10be265c14adf8d1d5f2f2e2b65aa399d6636
CRs-Fixed: 2358183
Nachiket Kukade 6 سال پیش
والد
کامیت
cf94160805

+ 15 - 0
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h

@@ -2872,4 +2872,19 @@ QDF_STATUS policy_mgr_get_hw_mode_from_idx(
 		struct wlan_objmgr_psoc *psoc,
 		uint32_t idx,
 		struct policy_mgr_hw_mode_params *hw_mode);
+
+/**
+ * policy_mgr_update_nan_vdev_mac_info() - Update the NAN vdev id and MAC id in
+ * policy manager
+ * @psoc: psoc object
+ * @nan_vdev_id: NAN Discovery pseudo vdev id
+ * @mac_id: NAN Discovery MAC ID
+ *
+ * Stores NAN Discovery related vdev and MAC id in policy manager
+ *
+ * Return: QDF Success
+ */
+QDF_STATUS policy_mgr_update_nan_vdev_mac_info(struct wlan_objmgr_psoc *psoc,
+					       uint8_t nan_vdev_id,
+					       uint8_t mac_id);
 #endif /* __WLAN_POLICY_MGR_API_H */

+ 8 - 0
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_public_struct.h

@@ -231,6 +231,7 @@ enum policy_mgr_conc_priority_mode {
  * @PM_P2P_GO_MODE: P2P Go mode
  * @PM_IBSS_MODE: IBSS mode
  * @PM_NDI_MODE: NDI mode
+ * @PM_NAN_DISC_MODE: NAN Discovery mode
  * @PM_MAX_NUM_OF_MODE: max value place holder
  */
 enum policy_mgr_con_mode {
@@ -240,6 +241,7 @@ enum policy_mgr_con_mode {
 	PM_P2P_GO_MODE,
 	PM_IBSS_MODE,
 	PM_NDI_MODE,
+	PM_NAN_DISC_MODE,
 	PM_MAX_NUM_OF_MODE
 };
 
@@ -347,6 +349,8 @@ enum policy_mgr_pcl_type {
  * @PM_IBSS_24_2x2:  IBSS connection using [email protected] Ghz
  * @PM_IBSS_5_1x1:  IBSS connection using 1x1@5 Ghz
  * @PM_IBSS_5_2x2:  IBSS connection using 2x2@5 Ghz
+ * @PM_NAN_DISC_24_1x1:  NAN Discovery using [email protected] Ghz
+ * @PM_NAN_DISC_24_2x2:  NAN Discovery using [email protected] Ghz
  * @PM_MAX_ONE_CONNECTION_MODE: Max place holder
  *
  * These are generic IDs that identify the various roles
@@ -373,6 +377,8 @@ enum policy_mgr_one_connection_mode {
 	PM_IBSS_24_2x2,
 	PM_IBSS_5_1x1,
 	PM_IBSS_5_2x2,
+	PM_NAN_DISC_24_1x1,
+	PM_NAN_DISC_24_2x2,
 
 	PM_MAX_ONE_CONNECTION_MODE
 };
@@ -755,6 +761,7 @@ enum policy_mgr_band {
  *        2x2 preference enabled, the vdev down may cause prioritized active
  *        vdev change, then DBS hw mode may needs to change from one DBS mode
  *        to the other DBS mode. This reason code indicates such condition.
+ * @POLICY_MGR_UPDATE_REASON_NAN_DISCOVERY: NAN Discovery related
  */
 enum policy_mgr_conn_update_reason {
 	POLICY_MGR_UPDATE_REASON_SET_OPER_CHAN,
@@ -769,6 +776,7 @@ enum policy_mgr_conn_update_reason {
 	POLICY_MGR_UPDATE_REASON_CHANNEL_SWITCH_STA,
 	POLICY_MGR_UPDATE_REASON_PRE_CAC,
 	POLICY_MGR_UPDATE_REASON_PRI_VDEV_CHANGE,
+	POLICY_MGR_UPDATE_REASON_NAN_DISCOVERY,
 };
 
 /**

+ 7 - 1
components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c

@@ -850,7 +850,13 @@ QDF_STATUS policy_mgr_current_connections_update(struct wlan_objmgr_psoc *psoc,
 		goto done;
 	}
 
-	if (pm_ctx->hdd_cbacks.hdd_get_device_mode)
+	/*
+	 * There is no adapter associated with NAN Discovery, hence skip the
+	 * HDD callback and fill separately.
+	 */
+	if (reason == POLICY_MGR_UPDATE_REASON_NAN_DISCOVERY)
+		new_conn_mode = QDF_NAN_DISC_MODE;
+	else if (pm_ctx->hdd_cbacks.hdd_get_device_mode)
 		new_conn_mode = pm_ctx->hdd_cbacks.
 					hdd_get_device_mode(session_id);
 

+ 12 - 4
components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c

@@ -888,7 +888,9 @@ void policy_mgr_pdev_set_hw_mode_cb(uint32_t status,
 		return;
 	}
 
-	if (!vdev_mac_map) {
+	/* vdev mac map for NAN Discovery is expected in NAN Enable resp */
+	if (reason != POLICY_MGR_UPDATE_REASON_NAN_DISCOVERY &&
+	    !vdev_mac_map) {
 		policy_mgr_err("vdev_mac_map is NULL");
 		return;
 	}
@@ -918,9 +920,10 @@ void policy_mgr_pdev_set_hw_mode_cb(uint32_t status,
 			 hw_mode.sbs_cap);
 
 	/* update pm_conc_connection_list */
-	policy_mgr_update_hw_mode_conn_info(context, num_vdev_mac_entries,
-			vdev_mac_map,
-			hw_mode);
+	policy_mgr_update_hw_mode_conn_info(context,
+					    num_vdev_mac_entries,
+					    vdev_mac_map,
+					    hw_mode);
 	if (pm_ctx->mode_change_cb)
 		pm_ctx->mode_change_cb();
 
@@ -980,6 +983,9 @@ static uint32_t policy_mgr_dump_current_concurrency_one_connection(
 		count = strlcat(cc_mode, "IBSS",
 					length);
 		break;
+	case PM_NAN_DISC_MODE:
+		count = strlcat(cc_mode, "NAN DISC", length);
+		break;
 	default:
 		policy_mgr_err("unexpected mode %d", mode);
 		break;
@@ -1474,6 +1480,8 @@ enum policy_mgr_con_mode policy_mgr_get_mode(uint8_t type,
 		}
 	} else if (type == WMI_VDEV_TYPE_IBSS) {
 		mode = PM_IBSS_MODE;
+	} else if (type == WMI_VDEV_TYPE_NAN) {
+		mode = PM_NAN_DISC_MODE;
 	} else {
 		policy_mgr_err("Unknown type %d", type);
 	}

+ 44 - 3
components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c

@@ -32,6 +32,8 @@
 #include "wlan_objmgr_global_obj.h"
 #include "wlan_objmgr_pdev_obj.h"
 #include "wlan_objmgr_vdev_obj.h"
+#include "wlan_nan_api.h"
+#include "nan_public_structs.h"
 
 /* invalid channel id. */
 #define INVALID_CHANNEL_ID 0
@@ -1511,13 +1513,14 @@ void policy_mgr_incr_active_session(struct wlan_objmgr_psoc *psoc,
 	case QDF_P2P_GO_MODE:
 	case QDF_SAP_MODE:
 	case QDF_IBSS_MODE:
+	case QDF_NAN_DISC_MODE:
 		pm_ctx->no_of_active_sessions[mode]++;
 		break;
 	default:
 		break;
 	}
 
-	if (pm_ctx->dp_cbacks.hdd_v2_flow_pool_map)
+	if (mode != QDF_NAN_DISC_MODE && pm_ctx->dp_cbacks.hdd_v2_flow_pool_map)
 		pm_ctx->dp_cbacks.hdd_v2_flow_pool_map(session_id);
 
 	policy_mgr_debug("No.# of active sessions for mode %d = %d",
@@ -1590,6 +1593,7 @@ QDF_STATUS policy_mgr_decr_active_session(struct wlan_objmgr_psoc *psoc,
 	case QDF_P2P_GO_MODE:
 	case QDF_SAP_MODE:
 	case QDF_IBSS_MODE:
+	case QDF_NAN_DISC_MODE:
 		if (pm_ctx->no_of_active_sessions[mode])
 			pm_ctx->no_of_active_sessions[mode]--;
 		break;
@@ -1597,7 +1601,8 @@ QDF_STATUS policy_mgr_decr_active_session(struct wlan_objmgr_psoc *psoc,
 		break;
 	}
 
-	if (pm_ctx->dp_cbacks.hdd_v2_flow_pool_unmap)
+	if (mode != QDF_NAN_DISC_MODE &&
+	    pm_ctx->dp_cbacks.hdd_v2_flow_pool_unmap)
 		pm_ctx->dp_cbacks.hdd_v2_flow_pool_unmap(session_id);
 
 	policy_mgr_debug("No.# of active sessions for mode %d = %d",
@@ -1670,7 +1675,14 @@ QDF_STATUS policy_mgr_incr_connection_count(
 			pm_ctx->cfg.max_conc_cxns);
 		return status;
 	}
-	if (pm_ctx->wma_cbacks.wma_get_connection_info) {
+
+	if (vdev_id == NAN_PSEUDO_VDEV_ID) {
+		status = wlan_nan_get_connection_info(psoc, &conn_table_entry);
+		if (QDF_IS_STATUS_ERROR(status)) {
+			policy_mgr_err("Can't get NAN Connection info");
+			return status;
+		}
+	} else if (pm_ctx->wma_cbacks.wma_get_connection_info) {
 		status = pm_ctx->wma_cbacks.wma_get_connection_info(
 				vdev_id, &conn_table_entry);
 		if (QDF_STATUS_SUCCESS != status) {
@@ -1797,6 +1809,9 @@ bool policy_mgr_map_concurrency_mode(enum QDF_OPMODE *old_mode,
 	case QDF_IBSS_MODE:
 		*new_mode = PM_IBSS_MODE;
 		break;
+	case QDF_NAN_DISC_MODE:
+		*new_mode = PM_NAN_DISC_MODE;
+		break;
 	default:
 		*new_mode = PM_MAX_NUM_OF_MODE;
 		status = false;
@@ -2513,6 +2528,9 @@ enum policy_mgr_con_mode policy_mgr_convert_device_mode_to_qdf_type(
 	case QDF_IBSS_MODE:
 		mode = PM_IBSS_MODE;
 		break;
+	case QDF_NAN_DISC_MODE:
+		mode = PM_NAN_DISC_MODE;
+		break;
 	default:
 		policy_mgr_debug("Unsupported mode (%d)",
 				 device_mode);
@@ -2542,6 +2560,9 @@ enum QDF_OPMODE policy_mgr_get_qdf_mode_from_pm(
 	case PM_IBSS_MODE:
 		mode = QDF_IBSS_MODE;
 		break;
+	case PM_NAN_DISC_MODE:
+		mode = QDF_NAN_DISC_MODE;
+		break;
 	default:
 		policy_mgr_debug("Unsupported policy mgr mode (%d)",
 				 device_mode);
@@ -3603,3 +3624,23 @@ bool policy_mgr_is_sta_sap_scc(struct wlan_objmgr_psoc *psoc, uint8_t sap_ch)
 
 	return is_scc;
 }
+
+QDF_STATUS policy_mgr_update_nan_vdev_mac_info(struct wlan_objmgr_psoc *psoc,
+					       uint8_t nan_vdev_id,
+					       uint8_t mac_id)
+{
+	struct policy_mgr_hw_mode_params hw_mode = {0};
+	struct policy_mgr_vdev_mac_map vdev_mac_map = {0};
+	QDF_STATUS status;
+
+	vdev_mac_map.vdev_id = nan_vdev_id;
+	vdev_mac_map.mac_id = mac_id;
+
+	status = policy_mgr_get_current_hw_mode(psoc, &hw_mode);
+
+	if (QDF_IS_STATUS_SUCCESS(status))
+		policy_mgr_update_hw_mode_conn_info(psoc, 1, &vdev_mac_map,
+						    hw_mode);
+
+	return status;
+}

+ 7 - 0
components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c

@@ -45,6 +45,7 @@ first_connection_pcl_table[PM_MAX_NUM_OF_MODE]
 	[PM_P2P_CLIENT_MODE] = {PM_5G,   PM_5G,   PM_5G  },
 	[PM_P2P_GO_MODE] = {PM_5G,   PM_5G,   PM_5G  },
 	[PM_IBSS_MODE] = {PM_NONE, PM_NONE, PM_NONE},
+	[PM_NAN_DISC_MODE] = {PM_5G, PM_5G, PM_5G},
 };
 
 pm_dbs_pcl_second_connection_table_type
@@ -492,6 +493,7 @@ static QDF_STATUS policy_mgr_mode_specific_modification_on_pcl(
 	case PM_STA_MODE:
 	case PM_P2P_CLIENT_MODE:
 	case PM_IBSS_MODE:
+	case PM_NAN_DISC_MODE:
 		status = QDF_STATUS_SUCCESS;
 		break;
 	default:
@@ -733,6 +735,11 @@ enum policy_mgr_one_connection_mode
 			else
 				index = PM_IBSS_5_2x2;
 		}
+	} else if (PM_NAN_DISC_MODE == pm_conc_connection_list[0].mode) {
+		if (POLICY_MGR_ONE_ONE == pm_conc_connection_list[0].chain_mask)
+			index = PM_NAN_DISC_24_1x1;
+		else
+			index = PM_NAN_DISC_24_2x2;
 	}
 
 	policy_mgr_debug("mode:%d chan:%d chain:%d index:%d",

+ 59 - 12
components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_i.h

@@ -35,14 +35,16 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_SAP_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
 	[PM_P2P_CLIENT_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
 	[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
-	[PM_IBSS_MODE] = {PM_5G, PM_5G, PM_5G} },
+	[PM_IBSS_MODE] = {PM_5G, PM_5G, PM_5G},
+	[PM_NAN_DISC_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH} },
 
 	[PM_STA_24_2x2] = {
 	[PM_STA_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
 	[PM_SAP_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
 	[PM_P2P_CLIENT_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
 	[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
-	[PM_IBSS_MODE] = {PM_5G, PM_5G, PM_5G} },
+	[PM_IBSS_MODE] = {PM_5G, PM_5G, PM_5G},
+	[PM_NAN_DISC_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH} },
 
 	[PM_STA_5_1x1] = {
 	[PM_STA_MODE] = {PM_24G_SCC_CH_SBS_CH,
@@ -53,7 +55,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 		PM_24G_SCC_CH_SBS_CH, PM_24G_SCC_CH_SBS_CH},
 	[PM_P2P_GO_MODE] = {PM_24G_SCC_CH_SBS_CH,
 		PM_24G_SCC_CH_SBS_CH, PM_24G_SCC_CH_SBS_CH},
-	[PM_IBSS_MODE] = {PM_24G, PM_24G, PM_24G} },
+	[PM_IBSS_MODE] = {PM_24G, PM_24G, PM_24G},
+	[PM_NAN_DISC_MODE] = {PM_24G_SCC_CH_SBS_CH, PM_24G_SCC_CH_SBS_CH,
+		PM_24G_SCC_CH_SBS_CH} },
 
 	[PM_STA_5_2x2] = {
 	[PM_STA_MODE] = {PM_24G_SCC_CH_SBS_CH,
@@ -64,7 +68,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 		PM_24G_SCC_CH_SBS_CH, PM_24G_SCC_CH_SBS_CH},
 	[PM_P2P_GO_MODE] = {PM_24G_SCC_CH_SBS_CH,
 		PM_24G_SCC_CH_SBS_CH, PM_24G_SCC_CH_SBS_CH},
-	[PM_IBSS_MODE] = {PM_24G, PM_24G, PM_24G} },
+	[PM_IBSS_MODE] = {PM_24G, PM_24G, PM_24G},
+	[PM_NAN_DISC_MODE] = {PM_24G_SCC_CH_SBS_CH, PM_24G_SCC_CH_SBS_CH,
+		PM_24G_SCC_CH_SBS_CH} },
 
 	[PM_P2P_CLI_24_1x1] = {
 	[PM_STA_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
@@ -72,7 +78,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_CLIENT_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
 	[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
 	[PM_IBSS_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
-		PM_MAX_PCL_TYPE} },
+		PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_P2P_CLI_24_2x2] = {
 	[PM_STA_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
@@ -80,7 +88,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_CLIENT_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
 	[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
 	[PM_IBSS_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
-		PM_MAX_PCL_TYPE} },
+		PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_P2P_CLI_5_1x1] = {
 	[PM_STA_MODE] = {PM_24G_SCC_CH_SBS_CH,
@@ -92,7 +102,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {PM_24G_SCC_CH_SBS_CH, PM_24G_SCC_CH_SBS_CH,
 		PM_24G_SCC_CH_SBS_CH},
 	[PM_IBSS_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
-		PM_MAX_PCL_TYPE} },
+		PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_P2P_CLI_5_2x2] = {
 	[PM_STA_MODE] = {PM_24G_SCC_CH_SBS_CH,
@@ -104,7 +116,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {PM_24G_SCC_CH_SBS_CH, PM_24G_SCC_CH_SBS_CH,
 		PM_24G_SCC_CH_SBS_CH},
 	[PM_IBSS_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
-		PM_MAX_PCL_TYPE} },
+		PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_P2P_GO_24_1x1] = {
 	[PM_STA_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
@@ -113,7 +127,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
 		PM_MAX_PCL_TYPE},
 	[PM_IBSS_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
-		PM_MAX_PCL_TYPE} },
+		PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_P2P_GO_24_2x2] = {
 	[PM_STA_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
@@ -122,7 +138,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
 		PM_MAX_PCL_TYPE},
 	[PM_IBSS_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
-		PM_MAX_PCL_TYPE} },
+		PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_P2P_GO_5_1x1] = {
 	[PM_STA_MODE] = {PM_24G_SCC_CH_SBS_CH,
@@ -134,7 +152,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
 		PM_MAX_PCL_TYPE},
 	[PM_IBSS_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
-		PM_MAX_PCL_TYPE} },
+		PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_P2P_GO_5_2x2] = {
 	[PM_STA_MODE] = {PM_24G_SCC_CH_SBS_CH,
@@ -146,7 +166,9 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
 		PM_MAX_PCL_TYPE},
 	[PM_IBSS_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
-		PM_MAX_PCL_TYPE} },
+		PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_SAP_24_1x1] = {
 	[PM_STA_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
@@ -197,6 +219,8 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {
 		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
 	[PM_IBSS_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
 		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_IBSS_24_2x2] = {
@@ -208,6 +232,8 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {
 		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
 	[PM_IBSS_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
 		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_IBSS_5_1x1] = {
@@ -219,6 +245,8 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {
 		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
 	[PM_IBSS_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
 		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
 	[PM_IBSS_5_2x2] = {
@@ -230,8 +258,27 @@ pm_second_connection_pcl_dbs_2x2_table = {
 	[PM_P2P_GO_MODE] = {
 		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
 	[PM_IBSS_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
+	[PM_NAN_DISC_MODE] = {
 		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 
+	[PM_NAN_DISC_24_1x1] = {
+	[PM_STA_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
+	[PM_P2P_CLIENT_MODE] =	{
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
+	[PM_P2P_GO_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
+	[PM_IBSS_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
+
+	[PM_NAN_DISC_24_2x2] = {
+	[PM_STA_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
+	[PM_P2P_CLIENT_MODE] =	{
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
+	[PM_P2P_GO_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
+	[PM_IBSS_MODE] = {
+		PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
 };
 
 /**

+ 3 - 0
components/nan/core/inc/nan_public_structs.h

@@ -26,6 +26,7 @@
 #include "qdf_types.h"
 #include "qdf_status.h"
 #include "scheduler_api.h"
+#include "wlan_tgt_def_config.h"
 
 struct wlan_objmgr_psoc;
 struct wlan_objmgr_vdev;
@@ -41,6 +42,8 @@ struct wlan_objmgr_vdev;
 #define NAN_PASSPHRASE_MAX_LEN 63
 #define NAN_CH_INFO_MAX_CHANNELS 4
 
+#define NAN_PSEUDO_VDEV_ID CFG_TGT_NUM_VDEV
+
 /**
  * enum nan_discovery_msg_type - NAN msg type
  * @NAN_GENERIC_REQ: Type for all the NAN requests other than enable/disable

+ 21 - 1
components/nan/core/inc/wlan_nan_api.h

@@ -22,11 +22,14 @@
 
 #ifndef _WLAN_NAN_API_H_
 #define _WLAN_NAN_API_H_
-#ifdef WLAN_FEATURE_NAN_CONVERGENCE
 
 #include "wlan_objmgr_vdev_obj.h"
 #include "wlan_objmgr_psoc_obj.h"
+#include "wlan_policy_mgr_public_struct.h"
 #include "qdf_status.h"
+
+#ifdef WLAN_FEATURE_NAN_CONVERGENCE
+
 #include "../src/nan_main_i.h"
 
 struct wlan_objmgr_psoc;
@@ -150,6 +153,17 @@ struct wlan_nan_rx_ops *nan_psoc_get_rx_ops(struct wlan_objmgr_psoc *psoc)
 
 	return &nan_priv->rx_ops;
 }
+
+/**
+ * wlan_nan_get_connection_info: Get NAN related connection info
+ * @psoc: pointer to psoc object
+ * @conn_info: Coonection info structure pointer
+ *
+ * Return: status of operation
+ */
+QDF_STATUS
+wlan_nan_get_connection_info(struct wlan_objmgr_psoc *psoc,
+			     struct policy_mgr_vdev_entry_info *conn_info);
 #else /* WLAN_FEATURE_NAN_CONVERGENCE */
 static inline QDF_STATUS nan_init(void)
 {
@@ -171,5 +185,11 @@ static inline QDF_STATUS nan_psoc_disable(struct wlan_objmgr_psoc *psoc)
 	return QDF_STATUS_SUCCESS;
 }
 
+static inline QDF_STATUS
+wlan_nan_get_connection_info(struct wlan_objmgr_psoc *psoc,
+			     struct policy_mgr_vdev_entry_info *conn_info)
+{
+	return QDF_STATUS_SUCCESS;
+}
 #endif /* WLAN_FEATURE_NAN_CONVERGENCE */
 #endif /* _WLAN_NAN_API_H_ */

+ 8 - 0
components/nan/core/src/nan_main.c

@@ -20,6 +20,7 @@
  * DOC: contains core nan function definitions
  */
 
+#include "wlan_utility.h"
 #include "nan_ucfg_api.h"
 #include "wlan_nan_api.h"
 #include "target_if_nan.h"
@@ -764,3 +765,10 @@ QDF_STATUS nan_discovery_scheduled_handler(struct scheduler_msg *msg)
 	nan_discovery_flush_callback(msg);
 	return status;
 }
+
+QDF_STATUS
+wlan_nan_get_connection_info(struct wlan_objmgr_psoc *psoc,
+			     struct policy_mgr_vdev_entry_info *conn_info)
+{
+	return QDF_STATUS_SUCCESS;
+}

+ 2 - 0
core/mac/inc/ani_global.h

@@ -753,6 +753,7 @@ enum auth_tx_ack_status {
  * @ibss: IBSS Nss value.
  * @tdls: TDLS Nss value.
  * @ocb: OCB Nss value.
+ * @nan: NAN Nss value.
  *
  * Holds the Nss values of different vdev types.
  */
@@ -765,6 +766,7 @@ struct vdev_type_nss {
 	uint8_t ibss;
 	uint8_t tdls;
 	uint8_t ocb;
+	uint8_t nan;
 };
 
 /**

+ 8 - 4
core/sme/src/common/sme_api.c

@@ -13872,11 +13872,15 @@ void sme_update_vdev_type_nss(mac_handle_t mac_handle, uint8_t max_supp_nss,
 						nss_chains_ini_cfg->
 							num_rx_chains[band],
 						OCB_NSS_CHAINS_SHIFT));
+	vdev_nss->nan = QDF_MIN(max_supp_nss, GET_VDEV_NSS_CHAIN(
+						nss_chains_ini_cfg->
+							num_rx_chains[band],
+						NAN_NSS_CHAIN_SHIFT));
 
-	sme_debug("band %d NSS:sta %d sap %d cli %d go %d dev %d ibss %d tdls %d ocb %d",
-		band, vdev_nss->sta, vdev_nss->sap, vdev_nss->p2p_cli,
-		vdev_nss->p2p_go, vdev_nss->p2p_dev, vdev_nss->ibss,
-		vdev_nss->tdls, vdev_nss->ocb);
+	sme_debug("band %d NSS:sta %d sap %d cli %d go %d dev %d ibss %d tdls %d ocb %d nan %d",
+		  band, vdev_nss->sta, vdev_nss->sap, vdev_nss->p2p_cli,
+		  vdev_nss->p2p_go, vdev_nss->p2p_dev, vdev_nss->ibss,
+		  vdev_nss->tdls, vdev_nss->ocb, vdev_nss->nan);
 }
 
 #ifdef WLAN_FEATURE_11AX_BSS_COLOR

+ 4 - 0
core/sme/src/csr/csr_api_roam.c

@@ -16332,6 +16332,10 @@ void csr_get_vdev_type_nss(struct mac_context *mac_ctx,
 		*nss_2g = mac_ctx->vdev_type_nss_2g.ocb;
 		*nss_5g = mac_ctx->vdev_type_nss_5g.ocb;
 		break;
+	case QDF_NAN_DISC_MODE:
+		*nss_2g = mac_ctx->vdev_type_nss_2g.nan;
+		*nss_5g = mac_ctx->vdev_type_nss_5g.nan;
+		break;
 	default:
 		*nss_2g = 1;
 		*nss_5g = 1;