MOXA linux-2.6.x / linux-2.6.19-uc1 from UC-7110-LX-BOOTLOADER-1.9_VERSION-4.2.tgz
[linux-2.6.19-moxart.git] / include / asm-nios2nommu / irq.h
blobf0e37a246a928ae367677522c9b70657a04d5b60
1 /*
2 * 21Mar2001 1.1 dgt/microtronix
4 * Copyright (C) 2004, Microtronix Datacom Ltd.
6 * All rights reserved.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
16 * NON INFRINGEMENT. See the GNU General Public License for more
17 * details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 #ifndef _NIOS2NOMMU_IRQ_H_
27 #define _NIOS2NOMMU_IRQ_H_
29 extern void disable_irq(unsigned int);
30 extern void enable_irq(unsigned int);
32 #include <linux/interrupt.h>
34 #define SYS_IRQS 32
35 #define NR_IRQS SYS_IRQS
38 * Interrupt source definitions
39 * General interrupt sources are the level 1-7.
40 * Adding an interrupt service routine for one of these sources
41 * results in the addition of that routine to a chain of routines.
42 * Each one is called in succession. Each individual interrupt
43 * service routine should determine if the device associated with
44 * that routine requires service.
47 #define IRQ01 (1) /* level 1 interrupt */
48 #define IRQ02 (2) /* level 2 interrupt */
49 #define IRQ03 (3) /* level 3 interrupt */
50 #define IRQ04 (4) /* level 4 interrupt */
51 #define IRQ05 (5) /* level 5 interrupt */
52 #define IRQ06 (6) /* level 6 interrupt */
53 #define IRQ07 (7) /* level 7 interrupt */
54 #define IRQ08 (8) /* level 8 interrupt */
55 #define IRQ09 (9) /* level 9 interrupt */
56 #define IRQ0A (10) /* level 10 interrupt */
57 #define IRQ0B (11) /* level 11 interrupt */
58 #define IRQ0C (12) /* level 12 interrupt */
59 #define IRQ0D (13) /* level 13 interrupt */
60 #define IRQ0E (14) /* level 14 interrupt */
61 #define IRQ0F (15) /* level 15 interrupt */
62 #define IRQ10 (16) /* level 16 interrupt */
63 #define IRQ12 (17) /* level 17 interrupt */
64 #define IRQ13 (18) /* level 18 interrupt */
65 #define IRQ14 (19) /* level 19 interrupt */
66 #define IRQ15 (20) /* level 20 interrupt */
67 #define IRQ16 (21) /* level 21 interrupt */
68 #define IRQ17 (22) /* level 22 interrupt */
69 #define IRQ18 (23) /* level 23 interrupt */
70 #define IRQ19 (24) /* level 24 interrupt */
71 #define IRQ1A (25) /* level 25 interrupt */
72 #define IRQ1B (26) /* level 26 interrupt */
73 #define IRQ1C (27) /* level 27 interrupt */
74 #define IRQ1D (28) /* level 28 interrupt */
75 #define IRQ1E (29) /* level 29 interrupt */
76 #define IRQ1F (30) /* level 30 interrupt */
77 #define IRQ20 (31) /* level 31 interrupt */
78 #define IRQ21 (32) /* level 32 interrupt */
80 #define IRQMAX IRQ21
83 * "Generic" interrupt sources
87 * Machine specific interrupt sources.
89 * Adding an interrupt service routine for a source with this bit
90 * set indicates a special machine specific interrupt source.
91 * The machine specific files define these sources.
93 * Removed, they are not used by any one.
97 * various flags for request_irq()
99 #define IRQ_FLG_LOCK (0x0001) /* handler is not replaceable */
100 #define IRQ_FLG_REPLACE (0x0002) /* replace existing handler */
101 #define IRQ_FLG_FAST (0x0004)
102 #define IRQ_FLG_SLOW (0x0008)
103 #define IRQ_FLG_STD (0x8000) /* internally used */
106 * Functions to set and clear the interrupt mask.
110 * Use a zero to clean the bit.
112 static inline void clrimr(int mask)
114 int flags;
116 local_irq_save(flags);
117 __asm__ __volatile__(
118 "rdctl r8, ienable\n"
119 "and r8,r8,%0\n"
120 "wrctl ienable, r8\n"
121 : /* No output */
122 : "r" (mask)
123 : "r8");
124 local_irq_restore(flags);
128 * Use a one to set the bit.
130 static inline void setimr(int mask)
132 int flags;
134 local_irq_save(flags);
135 __asm__ __volatile__(
136 "rdctl r8, ienable\n"
137 "or r8,r8,%0\n"
138 "wrctl ienable, r8\n"
139 : /* No output */
140 : "r" (mask)
141 : "r8");
142 local_irq_restore(flags);
146 * This structure is used to chain together the ISRs for a particular
147 * interrupt source (if it supports chaining).
149 typedef struct irq_node {
150 irq_handler_t handler;
151 unsigned long flags;
152 void *dev_id;
153 const char *devname;
154 struct irq_node *next;
155 } irq_node_t;
158 * This function returns a new irq_node_t
160 extern irq_node_t *new_irq_node(void);
163 * This structure has only 4 elements for speed reasons
165 typedef struct irq_hand {
166 irq_handler_t handler;
167 unsigned long flags;
168 void *dev_id;
169 const char *devname;
170 } irq_hand_t;
172 /* count of spurious interrupts */
173 extern volatile unsigned int num_spurious;
175 #define disable_irq_nosync(i) disable_irq(i)
177 #ifndef irq_canonicalize
178 #define irq_canonicalize(i) (i)
179 #endif
181 #endif /* _NIOS2NOMMU_IRQ_H_ */