Browse Source

qcacld-3.0: Fix P2P GO start on 6 GHz failed

At present, 6 GHz allow check is not applicable to P2P GO interface
type in API hdd_get_ap_6 GHz_capable, thus start GO on 6 GHz failed.
Fix by call policy_mgr_is_6ghz_conc_mode_supported API to check
interface type support 6 GHz or not.

Change-Id: I96bda834e65d0e1fe7301ef695234df9088f50a6
CRs-Fixed: 3253893
Liangwei Dong 2 years ago
parent
commit
b10bfd4473

+ 10 - 4
components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c

@@ -3788,7 +3788,7 @@ void policy_mgr_incr_active_session(struct wlan_objmgr_psoc *psoc,
 
 	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);
-	if (mode == QDF_SAP_MODE)
+	if (mode == QDF_SAP_MODE || mode == QDF_P2P_GO_MODE)
 		policy_mgr_get_ap_6ghz_capable(psoc, session_id,
 					       &conn_6ghz_flag);
 
@@ -3854,7 +3854,7 @@ void policy_mgr_incr_active_session(struct wlan_objmgr_psoc *psoc,
 		if (pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb)
 			pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb(true);
 	}
-	if (mode == QDF_SAP_MODE)
+	if (mode == QDF_SAP_MODE || mode == QDF_P2P_GO_MODE)
 		policy_mgr_init_ap_6ghz_capable(psoc, session_id,
 						conn_6ghz_flag);
 	if (mode == QDF_SAP_MODE || mode == QDF_P2P_GO_MODE ||
@@ -8079,7 +8079,10 @@ void policy_mgr_set_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc,
 	for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS;
 			conn_index++) {
 		conn_info = &pm_conc_connection_list[conn_index];
-		if (conn_info->in_use && PM_SAP_MODE == conn_info->mode &&
+		if (conn_info->in_use && (PM_SAP_MODE == conn_info->mode ||
+					  PM_P2P_GO_MODE == conn_info->mode) &&
+		    policy_mgr_is_6ghz_conc_mode_supported(
+						psoc, conn_info->mode) &&
 		    vdev_id == conn_info->vdev_id) {
 			if (set)
 				conn_info->conn_6ghz_flag |= ap_6ghz_capable;
@@ -8117,7 +8120,10 @@ bool policy_mgr_get_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc,
 	for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS;
 			conn_index++) {
 		conn_info = &pm_conc_connection_list[conn_index];
-		if (conn_info->in_use && PM_SAP_MODE == conn_info->mode &&
+		if (conn_info->in_use && (PM_SAP_MODE == conn_info->mode ||
+					  PM_P2P_GO_MODE == conn_info->mode) &&
+		    policy_mgr_is_6ghz_conc_mode_supported(
+						psoc, conn_info->mode) &&
 		    vdev_id == conn_info->vdev_id) {
 			conn_6ghz_flag = conn_info->conn_6ghz_flag;
 			break;

+ 7 - 1
core/hdd/src/wlan_hdd_hostapd.c

@@ -3807,6 +3807,7 @@ uint32_t hdd_get_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 	struct sap_context *sap_context;
 	struct sap_config *sap_config;
 	uint32_t capable = 0;
+	enum policy_mgr_con_mode conn_mode;
 
 	if (!psoc) {
 		hdd_err("PSOC is NULL");
@@ -3826,11 +3827,16 @@ uint32_t hdd_get_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_HDD_ID_OBJ_MGR);
 		return 0;
 	}
-	if (ap_adapter->device_mode != QDF_SAP_MODE) {
+
+	conn_mode = policy_mgr_convert_device_mode_to_qdf_type(
+			ap_adapter->device_mode);
+	if ((conn_mode != PM_SAP_MODE && conn_mode != PM_P2P_GO_MODE) ||
+	    !policy_mgr_is_6ghz_conc_mode_supported(psoc, conn_mode)) {
 		hdd_err("unexpected device mode %d", ap_adapter->device_mode);
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_HDD_ID_OBJ_MGR);
 		return 0;
 	}
+
 	ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(ap_adapter);
 	sap_config = &ap_ctx->sap_config;
 	sap_context = ap_ctx->sap_context;