diff --git a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h index fc3c48b47e87..d9d278da0ca3 100644 --- a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +++ b/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 */ diff --git a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_public_struct.h b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_public_struct.h index 8af1813c7f6d..9e0dabacdb1a 100644 --- a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_public_struct.h +++ b/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 2x2@2.4 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 1x1@2.4 Ghz + * @PM_NAN_DISC_24_2x2: NAN Discovery using 2x2@2.4 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, }; /** diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c index 809406cc8191..14ad6bfa4e75 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c +++ b/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); diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c index f1594f4beb69..569a75b5fc00 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c +++ b/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); } diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c index b3f4ca1b517c..9c69a3dcc6ea 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +++ b/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; +} diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c index 46d1556c61d3..400af4bb471d 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c +++ b/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", diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_i.h b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_i.h index 370c38cff509..f84c66e83c7c 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_i.h +++ b/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} }, }; /** diff --git a/components/nan/core/inc/nan_public_structs.h b/components/nan/core/inc/nan_public_structs.h index 56175e8b0703..dd91015a6035 100644 --- a/components/nan/core/inc/nan_public_structs.h +++ b/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 diff --git a/components/nan/core/inc/wlan_nan_api.h b/components/nan/core/inc/wlan_nan_api.h index 09f2c6c3b156..a39369935377 100644 --- a/components/nan/core/inc/wlan_nan_api.h +++ b/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_ */ diff --git a/components/nan/core/src/nan_main.c b/components/nan/core/src/nan_main.c index 904b4fb90438..ba0eb10496c0 100644 --- a/components/nan/core/src/nan_main.c +++ b/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; +} diff --git a/core/mac/inc/ani_global.h b/core/mac/inc/ani_global.h index 641d073d0ebb..56e8f93877d3 100644 --- a/core/mac/inc/ani_global.h +++ b/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; }; /** diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 4648673b9869..097dc2b7f52c 100644 --- a/core/sme/src/common/sme_api.c +++ b/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 diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 756bbc7cae33..d96ec4134666 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/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;