소스 검색

qcacmn: Disable obss scan for all vdevs in LPM case

Disable obss scan for all vdevs under each pdev
when try to suspend, not just only disable the first one.

Change-Id: I52e46f43727acf004165f39a262b018dc174cc7f
CRs-Fixed: 3190706
Chaoli Zhou 3 년 전
부모
커밋
afbf38079c
1개의 변경된 파일29개의 추가작업 그리고 15개의 파일을 삭제
  1. 29 15
      umac/scan/core/src/wlan_scan_manager.c

+ 29 - 15
umac/scan/core/src/wlan_scan_manager.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2022 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
@@ -1731,6 +1731,9 @@ void scm_disable_obss_pdev_scan(struct wlan_objmgr_psoc *psoc,
 	struct wlan_scan_obj *scan_obj;
 	struct scan_vdev_obj *scan_vdev_obj;
 	QDF_STATUS status;
+	struct wlan_objmgr_pdev_objmgr *pdev_objmgr;
+	qdf_list_t *vdev_list;
+	uint16_t index = 0;
 
 	scan_obj = wlan_psoc_get_scan_obj(psoc);
 	if (!scan_obj) {
@@ -1739,20 +1742,31 @@ void scm_disable_obss_pdev_scan(struct wlan_objmgr_psoc *psoc,
 	}
 
 	if (scan_obj->obss_scan_offload) {
-		vdev = wlan_objmgr_pdev_get_first_vdev(pdev, WLAN_SCAN_ID);
-		if (!vdev)
-			return;
-
-		scan_vdev_obj = wlan_get_vdev_scan_obj(vdev);
-		if (!scan_vdev_obj) {
-			scm_err("null scan_vdev_obj");
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_SCAN_ID);
-			return;
-		}
+		pdev_objmgr = &pdev->pdev_objmgr;
+
+		wlan_pdev_obj_lock(pdev);
+		vdev_list = &pdev_objmgr->wlan_vdev_list;
+		/* Get first vdev */
+		vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
+
+		while (vdev) {
+			scm_debug("wlan_vdev_list[%d]: %pK", index, vdev);
 
-		status = tgt_scan_obss_disable(vdev);
-		if (QDF_IS_STATUS_ERROR(status))
-			scm_err("disable obss scan failed");
-		wlan_objmgr_vdev_release_ref(vdev, WLAN_SCAN_ID);
+			scan_vdev_obj = wlan_get_vdev_scan_obj(vdev);
+			if (!scan_vdev_obj) {
+				scm_err("null scan_vdev_obj");
+				goto next;
+			}
+
+			status = tgt_scan_obss_disable(vdev);
+			if (QDF_IS_STATUS_ERROR(status))
+				scm_err("disable obss scan failed");
+next:
+			index++;
+			/* get next vdev */
+			vdev = wlan_vdev_get_next_vdev_of_pdev(vdev_list,
+							       vdev);
+		}
+		wlan_pdev_obj_unlock(pdev);
 	}
 }