ARC: irqflags - Interrupt enabling/disabling at in-core intc
authorVineet Gupta <vgupta@synopsys.com>
Fri, 18 Jan 2013 09:42:16 +0000 (15:12 +0530)
committerVineet Gupta <vgupta@synopsys.com>
Mon, 11 Feb 2013 14:30:30 +0000 (20:00 +0530)
commitac4c244d4e5d914f9a5642cdcc03b18780e55dbc
treefbc0a3da0a135dac46883eba654c862119060c3e
parentcfdbc2e16e65c1ec1c23057640607cee98d1a1bd
ARC: irqflags - Interrupt enabling/disabling at in-core intc

ARC700 has an in-core intc which provides 2 priorities (a.k.a.) "levels"
of interrupts (per IRQ) hencforth referred to as L1/L2 interrupts.

CPU flags register STATUS32 has Interrupt Enable bits per level (E1/E2)
to globally enable (or disable) all IRQs at a level. Hence the
implementation of arch_local_irq_{save,restore,enable,disable}( )

The STATUS32 reg can be r/w only using the AUX Interface of ARC, hence
the use of LR/SR instructions. Further, E1/E2 bits in there can only be
updated using the FLAG insn.

The intc supports 32 interrupts - and per IRQ enabling is controlled by
a bit in the AUX_IENABLE register, hence the implmentation of
arch_{,un}mask_irq( ) routines.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
arch/arc/include/asm/arcregs.h [new file with mode: 0644]
arch/arc/include/asm/irqflags.h [new file with mode: 0644]
arch/arc/kernel/irq.c [new file with mode: 0644]