Selaa lähdekoodia

qcacmn: Add if_mgr support to handle STA CSA

Add if_mgr support to handle STA CSA complete notification and
SAP CSA Started and complete notification.
Before CSA vdev restart on SAP side, disable TDLS off channel.
After CSA, check if TDLS is allowed for the current concurrency
and take action accordingly.

Change-Id: Icbadb898f5b468717f74f92a0993c05b59719205
CRs-Fixed: 3445113
Pragaspathi Thilagaraj 2 vuotta sitten
vanhempi
sitoutus
4c252e1598

+ 14 - 13
umac/cmn_services/interface_mgr/inc/wlan_if_mgr_ap.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -81,9 +81,8 @@ if_mgr_ap_stop_bss(struct wlan_objmgr_vdev *vdev,
 QDF_STATUS
 if_mgr_ap_stop_bss_complete(struct wlan_objmgr_vdev *vdev,
 			    struct if_mgr_event_data *event_data);
-#ifdef WLAN_FEATURE_P2P_P2P_STA
 /**
- * if_mgr_csa_complete() - CSA event complete handler
+ * if_mgr_ap_csa_complete() - CSA event complete handler
  * @vdev: vdev object
  * @event_data: Interface mgr event data
  *
@@ -94,16 +93,18 @@ if_mgr_ap_stop_bss_complete(struct wlan_objmgr_vdev *vdev,
  * Return: QDF_STATUS
  */
 QDF_STATUS
-if_mgr_csa_complete(struct wlan_objmgr_vdev *vdev,
-		    struct if_mgr_event_data *event_data);
-#else
-static inline QDF_STATUS
-if_mgr_csa_complete(struct wlan_objmgr_vdev *vdev,
-		    struct if_mgr_event_data *event_data)
-{
-	return QDF_STATUS_SUCCESS;
-}
-#endif
+if_mgr_ap_csa_complete(struct wlan_objmgr_vdev *vdev,
+		       struct if_mgr_event_data *event_data);
+
+/**
+ * if_mgr_ap_csa_start() - CSA start handler for SAP/P2P_GO
+ * @vdev: Pointer to vdev object
+ * @event_data: Interface manager event data
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS if_mgr_ap_csa_start(struct wlan_objmgr_vdev *vdev,
+			       struct if_mgr_event_data *event_data);
 
 #if defined WLAN_MBSS
 /**

+ 7 - 3
umac/cmn_services/interface_mgr/inc/wlan_if_mgr_public_struct.h

@@ -48,7 +48,9 @@
  * @WLAN_IF_MGR_EV_AP_STOP_HT40: Event to handle HT40 scan stop
  * @WLAN_IF_MGR_EV_AP_DONE_HT40: Event to handle HT40 scan completion
  * @WLAN_IF_MGR_EV_AP_CANCEL_HT40: Event to handle HT40 scan cancel
- * @WLAN_IF_MGR_EV_CSA_COMPLETE: Event to handle csa complete
+ * @WLAN_IF_MGR_EV_AP_CSA_START: Event to handle CSA start
+ * @WLAN_IF_MGR_EV_AP_CSA_COMPLETE: Event to handle csa complete
+ * @WLAN_IF_MGR_EV_STA_CSA_COMPLETE: Event to handle STA/P2P_CLI CSA completion
  * @WLAN_IF_MGR_EV_MAX: Max event
  */
 enum wlan_if_mgr_evt {
@@ -69,8 +71,10 @@ enum wlan_if_mgr_evt {
 	WLAN_IF_MGR_EV_AP_STOP_HT40 = 14,
 	WLAN_IF_MGR_EV_AP_DONE_HT40 = 15,
 	WLAN_IF_MGR_EV_AP_CANCEL_HT40 = 16,
-	WLAN_IF_MGR_EV_CSA_COMPLETE = 17,
-	WLAN_IF_MGR_EV_MAX = 18,
+	WLAN_IF_MGR_EV_AP_CSA_START = 17,
+	WLAN_IF_MGR_EV_AP_CSA_COMPLETE = 18,
+	WLAN_IF_MGR_EV_STA_CSA_COMPLETE = 19,
+	WLAN_IF_MGR_EV_MAX = 20,
 };
 
 /**

+ 15 - 0
umac/cmn_services/interface_mgr/inc/wlan_if_mgr_sta.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -93,4 +94,18 @@ QDF_STATUS if_mgr_disconnect_complete(struct wlan_objmgr_vdev *vdev,
 QDF_STATUS if_mgr_validate_candidate(struct wlan_objmgr_vdev *vdev,
 				     struct if_mgr_event_data *event_data);
 
+/**
+ * if_mgr_sta_csa_complete() - CSA event complete handler
+ * @vdev: vdev object
+ * @event_data: Interface mgr event data
+ *
+ * Interface manager csa complete event handler
+ *
+ * Context: It should run in thread context
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+if_mgr_sta_csa_complete(struct wlan_objmgr_vdev *vdev,
+			struct if_mgr_event_data *event_data);
 #endif

+ 12 - 4
umac/cmn_services/interface_mgr/src/wlan_if_mgr_core.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -50,7 +50,9 @@ const char *if_mgr_get_event_str(enum wlan_if_mgr_evt event)
 	CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_STOP_HT40);
 	CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_DONE_HT40);
 	CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_CANCEL_HT40);
-	CASE_RETURN_STRING(WLAN_IF_MGR_EV_CSA_COMPLETE);
+	CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_CSA_START);
+	CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_CSA_COMPLETE);
+	CASE_RETURN_STRING(WLAN_IF_MGR_EV_STA_CSA_COMPLETE);
 	default:
 		return "Unknown";
 	}
@@ -155,8 +157,14 @@ QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
 	case WLAN_IF_MGR_EV_VALIDATE_CANDIDATE:
 		status = if_mgr_validate_candidate(vdev, event_data);
 		break;
-	case WLAN_IF_MGR_EV_CSA_COMPLETE:
-		status = if_mgr_csa_complete(vdev, event_data);
+	case WLAN_IF_MGR_EV_AP_CSA_START:
+		status = if_mgr_ap_csa_start(vdev, event_data);
+		break;
+	case WLAN_IF_MGR_EV_AP_CSA_COMPLETE:
+		status = if_mgr_ap_csa_complete(vdev, event_data);
+		break;
+	case WLAN_IF_MGR_EV_STA_CSA_COMPLETE:
+		status = if_mgr_sta_csa_complete(vdev, event_data);
 		break;
 	default:
 		status = if_mgr_deliver_mbss_event(vdev, event, event_data);

+ 1 - 1
umac/mlme/connection_mgr/core/src/wlan_cm_connect.c

@@ -1093,7 +1093,7 @@ static void cm_teardown_tdls(struct wlan_objmgr_vdev *vdev)
 	if (!psoc)
 		return;
 
-	wlan_tdls_teardown_links_sync(psoc);
+	wlan_tdls_check_and_teardown_links_sync(psoc, vdev);
 }
 
 #else