Эх сурвалжийг харах

qcacld-3.0: Update ini param g_auto_detect_power_failure_mode

Update ini param g_auto_detect_power_failure_mode to incorporate below
values,
0 - Don't register wow wakeup event and FW crashes on power failure
1 - Register wow wakeup event and FW sends failure event to host on
    power failure
2 - Don't register wow wakeup event and FW silently rejuvenate on
    power failure
3 - Don't register wow wakeup event and the auto power failure detect
    feature is disabled in FW.

Change-Id: I8a704954ecbacadbc035c1523fa41a18b6300f66
CRs-Fixed: 2087144
Hanumanth Reddy Pothula 7 жил өмнө
parent
commit
a9dd0d6dd2

+ 16 - 1
pmo/core/src/wlan_pmo_static_config.c

@@ -37,16 +37,31 @@ void pmo_register_wow_wakeup_events(struct wlan_objmgr_vdev *vdev)
 	uint8_t vdev_id;
 	enum tQDF_ADAPTER_MODE  vdev_opmode;
 	const char *iface_type;
+	struct pmo_psoc_priv_obj *psoc_ctx;
+	pmo_is_device_in_low_pwr_mode is_low_pwr_mode;
 
 	vdev_opmode = pmo_get_vdev_opmode(vdev);
 	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("vdev_opmode %d vdev_id %d", vdev_opmode, vdev_id);
 
 	switch (vdev_opmode) {
+	case QDF_STA_MODE:
 	case QDF_P2P_CLIENT_MODE:
+		/* set power on failure event only for STA and P2P_CLI mode*/
+		psoc_ctx =  pmo_vdev_get_psoc_priv(vdev);
+		if (psoc_ctx->psoc_cfg.auto_power_save_fail_mode ==
+		    PMO_FW_TO_SEND_WOW_IND_ON_PWR_FAILURE){
+			qdf_spin_lock(&psoc_ctx->lock);
+			is_low_pwr_mode = psoc_ctx->is_device_in_low_pwr_mode;
+			qdf_spin_unlock(&psoc_ctx->lock);
+			if (is_low_pwr_mode && is_low_pwr_mode(vdev_id))
+				pmo_set_wow_event_bitmap(
+					WOW_CHIP_POWER_FAILURE_DETECT_EVENT,
+					PMO_WOW_MAX_EVENT_BM_LEN,
+					event_bitmap);
+		}
 	case QDF_P2P_DEVICE_MODE:
 	case QDF_OCB_MODE:
-	case QDF_STA_MODE:
 	case QDF_MONITOR_MODE:
 		iface_type = "STA";
 		pmo_set_sta_wow_bitmask(event_bitmap, PMO_WOW_MAX_EVENT_BM_LEN);

+ 2 - 1
pmo/core/src/wlan_pmo_suspend_resume.c

@@ -256,7 +256,8 @@ void pmo_core_configure_dynamic_wake_events(struct wlan_objmgr_psoc *psoc)
 
 		psoc_ctx = pmo_psoc_get_priv(psoc);
 
-		if (psoc_ctx->psoc_cfg.auto_power_save_fail_mode &&
+		if (psoc_ctx->psoc_cfg.auto_power_save_fail_mode ==
+		     PMO_FW_TO_SEND_WOW_IND_ON_PWR_FAILURE &&
 		    (adapter_type == QDF_STA_MODE ||
 		     adapter_type == QDF_P2P_CLIENT_MODE)
 		   ) {

+ 19 - 1
pmo/dispatcher/inc/wlan_pmo_common_public_struct.h

@@ -239,6 +239,24 @@ enum pmo_offload_trigger {
 	pmo_offload_trigger_max,
 };
 
+/**
+ * enum pmo_auto_pwr_detect_failure_mode_t - auto detect failure modes
+ * @PMO_FW_TO_CRASH_ON_PWR_FAILURE: Don't register wow wakeup event and FW
+ * crashes on power failure
+ * @PMO_FW_TO_SEND_WOW_IND_ON_PWR_FAILURE: Register wow wakeup event and FW
+ * sends failure event to host on power failure
+ * @PMO_FW_TO_REJUVENATE_ON_PWR_FAILURE: Don't register wow wakeup event and
+ * FW silently rejuvenate on power failure
+ * @PMO_AUTO_PWR_FAILURE_DETECT_DISABLE: Don't register wow wakeup event and the
+ * auto power failure detect feature is disabled in FW.
+ */
+enum pmo_auto_pwr_detect_failure_mode {
+	PMO_FW_TO_CRASH_ON_PWR_FAILURE,
+	PMO_FW_TO_SEND_WOW_IND_ON_PWR_FAILURE,
+	PMO_FW_TO_REJUVENATE_ON_PWR_FAILURE,
+	PMO_AUTO_PWR_FAILURE_DETECT_DISABLE
+};
+
 /**
  * struct pmo_psoc_cfg - user configuration required for pmo
  * @ptrn_match_enable_all_vdev: true when pattern match is enable for all vdev
@@ -293,7 +311,7 @@ struct pmo_psoc_cfg {
 	uint8_t sta_mod_dtim;
 	uint8_t sta_max_li_mod_dtim;
 	uint8_t power_save_mode;
-	bool auto_power_save_fail_mode;
+	enum pmo_auto_pwr_detect_failure_mode auto_power_save_fail_mode;
 };
 
 #endif /* end  of _WLAN_PMO_COMMONP_STRUCT_H_ */