patch-2.0.21-2.1.0 linux/include/asm-m68k/irq.h
Next file: linux/include/asm-m68k/machdep.h
Previous file: linux/include/asm-m68k/ioctl.h
Back to the patch index
Back to the overall index
- Lines: 150
- Date:
Wed Sep 25 10:47:41 1996
- Orig file:
lx2.0/v2.0.21/linux/include/asm-m68k/irq.h
- Orig date:
Mon May 20 07:54:29 1996
diff -u --recursive --new-file lx2.0/v2.0.21/linux/include/asm-m68k/irq.h linux/include/asm-m68k/irq.h
@@ -7,15 +7,21 @@
#include <linux/config.h>
/*
+ * # of m68k interrupts
+ */
+
+#define SYS_IRQS 8
+
+/*
* 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_ATARI)
-#define NR_IRQS 72
+#define NR_IRQS (72+SYS_IRQS)
#else
-#define NR_IRQS 24
+#define NR_IRQS (24+SYS_IRQS)
#endif
/*
@@ -28,19 +34,19 @@
* that routine requires service.
*/
-#define IRQ1 (1) /* level 1 interrupt */
-#define IRQ2 (2) /* level 2 interrupt */
-#define IRQ3 (3) /* level 3 interrupt */
-#define IRQ4 (4) /* level 4 interrupt */
-#define IRQ5 (5) /* level 5 interrupt */
-#define IRQ6 (6) /* level 6 interrupt */
-#define IRQ7 (7) /* level 7 interrupt (non-maskable) */
+#define IRQ1 (1) /* level 1 interrupt */
+#define IRQ2 (2) /* level 2 interrupt */
+#define IRQ3 (3) /* level 3 interrupt */
+#define IRQ4 (4) /* level 4 interrupt */
+#define IRQ5 (5) /* level 5 interrupt */
+#define IRQ6 (6) /* level 6 interrupt */
+#define IRQ7 (7) /* level 7 interrupt (non-maskable) */
/*
* "Generic" interrupt sources
*/
-#define IRQ_SCHED_TIMER (8) /* interrupt source for scheduling timer */
+#define IRQ_SCHED_TIMER (8) /* interrupt source for scheduling timer */
/*
* Machine specific interrupt sources.
@@ -50,67 +56,46 @@
* The machine specific files define these sources.
*/
-#define IRQ_MACHSPEC (0x10000000L)
+#define IRQ_MACHSPEC (0x10000000L)
+#define IRQ_IDX(irq) ((irq) & ~IRQ_MACHSPEC)
-#ifndef ISRFUNC_T
-struct pt_regs;
-typedef void (*isrfunc) (int irq, struct pt_regs * regs, void *data);
-#define ISRFUNC_T
-#endif /* ISRFUNC_T */
+/*
+ * various flags for request_irq()
+ */
+#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 */
/*
* This structure is used to chain together the ISRs for a particular
* interrupt source (if it supports chaining).
*/
-typedef struct isr_node {
- isrfunc isr;
- int pri;
- void *data;
- char *name;
- struct isr_node *next;
-} isr_node_t;
+typedef struct irq_node {
+ void (*handler)(int, void *, struct pt_regs *);
+ unsigned long flags;
+ void *dev_id;
+ const char *devname;
+ struct irq_node *next;
+} irq_node_t;
+
+/*
+ * This structure has only 4 elements for speed reasons
+ */
+typedef struct irq_handler {
+ void (*handler)(int, void *, struct pt_regs *);
+ unsigned long flags;
+ void *dev_id;
+ const char *devname;
+} irq_handler_t;
/* count of spurious interrupts */
-extern volatile unsigned long num_spurious;
-
-/*
- * This function returns a new isr_node_t
- */
-extern isr_node_t *new_isr_node(void);
-
-/*
- * This function is used to add a specific interrupt service routine
- * for the specified interrupt source.
- *
- * If the source is machine specific, it will be passed along to the
- * machine specific routine.
- *
- * "data" is user specified data which will be passed to the isr routine.
- *
- * (isrfunc is defined in linux/config.h)
- */
-extern int add_isr (unsigned long source, isrfunc isr, int pri, void
- *data, char *name);
-
-/*
- * This routine will remove an isr for the specified interrupt source.
- */
-extern int remove_isr (unsigned long source, isrfunc isr, void *data);
-
-/*
- * This routine will insert an isr_node_t into a chain of nodes, using
- * the priority stored in the node.
- */
-extern void insert_isr (isr_node_t **listp, isr_node_t *node);
-
-/*
- * This routine will delete the isr node for isr from a chain of nodes
- */
-extern void delete_isr (isr_node_t **listp, isrfunc isr, void *data);
+extern volatile unsigned int num_spurious;
/*
- * This routine may be used to call the isr routines in the passed list.
+ * This function returns a new irq_node_t
*/
-extern void call_isr_list (int irq, isr_node_t *p, struct pt_regs *fp);
+extern irq_node_t *new_irq_node(void);
#endif /* _M68K_IRQ_H_ */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov