genirq-update-kerneldoc.patch
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
06f6c3399e
commit
25ade601a0
|
@ -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))
|
if (!delay_disable(data))
|
||||||
desc->chip->mask(irq);
|
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) {
|
if (chip->irq_mask_ack) {
|
||||||
chip->mask_ack(irq);
|
chip->irq_mask_ack(data);
|
||||||
} else {
|
} else {
|
||||||
chip->mask(irq);
|
chip->irq_mask(data);
|
||||||
chip->ack(irq);
|
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 & running) {
|
if (desc->status & 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 & masked)
|
if (desc->status & masked)
|
||||||
desc->chip->enable();
|
desc->chip->irq_unmask();
|
||||||
desc->status &= ~pending;
|
desc->status &= ~pending;
|
||||||
handle_IRQ_event(desc->action);
|
handle_IRQ_event(desc->action);
|
||||||
} while (status & pending);
|
} while (status & pending);
|
||||||
desc->status &= ~running;
|
desc->status &= ~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,
|
The delayed interrupt disable is not configurable.
|
||||||
by setting the IRQ_DELAYED_DISABLE flag in the irq_desc status field.
|
|
||||||
</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>irq_ack()</para></listitem>
|
||||||
<listitem><para>mask_ack() - Optional, recommended for performance</para></listitem>
|
<listitem><para>irq_mask_ack() - Optional, recommended for performance</para></listitem>
|
||||||
<listitem><para>mask()</para></listitem>
|
<listitem><para>irq_mask()</para></listitem>
|
||||||
<listitem><para>unmask()</para></listitem>
|
<listitem><para>irq_unmask()</para></listitem>
|
||||||
<listitem><para>retrigger() - Optional</para></listitem>
|
<listitem><para>irq_retrigger() - Optional</para></listitem>
|
||||||
<listitem><para>set_type() - Optional</para></listitem>
|
<listitem><para>irq_set_type() - Optional</para></listitem>
|
||||||
<listitem><para>set_wake() - 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>
|
||||||
|
|
Loading…
Reference in New Issue