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

Commit 61448a93 authored by Kalle Valo's avatar Kalle Valo
Browse files

ath6kl: merge ath6kl_init() to ath6kl_core_init()



In preparation for splitting module initialisation and hardware boot
code from each other.

Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 4e3d54c7
Loading
Loading
Loading
Loading
+65 −83
Original line number Diff line number Diff line
@@ -1421,20 +1421,62 @@ static int ath6kl_init_hw_params(struct ath6kl *ar)
	return 0;
}

static int ath6kl_init(struct ath6kl *ar)
int ath6kl_core_init(struct ath6kl *ar)
{
	int status = 0;
	struct ath6kl_bmi_target_info targ_info;
	s32 timeleft;
	struct net_device *ndev;
	int i;
	int i, ret = 0;

	if (!ar)
		return -EIO;
	ar->ath6kl_wq = create_singlethread_workqueue("ath6kl");
	if (!ar->ath6kl_wq)
		return -ENOMEM;

	ret = ath6kl_bmi_init(ar);
	if (ret)
		goto err_wq;

	ret = ath6kl_hif_power_on(ar);
	if (ret)
		goto err_bmi_cleanup;

	ret = ath6kl_bmi_get_target_info(ar, &targ_info);
	if (ret)
		goto err_power_off;

	ar->version.target_ver = le32_to_cpu(targ_info.version);
	ar->target_type = le32_to_cpu(targ_info.type);
	ar->wiphy->hw_version = le32_to_cpu(targ_info.version);

	ret = ath6kl_init_hw_params(ar);
	if (ret)
		goto err_power_off;

	ret = ath6kl_configure_target(ar);
	if (ret)
		goto err_power_off;

	ar->htc_target = ath6kl_htc_create(ar);

	if (!ar->htc_target) {
		ret = -ENOMEM;
		goto err_power_off;
	}

	ret = ath6kl_fetch_firmwares(ar);
	if (ret)
		goto err_htc_cleanup;

	/* FIXME: we should free all firmwares in the error cases below */

	ret = ath6kl_init_upload(ar);
	if (ret)
		goto err_htc_cleanup;

	/* Do we need to finish the BMI phase */
	if (ath6kl_bmi_done(ar)) {
		status = -EIO;
		goto ath6kl_init_done;
		ret = -EIO;
		goto err_htc_cleanup;
	}

	/* Indicate that WMI is enabled (although not ready yet) */
@@ -1442,18 +1484,18 @@ static int ath6kl_init(struct ath6kl *ar)
	ar->wmi = ath6kl_wmi_init(ar);
	if (!ar->wmi) {
		ath6kl_err("failed to initialize wmi\n");
		status = -EIO;
		goto ath6kl_init_done;
		ret = -EIO;
		goto err_htc_cleanup;
	}

	ath6kl_dbg(ATH6KL_DBG_TRC, "%s: got wmi @ 0x%p.\n", __func__, ar->wmi);

	status = ath6kl_register_ieee80211_hw(ar);
	if (status)
	ret = ath6kl_register_ieee80211_hw(ar);
	if (ret)
		goto err_node_cleanup;

	status = ath6kl_debug_init(ar);
	if (status) {
	ret = ath6kl_debug_init(ar);
	if (ret) {
		wiphy_unregister(ar->wiphy);
		goto err_node_cleanup;
	}
@@ -1471,7 +1513,7 @@ static int ath6kl_init(struct ath6kl *ar)

	if (!ndev) {
		ath6kl_err("Failed to instantiate a network device\n");
		status = -ENOMEM;
		ret = -ENOMEM;
		wiphy_unregister(ar->wiphy);
		goto err_debug_init;
	}
@@ -1486,12 +1528,12 @@ static int ath6kl_init(struct ath6kl *ar)
	 * size.
	 */
	if (ath6kl_htc_wait_target(ar->htc_target)) {
		status = -EIO;
		ret = -EIO;
		goto err_if_deinit;
	}

	if (ath6kl_init_service_ep(ar)) {
		status = -EIO;
		ret = -EIO;
		goto err_cleanup_scatter;
	}

@@ -1514,9 +1556,8 @@ static int ath6kl_init(struct ath6kl *ar)
	ath6kl_cookie_init(ar);

	/* start HTC */
	status = ath6kl_htc_start(ar->htc_target);

	if (status) {
	ret = ath6kl_htc_start(ar->htc_target);
	if (ret) {
		ath6kl_cookie_cleanup(ar);
		goto err_rxbuf_cleanup;
	}
@@ -1532,13 +1573,13 @@ static int ath6kl_init(struct ath6kl *ar)
	if (ar->version.abi_ver != ATH6KL_ABI_VERSION) {
		ath6kl_err("abi version mismatch: host(0x%x), target(0x%x)\n",
			   ATH6KL_ABI_VERSION, ar->version.abi_ver);
		status = -EIO;
		ret = -EIO;
		goto err_htc_stop;
	}

	if (!timeleft || signal_pending(current)) {
		ath6kl_err("wmi is not ready or wait was interrupted\n");
		status = -EIO;
		ret = -EIO;
		goto err_htc_stop;
	}

@@ -1555,8 +1596,8 @@ static int ath6kl_init(struct ath6kl *ar)
			    WIPHY_FLAG_HAVE_AP_SME;

	for (i = 0; i < MAX_NUM_VIF; i++) {
		status = ath6kl_target_config_wlan_params(ar, i);
		if (status)
		ret = ath6kl_target_config_wlan_params(ar, i);
		if (ret)
			goto err_htc_stop;
	}

@@ -1566,7 +1607,7 @@ static int ath6kl_init(struct ath6kl *ar)
	 */
	memcpy(ndev->dev_addr, ar->mac_addr, ETH_ALEN);

	return status;
	return ret;

err_htc_stop:
	ath6kl_htc_stop(ar->htc_target);
@@ -1586,65 +1627,6 @@ static int ath6kl_init(struct ath6kl *ar)
	ath6kl_wmi_shutdown(ar->wmi);
	clear_bit(WMI_ENABLED, &ar->flag);
	ar->wmi = NULL;

ath6kl_init_done:
	return status;
}

int ath6kl_core_init(struct ath6kl *ar)
{
	int ret = 0;
	struct ath6kl_bmi_target_info targ_info;

	ar->ath6kl_wq = create_singlethread_workqueue("ath6kl");
	if (!ar->ath6kl_wq)
		return -ENOMEM;

	ret = ath6kl_bmi_init(ar);
	if (ret)
		goto err_wq;

	ret = ath6kl_hif_power_on(ar);
	if (ret)
		goto err_bmi_cleanup;

	ret = ath6kl_bmi_get_target_info(ar, &targ_info);
	if (ret)
		goto err_power_off;

	ar->version.target_ver = le32_to_cpu(targ_info.version);
	ar->target_type = le32_to_cpu(targ_info.type);
	ar->wiphy->hw_version = le32_to_cpu(targ_info.version);

	ret = ath6kl_init_hw_params(ar);
	if (ret)
		goto err_power_off;

	ret = ath6kl_configure_target(ar);
	if (ret)
		goto err_power_off;

	ar->htc_target = ath6kl_htc_create(ar);

	if (!ar->htc_target) {
		ret = -ENOMEM;
		goto err_power_off;
	}

	ret = ath6kl_fetch_firmwares(ar);
	if (ret)
		goto err_htc_cleanup;

	ret = ath6kl_init_upload(ar);
	if (ret)
		goto err_htc_cleanup;

	ret = ath6kl_init(ar);
	if (ret)
		goto err_htc_cleanup;

	return ret;

err_htc_cleanup:
	ath6kl_htc_cleanup(ar->htc_target);
err_power_off: