irq.h

来自「linux 内核源代码」· C头文件 代码 · 共 126 行

H
126
字号
#ifndef _M68K_IRQ_H_#define _M68K_IRQ_H_#include <linux/linkage.h>#include <linux/hardirq.h>#include <linux/spinlock_types.h>/* * This should be the same as the max(NUM_X_SOURCES) for all the * different m68k hosts compiled into the kernel. * Currently the Atari has 72 and the Amiga 24, but if both are * supported in the kernel it is better to make room for 72. */#if defined(CONFIG_VME) || defined(CONFIG_SUN3) || defined(CONFIG_SUN3X)#define NR_IRQS 200#elif defined(CONFIG_ATARI) || defined(CONFIG_MAC)#define NR_IRQS 72#elif defined(CONFIG_Q40)#define NR_IRQS	43#elif defined(CONFIG_AMIGA)#define NR_IRQS	32#elif defined(CONFIG_APOLLO)#define NR_IRQS	24#elif defined(CONFIG_HP300)#define NR_IRQS	8#else#error unknown nr of irqs#endif/* * The hardirq mask has to be large enough to have * space for potentially all IRQ sources in the system * nesting on a single CPU: */#if (1 << HARDIRQ_BITS) < NR_IRQS# error HARDIRQ_BITS is too low!#endif/* * Interrupt source definitions * General interrupt sources are the level 1-7. * Adding an interrupt service routine for one of these sources * results in the addition of that routine to a chain of routines. * Each one is called in succession.  Each individual interrupt * service routine should determine if the device associated with * that routine requires service. */#define IRQ_SPURIOUS	0#define IRQ_AUTO_1	1	/* level 1 interrupt */#define IRQ_AUTO_2	2	/* level 2 interrupt */#define IRQ_AUTO_3	3	/* level 3 interrupt */#define IRQ_AUTO_4	4	/* level 4 interrupt */#define IRQ_AUTO_5	5	/* level 5 interrupt */#define IRQ_AUTO_6	6	/* level 6 interrupt */#define IRQ_AUTO_7	7	/* level 7 interrupt (non-maskable) */#define IRQ_USER	8extern unsigned int irq_canonicalize(unsigned int irq);struct pt_regs;/* * various flags for request_irq() - the Amiga now uses the standard * mechanism like all other architectures - IRQF_DISABLED and * IRQF_SHARED are your friends. */#ifndef MACH_AMIGA_ONLY#define IRQ_FLG_LOCK	(0x0001)	/* handler is not replaceable	*/#define IRQ_FLG_REPLACE	(0x0002)	/* replace existing handler	*/#define IRQ_FLG_FAST	(0x0004)#define IRQ_FLG_SLOW	(0x0008)#define IRQ_FLG_STD	(0x8000)	/* internally used		*/#endif/* * This structure is used to chain together the ISRs for a particular * interrupt source (if it supports chaining). */typedef struct irq_node {	int		(*handler)(int, void *);	void		*dev_id;	struct irq_node *next;	unsigned long	flags;	const char	*devname;} irq_node_t;/* * This structure has only 4 elements for speed reasons */struct irq_handler {	int		(*handler)(int, void *);	unsigned long	flags;	void		*dev_id;	const char	*devname;};struct irq_controller {	const char *name;	spinlock_t lock;	int (*startup)(unsigned int irq);	void (*shutdown)(unsigned int irq);	void (*enable)(unsigned int irq);	void (*disable)(unsigned int irq);};extern int m68k_irq_startup(unsigned int);extern void m68k_irq_shutdown(unsigned int);/* * This function returns a new irq_node_t */extern irq_node_t *new_irq_node(void);extern void m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *));extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt,				      void (*handler)(unsigned int, struct pt_regs *));extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int);asmlinkage void m68k_handle_int(unsigned int);asmlinkage void __m68k_handle_int(unsigned int, struct pt_regs *);#endif /* _M68K_IRQ_H_ */

⌨️ 快捷键说明

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