Hi,

Only when you are in kernel mode (i.e. in a driver/module)
it is possible to register for an interrupt, e.g. like
this:


        #include <asm/irq.h> /* e.g. SIU_INT_IRQ1 for 82xx */

        static void irq_handler(int irq, void *my_data,
                                struct pt_regs *regs)
        {
                /* handle the irq */

        }

        init()
        {
                int irq_flags = 0;
                long my_data = 0x12345678;

                request_irq(SIU_INT_IRQ1, &irq_handler,
                            irq_flags, "my irq", (void*)my_data);

        }


When some user land C routine needs to be called when
your interrupt arrives, you need to make a driver
like above that wakes up your user mode program
in "irq_handler". This will not give you very
good interrupt latencies however.

Jaap-Jan

On Wed, 2004-06-16 at 16:28, Garcia J?r?mie wrote:
> Hi everybody !
> As you guess I need some help... Indeed I'm a newbie in Linux embedded 
> development and I have to work on a linux ppc based board project.
> In fact, I have to adapt an existing VxWorks application to a linux 
> montavista hardhat application.
> My problem is the following : I need to find a linux equivalent routine of 
> the intConnect() VxWorks routine. You can see the man page of taht function 
> below :
>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> NAME
>
> intConnect( ) - connect a C routine to a hardware interrupt
> SYNOPSIS
>
> STATUS intConnect
>     (
>     VOIDFUNCPTR * vector,   /* interrupt vector to attach to */
>     VOIDFUNCPTR   routine,  /* routine to be called */
>     int           parameter /* parameter to be passed to routine */
>     )
>
> DESCRIPTION
>
> This routine connects a specified C routine to a specified interrupt vector. 
> The address of routine is generally stored at vector so that routine is 
> called with parameter when the interrupt occurs. The routine is invoked in 
> supervisor mode at interrupt level. A proper C environment is established, 
> the necessary registers saved, and the stack set up.
>
> The routine can be any normal C code, except that it must not invoke certain 
> operating system functions that may block or perform I/O operations.
>
> This routine generally simply calls intHandlerCreate( ) and intVecSet( ). The 
> address of the handler returned by intHandlerCreate( ) is what actually goes 
> in the interrupt vector.
>
> This routine takes an interrupt vector as a parameter, which is the byte 
> offset into the vector table. Macros are provided to convert between 
> interrupt vectors and interrupt numbers, see intArchLib.
>
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>
> The only hardware interrupts routine I found through my investigations is the 
> request_irq(...). But the problem is that request_irq do not allow me to pass 
> an argument to the handler... So is there a routine that allows it or is 
> there a way to adapt the request_irq() to my case.
> I thougt to declare a global variable to store my param but I use 
> multitasking. So bad way...
>
>
> Thanks a lot for helping the newbie that I am...
>
--
J.G.J. Boor                       Anton Philipsweg 1
Software Engineer                 1223 KZ Hilversum
AimSys bv                         tel. +31 35 689 1941
Postbus 2194, 1200 CD Hilversum   mailto:jjboor at aimsys.nl


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/



Reply via email to