From 4aeef3c7aa2b03ce1f607dd0e18fd79dbf776a8d Mon Sep 17 00:00:00 2001 From: Peng Xu Date: Tue, 1 Dec 2015 15:59:56 -0800 Subject: [PATCH] qcacld-3.0: Don't allow two P2P GO interfaces on the same band In P2P GO + GO concurrency case, only DBS mode is supported for the two interfaces. Second P2P GO interface startup is blocked if its channel is on the same band as the first P2P GO interface. Change-Id: Ic85bd8f92983c8c08f61fdaf09be1ad13a17cd8f CRs-fixed: 945804 --- core/cds/src/cds_concurrency.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 8f5ec4036372..afd6f9160d9e 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -164,7 +164,7 @@ second_connection_pcl_dbs_table[CDS_MAX_ONE_CONNECTION_MODE] [CDS_STA_MODE] = {CDS_5G_SCC_CH, CDS_5G_SCC_CH, CDS_5G_SCC_CH}, [CDS_SAP_MODE] = {CDS_5G_SCC_CH, CDS_5G_SCC_CH, CDS_5G_SCC_CH}, [CDS_P2P_CLIENT_MODE] = {CDS_5G_SCC_CH, CDS_5G_SCC_CH, CDS_5G_SCC_CH}, - [CDS_P2P_GO_MODE] = {CDS_5G_SCC_CH, CDS_5G_SCC_CH, CDS_5G_SCC_CH}, + [CDS_P2P_GO_MODE] = {CDS_5G, CDS_5G, CDS_5G}, [CDS_IBSS_MODE] = { CDS_MAX_PCL_TYPE, CDS_MAX_PCL_TYPE, CDS_MAX_PCL_TYPE} }, @@ -172,7 +172,7 @@ second_connection_pcl_dbs_table[CDS_MAX_ONE_CONNECTION_MODE] [CDS_STA_MODE] = {CDS_5G_SCC_CH, CDS_5G_SCC_CH, CDS_5G_SCC_CH}, [CDS_SAP_MODE] = {CDS_5G_SCC_CH, CDS_5G_SCC_CH, CDS_5G_SCC_CH}, [CDS_P2P_CLIENT_MODE] = {CDS_5G_SCC_CH, CDS_5G_SCC_CH, CDS_5G_SCC_CH}, - [CDS_P2P_GO_MODE] = {CDS_5G_SCC_CH, CDS_5G_SCC_CH, CDS_5G_SCC_CH}, + [CDS_P2P_GO_MODE] = {CDS_5G, CDS_5G, CDS_5G}, [CDS_IBSS_MODE] = { CDS_MAX_PCL_TYPE, CDS_MAX_PCL_TYPE, CDS_MAX_PCL_TYPE} }, @@ -181,7 +181,7 @@ second_connection_pcl_dbs_table[CDS_MAX_ONE_CONNECTION_MODE] [CDS_SAP_MODE] = {CDS_SCC_CH_24G, CDS_SCC_CH_24G, CDS_SCC_CH_24G}, [CDS_P2P_CLIENT_MODE] = { CDS_SCC_CH_24G, CDS_24G_SCC_CH, CDS_SCC_CH_24G}, - [CDS_P2P_GO_MODE] = {CDS_SCC_CH_24G, CDS_SCC_CH_24G, CDS_SCC_CH_24G}, + [CDS_P2P_GO_MODE] = {CDS_24G, CDS_24G, CDS_24G}, [CDS_IBSS_MODE] = { CDS_MAX_PCL_TYPE, CDS_MAX_PCL_TYPE, CDS_MAX_PCL_TYPE} }, @@ -190,7 +190,7 @@ second_connection_pcl_dbs_table[CDS_MAX_ONE_CONNECTION_MODE] [CDS_SAP_MODE] = {CDS_SCC_CH_24G, CDS_SCC_CH_24G, CDS_SCC_CH_24G}, [CDS_P2P_CLIENT_MODE] = { CDS_SCC_CH_24G, CDS_24G_SCC_CH, CDS_SCC_CH_24G}, - [CDS_P2P_GO_MODE] = {CDS_SCC_CH_24G, CDS_SCC_CH_24G, CDS_SCC_CH_24G}, + [CDS_P2P_GO_MODE] = {CDS_24G, CDS_24G, CDS_24G}, [CDS_IBSS_MODE] = { CDS_MAX_PCL_TYPE, CDS_MAX_PCL_TYPE, CDS_MAX_PCL_TYPE} }, @@ -4714,6 +4714,22 @@ bool cds_allow_concurrency(hdd_context_t *hdd_ctx, enum cds_con_mode mode, cds_err("No VHT160, we have one connection already"); goto done; } + + /* don't allow two P2P GO on same band */ + if (channel && (mode == CDS_P2P_GO_MODE) && num_connections) { + index = 0; + count = cds_mode_specific_connection_count(hdd_ctx, + CDS_P2P_GO_MODE, list); + while (index < count) { + if (CDS_IS_SAME_BAND_CHANNELS(channel, + conc_connection_list[list[index]].chan)) { + cds_err("Don't allow P2P GO on same band"); + goto done; + } + index++; + } + } + status = true; done: