Browse Source

genirq-update-kerneldoc.patch

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
Thomas Gleixner 14 years ago
parent
commit
25ade601a0
1 changed files with 52 additions and 32 deletions
  1. 52 32
      Documentation/DocBook/genericirq.tmpl

+ 52 - 32
Documentation/DocBook/genericirq.tmpl

@@ -28,7 +28,7 @@
   </authorgroup>
   </authorgroup>
 
 
   <copyright>
   <copyright>
-   <year>2005-2006</year>
+   <year>2005-2010</year>
    <holder>Thomas Gleixner</holder>
    <holder>Thomas Gleixner</holder>
   </copyright>
   </copyright>
   <copyright>
   <copyright>
@@ -100,6 +100,10 @@
 	  <listitem><para>Edge type</para></listitem>
 	  <listitem><para>Edge type</para></listitem>
 	  <listitem><para>Simple type</para></listitem>
 	  <listitem><para>Simple type</para></listitem>
 	</itemizedlist>
 	</itemizedlist>
+	During the implementation we identified another type:
+	<itemizedlist>
+	  <listitem><para>Fast EOI type</para></listitem>
+	</itemizedlist>
 	In the SMP world of the __do_IRQ() super-handler another type
 	In the SMP world of the __do_IRQ() super-handler another type
 	was identified:
 	was identified:
 	<itemizedlist>
 	<itemizedlist>
@@ -153,6 +157,7 @@
 	is still available. This leads to a kind of duality for the time
 	is still available. This leads to a kind of duality for the time
 	being. Over time the new model should be used in more and more
 	being. Over time the new model should be used in more and more
 	architectures, as it enables smaller and cleaner IRQ subsystems.
 	architectures, as it enables smaller and cleaner IRQ subsystems.
+	It's deprecated for three years now and about to be removed.
 	</para>
 	</para>
   </chapter>
   </chapter>
   <chapter id="bugs">
   <chapter id="bugs">
@@ -217,6 +222,7 @@
 	  <itemizedlist>
 	  <itemizedlist>
 	  <listitem><para>handle_level_irq</para></listitem>
 	  <listitem><para>handle_level_irq</para></listitem>
 	  <listitem><para>handle_edge_irq</para></listitem>
 	  <listitem><para>handle_edge_irq</para></listitem>
+	  <listitem><para>handle_fasteoi_irq</para></listitem>
 	  <listitem><para>handle_simple_irq</para></listitem>
 	  <listitem><para>handle_simple_irq</para></listitem>
 	  <listitem><para>handle_percpu_irq</para></listitem>
 	  <listitem><para>handle_percpu_irq</para></listitem>
 	  </itemizedlist>
 	  </itemizedlist>
@@ -233,33 +239,33 @@
 		are used by the default flow implementations.
 		are used by the default flow implementations.
 		The following helper functions are implemented (simplified excerpt):
 		The following helper functions are implemented (simplified excerpt):
 		<programlisting>
 		<programlisting>
-default_enable(irq)
+default_enable(struct irq_data *data)
 {
 {
-	desc->chip->unmask(irq);
+	desc->chip->irq_unmask(data);
 }
 }
 
 
-default_disable(irq)
+default_disable(struct irq_data *data)
 {
 {
-	if (!delay_disable(irq))
-		desc->chip->mask(irq);
+	if (!delay_disable(data))
+		desc->chip->irq_mask(data);
 }
 }
 
 
-default_ack(irq)
+default_ack(struct irq_data *data)
 {
 {
-	chip->ack(irq);
+	chip->irq_ack(data);
 }
 }
 
 
-default_mask_ack(irq)
+default_mask_ack(struct irq_data *data)
 {
 {
-	if (chip->mask_ack) {
-		chip->mask_ack(irq);
+	if (chip->irq_mask_ack) {
+		chip->irq_mask_ack(data);
 	} else {
 	} else {
-		chip->mask(irq);
-		chip->ack(irq);
+		chip->irq_mask(data);
+		chip->irq_ack(data);
 	}
 	}
 }
 }
 
 
-noop(irq)
+noop(struct irq_data *data))
 {
 {
 }
 }
 
 
@@ -278,12 +284,27 @@ noop(irq)
 		<para>
 		<para>
 		The following control flow is implemented (simplified excerpt):
 		The following control flow is implemented (simplified excerpt):
 		<programlisting>
 		<programlisting>
-desc->chip->start();
+desc->chip->irq_mask();
 handle_IRQ_event(desc->action);
 handle_IRQ_event(desc->action);
-desc->chip->end();
+desc->chip->irq_unmask();
 		</programlisting>
 		</programlisting>
 		</para>
 		</para>
-   	    </sect3>
+	    </sect3>
+	    <sect3 id="Default_FASTEOI_IRQ_flow_handler">
+		<title>Default Fast EOI IRQ flow handler</title>
+		<para>
+		handle_fasteoi_irq provides a generic implementation
+		for interrupts, which only need an EOI at the end of
+		the handler
+		</para>
+		<para>
+		The following control flow is implemented (simplified excerpt):
+		<programlisting>
+handle_IRQ_event(desc->action);
+desc->chip->irq_eoi();
+		</programlisting>
+		</para>
+	    </sect3>
 	    <sect3 id="Default_Edge_IRQ_flow_handler">
 	    <sect3 id="Default_Edge_IRQ_flow_handler">
 	 	<title>Default Edge IRQ flow handler</title>
 	 	<title>Default Edge IRQ flow handler</title>
 		<para>
 		<para>
@@ -294,20 +315,19 @@ desc->chip->end();
 		The following control flow is implemented (simplified excerpt):
 		The following control flow is implemented (simplified excerpt):
 		<programlisting>
 		<programlisting>
 if (desc->status &amp; running) {
 if (desc->status &amp; running) {
-	desc->chip->hold();
+	desc->chip->irq_mask();
 	desc->status |= pending | masked;
 	desc->status |= pending | masked;
 	return;
 	return;
 }
 }
-desc->chip->start();
+desc->chip->irq_ack();
 desc->status |= running;
 desc->status |= running;
 do {
 do {
 	if (desc->status &amp; masked)
 	if (desc->status &amp; masked)
-		desc->chip->enable();
+		desc->chip->irq_unmask();
 	desc->status &amp;= ~pending;
 	desc->status &amp;= ~pending;
 	handle_IRQ_event(desc->action);
 	handle_IRQ_event(desc->action);
 } while (status &amp; pending);
 } while (status &amp; pending);
 desc->status &amp;= ~running;
 desc->status &amp;= ~running;
-desc->chip->end();
 		</programlisting>
 		</programlisting>
 		</para>
 		</para>
    	    </sect3>
    	    </sect3>
@@ -342,9 +362,9 @@ handle_IRQ_event(desc->action);
 		<para>
 		<para>
 		The following control flow is implemented (simplified excerpt):
 		The following control flow is implemented (simplified excerpt):
 		<programlisting>
 		<programlisting>
-desc->chip->start();
 handle_IRQ_event(desc->action);
 handle_IRQ_event(desc->action);
-desc->chip->end();
+if (desc->chip->irq_eoi)
+        desc->chip->irq_eoi();
 		</programlisting>
 		</programlisting>
 		</para>
 		</para>
    	    </sect3>
    	    </sect3>
@@ -375,8 +395,7 @@ desc->chip->end();
 	mechanism. (It's necessary to enable CONFIG_HARDIRQS_SW_RESEND when
 	mechanism. (It's necessary to enable CONFIG_HARDIRQS_SW_RESEND when
 	you want to use the delayed interrupt disable feature and your
 	you want to use the delayed interrupt disable feature and your
 	hardware is not capable of retriggering	an interrupt.)
 	hardware is not capable of retriggering	an interrupt.)
-	The delayed interrupt disable can be runtime enabled, per interrupt,
-	by setting the IRQ_DELAYED_DISABLE flag in the irq_desc status field.
+	The delayed interrupt disable is not configurable.
 	</para>
 	</para>
 	</sect2>
 	</sect2>
     </sect1>
     </sect1>
@@ -387,13 +406,13 @@ desc->chip->end();
 	contains all the direct chip relevant functions, which
 	contains all the direct chip relevant functions, which
 	can be utilized by the irq flow implementations.
 	can be utilized by the irq flow implementations.
 	  <itemizedlist>
 	  <itemizedlist>
-	  <listitem><para>ack()</para></listitem>
-	  <listitem><para>mask_ack() - Optional, recommended for performance</para></listitem>
-	  <listitem><para>mask()</para></listitem>
-	  <listitem><para>unmask()</para></listitem>
-	  <listitem><para>retrigger() - Optional</para></listitem>
-	  <listitem><para>set_type() - Optional</para></listitem>
-	  <listitem><para>set_wake() - Optional</para></listitem>
+	  <listitem><para>irq_ack()</para></listitem>
+	  <listitem><para>irq_mask_ack() - Optional, recommended for performance</para></listitem>
+	  <listitem><para>irq_mask()</para></listitem>
+	  <listitem><para>irq_unmask()</para></listitem>
+	  <listitem><para>irq_retrigger() - Optional</para></listitem>
+	  <listitem><para>irq_set_type() - Optional</para></listitem>
+	  <listitem><para>irq_set_wake() - Optional</para></listitem>
 	  </itemizedlist>
 	  </itemizedlist>
 	These primitives are strictly intended to mean what they say: ack means
 	These primitives are strictly intended to mean what they say: ack means
 	ACK, masking means masking of an IRQ line, etc. It is up to the flow
 	ACK, masking means masking of an IRQ line, etc. It is up to the flow
@@ -458,6 +477,7 @@ desc->chip->end();
      <para>
      <para>
      This chapter contains the autogenerated documentation of the internal functions.
      This chapter contains the autogenerated documentation of the internal functions.
      </para>
      </para>
+!Ikernel/irq/irqdesc.c
 !Ikernel/irq/handle.c
 !Ikernel/irq/handle.c
 !Ikernel/irq/chip.c
 !Ikernel/irq/chip.c
   </chapter>
   </chapter>