| /* | 
 |  *  linux/include/asm-arm/mach/irq.h | 
 |  * | 
 |  *  Copyright (C) 1995-2000 Russell King. | 
 |  * | 
 |  * This program is free software; you can redistribute it and/or modify | 
 |  * it under the terms of the GNU General Public License version 2 as | 
 |  * published by the Free Software Foundation. | 
 |  */ | 
 | #ifndef __ASM_ARM_MACH_IRQ_H | 
 | #define __ASM_ARM_MACH_IRQ_H | 
 |  | 
 | struct irqdesc; | 
 | struct pt_regs; | 
 | struct seq_file; | 
 |  | 
 | typedef void (*irq_handler_t)(unsigned int, struct irqdesc *, struct pt_regs *); | 
 | typedef void (*irq_control_t)(unsigned int); | 
 |  | 
 | struct irqchip { | 
 | 	/* | 
 | 	 * Acknowledge the IRQ. | 
 | 	 * If this is a level-based IRQ, then it is expected to mask the IRQ | 
 | 	 * as well. | 
 | 	 */ | 
 | 	void (*ack)(unsigned int); | 
 | 	/* | 
 | 	 * Mask the IRQ in hardware. | 
 | 	 */ | 
 | 	void (*mask)(unsigned int); | 
 | 	/* | 
 | 	 * Unmask the IRQ in hardware. | 
 | 	 */ | 
 | 	void (*unmask)(unsigned int); | 
 | 	/* | 
 | 	 * Re-run the IRQ | 
 | 	 */ | 
 | 	void (*rerun)(unsigned int); | 
 | 	/* | 
 | 	 * Set the type of the IRQ. | 
 | 	 */ | 
 | 	int (*type)(unsigned int, unsigned int); | 
 | }; | 
 |  | 
 | struct irqdesc { | 
 | 	irq_handler_t	handle; | 
 | 	struct irqchip	*chip; | 
 | 	struct irqaction *action; | 
 |  | 
 | 	unsigned int	enabled  : 1;		/* IRQ is currently enabled   */ | 
 | 	unsigned int	triggered: 1;		/* IRQ has occurred	      */ | 
 | 	unsigned int	running  : 1;		/* IRQ is running             */ | 
 | 	unsigned int	pending  : 1;		/* IRQ is pending	      */ | 
 | 	unsigned int	probing  : 1;		/* IRQ in use for a probe     */ | 
 | 	unsigned int	probe_ok : 1;		/* IRQ can be used for probe  */ | 
 | 	unsigned int	valid    : 1;		/* IRQ claimable	      */ | 
 | 	unsigned int	noautoenable : 1;	/* don't automatically enable IRQ */ | 
 | 	unsigned int	unused   :23; | 
 | 	unsigned int	depth;			/* disable depth	      */ | 
 |  | 
 | 	/* | 
 | 	 * IRQ lock detection | 
 | 	 */ | 
 | 	unsigned int	lck_cnt; | 
 | 	unsigned int	lck_pc; | 
 | 	unsigned int	lck_jif; | 
 | }; | 
 |  | 
 | extern struct irqdesc irq_desc[]; | 
 |  | 
 | /* | 
 |  * This is internal.  Do not use it. | 
 |  */ | 
 | extern void (*init_arch_irq)(void); | 
 | extern void init_FIQ(void); | 
 | extern int show_fiq_list(struct seq_file *, void *); | 
 | void __set_irq_handler(unsigned int irq, irq_handler_t, int); | 
 |  | 
 | /* | 
 |  * External stuff. | 
 |  */ | 
 | #define set_irq_handler(irq,handler)		__set_irq_handler(irq,handler,0) | 
 | #define set_irq_chained_handler(irq,handler)	__set_irq_handler(irq,handler,1) | 
 |  | 
 | void set_irq_chip(unsigned int irq, struct irqchip *); | 
 | void set_irq_flags(unsigned int irq, unsigned int flags); | 
 |  | 
 | #define IRQF_VALID	(1 << 0) | 
 | #define IRQF_PROBE	(1 << 1) | 
 | #define IRQF_NOAUTOEN	(1 << 2) | 
 |  | 
 | /* | 
 |  * Built-in IRQ handlers. | 
 |  */ | 
 | void do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | 
 | void do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | 
 | void do_simple_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | 
 | void do_bad_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | 
 | void dummy_mask_unmask_irq(unsigned int irq); | 
 |  | 
 | #endif |