/* * This is the single, shared interrupt task. * Linux runs it as a tasklet; we run it as an ithread. */ static void ath10k_pci_tasklet(void *arg) { struct ath10k_pci *ar_pci = arg; struct ath10k *ar = &ar_pci->sc_sc; if (ar->sc_invalid) return; trace_ath10k_intr(ar, 0, 2); if (ath10k_pci_has_fw_crashed(ar_pci)) { ath10k_err(ar, "%s: FIRMWARE CRASH\n", __func__); ath10k_pci_irq_disable(ar_pci); ath10k_pci_fw_crashed_clear(ar_pci); ath10k_pci_fw_crashed_dump(ar_pci); trace_ath10k_intr(ar, 0, 3); return; } /* Do the actual interrupt handling */ ath10k_ce_per_engine_service_any(ar); /* Re-enable interrupts if required */ if (ar_pci->num_msi_intrs == 0) ath10k_pci_enable_legacy_irq(ar_pci); trace_ath10k_intr(ar, 0, 3); }
static int ath10k_ahb_hif_start(struct ath10k *ar) { ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot ahb hif start\n"); ath10k_ce_enable_interrupts(ar); ath10k_pci_enable_legacy_irq(ar); ath10k_pci_rx_post(ar); return 0; }