From cf941608055154e3278482181d36dd59d862ddc0 Mon Sep 17 00:00:00 2001 From: Nachiket Kukade Date: Wed, 12 Dec 2018 14:32:35 +0530 Subject: [PATCH] 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 --- .../policy_mgr/inc/wlan_policy_mgr_api.h | 15 ++++ .../inc/wlan_policy_mgr_public_struct.h | 8 +++ .../policy_mgr/src/wlan_policy_mgr_action.c | 8 ++- .../policy_mgr/src/wlan_policy_mgr_core.c | 16 +++-- .../src/wlan_policy_mgr_get_set_utils.c | 47 +++++++++++- .../policy_mgr/src/wlan_policy_mgr_pcl.c | 7 ++ .../src/wlan_policy_mgr_tables_2x2_dbs_i.h | 71 +++++++++++++++---- components/nan/core/inc/nan_public_structs.h | 3 + components/nan/core/inc/wlan_nan_api.h | 22 +++++- components/nan/core/src/nan_main.c | 8 +++ core/mac/inc/ani_global.h | 2 + core/sme/src/common/sme_api.c | 12 ++-- core/sme/src/csr/csr_api_roam.c | 4 ++ 13 files changed, 198 insertions(+), 25 deletions(-) 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;