diff options
author | Philippe Gerum <rpm@xenomai.org> | 2009-06-22 12:25:52 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-09-16 21:28:38 -0400 |
commit | 7a7967dc1b606f8c88e33bbec773bf82b4a52e6e (patch) | |
tree | 4196b28a1b48f9fa90ebfb66b3ff5e7fb1d82037 /arch/blackfin/mach-common/interrupt.S | |
parent | 70f47202320623270f327e249df0121c09e45c09 (diff) |
Blackfin: document __ipipe_call_irqtail
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/mach-common/interrupt.S')
-rw-r--r-- | arch/blackfin/mach-common/interrupt.S | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/arch/blackfin/mach-common/interrupt.S b/arch/blackfin/mach-common/interrupt.S index 29fbf67f47fa..c754ff74bd5d 100644 --- a/arch/blackfin/mach-common/interrupt.S +++ b/arch/blackfin/mach-common/interrupt.S | |||
@@ -261,6 +261,31 @@ ENTRY(_evt_system_call) | |||
261 | ENDPROC(_evt_system_call) | 261 | ENDPROC(_evt_system_call) |
262 | 262 | ||
263 | #ifdef CONFIG_IPIPE | 263 | #ifdef CONFIG_IPIPE |
264 | /* | ||
265 | * __ipipe_call_irqtail: lowers the current priority level to EVT15 | ||
266 | * before running a user-defined routine, then raises the priority | ||
267 | * level to EVT14 to prepare the caller for a normal interrupt | ||
268 | * return through RTI. | ||
269 | * | ||
270 | * We currently use this facility in two occasions: | ||
271 | * | ||
272 | * - to branch to __ipipe_irq_tail_hook as requested by a high | ||
273 | * priority domain after the pipeline delivered an interrupt, | ||
274 | * e.g. such as Xenomai, in order to start its rescheduling | ||
275 | * procedure, since we may not switch tasks when IRQ levels are | ||
276 | * nested on the Blackfin, so we have to fake an interrupt return | ||
277 | * so that we may reschedule immediately. | ||
278 | * | ||
279 | * - to branch to sync_root_irqs, in order to play any interrupt | ||
280 | * pending for the root domain (i.e. the Linux kernel). This lowers | ||
281 | * the core priority level enough so that Linux IRQ handlers may | ||
282 | * never delay interrupts handled by high priority domains; we defer | ||
283 | * those handlers until this point instead. This is a substitute | ||
284 | * to using a threaded interrupt model for the Linux kernel. | ||
285 | * | ||
286 | * r0: address of user-defined routine | ||
287 | * context: caller must have preempted EVT15, hw interrupts must be off. | ||
288 | */ | ||
264 | ENTRY(___ipipe_call_irqtail) | 289 | ENTRY(___ipipe_call_irqtail) |
265 | p0 = r0; | 290 | p0 = r0; |
266 | r0.l = 1f; | 291 | r0.l = 1f; |