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.


Reply via email to