瀏覽代碼

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
Peng Xu 9 年之前
父節點
當前提交
4aeef3c7aa
共有 1 個文件被更改,包括 20 次插入4 次删除
  1. 20 4
      core/cds/src/cds_concurrency.c

+ 20 - 4
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: