<?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.75.2" /><link rel="home" href="index.html" title="Linux generic IRQ handling" /><link rel="next" href="ch01.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="ch01.html">Next</a></td></tr></table><hr /></div><div class="book" title="Linux generic IRQ handling"><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-2006 Thomas Gleixner</p></div><div><p class="copyright">Copyright © 2005-2006 Ingo Molnar</p></div><div><div class="legalnotice" title="Legal Notice"><a id="id2544954"></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><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Introduction</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Rationale</a></span></dt><dt><span class="chapter"><a href="ch03.html">3. Known Bugs And Assumptions</a></span></dt><dt><span class="chapter"><a href="ch04.html">4. Abstraction layers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#Interrupt_control_flow">Interrupt control flow</a></span></dt><dt><span class="sect1"><a href="ch04s02.html">Highlevel Driver API</a></span></dt><dt><span class="sect1"><a href="ch04s03.html">Highlevel IRQ flow handlers</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#Default_flow_implementations">Default flow implementations</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#Default_flow_handler_implementations">Default flow handler implementations</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#Quirks_and_optimizations">Quirks and optimizations</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#Delayed_interrupt_disable">Delayed interrupt disable</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">Chiplevel hardware encapsulation</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch05.html">5. __do_IRQ entry point</a></span></dt><dt><span class="chapter"><a href="ch06.html">6. Locking on SMP</a></span></dt><dt><span class="chapter"><a href="ch07.html">7. Structures</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="re01.html"><span>struct irq_chip</span></a></span><span class="refpurpose"> — hardware interrupt chip descriptor </span></dt><dt><span class="refentrytitle"><a href="re02.html"><span>struct irq_desc</span></a></span><span class="refpurpose"> — interrupt descriptor </span></dt><dt><span class="refentrytitle"><a href="re03.html"><span>alloc_desc_masks</span></a></span><span class="refpurpose"> — allocate cpumasks for irq_desc </span></dt><dt><span class="refentrytitle"><a href="re04.html"><span>init_copy_desc_masks</span></a></span><span class="refpurpose"> — copy cpumasks for irq_desc </span></dt><dt><span class="refentrytitle"><a href="re05.html"><span>struct irqaction</span></a></span><span class="refpurpose"> — per interrupt action descriptor </span></dt></dl></dd><dt><span class="chapter"><a href="ch08.html">8. Public Functions Provided</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="re06.html"><span>synchronize_irq</span></a></span><span class="refpurpose"> — wait for pending IRQ handlers (on other CPUs) </span></dt><dt><span class="refentrytitle"><a href="re07.html"><span>disable_irq_nosync</span></a></span><span class="refpurpose"> — disable an irq without waiting </span></dt><dt><span class="refentrytitle"><a href="re08.html"><span>disable_irq</span></a></span><span class="refpurpose"> — disable an irq and wait for completion </span></dt><dt><span class="refentrytitle"><a href="re09.html"><span>enable_irq</span></a></span><span class="refpurpose"> — enable handling of an irq </span></dt><dt><span class="refentrytitle"><a href="re10.html"><span>set_irq_wake</span></a></span><span class="refpurpose"> — control irq power management wakeup </span></dt><dt><span class="refentrytitle"><a href="re11.html"><span>setup_irq</span></a></span><span class="refpurpose"> — setup an interrupt </span></dt><dt><span class="refentrytitle"><a href="re12.html"><span>remove_irq</span></a></span><span class="refpurpose"> — free an interrupt </span></dt><dt><span class="refentrytitle"><a href="re13.html"><span>free_irq</span></a></span><span class="refpurpose"> — free an interrupt allocated with request_irq </span></dt><dt><span class="refentrytitle"><a href="re14.html"><span>request_threaded_irq</span></a></span><span class="refpurpose"> — allocate an interrupt line </span></dt><dt><span class="refentrytitle"><a href="re15.html"><span>set_irq_chip</span></a></span><span class="refpurpose"> — set the irq chip for an irq </span></dt><dt><span class="refentrytitle"><a href="re16.html"><span>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="re17.html"><span>set_irq_data</span></a></span><span class="refpurpose"> — set irq type data for an irq </span></dt><dt><span class="refentrytitle"><a href="re18.html"><span>set_irq_chip_data</span></a></span><span class="refpurpose"> — set irq chip data for an irq </span></dt><dt><span class="refentrytitle"><a href="re19.html"><span>set_irq_nested_thread</span></a></span><span class="refpurpose"> — Set/Reset the IRQ_NESTED_THREAD flag of an irq </span></dt><dt><span class="refentrytitle"><a href="re20.html"><span>handle_level_irq</span></a></span><span class="refpurpose"> — Level type irq handler </span></dt></dl></dd><dt><span class="chapter"><a href="ch09.html">9. Internal Functions Provided</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="re21.html"><span>handle_bad_irq</span></a></span><span class="refpurpose"> — handle spurious and unhandled irqs </span></dt><dt><span class="refentrytitle"><a href="re22.html"><span>handle_IRQ_event</span></a></span><span class="refpurpose"> — irq action chain handler </span></dt><dt><span class="refentrytitle"><a href="re23.html"><span>__do_IRQ</span></a></span><span class="refpurpose"> — original all in one highlevel IRQ handler </span></dt><dt><span class="refentrytitle"><a href="re24.html"><span>dynamic_irq_init</span></a></span><span class="refpurpose"> — initialize a dynamically allocated irq </span></dt><dt><span class="refentrytitle"><a href="re25.html"><span>dynamic_irq_init_keep_chip_data</span></a></span><span class="refpurpose"> — initialize a dynamically allocated irq </span></dt><dt><span class="refentrytitle"><a href="re26.html"><span>dynamic_irq_cleanup</span></a></span><span class="refpurpose"> — cleanup a dynamically allocated irq </span></dt><dt><span class="refentrytitle"><a href="re27.html"><span>dynamic_irq_cleanup_keep_chip_data</span></a></span><span class="refpurpose"> — cleanup a dynamically allocated irq </span></dt><dt><span class="refentrytitle"><a href="re28.html"><span>set_irq_msi</span></a></span><span class="refpurpose"> — set irq type data for an irq </span></dt><dt><span class="refentrytitle"><a href="re29.html"><span>handle_simple_irq</span></a></span><span class="refpurpose"> — Simple and software-decoded IRQs. </span></dt><dt><span class="refentrytitle"><a href="re30.html"><span>handle_fasteoi_irq</span></a></span><span class="refpurpose"> — irq handler for transparent controllers </span></dt><dt><span class="refentrytitle"><a href="re31.html"><span>handle_edge_irq</span></a></span><span class="refpurpose"> — edge type IRQ handler </span></dt><dt><span class="refentrytitle"><a href="re32.html"><span>handle_percpu_irq</span></a></span><span class="refpurpose"> — Per CPU local irq handler </span></dt></dl></dd><dt><span class="chapter"><a href="ch10.html">10. 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="ch01.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>