소스 검색

Merge "qcacld-3.0: Restrict PLD event as per the driver state" into wlan-cld3.driver.lnx.2.0

CNSS_WLAN Service 7 년 전
부모
커밋
b910c4de0d
1개의 변경된 파일53개의 추가작업 그리고 8개의 파일을 삭제
  1. 53 8
      core/hdd/src/wlan_hdd_driver_ops.c

+ 53 - 8
core/hdd/src/wlan_hdd_driver_ops.c

@@ -1437,33 +1437,78 @@ static void wlan_hdd_purge_notifier(void)
 }
 
 /**
- * wlan_hdd_pld_uevent() - update driver status
- * @dev: device
+ * wlan_hdd_set_the_pld_uevent() - set the pld event
  * @uevent: uevent status
  *
  * Return: void
  */
-static void wlan_hdd_pld_uevent(struct device *dev,
-				struct pld_uevent_data *uevent)
+static void wlan_hdd_set_the_pld_uevent(struct pld_uevent_data *uevent)
 {
-
-	hdd_info("pld event %d", uevent->uevent);
 	switch (uevent->uevent) {
 	case PLD_RECOVERY:
 		cds_set_recovery_in_progress(true);
-		hdd_pld_ipa_uc_shutdown_pipes();
 		break;
 	case PLD_FW_DOWN:
 		cds_set_fw_state(CDS_FW_STATE_DOWN);
+		break;
+	case PLD_FW_READY:
+		cds_set_target_ready(true);
+		break;
+	}
+}
+
+/**
+ * wlan_hdd_handle_the_pld_uevent() - handle the pld event
+ * @uevent: uevent status
+ *
+ * Return: void
+ */
+static void wlan_hdd_handle_the_pld_uevent(struct pld_uevent_data *uevent)
+{
+	enum cds_driver_state driver_state;
+
+	driver_state = cds_get_driver_state();
+
+	if (driver_state == CDS_DRIVER_STATE_UNINITIALIZED)
+		return;
+
+	if (cds_is_driver_loading())
+		return;
+
+	switch (uevent->uevent) {
+	case PLD_RECOVERY:
+		hdd_pld_ipa_uc_shutdown_pipes();
+		break;
+	case PLD_FW_DOWN:
 		qdf_complete_wait_events();
 		cds_set_target_ready(false);
 		break;
 	case PLD_FW_READY:
-		cds_set_target_ready(true);
+	default:
 		break;
 	}
+}
+
+/**
+ * wlan_hdd_pld_uevent() - update driver status
+ * @dev: device
+ * @uevent: uevent status
+ *
+ * Return: void
+ */
+static void wlan_hdd_pld_uevent(struct device *dev,
+				struct pld_uevent_data *uevent)
+{
+	ENTER();
+	hdd_info("pld event %d", uevent->uevent);
+
+	mutex_lock(&hdd_init_deinit_lock);
+	wlan_hdd_set_the_pld_uevent(uevent);
+	wlan_hdd_handle_the_pld_uevent(uevent);
+	mutex_unlock(&hdd_init_deinit_lock);
 
 	wlan_hdd_purge_notifier();
+	EXIT();
 }
 
 #ifdef FEATURE_RUNTIME_PM