diff --git a/core/pld/inc/pld_common.h b/core/pld/inc/pld_common.h index 49e2db6f98b9..4bd77e8eff1b 100644 --- a/core/pld/inc/pld_common.h +++ b/core/pld/inc/pld_common.h @@ -156,6 +156,8 @@ struct pld_uevent_data { union { struct { bool crashed; + void *hang_event_data; + u16 hang_event_data_len; } fw_down; }; }; diff --git a/core/pld/src/pld_snoc.c b/core/pld/src/pld_snoc.c index df9b160eee19..2e7998db1f05 100644 --- a/core/pld/src/pld_snoc.c +++ b/core/pld/src/pld_snoc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2020 The Linux Foundation. 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 @@ -240,12 +240,31 @@ static int pld_snoc_resume_noirq(struct device *dev) return 0; } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)) +static int pld_update_hang_evt_data(struct icnss_uevent_fw_down_data *evt_data, + struct pld_uevent_data *data) +{ + if (!evt_data || !data) + return -EINVAL; + + data->fw_down.hang_event_data = evt_data->hang_event_data; + data->fw_down.hang_event_data_len = evt_data->hang_event_data_len; + return 0; +} +#else +static int pld_update_hang_evt_data(struct icnss_uevent_fw_down_data *evt_data, + struct pld_uevent_data *data) +{ + return 0; +} +#endif + static int pld_snoc_uevent(struct device *dev, struct icnss_uevent_data *uevent) { struct pld_context *pld_context; struct icnss_uevent_fw_down_data *uevent_data = NULL; - struct pld_uevent_data data; + struct pld_uevent_data data = {0}; pld_context = pld_get_global_context(); if (!pld_context) @@ -267,6 +286,7 @@ static int pld_snoc_uevent(struct device *dev, uevent_data = (struct icnss_uevent_fw_down_data *)uevent->data; data.uevent = PLD_FW_DOWN; data.fw_down.crashed = uevent_data->crashed; + pld_update_hang_evt_data(uevent_data, &data); break; default: goto out;