Przeglądaj źródła

qcacld-3.0: Print wow_nack reason code

Currently, Fw did not set NACK reason code
to Host when Fw is not ready for WoW.

As part of the new change, Fw will send NACK
reason code along with WoW NACK to host.
Make changes in host to store and print
NACK reason code.

Change-Id: Ic978af9572c8de37df3fb926083aac5e6ddefda7
CRs-Fixed: 3481177
Amit Mehta 3 lat temu
rodzic
commit
c6ad6f2fe0

+ 3 - 1
components/pmo/core/inc/wlan_pmo_suspend_resume.h

@@ -397,10 +397,12 @@ int pmo_core_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc);
  * pmo_core_psoc_target_suspend_acknowledge() - update target susspend status
  * @context: HTC_INIT_INFO->context
  * @wow_nack: true when wow is rejected
+ * @reason_code : WoW status reason code
  *
  * Return: none
  */
-void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack);
+void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
+					      uint16_t reason_code);
 
 /**
  * pmo_core_psoc_wakeup_host_event_received() - received host wake up event

+ 23 - 1
components/pmo/core/inc/wlan_pmo_wow.h

@@ -423,14 +423,17 @@ bool pmo_core_is_wow_enabled(struct pmo_psoc_priv_obj *psoc_ctx)
  * pmo_core_set_wow_nack() - Set wow nack flag
  * @psoc_ctx: Pointer to objmgr psoc handle
  * @value: true if received wow nack from else false
+ * @reason_code: WoW status reason code
  *
  * Return: None
  */
 static inline
-void pmo_core_set_wow_nack(struct pmo_psoc_priv_obj *psoc_ctx, bool value)
+void pmo_core_set_wow_nack(struct pmo_psoc_priv_obj *psoc_ctx, bool value,
+			   uint16_t reason_code)
 {
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	psoc_ctx->wow.wow_nack = value;
+	psoc_ctx->wow.reason_code = reason_code;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
 }
 
@@ -451,6 +454,25 @@ bool pmo_core_get_wow_nack(struct pmo_psoc_priv_obj *psoc_ctx)
 
 	return value;
 }
+
+/**
+ * pmo_core_get_wow_reason_code() - Get wow status reason code
+ * @psoc_ctx: Pointer to objmgr psoc handle
+ *
+ * Return: wow status reason code
+ */
+static inline
+uint16_t pmo_core_get_wow_reason_code(struct pmo_psoc_priv_obj *psoc_ctx)
+{
+	uint16_t value;
+
+	qdf_spin_lock_bh(&psoc_ctx->lock);
+	value = psoc_ctx->wow.reason_code;
+	qdf_spin_unlock_bh(&psoc_ctx->lock);
+
+	return value;
+}
+
 /**
  * pmo_core_update_wow_enable_cmd_sent() - update wow enable cmd sent flag
  * @psoc_ctx: Pointer to objmgr psoc handle

+ 7 - 4
components/pmo/core/src/wlan_pmo_suspend_resume.c

@@ -731,10 +731,11 @@ pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
 	struct pmo_psoc_cfg *psoc_cfg = &psoc_ctx->psoc_cfg;
 	QDF_STATUS status;
 	void *hif_ctx;
+	uint16_t reason_code;
 
 	hif_ctx = pmo_core_psoc_get_hif_handle(psoc);
 	qdf_event_reset(&psoc_ctx->wow.target_suspend);
-	pmo_core_set_wow_nack(psoc_ctx, false);
+	pmo_core_set_wow_nack(psoc_ctx, false, 0);
 	host_credits = pmo_tgt_psoc_get_host_credits(psoc);
 	wmi_pending_cmds = pmo_tgt_psoc_get_pending_cmnds(psoc);
 	pmo_debug("Credits:%d; Pending_Cmds: %d",
@@ -851,7 +852,8 @@ pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
 	}
 
 	if (pmo_core_get_wow_nack(psoc_ctx)) {
-		pmo_err("FW not ready to WOW");
+		reason_code = pmo_core_get_wow_reason_code(psoc_ctx);
+		pmo_err("FW not ready to WOW reason code: %d", reason_code);
 		pmo_tgt_update_target_suspend_flag(psoc, false);
 		status = QDF_STATUS_E_AGAIN;
 		goto out;
@@ -1496,7 +1498,8 @@ out:
 	return status;
 }
 
-void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
+void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
+					      uint16_t reason_code)
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
 	struct wlan_objmgr_psoc *psoc = (struct wlan_objmgr_psoc *)context;
@@ -1516,7 +1519,7 @@ void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
 
 	psoc_ctx = pmo_psoc_get_priv(psoc);
 
-	pmo_core_set_wow_nack(psoc_ctx, wow_nack);
+	pmo_core_set_wow_nack(psoc_ctx, wow_nack, reason_code);
 	qdf_event_set(&psoc_ctx->wow.target_suspend);
 	if (!pmo_tgt_psoc_get_runtime_pm_in_progress(psoc)) {
 		if (wow_nack)

+ 5 - 2
components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h

@@ -1074,10 +1074,12 @@ int ucfg_pmo_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc);
  * ucfg_pmo_psoc_target_suspend_acknowledge() - Clear initial wake up status
  * @context: caller-provided context
  * @wow_nack: Was WoW NACK'ed
+ * @reason_code: WoW status reason code
  *
  * Return: None
  */
-void ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack);
+void ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
+					      uint16_t reason_code);
 
 /**
  * ucfg_pmo_psoc_wakeup_host_event_received() - got host wake up evennt from fwr
@@ -1890,7 +1892,8 @@ ucfg_pmo_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc)
 }
 
 static inline void
-ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
+ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
+					 uint16_t reason_code)
 {
 }
 

+ 3 - 1
components/pmo/dispatcher/inc/wlan_pmo_wow_public_struct.h

@@ -224,6 +224,7 @@ enum pmo_wow_state {
  * @target_suspend: target suspend event
  * @target_resume: target resume event
  * @wow_nack: wow negative ack flag
+ * @reason_code : wow status reason code
  * @wow_initial_wake_up: target initial wake up is received
  * @wow_wake_lock: wow wake lock
  * @lphb_cache: lphb cache
@@ -245,7 +246,8 @@ struct pmo_wow {
 	enum pmo_wow_state wow_state;
 	qdf_event_t target_suspend;
 	qdf_event_t target_resume;
-	int wow_nack;
+	bool wow_nack;
+	uint16_t reason_code;
 	atomic_t wow_initial_wake_up;
 	qdf_wake_lock_t wow_wake_lock;
 	/*

+ 4 - 2
components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c

@@ -525,9 +525,11 @@ int ucfg_pmo_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc)
 	return pmo_core_psoc_clear_target_wake_up(psoc);
 }
 
-void ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
+void ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
+					      uint16_t reason_code)
 {
-	pmo_core_psoc_target_suspend_acknowledge(context, wow_nack);
+	pmo_core_psoc_target_suspend_acknowledge(context, wow_nack,
+						 reason_code);
 }
 
 void ucfg_pmo_psoc_wakeup_host_event_received(struct wlan_objmgr_psoc *psoc)