Merge "icnss: Show rejuvenation info in ICNSS stats report"
This commit is contained in:
commit
539f7638fa
1 changed files with 83 additions and 0 deletions
|
@ -365,6 +365,7 @@ struct icnss_stats {
|
|||
uint32_t vbatt_req;
|
||||
uint32_t vbatt_resp;
|
||||
uint32_t vbatt_req_err;
|
||||
u32 rejuvenate_ind;
|
||||
uint32_t rejuvenate_ack_req;
|
||||
uint32_t rejuvenate_ack_resp;
|
||||
uint32_t rejuvenate_ack_err;
|
||||
|
@ -456,6 +457,10 @@ static struct icnss_priv {
|
|||
struct icnss_wlan_mac_addr wlan_mac_addr;
|
||||
bool bypass_s1_smmu;
|
||||
struct mutex dev_lock;
|
||||
u8 cause_for_rejuvenation;
|
||||
u8 requesting_sub_system;
|
||||
u16 line_number;
|
||||
char function_name[QMI_WLFW_FUNCTION_NAME_LEN_V01 + 1];
|
||||
} *penv;
|
||||
|
||||
#ifdef CONFIG_ICNSS_DEBUG
|
||||
|
@ -1691,6 +1696,60 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int icnss_decode_rejuvenate_ind(void *msg, unsigned int msg_len)
|
||||
{
|
||||
struct msg_desc ind_desc;
|
||||
struct wlfw_rejuvenate_ind_msg_v01 ind_msg;
|
||||
int ret = 0;
|
||||
|
||||
if (!penv || !penv->wlfw_clnt) {
|
||||
ret = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
||||
memset(&ind_msg, 0, sizeof(ind_msg));
|
||||
|
||||
ind_desc.msg_id = QMI_WLFW_REJUVENATE_IND_V01;
|
||||
ind_desc.max_msg_len = WLFW_REJUVENATE_IND_MSG_V01_MAX_MSG_LEN;
|
||||
ind_desc.ei_array = wlfw_rejuvenate_ind_msg_v01_ei;
|
||||
|
||||
ret = qmi_kernel_decode(&ind_desc, &ind_msg, msg, msg_len);
|
||||
if (ret < 0) {
|
||||
icnss_pr_err("Failed to decode rejuvenate ind message: ret %d, msg_len %u\n",
|
||||
ret, msg_len);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (ind_msg.cause_for_rejuvenation_valid)
|
||||
penv->cause_for_rejuvenation = ind_msg.cause_for_rejuvenation;
|
||||
else
|
||||
penv->cause_for_rejuvenation = 0;
|
||||
if (ind_msg.requesting_sub_system_valid)
|
||||
penv->requesting_sub_system = ind_msg.requesting_sub_system;
|
||||
else
|
||||
penv->requesting_sub_system = 0;
|
||||
if (ind_msg.line_number_valid)
|
||||
penv->line_number = ind_msg.line_number;
|
||||
else
|
||||
penv->line_number = 0;
|
||||
if (ind_msg.function_name_valid)
|
||||
memcpy(penv->function_name, ind_msg.function_name,
|
||||
QMI_WLFW_FUNCTION_NAME_LEN_V01 + 1);
|
||||
else
|
||||
memset(penv->function_name, 0,
|
||||
QMI_WLFW_FUNCTION_NAME_LEN_V01 + 1);
|
||||
|
||||
icnss_pr_info("Cause for rejuvenation: 0x%x, requesting sub-system: 0x%x, line number: %u, function name: %s\n",
|
||||
penv->cause_for_rejuvenation,
|
||||
penv->requesting_sub_system,
|
||||
penv->line_number,
|
||||
penv->function_name);
|
||||
|
||||
penv->stats.rejuvenate_ind++;
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int wlfw_rejuvenate_ack_send_sync_msg(struct icnss_priv *priv)
|
||||
{
|
||||
int ret;
|
||||
|
@ -1884,6 +1943,7 @@ static void icnss_qmi_wlfw_clnt_ind(struct qmi_handle *handle,
|
|||
msg_id, penv->state);
|
||||
|
||||
icnss_ignore_qmi_timeout(true);
|
||||
icnss_decode_rejuvenate_ind(msg, msg_len);
|
||||
event_data = kzalloc(sizeof(*event_data), GFP_KERNEL);
|
||||
if (event_data == NULL)
|
||||
return;
|
||||
|
@ -3786,6 +3846,26 @@ static int icnss_stats_show_capability(struct seq_file *s,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int icnss_stats_show_rejuvenate_info(struct seq_file *s,
|
||||
struct icnss_priv *priv)
|
||||
{
|
||||
if (priv->stats.rejuvenate_ind) {
|
||||
seq_puts(s, "\n<---------------- Rejuvenate Info ----------------->\n");
|
||||
seq_printf(s, "Number of Rejuvenations: %u\n",
|
||||
priv->stats.rejuvenate_ind);
|
||||
seq_printf(s, "Cause for Rejuvenation: 0x%x\n",
|
||||
priv->cause_for_rejuvenation);
|
||||
seq_printf(s, "Requesting Sub-System: 0x%x\n",
|
||||
priv->requesting_sub_system);
|
||||
seq_printf(s, "Line Number: %u\n",
|
||||
priv->line_number);
|
||||
seq_printf(s, "Function Name: %s\n",
|
||||
priv->function_name);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int icnss_stats_show_events(struct seq_file *s, struct icnss_priv *priv)
|
||||
{
|
||||
int i;
|
||||
|
@ -3851,6 +3931,7 @@ static int icnss_stats_show(struct seq_file *s, void *data)
|
|||
ICNSS_STATS_DUMP(s, priv, vbatt_req);
|
||||
ICNSS_STATS_DUMP(s, priv, vbatt_resp);
|
||||
ICNSS_STATS_DUMP(s, priv, vbatt_req_err);
|
||||
ICNSS_STATS_DUMP(s, priv, rejuvenate_ind);
|
||||
ICNSS_STATS_DUMP(s, priv, rejuvenate_ack_req);
|
||||
ICNSS_STATS_DUMP(s, priv, rejuvenate_ack_resp);
|
||||
ICNSS_STATS_DUMP(s, priv, rejuvenate_ack_err);
|
||||
|
@ -3875,6 +3956,8 @@ static int icnss_stats_show(struct seq_file *s, void *data)
|
|||
|
||||
icnss_stats_show_capability(s, priv);
|
||||
|
||||
icnss_stats_show_rejuvenate_info(s, priv);
|
||||
|
||||
icnss_stats_show_events(s, priv);
|
||||
|
||||
icnss_stats_show_state(s, priv);
|
||||
|
|
Loading…
Add table
Reference in a new issue