Hi,
Sorry for the silly things I said earlier, forgot the most important step :
the soft irq...
>
> Something like this ?
>
> inter_domain_irq = ipipe_alloc_virq();
> ret = request_irq(inter_domain_irq, linux_handler, SA_INTERRUPT,
> "virtualIRQ", NULL); enable_irq(inter_domain_irq);
>
> void ipipe_handler(unsigned irq) {
> [...]
> ipipe_trigger_irq(inter_domain_irq);
> [...]
> }
>
> void linux_handler(void) {
> wake_up_interruptible(&skeleton_wait);
> }
I think you should not use request_irq() but ipipe_virtualize_irq() :
inter_domain_irq = ipipe_alloc_virq();
-ret=request_irq(inter_domain_irq,linux_handler,SA_INTERRUPT,"virtualIRQ",NULL);
+ ret = ipipe_virtualize_irq(ipipe_root_domain,
inter_domain_irq,
&ipipe_handler,
NULL, NULL,
IPIPE_HANDLE_MASK);
-enable_irq(inter_domain_irq);
Your function linux_handler will be called in the root domain (Linux) any time
you use the function ipipe_trigger_irq(...inter_domain_irq...) in a non Linux
domain.
If you want a good example, you can have a look at the function rthal_init()
(in xenomai/ksrc/arch/generic/hal.c)
I think you should also double-check what I am saying ;) I am bit tired and ..
silly.
Thanks Gilles.
Alexis.