summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/ath/ath10k/ce.c
diff options
context:
space:
mode:
authorMichal Kazior <michal.kazior@tieto.com>2013-11-08 08:01:33 +0100
committerKalle Valo <kvalo@qca.qualcomm.com>2013-11-12 20:06:46 +0200
commit98563d5aafa45498f8c2f6885b2bd03eab648f19 (patch)
treec2b9a57aa4db760f4beb03894f6c8d267510ad36 /drivers/net/wireless/ath/ath10k/ce.c
parent2415fc16391af204170f5478072fb1a2c66b87f3 (diff)
ath10k: re-arrange PCI init code
This patch moves irq registering after necessary structures have been allocated and initialized. This should prevent interrupts from causing tasklet access invalid memory pointers. Reported-By: Ben Greear <greearb@candelatech.com> Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/ce.c')
-rw-r--r--drivers/net/wireless/ath/ath10k/ce.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c
index ab22d14f4569..476928f2dadc 100644
--- a/drivers/net/wireless/ath/ath10k/ce.c
+++ b/drivers/net/wireless/ath/ath10k/ce.c
@@ -792,6 +792,21 @@ static void ath10k_ce_per_engine_handler_adjust(struct ath10k_ce_pipe *ce_state,
ath10k_pci_sleep(ar);
}
+int ath10k_ce_enable_err_irq(struct ath10k *ar)
+{
+ int i, ret;
+
+ ret = ath10k_pci_wake(ar);
+ if (ret)
+ return ret;
+
+ for (i = 0; i < CE_COUNT; i++)
+ ath10k_ce_error_intr_enable(ar, ath10k_ce_base_address(i));
+
+ ath10k_pci_sleep(ar);
+ return 0;
+}
+
int ath10k_ce_disable_interrupts(struct ath10k *ar)
{
int ce_id, ret;
@@ -1059,7 +1074,6 @@ struct ath10k_ce_pipe *ath10k_ce_init(struct ath10k *ar,
const struct ce_attr *attr)
{
struct ath10k_ce_pipe *ce_state;
- u32 ctrl_addr = ath10k_ce_base_address(ce_id);
int ret;
/*
@@ -1105,9 +1119,6 @@ struct ath10k_ce_pipe *ath10k_ce_init(struct ath10k *ar,
}
}
- /* Enable CE error interrupts */
- ath10k_ce_error_intr_enable(ar, ctrl_addr);
-
out:
ath10k_pci_sleep(ar);
return ce_state;