qcacld-3.0: Add code to handle hang event data via ICNSS_UEVENT_HANG_DATA

Add code to handle hang event data via ICNSS_UEVENT_HANG_DATA
uevent.

Change-Id: Ic423b47177922bbb6634d2ad143f93cd1961dda7
CRs-Fixed: 2665604
This commit is contained in:
Mohammed Siddiq
2020-04-11 16:26:57 +05:30
committed by nshrivas
parent 3f7c4bf3f4
commit 0865e3866f
2 changed files with 19 additions and 9 deletions

View File

@@ -144,6 +144,7 @@ enum pld_uevent {
PLD_FW_DOWN,
PLD_FW_CRASHED,
PLD_FW_RECOVERY_START,
PLD_FW_HANG_EVENT,
};
/**
@@ -156,9 +157,11 @@ struct pld_uevent_data {
union {
struct {
bool crashed;
} fw_down;
struct {
void *hang_event_data;
u16 hang_event_data_len;
} fw_down;
} hang_data;
};
};

View File

@@ -241,18 +241,18 @@ static int pld_snoc_resume_noirq(struct device *dev)
}
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
static int pld_update_hang_evt_data(struct icnss_uevent_fw_down_data *evt_data,
static int pld_update_hang_evt_data(struct icnss_uevent_hang_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;
data->hang_data.hang_event_data = evt_data->hang_event_data;
data->hang_data.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,
static int pld_update_hang_evt_data(struct icnss_uevent_hang_data *evt_data,
struct pld_uevent_data *data)
{
return 0;
@@ -263,7 +263,8 @@ 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 icnss_uevent_fw_down_data *fw_down_data = NULL;
struct icnss_uevent_hang_data *hang_data = NULL;
struct pld_uevent_data data = {0};
pld_context = pld_get_global_context();
@@ -283,10 +284,16 @@ static int pld_snoc_uevent(struct device *dev,
case ICNSS_UEVENT_FW_DOWN:
if (!uevent->data)
return -EINVAL;
uevent_data = (struct icnss_uevent_fw_down_data *)uevent->data;
fw_down_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);
data.fw_down.crashed = fw_down_data->crashed;
break;
case ICNSS_UEVENT_HANG_DATA:
if (!uevent->data)
return -EINVAL;
hang_data = (struct icnss_uevent_hang_data *)uevent->data;
data.uevent = PLD_FW_HANG_EVENT;
pld_update_hang_evt_data(hang_data, &data);
break;
default:
goto out;