Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc563469 authored by Amit Mehta's avatar Amit Mehta
Browse files

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
parent 88566769
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2017-2018, 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
@@ -290,10 +291,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
+24 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2017-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
@@ -421,14 +422,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);
}

@@ -449,6 +453,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
+8 −5
Original line number Diff line number Diff line
/*
 * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
 * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
 * Copyright (c) 2022-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
@@ -735,12 +735,13 @@ 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;

	pmo_enter();

	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",
@@ -847,7 +848,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;
@@ -1514,7 +1516,8 @@ QDF_STATUS pmo_core_psoc_bus_resume_req(struct wlan_objmgr_psoc *psoc,
	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;
@@ -1535,7 +1538,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)
+8 −3
Original line number Diff line number Diff line
/*
 * Copyright (c) 2017-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
@@ -993,11 +994,14 @@ int ucfg_pmo_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc);

/**
 * ucfg_pmo_psoc_target_suspend_acknowledge() - Clear initial wake up status
 * @psoc: objmgr psoc handle
 * @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
@@ -1665,7 +1669,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)
{
}

+4 −2
Original line number Diff line number Diff line
/*
 * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
 * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
 * Copyright (c) 2022-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
@@ -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;
	/*
Loading