Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e46b9576 authored by Yue Ma's avatar Yue Ma
Browse files

cnss2: Send WAKE MSI base data to firmware



Add the support to send WAKE MSI base data to firmware through
HOST_CAP_REQ QMI message so that firmware can use it to wake up
WLAN host driver.

Change-Id: Ief8bfb6c3746bc0bfd833aa3bded09212773244d
Signed-off-by: default avatarYue Ma <yuem@codeaurora.org>
parent 204bc357
Loading
Loading
Loading
Loading
+19 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,7 @@
#define FW_READY_TIMEOUT		20000
#define FW_READY_TIMEOUT		20000
#define FW_ASSERT_TIMEOUT		5000
#define FW_ASSERT_TIMEOUT		5000
#define CNSS_EVENT_PENDING		2989
#define CNSS_EVENT_PENDING		2989
#define WAKE_MSI_NAME			"WAKE"


static struct cnss_plat_data *plat_env;
static struct cnss_plat_data *plat_env;


@@ -537,6 +538,24 @@ int cnss_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
}
}
EXPORT_SYMBOL(cnss_set_fw_log_mode);
EXPORT_SYMBOL(cnss_set_fw_log_mode);


u32 cnss_get_wake_msi(struct cnss_plat_data *plat_priv)
{
	struct cnss_pci_data *pci_priv = plat_priv->bus_priv;
	int ret, num_vectors;
	u32 user_base_data, base_vector;

	ret = cnss_get_user_msi_assignment(&pci_priv->pci_dev->dev,
					   WAKE_MSI_NAME, &num_vectors,
					   &user_base_data, &base_vector);

	if (ret) {
		cnss_pr_err("WAKE MSI is not valid\n");
		return 0;
	}

	return user_base_data;
}

static int cnss_fw_mem_ready_hdlr(struct cnss_plat_data *plat_priv)
static int cnss_fw_mem_ready_hdlr(struct cnss_plat_data *plat_priv)
{
{
	int ret = 0;
	int ret = 0;
+1 −0
Original line number Original line Diff line number Diff line
@@ -220,5 +220,6 @@ void cnss_unregister_subsys(struct cnss_plat_data *plat_priv);
int cnss_register_ramdump(struct cnss_plat_data *plat_priv);
int cnss_register_ramdump(struct cnss_plat_data *plat_priv);
void cnss_unregister_ramdump(struct cnss_plat_data *plat_priv);
void cnss_unregister_ramdump(struct cnss_plat_data *plat_priv);
void cnss_set_pin_connect_status(struct cnss_plat_data *plat_priv);
void cnss_set_pin_connect_status(struct cnss_plat_data *plat_priv);
u32 cnss_get_wake_msi(struct cnss_plat_data *plat_priv);


#endif /* _CNSS_MAIN_H */
#endif /* _CNSS_MAIN_H */
+6 −0
Original line number Original line Diff line number Diff line
@@ -140,6 +140,12 @@ static int cnss_wlfw_host_cap_send_sync(struct cnss_plat_data *plat_priv)


	cnss_pr_dbg("daemon_support is %d\n", req.daemon_support);
	cnss_pr_dbg("daemon_support is %d\n", req.daemon_support);


	req.wake_msi = cnss_get_wake_msi(plat_priv);
	if (req.wake_msi) {
		cnss_pr_dbg("WAKE MSI base data is %d\n", req.wake_msi);
		req.wake_msi_valid = 1;
	}

	req_desc.max_msg_len = WLFW_HOST_CAP_REQ_MSG_V01_MAX_MSG_LEN;
	req_desc.max_msg_len = WLFW_HOST_CAP_REQ_MSG_V01_MAX_MSG_LEN;
	req_desc.msg_id = QMI_WLFW_HOST_CAP_REQ_V01;
	req_desc.msg_id = QMI_WLFW_HOST_CAP_REQ_V01;
	req_desc.ei_array = wlfw_host_cap_req_msg_v01_ei;
	req_desc.ei_array = wlfw_host_cap_req_msg_v01_ei;