Esempio n. 1
0
/*
 * 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);
}
Esempio n. 2
0
File: ahb.c Progetto: AK101111/linux
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;
}