mirror of https://gitee.com/openkylin/linux.git
wil6210: get suspend reject reason and resume triggers from FW
Upon receiving suspend reject, print reject reason. Upon receiving resume event, print resume triggers. Signed-off-by: Lazar Alexei <qca_ailizaro@qca.qualcomm.com> Signed-off-by: Maya Erez <qca_merez@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
51a5870949
commit
6804cd101c
|
@ -2043,6 +2043,16 @@ void wmi_event_flush(struct wil6210_priv *wil)
|
|||
spin_unlock_irqrestore(&wil->wmi_ev_lock, flags);
|
||||
}
|
||||
|
||||
static const char *suspend_status2name(u8 status)
|
||||
{
|
||||
switch (status) {
|
||||
case WMI_TRAFFIC_SUSPEND_REJECTED_LINK_NOT_IDLE:
|
||||
return "LINK_NOT_IDLE";
|
||||
default:
|
||||
return "Untracked status";
|
||||
}
|
||||
}
|
||||
|
||||
int wmi_suspend(struct wil6210_priv *wil)
|
||||
{
|
||||
int rc;
|
||||
|
@ -2058,7 +2068,7 @@ int wmi_suspend(struct wil6210_priv *wil)
|
|||
wil->suspend_resp_rcvd = false;
|
||||
wil->suspend_resp_comp = false;
|
||||
|
||||
reply.evt.status = WMI_TRAFFIC_SUSPEND_REJECTED;
|
||||
reply.evt.status = WMI_TRAFFIC_SUSPEND_REJECTED_LINK_NOT_IDLE;
|
||||
|
||||
rc = wmi_call(wil, WMI_TRAFFIC_SUSPEND_CMDID, &cmd, sizeof(cmd),
|
||||
WMI_TRAFFIC_SUSPEND_EVENTID, &reply, sizeof(reply),
|
||||
|
@ -2090,8 +2100,9 @@ int wmi_suspend(struct wil6210_priv *wil)
|
|||
}
|
||||
|
||||
wil_dbg_wmi(wil, "suspend_response_completed rcvd\n");
|
||||
if (reply.evt.status == WMI_TRAFFIC_SUSPEND_REJECTED) {
|
||||
wil_dbg_pm(wil, "device rejected the suspend\n");
|
||||
if (reply.evt.status != WMI_TRAFFIC_SUSPEND_APPROVED) {
|
||||
wil_dbg_pm(wil, "device rejected the suspend, %s\n",
|
||||
suspend_status2name(reply.evt.status));
|
||||
wil->suspend_stats.rejected_by_device++;
|
||||
}
|
||||
rc = reply.evt.status;
|
||||
|
@ -2103,21 +2114,50 @@ int wmi_suspend(struct wil6210_priv *wil)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static void resume_triggers2string(u32 triggers, char *string, int str_size)
|
||||
{
|
||||
string[0] = '\0';
|
||||
|
||||
if (!triggers) {
|
||||
strlcat(string, " UNKNOWN", str_size);
|
||||
return;
|
||||
}
|
||||
|
||||
if (triggers & WMI_RESUME_TRIGGER_HOST)
|
||||
strlcat(string, " HOST", str_size);
|
||||
|
||||
if (triggers & WMI_RESUME_TRIGGER_UCAST_RX)
|
||||
strlcat(string, " UCAST_RX", str_size);
|
||||
|
||||
if (triggers & WMI_RESUME_TRIGGER_BCAST_RX)
|
||||
strlcat(string, " BCAST_RX", str_size);
|
||||
|
||||
if (triggers & WMI_RESUME_TRIGGER_WMI_EVT)
|
||||
strlcat(string, " WMI_EVT", str_size);
|
||||
}
|
||||
|
||||
int wmi_resume(struct wil6210_priv *wil)
|
||||
{
|
||||
int rc;
|
||||
char string[100];
|
||||
struct {
|
||||
struct wmi_cmd_hdr wmi;
|
||||
struct wmi_traffic_resume_event evt;
|
||||
} __packed reply;
|
||||
|
||||
reply.evt.status = WMI_TRAFFIC_RESUME_FAILED;
|
||||
reply.evt.resume_triggers = WMI_RESUME_TRIGGER_UNKNOWN;
|
||||
|
||||
rc = wmi_call(wil, WMI_TRAFFIC_RESUME_CMDID, NULL, 0,
|
||||
WMI_TRAFFIC_RESUME_EVENTID, &reply, sizeof(reply),
|
||||
WIL_WAIT_FOR_SUSPEND_RESUME_COMP);
|
||||
if (rc)
|
||||
return rc;
|
||||
resume_triggers2string(le32_to_cpu(reply.evt.resume_triggers), string,
|
||||
sizeof(string));
|
||||
wil_dbg_pm(wil, "device resume %s, resume triggers:%s (0x%x)\n",
|
||||
reply.evt.status ? "failed" : "passed", string,
|
||||
le32_to_cpu(reply.evt.resume_triggers));
|
||||
|
||||
return reply.evt.status;
|
||||
}
|
||||
|
|
|
@ -2267,8 +2267,8 @@ struct wmi_link_maintain_cfg_read_done_event {
|
|||
} __packed;
|
||||
|
||||
enum wmi_traffic_suspend_status {
|
||||
WMI_TRAFFIC_SUSPEND_APPROVED = 0x0,
|
||||
WMI_TRAFFIC_SUSPEND_REJECTED = 0x1,
|
||||
WMI_TRAFFIC_SUSPEND_APPROVED = 0x0,
|
||||
WMI_TRAFFIC_SUSPEND_REJECTED_LINK_NOT_IDLE = 0x1,
|
||||
};
|
||||
|
||||
/* WMI_TRAFFIC_SUSPEND_EVENTID */
|
||||
|
@ -2282,10 +2282,21 @@ enum wmi_traffic_resume_status {
|
|||
WMI_TRAFFIC_RESUME_FAILED = 0x1,
|
||||
};
|
||||
|
||||
enum wmi_resume_trigger {
|
||||
WMI_RESUME_TRIGGER_UNKNOWN = 0x0,
|
||||
WMI_RESUME_TRIGGER_HOST = 0x1,
|
||||
WMI_RESUME_TRIGGER_UCAST_RX = 0x2,
|
||||
WMI_RESUME_TRIGGER_BCAST_RX = 0x4,
|
||||
WMI_RESUME_TRIGGER_WMI_EVT = 0x8,
|
||||
};
|
||||
|
||||
/* WMI_TRAFFIC_RESUME_EVENTID */
|
||||
struct wmi_traffic_resume_event {
|
||||
/* enum wmi_traffic_resume_status_e */
|
||||
/* enum wmi_traffic_resume_status */
|
||||
u8 status;
|
||||
u8 reserved[3];
|
||||
/* enum wmi_resume_trigger bitmap */
|
||||
__le32 resume_triggers;
|
||||
} __packed;
|
||||
|
||||
/* Power Save command completion status codes */
|
||||
|
|
Loading…
Reference in New Issue