irq.h

来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 331 行

H
331
字号
#ifdef __KERNEL__#ifndef _ASM_IRQ_H#define _ASM_IRQ_H#include <linux/config.h>#include <asm/machdep.h>		/* ppc_md */#include <asm/atomic.h>extern void disable_irq(unsigned int);extern void disable_irq_nosync(unsigned int);extern void enable_irq(unsigned int);/* * These constants are used for passing information about interrupt * signal polarity and level/edge sensing to the low-level PIC chip * drivers. */#define IRQ_SENSE_MASK		0x1#define IRQ_SENSE_LEVEL		0x1	/* interrupt on active level */#define IRQ_SENSE_EDGE		0x0	/* interrupt triggered by edge */#define IRQ_POLARITY_MASK	0x2#define IRQ_POLARITY_POSITIVE	0x2	/* high level or low->high edge */#define IRQ_POLARITY_NEGATIVE	0x0	/* low level or high->low edge */#if defined(CONFIG_40x)#include <asm/ibm4xx.h>#ifndef NR_BOARD_IRQS#define NR_BOARD_IRQS 0#endif#ifndef UIC_WIDTH /* Number of interrupts per device */#define UIC_WIDTH 32#endif#ifndef NR_UICS /* number  of UIC devices */#define NR_UICS 1#endif#if defined (CONFIG_403)/* * The PowerPC 403 cores' Asynchronous Interrupt Controller (AIC) has * 32 possible interrupts, a majority of which are not implemented on * all cores. There are six configurable, external interrupt pins and * there are eight internal interrupts for the on-chip serial port * (SPU), DMA controller, and JTAG controller. * */#define	NR_AIC_IRQS 32#define	NR_IRQS	 (NR_AIC_IRQS + NR_BOARD_IRQS)#elif !defined (CONFIG_403)/* *  The PowerPC 405 cores' Universal Interrupt Controller (UIC) has 32 * possible interrupts as well. There are seven, configurable external * interrupt pins and there are 17 internal interrupts for the on-chip * serial port, DMA controller, on-chip Ethernet controller, PCI, etc. * */#define NR_UIC_IRQS UIC_WIDTH#define NR_IRQS		((NR_UIC_IRQS * NR_UICS) + NR_BOARD_IRQS)#endifstatic __inline__ intirq_canonicalize(int irq){	return (irq);}#elif defined(CONFIG_44x)#include <asm/ibm44x.h>#define	NR_UIC_IRQS	32#define	NR_IRQS		((NR_UIC_IRQS * NR_UICS) + NR_BOARD_IRQS)static __inline__ intirq_canonicalize(int irq){	return (irq);}#elif defined(CONFIG_8xx)/* The MPC8xx cores have 16 possible interrupts.  There are eight * possible level sensitive interrupts assigned and generated internally * from such devices as CPM, PCMCIA, RTC, PIT, TimeBase and Decrementer. * There are eight external interrupts (IRQs) that can be configured * as either level or edge sensitive. * * On some implementations, there is also the possibility of an 8259 * through the PCI and PCI-ISA bridges. */#define NR_SIU_INTS	16#define NR_IRQS	(NR_SIU_INTS + NR_8259_INTS)/* These values must be zero-based and map 1:1 with the SIU configuration. * They are used throughout the 8xx I/O subsystem to generate * interrupt masks, flags, and other control patterns.  This is why the * current kernel assumption of the 8259 as the base controller is such * a pain in the butt. */#define	SIU_IRQ0	(0)	/* Highest priority */#define	SIU_LEVEL0	(1)#define	SIU_IRQ1	(2)#define	SIU_LEVEL1	(3)#define	SIU_IRQ2	(4)#define	SIU_LEVEL2	(5)#define	SIU_IRQ3	(6)#define	SIU_LEVEL3	(7)#define	SIU_IRQ4	(8)#define	SIU_LEVEL4	(9)#define	SIU_IRQ5	(10)#define	SIU_LEVEL5	(11)#define	SIU_IRQ6	(12)#define	SIU_LEVEL6	(13)#define	SIU_IRQ7	(14)#define	SIU_LEVEL7	(15)/* Now include the board configuration specific associations.*/#include <asm/mpc8xx.h>/* The internal interrupts we can configure as we see fit. * My personal preference is CPM at level 2, which puts it above the * MBX PCI/ISA/IDE interrupts. */#ifndef PIT_INTERRUPT#define PIT_INTERRUPT		SIU_LEVEL0#endif#ifndef	CPM_INTERRUPT#define CPM_INTERRUPT		SIU_LEVEL2#endif#ifndef	PCMCIA_INTERRUPT#define PCMCIA_INTERRUPT	SIU_LEVEL6#endif#ifndef	DEC_INTERRUPT#define DEC_INTERRUPT		SIU_LEVEL7#endif/* Some internal interrupt registers use an 8-bit mask for the interrupt * level instead of a number. */#define	mk_int_int_mask(IL) (1 << (7 - (IL/2)))/* always the same on 8xx -- Cort */static __inline__ int irq_canonicalize(int irq){	return irq;}#elif defined(CONFIG_CPM2) && defined(CONFIG_85xx)/* Now include the board configuration specific associations.*/#include <asm/mpc85xx.h>/* The MPC8560 openpic has  32 internal interrupts and 12 external * interrupts. * * We are "flattening" the interrupt vectors of the cascaded CPM * so that we can uniquely identify any interrupt source with a * single integer. */#define NR_CPM_INTS	64#define NR_EPIC_INTS	44#ifndef NR_8259_INTS#define NR_8259_INTS 0#endif#define NUM_8259_INTERRUPTS NR_8259_INTS#ifndef CPM_IRQ_OFFSET#define CPM_IRQ_OFFSET	0#endif#define NR_IRQS	(NR_EPIC_INTS + NR_CPM_INTS + NR_8259_INTS)/* These values must be zero-based and map 1:1 with the EPIC configuration. * They are used throughout the 8560 I/O subsystem to generate * interrupt masks, flags, and other control patterns.  This is why the * current kernel assumption of the 8259 as the base controller is such * a pain in the butt. */#define	SIU_INT_ERROR		((uint)0x00+CPM_IRQ_OFFSET)#define	SIU_INT_I2C		((uint)0x01+CPM_IRQ_OFFSET)#define	SIU_INT_SPI		((uint)0x02+CPM_IRQ_OFFSET)#define	SIU_INT_RISC		((uint)0x03+CPM_IRQ_OFFSET)#define	SIU_INT_SMC1		((uint)0x04+CPM_IRQ_OFFSET)#define	SIU_INT_SMC2		((uint)0x05+CPM_IRQ_OFFSET)#define	SIU_INT_TIMER1		((uint)0x0c+CPM_IRQ_OFFSET)#define	SIU_INT_TIMER2		((uint)0x0d+CPM_IRQ_OFFSET)#define	SIU_INT_TIMER3		((uint)0x0e+CPM_IRQ_OFFSET)#define	SIU_INT_TIMER4		((uint)0x0f+CPM_IRQ_OFFSET)#define	SIU_INT_FCC1		((uint)0x20+CPM_IRQ_OFFSET)#define	SIU_INT_FCC2		((uint)0x21+CPM_IRQ_OFFSET)#define	SIU_INT_FCC3		((uint)0x22+CPM_IRQ_OFFSET)#define	SIU_INT_MCC1		((uint)0x24+CPM_IRQ_OFFSET)#define	SIU_INT_MCC2		((uint)0x25+CPM_IRQ_OFFSET)#define	SIU_INT_SCC1		((uint)0x28+CPM_IRQ_OFFSET)#define	SIU_INT_SCC2		((uint)0x29+CPM_IRQ_OFFSET)#define	SIU_INT_SCC3		((uint)0x2a+CPM_IRQ_OFFSET)#define	SIU_INT_SCC4		((uint)0x2b+CPM_IRQ_OFFSET)#define	SIU_INT_PC15		((uint)0x30+CPM_IRQ_OFFSET)#define	SIU_INT_PC14		((uint)0x31+CPM_IRQ_OFFSET)#define	SIU_INT_PC13		((uint)0x32+CPM_IRQ_OFFSET)#define	SIU_INT_PC12		((uint)0x33+CPM_IRQ_OFFSET)#define	SIU_INT_PC11		((uint)0x34+CPM_IRQ_OFFSET)#define	SIU_INT_PC10		((uint)0x35+CPM_IRQ_OFFSET)#define	SIU_INT_PC9		((uint)0x36+CPM_IRQ_OFFSET)#define	SIU_INT_PC8		((uint)0x37+CPM_IRQ_OFFSET)#define	SIU_INT_PC7		((uint)0x38+CPM_IRQ_OFFSET)#define	SIU_INT_PC6		((uint)0x39+CPM_IRQ_OFFSET)#define	SIU_INT_PC5		((uint)0x3a+CPM_IRQ_OFFSET)#define	SIU_INT_PC4		((uint)0x3b+CPM_IRQ_OFFSET)#define	SIU_INT_PC3		((uint)0x3c+CPM_IRQ_OFFSET)#define	SIU_INT_PC2		((uint)0x3d+CPM_IRQ_OFFSET)#define	SIU_INT_PC1		((uint)0x3e+CPM_IRQ_OFFSET)#define	SIU_INT_PC0		((uint)0x3f+CPM_IRQ_OFFSET)static __inline__ int irq_canonicalize(int irq){	return irq;}#else /* CONFIG_40x + CONFIG_8xx *//* * this is the # irq's for all ppc arch's (pmac/chrp/prep) * so it is the max of them all */#define NR_IRQS			256#ifndef CONFIG_8260#define NUM_8259_INTERRUPTS	16#else /* CONFIG_8260 *//* The 8260 has an internal interrupt controller with a maximum of * 64 IRQs.  We will use NR_IRQs from above since it is large enough. * Don't be confused by the 8260 documentation where they list an * "interrupt number" and "interrupt vector".  We are only interested * in the interrupt vector.  There are "reserved" holes where the * vector number increases, but the interrupt number in the table does not. * (Document errata updates have fixed this...make sure you have up to * date processor documentation -- Dan). */#define NR_SIU_INTS	64#define	SIU_INT_ERROR		((uint)0x00)#define	SIU_INT_I2C		((uint)0x01)#define	SIU_INT_SPI		((uint)0x02)#define	SIU_INT_RISC		((uint)0x03)#define	SIU_INT_SMC1		((uint)0x04)#define	SIU_INT_SMC2		((uint)0x05)#define	SIU_INT_IDMA1		((uint)0x06)#define	SIU_INT_IDMA2		((uint)0x07)#define	SIU_INT_IDMA3		((uint)0x08)#define	SIU_INT_IDMA4		((uint)0x09)#define	SIU_INT_SDMA		((uint)0x0a)#define	SIU_INT_TIMER1		((uint)0x0c)#define	SIU_INT_TIMER2		((uint)0x0d)#define	SIU_INT_TIMER3		((uint)0x0e)#define	SIU_INT_TIMER4		((uint)0x0f)#define	SIU_INT_TMCNT		((uint)0x10)#define	SIU_INT_PIT		((uint)0x11)#define	SIU_INT_IRQ1		((uint)0x13)#define	SIU_INT_IRQ2		((uint)0x14)#define	SIU_INT_IRQ3		((uint)0x15)#define	SIU_INT_IRQ4		((uint)0x16)#define	SIU_INT_IRQ5		((uint)0x17)#define	SIU_INT_IRQ6		((uint)0x18)#define	SIU_INT_IRQ7		((uint)0x19)#define	SIU_INT_FCC1		((uint)0x20)#define	SIU_INT_FCC2		((uint)0x21)#define	SIU_INT_FCC3		((uint)0x22)#define	SIU_INT_MCC1		((uint)0x24)#define	SIU_INT_MCC2		((uint)0x25)#define	SIU_INT_SCC1		((uint)0x28)#define	SIU_INT_SCC2		((uint)0x29)#define	SIU_INT_SCC3		((uint)0x2a)#define	SIU_INT_SCC4		((uint)0x2b)#define	SIU_INT_PC15		((uint)0x30)#define	SIU_INT_PC14		((uint)0x31)#define	SIU_INT_PC13		((uint)0x32)#define	SIU_INT_PC12		((uint)0x33)#define	SIU_INT_PC11		((uint)0x34)#define	SIU_INT_PC10		((uint)0x35)#define	SIU_INT_PC9		((uint)0x36)#define	SIU_INT_PC8		((uint)0x37)#define	SIU_INT_PC7		((uint)0x38)#define	SIU_INT_PC6		((uint)0x39)#define	SIU_INT_PC5		((uint)0x3a)#define	SIU_INT_PC4		((uint)0x3b)#define	SIU_INT_PC3		((uint)0x3c)#define	SIU_INT_PC2		((uint)0x3d)#define	SIU_INT_PC1		((uint)0x3e)#define	SIU_INT_PC0		((uint)0x3f)#endif /* CONFIG_8260 *//* * This gets called from serial.c, which is now used on * powermacs as well as prep/chrp boxes. * Prep and chrp both have cascaded 8259 PICs. */static __inline__ int irq_canonicalize(int irq){	if (ppc_md.irq_canonicalize)		return ppc_md.irq_canonicalize(irq);	return irq;}#endif#define NR_MASK_WORDS	((NR_IRQS + 31) / 32)/* pedantic: these are long because they are used with set_bit --RR */extern unsigned long ppc_cached_irq_mask[NR_MASK_WORDS];extern unsigned long ppc_lost_interrupts[NR_MASK_WORDS];extern atomic_t ppc_n_lost_interrupts;struct irqaction;struct pt_regs;int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *);#endif /* _ASM_IRQ_H */#endif /* __KERNEL__ */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?