Beispiel #1
0
static void ath10k_pci_ce_tasklet(void *arg)
{
	struct ath10k_pci_pipe *pipe = (struct ath10k_pci_pipe *) arg;

	ath10k_dbg(pipe->ar, ATH10K_DBG_IRQ, "%s: called; pipe=%d\n", __func__, pipe->pipe_num);

	trace_ath10k_intr(pipe->ar, pipe->pipe_num, 2);
	ath10k_ce_per_engine_service(pipe->ar, pipe->pipe_num);
	trace_ath10k_intr(pipe->ar, pipe->pipe_num, 3);
}
Beispiel #2
0
void ath10k_ce_per_engine_service_any(struct ath10k *ar)
{
	int ce_id;
	u32 intr_summary;

	intr_summary = CE_INTERRUPT_SUMMARY(ar);

	for (ce_id = 0; intr_summary && (ce_id < CE_COUNT); ce_id++) {
		if (intr_summary & (1 << ce_id))
			intr_summary &= ~(1 << ce_id);
		else
			/* no intr pending on this CE */
			continue;

		ath10k_ce_per_engine_service(ar, ce_id);
	}
}
void ath10k_ce_per_engine_service_any(struct ath10k *ar)
{
	struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
	int ce_id, ret;
	u32 intr_summary;

	ret = ath10k_pci_wake(ar);
	if (ret)
		return;

	intr_summary = CE_INTERRUPT_SUMMARY(ar);

	for (ce_id = 0; intr_summary && (ce_id < ar_pci->ce_count); ce_id++) {
		if (intr_summary & (1 << ce_id))
			intr_summary &= ~(1 << ce_id);
		else
			/* no intr pending on this CE */
			continue;

		ath10k_ce_per_engine_service(ar, ce_id);
	}

	ath10k_pci_sleep(ar);
}