Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.15-rc7 135 lines 3.7 kB view raw
1/* 2 * linux/include/asm-arm/mach/irq.h 3 * 4 * Copyright (C) 1995-2000 Russell King. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10#ifndef __ASM_ARM_MACH_IRQ_H 11#define __ASM_ARM_MACH_IRQ_H 12 13struct irqdesc; 14struct pt_regs; 15struct seq_file; 16 17typedef void (*irq_handler_t)(unsigned int, struct irqdesc *, struct pt_regs *); 18typedef void (*irq_control_t)(unsigned int); 19 20struct irqchip { 21 /* 22 * Acknowledge the IRQ. 23 * If this is a level-based IRQ, then it is expected to mask the IRQ 24 * as well. 25 */ 26 void (*ack)(unsigned int); 27 /* 28 * Mask the IRQ in hardware. 29 */ 30 void (*mask)(unsigned int); 31 /* 32 * Unmask the IRQ in hardware. 33 */ 34 void (*unmask)(unsigned int); 35 /* 36 * Ask the hardware to re-trigger the IRQ. 37 * Note: This method _must_ _not_ call the interrupt handler. 38 * If you are unable to retrigger the interrupt, do not 39 * provide a function, or if you do, return non-zero. 40 */ 41 int (*retrigger)(unsigned int); 42 /* 43 * Set the type of the IRQ. 44 */ 45 int (*set_type)(unsigned int, unsigned int); 46 /* 47 * Set wakeup-enable on the selected IRQ 48 */ 49 int (*set_wake)(unsigned int, unsigned int); 50 51#ifdef CONFIG_SMP 52 /* 53 * Route an interrupt to a CPU 54 */ 55 void (*set_cpu)(struct irqdesc *desc, unsigned int irq, unsigned int cpu); 56#endif 57}; 58 59struct irqdesc { 60 irq_handler_t handle; 61 struct irqchip *chip; 62 struct irqaction *action; 63 struct list_head pend; 64 void *chipdata; 65 void *data; 66 unsigned int disable_depth; 67 68 unsigned int triggered: 1; /* IRQ has occurred */ 69 unsigned int running : 1; /* IRQ is running */ 70 unsigned int pending : 1; /* IRQ is pending */ 71 unsigned int probing : 1; /* IRQ in use for a probe */ 72 unsigned int probe_ok : 1; /* IRQ can be used for probe */ 73 unsigned int valid : 1; /* IRQ claimable */ 74 unsigned int noautoenable : 1; /* don't automatically enable IRQ */ 75 unsigned int unused :25; 76 77 struct proc_dir_entry *procdir; 78 79#ifdef CONFIG_SMP 80 cpumask_t affinity; 81 unsigned int cpu; 82#endif 83 84 /* 85 * IRQ lock detection 86 */ 87 unsigned int lck_cnt; 88 unsigned int lck_pc; 89 unsigned int lck_jif; 90}; 91 92extern struct irqdesc irq_desc[]; 93 94/* 95 * Helpful inline function for calling irq descriptor handlers. 96 */ 97static inline void desc_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) 98{ 99 desc->handle(irq, desc, regs); 100} 101 102/* 103 * This is internal. Do not use it. 104 */ 105extern void (*init_arch_irq)(void); 106extern void init_FIQ(void); 107extern int show_fiq_list(struct seq_file *, void *); 108void __set_irq_handler(unsigned int irq, irq_handler_t, int); 109 110/* 111 * External stuff. 112 */ 113#define set_irq_handler(irq,handler) __set_irq_handler(irq,handler,0) 114#define set_irq_chained_handler(irq,handler) __set_irq_handler(irq,handler,1) 115#define set_irq_data(irq,d) do { irq_desc[irq].data = d; } while (0) 116#define set_irq_chipdata(irq,d) do { irq_desc[irq].chipdata = d; } while (0) 117#define get_irq_chipdata(irq) (irq_desc[irq].chipdata) 118 119void set_irq_chip(unsigned int irq, struct irqchip *); 120void set_irq_flags(unsigned int irq, unsigned int flags); 121 122#define IRQF_VALID (1 << 0) 123#define IRQF_PROBE (1 << 1) 124#define IRQF_NOAUTOEN (1 << 2) 125 126/* 127 * Built-in IRQ handlers. 128 */ 129void do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); 130void do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); 131void do_simple_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); 132void do_bad_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); 133void dummy_mask_unmask_irq(unsigned int irq); 134 135#endif