static int ath10k_init_connect_htc(struct ath10k *ar) { int status; status = ath10k_wmi_connect_htc_service(ar); if (status) goto conn_fail; /* Start HTC */ status = ath10k_htc_start(&ar->htc); if (status) goto conn_fail; /* Wait for WMI event to be ready */ status = ath10k_wmi_wait_for_service_ready(ar); if (status <= 0) { ath10k_warn("wmi service ready event not received"); status = -ETIMEDOUT; goto timeout; } ath10k_dbg(ATH10K_DBG_BOOT, "boot wmi ready\n"); return 0; timeout: ath10k_htc_stop(&ar->htc); conn_fail: return status; }
void ath10k_core_stop(struct ath10k *ar) { lockdep_assert_held(&ar->conf_mutex); ath10k_debug_stop(ar); ath10k_htc_stop(&ar->htc); ath10k_htt_detach(&ar->htt); ath10k_wmi_detach(ar); }
void ath10k_core_unregister(struct ath10k *ar) { /* We must unregister from mac80211 before we stop HTC and HIF. * Otherwise we will fail to submit commands to FW and mac80211 will be * unhappy about callback failures. */ ath10k_mac_unregister(ar); ath10k_htc_stop(&ar->htc); ath10k_htt_detach(&ar->htt); ath10k_wmi_detach(ar); }
void ath10k_core_stop(struct ath10k *ar) { lockdep_assert_held(&ar->conf_mutex); /* try to suspend target */ if (ar->state != ATH10K_STATE_RESTARTING) ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND_AND_DISABLE_INTR); ath10k_debug_stop(ar); ath10k_htc_stop(&ar->htc); ath10k_htt_detach(&ar->htt); ath10k_wmi_detach(ar); }
int ath10k_core_start(struct ath10k *ar) { int status; lockdep_assert_held(&ar->conf_mutex); ath10k_bmi_start(ar); if (ath10k_init_configure_target(ar)) { status = -EINVAL; goto err; } status = ath10k_init_download_firmware(ar); if (status) goto err; status = ath10k_init_uart(ar); if (status) goto err; ar->htc.htc_ops.target_send_suspend_complete = ath10k_send_suspend_complete; status = ath10k_htc_init(ar); if (status) { ath10k_err("could not init HTC (%d)\n", status); goto err; } status = ath10k_bmi_done(ar); if (status) goto err; status = ath10k_wmi_attach(ar); if (status) { ath10k_err("WMI attach failed: %d\n", status); goto err; } status = ath10k_hif_start(ar); if (status) { ath10k_err("could not start HIF: %d\n", status); goto err_wmi_detach; } status = ath10k_htc_wait_target(&ar->htc); if (status) { ath10k_err("failed to connect to HTC: %d\n", status); goto err_hif_stop; } status = ath10k_htt_attach(ar); if (status) { ath10k_err("could not attach htt (%d)\n", status); goto err_hif_stop; } status = ath10k_init_connect_htc(ar); if (status) goto err_htt_detach; ath10k_dbg(ATH10K_DBG_BOOT, "firmware %s booted\n", ar->hw->wiphy->fw_version); status = ath10k_wmi_cmd_init(ar); if (status) { ath10k_err("could not send WMI init command (%d)\n", status); goto err_disconnect_htc; } status = ath10k_wmi_wait_for_unified_ready(ar); if (status <= 0) { ath10k_err("wmi unified ready event not received\n"); status = -ETIMEDOUT; goto err_disconnect_htc; } status = ath10k_htt_attach_target(&ar->htt); if (status) goto err_disconnect_htc; status = ath10k_debug_start(ar); if (status) goto err_disconnect_htc; ar->free_vdev_map = (1 << TARGET_NUM_VDEVS) - 1; INIT_LIST_HEAD(&ar->arvifs); if (!test_bit(ATH10K_FLAG_FIRST_BOOT_DONE, &ar->dev_flags)) ath10k_info("%s (0x%x) fw %s api %d htt %d.%d\n", ar->hw_params.name, ar->target_version, ar->hw->wiphy->fw_version, ar->fw_api, ar->htt.target_version_major, ar->htt.target_version_minor); __set_bit(ATH10K_FLAG_FIRST_BOOT_DONE, &ar->dev_flags); return 0; err_disconnect_htc: ath10k_htc_stop(&ar->htc); err_htt_detach: ath10k_htt_detach(&ar->htt); err_hif_stop: ath10k_hif_stop(ar); err_wmi_detach: ath10k_wmi_detach(ar); err: return status; }
int ath10k_core_register(struct ath10k *ar) { struct bmi_target_info target_info; int status; memset(&target_info, 0, sizeof(target_info)); status = ath10k_bmi_get_target_info(ar, &target_info); if (status) goto err; ar->target_version = target_info.version; ar->hw->wiphy->hw_version = target_info.version; status = ath10k_init_hw_params(ar); if (status) goto err; if (ath10k_init_configure_target(ar)) { status = -EINVAL; goto err; } status = ath10k_init_download_firmware(ar); if (status) goto err; status = ath10k_init_uart(ar); if (status) goto err; ar->htc.htc_ops.target_send_suspend_complete = ath10k_send_suspend_complete; status = ath10k_htc_init(ar); if (status) { ath10k_err("could not init HTC (%d)\n", status); goto err; } status = ath10k_bmi_done(ar); if (status) goto err; status = ath10k_wmi_attach(ar); if (status) { ath10k_err("WMI attach failed: %d\n", status); goto err; } status = ath10k_htc_wait_target(&ar->htc); if (status) goto err_wmi_detach; status = ath10k_htt_attach(ar); if (status) { ath10k_err("could not attach htt (%d)\n", status); goto err_wmi_detach; } status = ath10k_init_connect_htc(ar); if (status) goto err_htt_detach; ath10k_info("firmware %s booted\n", ar->hw->wiphy->fw_version); status = ath10k_check_fw_version(ar); if (status) goto err_disconnect_htc; status = ath10k_wmi_cmd_init(ar); if (status) { ath10k_err("could not send WMI init command (%d)\n", status); goto err_disconnect_htc; } status = ath10k_wmi_wait_for_unified_ready(ar); if (status <= 0) { ath10k_err("wmi unified ready event not received\n"); status = -ETIMEDOUT; goto err_disconnect_htc; } status = ath10k_htt_attach_target(&ar->htt); if (status) goto err_disconnect_htc; status = ath10k_mac_register(ar); if (status) goto err_disconnect_htc; status = ath10k_debug_create(ar); if (status) { ath10k_err("unable to initialize debugfs\n"); goto err_unregister_mac; } return 0; err_unregister_mac: ath10k_mac_unregister(ar); err_disconnect_htc: ath10k_htc_stop(&ar->htc); err_htt_detach: ath10k_htt_detach(&ar->htt); err_wmi_detach: ath10k_wmi_detach(ar); err: return status; }
void ath10k_core_stop(struct ath10k *ar) { ath10k_htc_stop(&ar->htc); ath10k_htt_detach(&ar->htt); ath10k_wmi_detach(ar); }
int ath10k_core_start(struct ath10k *ar) { int status; ath10k_bmi_start(ar); if (ath10k_init_configure_target(ar)) { status = -EINVAL; goto err; } status = ath10k_init_download_firmware(ar); if (status) goto err; status = ath10k_init_uart(ar); if (status) goto err; ar->htc.htc_ops.target_send_suspend_complete = ath10k_send_suspend_complete; status = ath10k_htc_init(ar); if (status) { ath10k_err("could not init HTC (%d)\n", status); goto err; } status = ath10k_bmi_done(ar); if (status) goto err; status = ath10k_wmi_attach(ar); if (status) { ath10k_err("WMI attach failed: %d\n", status); goto err; } status = ath10k_htc_wait_target(&ar->htc); if (status) goto err_wmi_detach; status = ath10k_htt_attach(ar); if (status) { ath10k_err("could not attach htt (%d)\n", status); goto err_wmi_detach; } status = ath10k_init_connect_htc(ar); if (status) goto err_htt_detach; ath10k_info("firmware %s booted\n", ar->hw->wiphy->fw_version); status = ath10k_check_fw_version(ar); if (status) goto err_disconnect_htc; status = ath10k_wmi_cmd_init(ar); if (status) { ath10k_err("could not send WMI init command (%d)\n", status); goto err_disconnect_htc; } status = ath10k_wmi_wait_for_unified_ready(ar); if (status <= 0) { ath10k_err("wmi unified ready event not received\n"); status = -ETIMEDOUT; goto err_disconnect_htc; } status = ath10k_htt_attach_target(&ar->htt); if (status) goto err_disconnect_htc; ar->free_vdev_map = (1 << TARGET_NUM_VDEVS) - 1; return 0; err_disconnect_htc: ath10k_htc_stop(&ar->htc); err_htt_detach: ath10k_htt_detach(&ar->htt); err_wmi_detach: ath10k_wmi_detach(ar); err: return status; }