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

Commit f4033633 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cnss2: Add get info QMI messages support"

parents 42e5c9a7 30ec0e0b
Loading
Loading
Loading
Loading
+30 −0
Original line number Original line Diff line number Diff line
@@ -186,6 +186,36 @@ int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv)
	}
	}
}
}


int cnss_bus_qmi_send_get(struct cnss_plat_data *plat_priv)
{
	if (!plat_priv)
		return -ENODEV;

	switch (plat_priv->bus_type) {
	case CNSS_BUS_PCI:
		return cnss_pci_qmi_send_get(plat_priv->bus_priv);
	default:
		cnss_pr_err("Unsupported bus type: %d\n",
			    plat_priv->bus_type);
		return -EINVAL;
	}
}

int cnss_bus_qmi_send_put(struct cnss_plat_data *plat_priv)
{
	if (!plat_priv)
		return -ENODEV;

	switch (plat_priv->bus_type) {
	case CNSS_BUS_PCI:
		return cnss_pci_qmi_send_put(plat_priv->bus_priv);
	default:
		cnss_pr_err("Unsupported bus type: %d\n",
			    plat_priv->bus_type);
		return -EINVAL;
	}
}

void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t)
void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t)
{
{
	struct cnss_plat_data *plat_priv =
	struct cnss_plat_data *plat_priv =
+2 −0
Original line number Original line Diff line number Diff line
@@ -30,6 +30,8 @@ int cnss_bus_alloc_qdss_mem(struct cnss_plat_data *plat_priv);
void cnss_bus_free_qdss_mem(struct cnss_plat_data *plat_priv);
void cnss_bus_free_qdss_mem(struct cnss_plat_data *plat_priv);
u32 cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv);
u32 cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv);
int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv);
int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv);
int cnss_bus_qmi_send_get(struct cnss_plat_data *plat_priv);
int cnss_bus_qmi_send_put(struct cnss_plat_data *plat_priv);
void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t);
void cnss_bus_fw_boot_timeout_hdlr(struct timer_list *t);
void cnss_bus_collect_dump_info(struct cnss_plat_data *plat_priv,
void cnss_bus_collect_dump_info(struct cnss_plat_data *plat_priv,
				bool in_panic);
				bool in_panic);
+31 −3
Original line number Original line Diff line number Diff line
@@ -1210,13 +1210,23 @@ EXPORT_SYMBOL(cnss_force_collect_rddm);


int cnss_qmi_send_get(struct device *dev)
int cnss_qmi_send_get(struct device *dev)
{
{
	struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);

	if (!test_bit(CNSS_QMI_WLFW_CONNECTED, &plat_priv->driver_state))
		return 0;
		return 0;

	return cnss_bus_qmi_send_get(plat_priv);
}
}
EXPORT_SYMBOL(cnss_qmi_send_get);
EXPORT_SYMBOL(cnss_qmi_send_get);


int cnss_qmi_send_put(struct device *dev)
int cnss_qmi_send_put(struct device *dev)
{
{
	struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);

	if (!test_bit(CNSS_QMI_WLFW_CONNECTED, &plat_priv->driver_state))
		return 0;
		return 0;

	return cnss_bus_qmi_send_put(plat_priv);
}
}
EXPORT_SYMBOL(cnss_qmi_send_put);
EXPORT_SYMBOL(cnss_qmi_send_put);


@@ -1224,7 +1234,25 @@ int cnss_qmi_send(struct device *dev, int type, void *cmd,
		  int cmd_len, void *cb_ctx,
		  int cmd_len, void *cb_ctx,
		  int (*cb)(void *ctx, void *event, int event_len))
		  int (*cb)(void *ctx, void *event, int event_len))
{
{
	struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);
	int ret;

	if (!plat_priv)
		return -ENODEV;

	if (!test_bit(CNSS_QMI_WLFW_CONNECTED, &plat_priv->driver_state))
		return -EINVAL;
		return -EINVAL;

	plat_priv->get_info_cb = cb;
	plat_priv->get_info_cb_ctx = cb_ctx;

	ret = cnss_wlfw_get_info_send_sync(plat_priv, type, cmd, cmd_len);
	if (ret) {
		plat_priv->get_info_cb = NULL;
		plat_priv->get_info_cb_ctx = NULL;
	}

	return ret;
}
}
EXPORT_SYMBOL(cnss_qmi_send);
EXPORT_SYMBOL(cnss_qmi_send);


+2 −0
Original line number Original line Diff line number Diff line
@@ -353,6 +353,8 @@ struct cnss_plat_data {
	struct qmi_handle ims_qmi;
	struct qmi_handle ims_qmi;
	struct qmi_txn txn;
	struct qmi_txn txn;
	u64 dynamic_feature;
	u64 dynamic_feature;
	void *get_info_cb_ctx;
	int (*get_info_cb)(void *ctx, void *event, int event_len);
};
};


#ifdef CONFIG_ARCH_QCOM
#ifdef CONFIG_ARCH_QCOM
+55 −2
Original line number Original line Diff line number Diff line
@@ -1223,6 +1223,9 @@ int cnss_pci_call_driver_remove(struct cnss_pci_data *pci_priv)
		}
		}
	}
	}


	plat_priv->get_info_cb_ctx = NULL;
	plat_priv->get_info_cb = NULL;

	return 0;
	return 0;
}
}


@@ -2486,11 +2489,16 @@ int cnss_auto_suspend(struct device *dev)
	if (!plat_priv)
	if (!plat_priv)
		return -ENODEV;
		return -ENODEV;


	mutex_lock(&pci_priv->bus_lock);
	ret = cnss_pci_suspend_bus(pci_priv);
	ret = cnss_pci_suspend_bus(pci_priv);
	if (ret)
	if (ret) {
		mutex_unlock(&pci_priv->bus_lock);
		return ret;
		return ret;
	}


	cnss_pci_set_auto_suspended(pci_priv, 1);
	cnss_pci_set_auto_suspended(pci_priv, 1);
	mutex_unlock(&pci_priv->bus_lock);

	cnss_pci_set_monitor_wake_intr(pci_priv, true);
	cnss_pci_set_monitor_wake_intr(pci_priv, true);


	bus_bw_info = &plat_priv->bus_bw_info;
	bus_bw_info = &plat_priv->bus_bw_info;
@@ -2516,11 +2524,15 @@ int cnss_auto_resume(struct device *dev)
	if (!plat_priv)
	if (!plat_priv)
		return -ENODEV;
		return -ENODEV;


	mutex_lock(&pci_priv->bus_lock);
	ret = cnss_pci_resume_bus(pci_priv);
	ret = cnss_pci_resume_bus(pci_priv);
	if (ret)
	if (ret) {
		mutex_unlock(&pci_priv->bus_lock);
		return ret;
		return ret;
	}


	cnss_pci_set_auto_suspended(pci_priv, 0);
	cnss_pci_set_auto_suspended(pci_priv, 0);
	mutex_unlock(&pci_priv->bus_lock);


	bus_bw_info = &plat_priv->bus_bw_info;
	bus_bw_info = &plat_priv->bus_bw_info;
	msm_bus_scale_client_update_request(bus_bw_info->bus_client,
	msm_bus_scale_client_update_request(bus_bw_info->bus_client,
@@ -2613,6 +2625,46 @@ int cnss_pci_force_wake_release(struct device *dev)
}
}
EXPORT_SYMBOL(cnss_pci_force_wake_release);
EXPORT_SYMBOL(cnss_pci_force_wake_release);


int cnss_pci_qmi_send_get(struct cnss_pci_data *pci_priv)
{
	int ret = 0;

	if (!pci_priv)
		return -ENODEV;

	mutex_lock(&pci_priv->bus_lock);
	if (!cnss_pci_get_auto_suspended(pci_priv))
		goto out;

	cnss_pr_vdbg("Starting to handle get info prepare\n");

	ret = cnss_pci_resume_bus(pci_priv);

out:
	mutex_unlock(&pci_priv->bus_lock);
	return ret;
}

int cnss_pci_qmi_send_put(struct cnss_pci_data *pci_priv)
{
	int ret = 0;

	if (!pci_priv)
		return -ENODEV;

	mutex_lock(&pci_priv->bus_lock);
	if (!cnss_pci_get_auto_suspended(pci_priv))
		goto out;

	cnss_pr_vdbg("Starting to handle get info done\n");

	ret = cnss_pci_suspend_bus(pci_priv);

out:
	mutex_unlock(&pci_priv->bus_lock);
	return ret;
}

int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv)
int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv)
{
{
	struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
	struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
@@ -3716,6 +3768,7 @@ static int cnss_pci_probe(struct pci_dev *pci_dev,
	plat_priv->bus_priv = pci_priv;
	plat_priv->bus_priv = pci_priv;
	snprintf(plat_priv->firmware_name, sizeof(plat_priv->firmware_name),
	snprintf(plat_priv->firmware_name, sizeof(plat_priv->firmware_name),
		 DEFAULT_FW_FILE_NAME);
		 DEFAULT_FW_FILE_NAME);
	mutex_init(&pci_priv->bus_lock);


	ret = cnss_register_subsys(plat_priv);
	ret = cnss_register_subsys(plat_priv);
	if (ret)
	if (ret)
Loading