<?xml version="1.0" encoding="ANSI_X3.4-1968" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968" /><title>Linux generic IRQ handling</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Linux generic IRQ handling" /><link rel="next" href="intro.html" title="Chapter 1. Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linux generic IRQ handling</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="Generic-IRQ-Guide"></a>Linux generic IRQ handling</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">Thomas</span> <span class="surname">Gleixner</span></h3><div class="affiliation"><div class="address"><p><br />       <code class="email"><<a class="email" href="mailto:tglx@linutronix.de">tglx@linutronix.de</a>></code><br />      </p></div></div></div><div class="author"><h3 class="author"><span class="firstname">Ingo</span> <span class="surname">Molnar</span></h3><div class="affiliation"><div class="address"><p><br />       <code class="email"><<a class="email" href="mailto:mingo@elte.hu">mingo@elte.hu</a>></code><br />      </p></div></div></div></div></div><div><p class="copyright">Copyright © 2005-2010 Thomas Gleixner</p></div><div><p class="copyright">Copyright © 2005-2006 Ingo Molnar</p></div><div><div class="legalnotice"><a id="idm140221690261968"></a><p> This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. </p><p> This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. </p><p> You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA </p><p> For more details see the file COPYING in the source distribution of Linux. </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="intro.html">1. Introduction</a></span></dt><dt><span class="chapter"><a href="rationale.html">2. Rationale</a></span></dt><dt><span class="chapter"><a href="bugs.html">3. Known Bugs And Assumptions</a></span></dt><dt><span class="chapter"><a href="Abstraction.html">4. Abstraction layers</a></span></dt><dd><dl><dt><span class="sect1"><a href="Abstraction.html#Interrupt_control_flow">Interrupt control flow</a></span></dt><dt><span class="sect1"><a href="Highlevel_Driver_API.html">Highlevel Driver API</a></span></dt><dt><span class="sect1"><a href="Highlevel_IRQ_flow_handlers.html">Highlevel IRQ flow handlers</a></span></dt><dd><dl><dt><span class="sect2"><a href="Highlevel_IRQ_flow_handlers.html#Default_flow_implementations">Default flow implementations</a></span></dt><dt><span class="sect2"><a href="Highlevel_IRQ_flow_handlers.html#Default_flow_handler_implementations">Default flow handler implementations</a></span></dt><dt><span class="sect2"><a href="Highlevel_IRQ_flow_handlers.html#Quirks_and_optimizations">Quirks and optimizations</a></span></dt><dt><span class="sect2"><a href="Highlevel_IRQ_flow_handlers.html#Delayed_interrupt_disable">Delayed interrupt disable</a></span></dt></dl></dd><dt><span class="sect1"><a href="Chiplevel_hardware_encapsulation.html">Chiplevel hardware encapsulation</a></span></dt></dl></dd><dt><span class="chapter"><a href="doirq.html">5. __do_IRQ entry point</a></span></dt><dt><span class="chapter"><a href="locking.html">6. Locking on SMP</a></span></dt><dt><span class="chapter"><a href="genericchip.html">7. Generic interrupt chip</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="API-irq-gc-mask-set-bit.html"><span class="phrase">irq_gc_mask_set_bit</span></a></span><span class="refpurpose"> — Mask chip via setting bit in mask register </span></dt><dt><span class="refentrytitle"><a href="API-irq-gc-mask-clr-bit.html"><span class="phrase">irq_gc_mask_clr_bit</span></a></span><span class="refpurpose"> — Mask chip via clearing bit in mask register </span></dt><dt><span class="refentrytitle"><a href="API-irq-gc-ack-set-bit.html"><span class="phrase">irq_gc_ack_set_bit</span></a></span><span class="refpurpose"> — Ack pending interrupt via setting bit </span></dt><dt><span class="refentrytitle"><a href="API-irq-alloc-generic-chip.html"><span class="phrase">irq_alloc_generic_chip</span></a></span><span class="refpurpose"> — Allocate a generic chip and initialize it </span></dt><dt><span class="refentrytitle"><a href="API-irq-alloc-domain-generic-chips.html"><span class="phrase">irq_alloc_domain_generic_chips</span></a></span><span class="refpurpose"> — Allocate generic chips for an irq domain </span></dt><dt><span class="refentrytitle"><a href="API-irq-get-domain-generic-chip.html"><span class="phrase">irq_get_domain_generic_chip</span></a></span><span class="refpurpose"> — Get a pointer to the generic chip of a hw_irq </span></dt><dt><span class="refentrytitle"><a href="API-irq-setup-generic-chip.html"><span class="phrase">irq_setup_generic_chip</span></a></span><span class="refpurpose"> — Setup a range of interrupts with a generic chip </span></dt><dt><span class="refentrytitle"><a href="API-irq-setup-alt-chip.html"><span class="phrase">irq_setup_alt_chip</span></a></span><span class="refpurpose"> — Switch to alternative chip </span></dt><dt><span class="refentrytitle"><a href="API-irq-remove-generic-chip.html"><span class="phrase">irq_remove_generic_chip</span></a></span><span class="refpurpose"> — Remove a chip </span></dt></dl></dd><dt><span class="chapter"><a href="structs.html">8. Structures</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="API-struct-irq-data.html"><span class="phrase">struct irq_data</span></a></span><span class="refpurpose"> — per irq and irq chip data passed down to chip functions </span></dt><dt><span class="refentrytitle"><a href="API-struct-irq-chip.html"><span class="phrase">struct irq_chip</span></a></span><span class="refpurpose"> — hardware interrupt chip descriptor </span></dt><dt><span class="refentrytitle"><a href="API-struct-irq-chip-regs.html"><span class="phrase">struct irq_chip_regs</span></a></span><span class="refpurpose"> — register offsets for struct irq_gci </span></dt><dt><span class="refentrytitle"><a href="API-struct-irq-chip-type.html"><span class="phrase">struct irq_chip_type</span></a></span><span class="refpurpose"> — Generic interrupt chip instance for a flow type </span></dt><dt><span class="refentrytitle"><a href="API-struct-irq-chip-generic.html"><span class="phrase">struct irq_chip_generic</span></a></span><span class="refpurpose"> — Generic irq chip data structure </span></dt><dt><span class="refentrytitle"><a href="API-enum-irq-gc-flags.html"><span class="phrase">enum irq_gc_flags</span></a></span><span class="refpurpose"> — Initialization flags for generic irq chips </span></dt><dt><span class="refentrytitle"><a href="API-struct-irqaction.html"><span class="phrase">struct irqaction</span></a></span><span class="refpurpose"> — per interrupt action descriptor </span></dt><dt><span class="refentrytitle"><a href="API-struct-irq-affinity-notify.html"><span class="phrase">struct irq_affinity_notify</span></a></span><span class="refpurpose"> — context for notification of IRQ affinity changes </span></dt></dl></dd><dt><span class="chapter"><a href="pubfunctions.html">9. Public Functions Provided</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="API-synchronize-irq.html"><span class="phrase">synchronize_irq</span></a></span><span class="refpurpose"> — wait for pending IRQ handlers (on other CPUs) </span></dt><dt><span class="refentrytitle"><a href="API-irq-set-affinity-notifier.html"><span class="phrase">irq_set_affinity_notifier</span></a></span><span class="refpurpose"> — control notification of IRQ affinity changes </span></dt><dt><span class="refentrytitle"><a href="API-disable-irq-nosync.html"><span class="phrase">disable_irq_nosync</span></a></span><span class="refpurpose"> — disable an irq without waiting </span></dt><dt><span class="refentrytitle"><a href="API-disable-irq.html"><span class="phrase">disable_irq</span></a></span><span class="refpurpose"> — disable an irq and wait for completion </span></dt><dt><span class="refentrytitle"><a href="API-enable-irq.html"><span class="phrase">enable_irq</span></a></span><span class="refpurpose"> — enable handling of an irq </span></dt><dt><span class="refentrytitle"><a href="API-irq-set-irq-wake.html"><span class="phrase">irq_set_irq_wake</span></a></span><span class="refpurpose"> — control irq power management wakeup </span></dt><dt><span class="refentrytitle"><a href="API-setup-irq.html"><span class="phrase">setup_irq</span></a></span><span class="refpurpose"> — setup an interrupt </span></dt><dt><span class="refentrytitle"><a href="API-remove-irq.html"><span class="phrase">remove_irq</span></a></span><span class="refpurpose"> — free an interrupt </span></dt><dt><span class="refentrytitle"><a href="API-free-irq.html"><span class="phrase">free_irq</span></a></span><span class="refpurpose"> — free an interrupt allocated with request_irq </span></dt><dt><span class="refentrytitle"><a href="API-request-threaded-irq.html"><span class="phrase">request_threaded_irq</span></a></span><span class="refpurpose"> — allocate an interrupt line </span></dt><dt><span class="refentrytitle"><a href="API-request-any-context-irq.html"><span class="phrase">request_any_context_irq</span></a></span><span class="refpurpose"> — allocate an interrupt line </span></dt><dt><span class="refentrytitle"><a href="API-irq-set-chip.html"><span class="phrase">irq_set_chip</span></a></span><span class="refpurpose"> — set the irq chip for an irq </span></dt><dt><span class="refentrytitle"><a href="API-irq-set-irq-type.html"><span class="phrase">irq_set_irq_type</span></a></span><span class="refpurpose"> — set the irq trigger type for an irq </span></dt><dt><span class="refentrytitle"><a href="API-irq-set-handler-data.html"><span class="phrase">irq_set_handler_data</span></a></span><span class="refpurpose"> — set irq handler data for an irq </span></dt><dt><span class="refentrytitle"><a href="API-irq-set-chip-data.html"><span class="phrase">irq_set_chip_data</span></a></span><span class="refpurpose"> — set irq chip data for an irq </span></dt><dt><span class="refentrytitle"><a href="API-handle-simple-irq.html"><span class="phrase">handle_simple_irq</span></a></span><span class="refpurpose"> — Simple and software-decoded IRQs. </span></dt><dt><span class="refentrytitle"><a href="API-handle-level-irq.html"><span class="phrase">handle_level_irq</span></a></span><span class="refpurpose"> — Level type irq handler </span></dt><dt><span class="refentrytitle"><a href="API-handle-edge-irq.html"><span class="phrase">handle_edge_irq</span></a></span><span class="refpurpose"> — edge type IRQ handler </span></dt></dl></dd><dt><span class="chapter"><a href="intfunctions.html">10. Internal Functions Provided</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="API-irq-reserve-irqs.html"><span class="phrase">irq_reserve_irqs</span></a></span><span class="refpurpose"> — mark irqs allocated </span></dt><dt><span class="refentrytitle"><a href="API-irq-get-next-irq.html"><span class="phrase">irq_get_next_irq</span></a></span><span class="refpurpose"> — get next allocated irq number </span></dt><dt><span class="refentrytitle"><a href="API-dynamic-irq-cleanup.html"><span class="phrase">dynamic_irq_cleanup</span></a></span><span class="refpurpose"> — cleanup a dynamically allocated irq </span></dt><dt><span class="refentrytitle"><a href="API-handle-bad-irq.html"><span class="phrase">handle_bad_irq</span></a></span><span class="refpurpose"> — handle spurious and unhandled irqs </span></dt><dt><span class="refentrytitle"><a href="API-irq-set-msi-desc-off.html"><span class="phrase">irq_set_msi_desc_off</span></a></span><span class="refpurpose"> — set MSI descriptor data for an irq at offset </span></dt><dt><span class="refentrytitle"><a href="API-irq-set-msi-desc.html"><span class="phrase">irq_set_msi_desc</span></a></span><span class="refpurpose"> — set MSI descriptor data for an irq </span></dt><dt><span class="refentrytitle"><a href="API-irq-disable.html"><span class="phrase">irq_disable</span></a></span><span class="refpurpose"> — Mark interupt disabled </span></dt><dt><span class="refentrytitle"><a href="API-handle-fasteoi-irq.html"><span class="phrase">handle_fasteoi_irq</span></a></span><span class="refpurpose"> — irq handler for transparent controllers </span></dt><dt><span class="refentrytitle"><a href="API-handle-edge-eoi-irq.html"><span class="phrase">handle_edge_eoi_irq</span></a></span><span class="refpurpose"> — edge eoi type IRQ handler </span></dt><dt><span class="refentrytitle"><a href="API-handle-percpu-irq.html"><span class="phrase">handle_percpu_irq</span></a></span><span class="refpurpose"> — Per CPU local irq handler </span></dt><dt><span class="refentrytitle"><a href="API-handle-percpu-devid-irq.html"><span class="phrase">handle_percpu_devid_irq</span></a></span><span class="refpurpose"> — Per CPU local irq handler with per cpu dev ids </span></dt><dt><span class="refentrytitle"><a href="API-irq-cpu-online.html"><span class="phrase">irq_cpu_online</span></a></span><span class="refpurpose"> — Invoke all irq_cpu_online functions. </span></dt><dt><span class="refentrytitle"><a href="API-irq-cpu-offline.html"><span class="phrase">irq_cpu_offline</span></a></span><span class="refpurpose"> — Invoke all irq_cpu_offline functions. </span></dt></dl></dd><dt><span class="chapter"><a href="credits.html">11. Credits</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Chapter 1. Introduction</td></tr></table></div></body></html>