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

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