Lines Matching refs:interrupt

46 static bool ipa_interrupt_uc(struct ipa_interrupt *interrupt, u32 irq_id)  in ipa_interrupt_uc()  argument
52 static void ipa_interrupt_process(struct ipa_interrupt *interrupt, u32 irq_id) in ipa_interrupt_process() argument
54 bool uc_irq = ipa_interrupt_uc(interrupt, irq_id); in ipa_interrupt_process()
55 struct ipa *ipa = interrupt->ipa; in ipa_interrupt_process()
64 if (irq_id < IPA_IRQ_COUNT && interrupt->handler[irq_id]) in ipa_interrupt_process()
65 interrupt->handler[irq_id](interrupt->ipa, irq_id); in ipa_interrupt_process()
76 static void ipa_interrupt_process_all(struct ipa_interrupt *interrupt) in ipa_interrupt_process_all() argument
78 struct ipa *ipa = interrupt->ipa; in ipa_interrupt_process_all()
79 u32 enabled = interrupt->enabled; in ipa_interrupt_process_all()
93 ipa_interrupt_process(interrupt, irq_id); in ipa_interrupt_process_all()
102 struct ipa_interrupt *interrupt = dev_id; in ipa_isr_thread() local
104 ipa_clock_get(interrupt->ipa); in ipa_isr_thread()
106 ipa_interrupt_process_all(interrupt); in ipa_isr_thread()
108 ipa_clock_put(interrupt->ipa); in ipa_isr_thread()
116 struct ipa_interrupt *interrupt = dev_id; in ipa_isr() local
117 struct ipa *ipa = interrupt->ipa; in ipa_isr()
121 if (mask & interrupt->enabled) in ipa_isr()
134 static void ipa_interrupt_suspend_control(struct ipa_interrupt *interrupt, in ipa_interrupt_suspend_control() argument
137 struct ipa *ipa = interrupt->ipa; in ipa_interrupt_suspend_control()
152 ipa_interrupt_suspend_enable(struct ipa_interrupt *interrupt, u32 endpoint_id) in ipa_interrupt_suspend_enable() argument
154 ipa_interrupt_suspend_control(interrupt, endpoint_id, true); in ipa_interrupt_suspend_enable()
159 ipa_interrupt_suspend_disable(struct ipa_interrupt *interrupt, u32 endpoint_id) in ipa_interrupt_suspend_disable() argument
161 ipa_interrupt_suspend_control(interrupt, endpoint_id, false); in ipa_interrupt_suspend_disable()
165 void ipa_interrupt_suspend_clear_all(struct ipa_interrupt *interrupt) in ipa_interrupt_suspend_clear_all() argument
167 struct ipa *ipa = interrupt->ipa; in ipa_interrupt_suspend_clear_all()
175 void ipa_interrupt_simulate_suspend(struct ipa_interrupt *interrupt) in ipa_interrupt_simulate_suspend() argument
177 ipa_interrupt_process(interrupt, IPA_IRQ_TX_SUSPEND); in ipa_interrupt_simulate_suspend()
181 void ipa_interrupt_add(struct ipa_interrupt *interrupt, in ipa_interrupt_add() argument
184 struct ipa *ipa = interrupt->ipa; in ipa_interrupt_add()
187 interrupt->handler[ipa_irq] = handler; in ipa_interrupt_add()
190 interrupt->enabled |= BIT(ipa_irq); in ipa_interrupt_add()
191 iowrite32(interrupt->enabled, ipa->reg_virt + IPA_REG_IRQ_EN_OFFSET); in ipa_interrupt_add()
196 ipa_interrupt_remove(struct ipa_interrupt *interrupt, enum ipa_irq_id ipa_irq) in ipa_interrupt_remove() argument
198 struct ipa *ipa = interrupt->ipa; in ipa_interrupt_remove()
202 interrupt->enabled &= ~BIT(ipa_irq); in ipa_interrupt_remove()
203 iowrite32(interrupt->enabled, ipa->reg_virt + IPA_REG_IRQ_EN_OFFSET); in ipa_interrupt_remove()
205 interrupt->handler[ipa_irq] = NULL; in ipa_interrupt_remove()
212 struct ipa_interrupt *interrupt; in ipa_interrupt_setup() local
224 interrupt = kzalloc(sizeof(*interrupt), GFP_KERNEL); in ipa_interrupt_setup()
225 if (!interrupt) in ipa_interrupt_setup()
227 interrupt->ipa = ipa; in ipa_interrupt_setup()
228 interrupt->irq = irq; in ipa_interrupt_setup()
234 "ipa", interrupt); in ipa_interrupt_setup()
246 return interrupt; in ipa_interrupt_setup()
249 free_irq(interrupt->irq, interrupt); in ipa_interrupt_setup()
251 kfree(interrupt); in ipa_interrupt_setup()
257 void ipa_interrupt_teardown(struct ipa_interrupt *interrupt) in ipa_interrupt_teardown() argument
259 struct device *dev = &interrupt->ipa->pdev->dev; in ipa_interrupt_teardown()
262 ret = disable_irq_wake(interrupt->irq); in ipa_interrupt_teardown()
265 free_irq(interrupt->irq, interrupt); in ipa_interrupt_teardown()
266 kfree(interrupt); in ipa_interrupt_teardown()