From e7ad20af9a4e6466d6cd3a4d26d13780c63c3b87 Mon Sep 17 00:00:00 2001 From: Anurag Chouhan Date: Thu, 30 Aug 2018 14:29:14 +0530 Subject: [PATCH] icnss: Add a flag to indicare FW rejuvenate Add a flag to maintain fw rejuvenate state, set if fw rejuvenate happens and reset at fw ready. export an API to the wlan host driver to distinguish the case of ssr or pdr with the FW rejuventae. Change-Id: I7a01cc4996f68f78aa13eacf36648331a701882a Signed-off-by: Anurag Chouhan --- drivers/soc/qcom/icnss.c | 14 ++++++++++++++ include/soc/qcom/icnss.h | 1 + 2 files changed, 15 insertions(+) diff --git a/drivers/soc/qcom/icnss.c b/drivers/soc/qcom/icnss.c index 1fc891b06016..d56fb48b0d43 100644 --- a/drivers/soc/qcom/icnss.c +++ b/drivers/soc/qcom/icnss.c @@ -298,6 +298,7 @@ enum icnss_driver_state { ICNSS_HOST_TRIGGERED_PDR, ICNSS_FW_DOWN, ICNSS_DRIVER_UNLOADING, + ICNSS_REJUVENATE, }; struct ce_irq_list { @@ -1187,6 +1188,14 @@ bool icnss_is_fw_down(void) } EXPORT_SYMBOL(icnss_is_fw_down); +bool icnss_is_rejuvenate(void) +{ + if (!penv) + return false; + else + return test_bit(ICNSS_REJUVENATE, &penv->state); +} +EXPORT_SYMBOL(icnss_is_rejuvenate); int icnss_power_off(struct device *dev) { @@ -2007,6 +2016,7 @@ static void icnss_qmi_wlfw_clnt_ind(struct qmi_handle *handle, event_data->crashed = true; event_data->fw_rejuvenate = true; fw_down_data.crashed = true; + set_bit(ICNSS_REJUVENATE, &penv->state); icnss_call_driver_uevent(penv, ICNSS_UEVENT_FW_DOWN, &fw_down_data); icnss_driver_event_post(ICNSS_DRIVER_EVENT_PD_SERVICE_DOWN, @@ -2191,6 +2201,7 @@ static int icnss_pd_restart_complete(struct icnss_priv *priv) icnss_call_driver_shutdown(priv); + clear_bit(ICNSS_REJUVENATE, &penv->state); clear_bit(ICNSS_PD_RESTART, &priv->state); if (!priv->ops || !priv->ops->reinit) @@ -3903,6 +3914,9 @@ static int icnss_stats_show_state(struct seq_file *s, struct icnss_priv *priv) case ICNSS_FW_DOWN: seq_puts(s, "FW DOWN"); continue; + case ICNSS_REJUVENATE: + seq_puts(s, "FW REJUVENATE"); + continue; case ICNSS_DRIVER_UNLOADING: seq_puts(s, "DRIVER UNLOADING"); } diff --git a/include/soc/qcom/icnss.h b/include/soc/qcom/icnss.h index ae8834d3fe54..85ec8beb3157 100644 --- a/include/soc/qcom/icnss.h +++ b/include/soc/qcom/icnss.h @@ -153,6 +153,7 @@ extern int icnss_wlan_get_dfs_nol(void *info, u16 info_len); extern bool icnss_is_qmi_disable(struct device *dev); extern bool icnss_is_fw_ready(void); extern bool icnss_is_fw_down(void); +extern bool icnss_is_rejuvenate(void); extern int icnss_set_wlan_mac_address(const u8 *in, const uint32_t len); extern u8 *icnss_get_wlan_mac_address(struct device *dev, uint32_t *num); extern int icnss_trigger_recovery(struct device *dev); -- 2.11.0