Interrupt handling....

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've taken it upon myself to re-write some interrupt handling code.
It's a mess, and it needs cleaning.

So, I need to understand a few things about how interrupts are
handled.  I'd appreciate it if someone could tell me if I'm on the
right track here...

As far as I can see, the default for the mips arch is to support up to
128 interrupts, tho that can be changed with a #define NR_IRQS at
compile time.  The mapping of an interrupt source to a particular
number is pretty much up to the board-specific code, it looks like.

An interrupt handler must be registered with set_except_vector(0, ...)
which must return a numeric code in the range of 0..NR_IRQS -- it can
do this in any way it wants, including limited function calls (ie
there is a stack in place).

The irq_desc array of irq_desc_t structures is where the magic
happens.  The value returned by the interrupt handler is used as an
index into this array to do the dispatch a specific handler.  The
'status' and 'action' fields are pretty much self-explanatory.  The
'handler' field seems to point to a set of function pointers used for
enabling/disabling the IRQ.  But what is 'depth' for?  Boards seem to
set it to either 0 or 1 commonly, but I don't see why.  I also don't
see how IRQ sharing is accomplished...

Is this pretty much how it all works?

Matt

--
Matthew D. Dharm                            Senior Software Designer
Momentum Computer Inc.                      1815 Aston Ave.  Suite 107
(760) 431-8663 X-115                        Carlsbad, CA 92008-7310
Momentum Works For You                      www.momenco.com



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux