Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

request_threaded_irq(9) [suse man page]

REQUEST_THREADED_IRQ(9) 					Hardware Interfaces					   REQUEST_THREADED_IRQ(9)

NAME
request_threaded_irq - allocate an interrupt line SYNOPSIS
int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long irqflags, const char * devname, void * dev_id); ARGUMENTS
irq Interrupt line to allocate handler Function to be called when the IRQ occurs. Primary handler for threaded interrupts If NULL and thread_fn != NULL the default primary handler is installed thread_fn Function called from the irq handler thread If NULL, no irq thread is created irqflags Interrupt type flags devname An ascii name for the claiming device dev_id A cookie passed back to the handler function DESCRIPTION
This call allocates interrupt resources and enables the interrupt line and IRQ handling. From the point this call is made your handler function may be invoked. Since your handler function must clear any interrupt the board raises, you must take care both to initialise your hardware and to set up the interrupt handler in the right order. If you want to set up a threaded irq handler for your device then you need to supply handler and thread_fn. handler ist still called in hard interrupt context and has to check whether the interrupt originates from the device. If yes it needs to disable the interrupt on the device and return IRQ_WAKE_THREAD which will wake up the handler thread and run thread_fn. This split handler design is necessary to support shared interrupts. Dev_id must be globally unique. Normally the address of the device data structure is used as the cookie. Since the handler receives this value it makes sense to use it. If your interrupt is shared you must pass a non NULL dev_id as this is required when freeing the interrupt. FLAGS
IRQF_SHARED Interrupt is shared IRQF_DISABLED Disable local interrupts while processing IRQF_SAMPLE_RANDOM The interrupt can be used for entropy IRQF_TRIGGER_* Specify active edge(s) or level COPYRIGHT
Kernel Hackers Manual 2.6. July 2010 REQUEST_THREADED_IRQ(9)

Check Out this Related Man Page

ddi_intr_hilevel(9F)					   Kernel Functions for Drivers 				      ddi_intr_hilevel(9F)

NAME
ddi_intr_hilevel - indicate interrupt handler type SYNOPSIS
#include <sys/ddi.h> #include <sys/sunddi.h> int ddi_intr_hilevel(dev_info_t *dip, uint_t inumber); INTERFACE LEVEL
Solaris DDI specific (Solaris DDI). PARAMETERS
dip Pointer to dev_info structure. inumber Interrupt number. DESCRIPTION
ddi_intr_hilevel() returns non-zero if the specified interrupt is a "high level" interrupt. High level interrupts must be handled without using system services that manipulate thread or process states, because these interrupts are not blocked by the scheduler. In addition, high level interrupt handlers must take care to do a minimum of work because they are not preemptable. A typical high level interrupt handler would put data into a circular buffer and schedule a soft interrupt by calling ddi_trigger_soft- intr(). The circular buffer could be protected by using a mutex that was properly initialized for the interrupt handler. ddi_intr_hilevel() can be used before calling ddi_add_intr() to decide which type of interrupt handler should be used. Most device drivers are designed with the knowledge that the devices they support will always generate low level interrupts, however some devices, for example those using SBus or VME bus level 6 or 7 interrupts must use this test because on some machines those interrupts are high level (above the scheduler level) and on other machines they are not. RETURN VALUES
non-zero indicates a high-level interrupt. CONTEXT
These functions can be called from user or interrupt context. SEE ALSO
ddi_add_intr(9F), mutex(9F) Writing Device Drivers SunOS 5.10 7 Jan 1992 ddi_intr_hilevel(9F)
Man Page

Featured Tech Videos