On Mon, 2005-02-14 at 18:11, [EMAIL PROTECTED] wrote:
> On Mon, 14 Feb 2005, Michael Neuhauser wrote:
>
> > static void rtai_irq_trampoline(unsigned irq)
> > {
> > if (rtai_realtime_irq[irq].handler)
> > rtai_realtime_irq[irq].handler(irq, rtai_realtime_irq[irq].cookie);
> > else
> > adeos_propagate_irq(irq);
> > }
> >
> > Only active real-time irqs are handled by RTAI, the rest is deferred to
> > Adeos. But Adeos is responsible for interrupt queuing and dispatching
> > the whole time!
>
> Aha, so, it is like
>
> Hardware -> RTAI -> ADEOS -> Linux
Sorry, I was not clear, the key in my statement is:
Adeos is responsible for interrupt queuing and dispatching the
whole time!
> Rather than
> RTAI Linux
> ^ | ^ |
> Hardware -> ADEOS _| |____| |__ ...
>
> which I thought was the case.
This is more correct than the one above.
I think the piece missing in your puzzle is __adeos_handle_irq(). This
function is a called by the irq-decoding assembler code instead of
asm_do_IRQ() and enters the irq into the interrupt pipeline(s) (and
delivers the irq if the pipeline is not stalled):
Hardware -> Adeos
irq --> pipeline_RTAI -*-> pipeline_Linux
| |
v v
RTAI Linux
The adeos_propagate_irq() call in rtai_irq_trampoline() only allows the
irq to cross the "*" marker into the Linux pipeline.
Mike
--
Dr. Michael Neuhauser phone: +43 1 789 08 49 - 30
Firmix Software GmbH fax: +43 1 789 08 49 - 55
Vienna/Austria/Europe email: [EMAIL PROTECTED]
Embedded Linux Development and Services http://www.firmix.at/