patch-1.3.94 linux/include/asm-m68k/irq.h
Next file: linux/include/asm-m68k/machdep.h
Previous file: linux/include/asm-m68k/ioctls.h
Back to the patch index
Back to the overall index
- Lines: 118
- Date:
Mon Apr 1 22:16:35 1996
- Orig file:
v1.3.93/linux/include/asm-m68k/irq.h
- Orig date:
Mon Nov 28 21:03:09 1994
diff -u --recursive --new-file v1.3.93/linux/include/asm-m68k/irq.h linux/include/asm-m68k/irq.h
@@ -1,6 +1,116 @@
#ifndef _M68K_IRQ_H_
#define _M68K_IRQ_H_
-/* dummy for m68k */
+extern void disable_irq(unsigned int);
+extern void enable_irq(unsigned int);
+
+#include <linux/config.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_ATARI)
+#define NR_IRQS 72
+#else
+#define NR_IRQS 24
+#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 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 */
+
+/*
+ * Machine specific interrupt sources.
+ *
+ * Adding an interrupt service routine for a source with this bit
+ * set indicates a special machine specific interrupt source.
+ * The machine specific files define these sources.
+ */
+
+#define IRQ_MACHSPEC (0x10000000L)
+
+#ifndef ISRFUNC_T
+struct pt_regs;
+typedef void (*isrfunc) (int irq, struct pt_regs * regs, void *data);
+#define ISRFUNC_T
+#endif /* ISRFUNC_T */
+
+/*
+ * 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;
+
+/* 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);
+
+/*
+ * 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);
+
+/*
+ * This routine may be used to call the isr routines in the passed list.
+ */
+extern void call_isr_list (int irq, isr_node_t *p, struct pt_regs *fp);
#endif /* _M68K_IRQ_H_ */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov
with Sam's (original) version of this