How to register a user-space function as an interrupt handler ?
GARCIAJ at 3il.fr
Thu May 26 20:09:51 EST 2005
Hi everybody, I'm tryin to adapt a vxWorks-designed application to a Linux montavista 3.1 on a board
running a powerPC 405 EP. In our application, that will be run from the linux user-space, we connect a
routine to an interrupt vector as the example below:
/* /home/JG/appli/ppcos.c */
RET_CODE_TYPE enable_and_connect_DMA(MY_DMA_CTRL * my_param)
BS_RET_CODE_TYPE rc1 = BS_RET_OK;
/* Connect interrupt handler for each channel */
rc = intConnect((VOIDFUNCPTR *)INT_VEC_DMA, my_handler, (int)my_param);
/* Enable interrupt for first channel in the interrupt controller */
rc1 = BS_RET_ERROR;
What I would like to do is to make an emulation of both vxWorks routines (intConnect() and intEnable()) in the linux world
cause I'm not allowed to change that code.
I guess that I will have to use :
intConnect() <==> request_irq()
intEnable() <==> enable_irq()
(Is that correct??).
Furthermore, I'm a newbie in linux developpment and if I understand well, I need to be in kernel-space to call those routines.
But here is my problem: the interrupt handler that we call is part of the application and uses a lot of #define,semaphores and other
ressources of the user-application. So can I implement a new linux system call, that will register our user-space-function (my_handler())
as the interrupt handler for the given vector?? Indeed, we do that for several interrupts (each with a different handler) and it would
be comfortable to have a system call that would take (the handler + the interrupt vector + the parameters) as parameters.
Don't forget that I have to respect two conditions: my application must be run from user-space and I cannot modify the
code (my team does not want to support versions).
Please help or give me a clue.
Thanks for your precious help.
More information about the Linuxppc-dev