void ath6kl_core_cleanup(struct ath6kl *ar) { ath6kl_hif_power_off(ar); ath6kl_recovery_cleanup(ar); destroy_workqueue(ar->ath6kl_wq); if (ar->htc_target) ath6kl_htc_cleanup(ar->htc_target); ath6kl_cookie_cleanup(ar); ath6kl_cleanup_amsdu_rxbufs(ar); ath6kl_bmi_cleanup(ar); ath6kl_debug_cleanup(ar); kfree(ar->fw_board); kfree(ar->fw_otp); vfree(ar->fw); kfree(ar->fw_patch); kfree(ar->fw_testscript); ath6kl_cfg80211_cleanup(ar); }
void ath6kl_recovery_suspend(struct ath6kl *ar) { if (!ar->fw_recovery.enable) return; ath6kl_recovery_cleanup(ar); if (!ar->fw_recovery.err_reason) return; /* Process pending fw error detection */ ar->fw_recovery.err_reason = 0; WARN_ON(ar->state != ATH6KL_STATE_ON); ar->state = ATH6KL_STATE_RECOVERY; ath6kl_init_hw_restart(ar); ar->state = ATH6KL_STATE_ON; }