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

m68k: merge mmu and non-mmu versions of irq.h

It is reasonably strait forward to merge the mmu and non-mmu versions
of irq.h. Most of the defines and structs are not needed on non-mmu.

Signed-off-by: Greg Ungerer <gerg@uclinux.org>

+132 -155
+132 -3
arch/m68k/include/asm/irq.h
··· 1 - #ifdef __uClinux__ 2 - #include "irq_no.h" 1 + #ifndef _M68K_IRQ_H_ 2 + #define _M68K_IRQ_H_ 3 + 4 + /* 5 + * This should be the same as the max(NUM_X_SOURCES) for all the 6 + * different m68k hosts compiled into the kernel. 7 + * Currently the Atari has 72 and the Amiga 24, but if both are 8 + * supported in the kernel it is better to make room for 72. 9 + */ 10 + #if defined(CONFIG_COLDFIRE) 11 + #define NR_IRQS 256 12 + #elif defined(CONFIG_VME) || defined(CONFIG_SUN3) || defined(CONFIG_SUN3X) 13 + #define NR_IRQS 200 14 + #elif defined(CONFIG_ATARI) || defined(CONFIG_MAC) 15 + #define NR_IRQS 72 16 + #elif defined(CONFIG_Q40) 17 + #define NR_IRQS 43 18 + #elif defined(CONFIG_AMIGA) || !defined(CONFIG_MMU) 19 + #define NR_IRQS 32 20 + #elif defined(CONFIG_APOLLO) 21 + #define NR_IRQS 24 22 + #elif defined(CONFIG_HP300) 23 + #define NR_IRQS 8 3 24 #else 4 - #include "irq_mm.h" 25 + #define NR_IRQS 0 5 26 #endif 27 + 28 + #ifdef CONFIG_MMU 29 + 30 + #include <linux/linkage.h> 31 + #include <linux/hardirq.h> 32 + #include <linux/irqreturn.h> 33 + #include <linux/spinlock_types.h> 34 + 35 + /* 36 + * The hardirq mask has to be large enough to have 37 + * space for potentially all IRQ sources in the system 38 + * nesting on a single CPU: 39 + */ 40 + #if (1 << HARDIRQ_BITS) < NR_IRQS 41 + # error HARDIRQ_BITS is too low! 42 + #endif 43 + 44 + /* 45 + * Interrupt source definitions 46 + * General interrupt sources are the level 1-7. 47 + * Adding an interrupt service routine for one of these sources 48 + * results in the addition of that routine to a chain of routines. 49 + * Each one is called in succession. Each individual interrupt 50 + * service routine should determine if the device associated with 51 + * that routine requires service. 52 + */ 53 + 54 + #define IRQ_SPURIOUS 0 55 + 56 + #define IRQ_AUTO_1 1 /* level 1 interrupt */ 57 + #define IRQ_AUTO_2 2 /* level 2 interrupt */ 58 + #define IRQ_AUTO_3 3 /* level 3 interrupt */ 59 + #define IRQ_AUTO_4 4 /* level 4 interrupt */ 60 + #define IRQ_AUTO_5 5 /* level 5 interrupt */ 61 + #define IRQ_AUTO_6 6 /* level 6 interrupt */ 62 + #define IRQ_AUTO_7 7 /* level 7 interrupt (non-maskable) */ 63 + 64 + #define IRQ_USER 8 65 + 66 + extern unsigned int irq_canonicalize(unsigned int irq); 67 + 68 + struct pt_regs; 69 + 70 + /* 71 + * various flags for request_irq() - the Amiga now uses the standard 72 + * mechanism like all other architectures - IRQF_DISABLED and 73 + * IRQF_SHARED are your friends. 74 + */ 75 + #ifndef MACH_AMIGA_ONLY 76 + #define IRQ_FLG_LOCK (0x0001) /* handler is not replaceable */ 77 + #define IRQ_FLG_REPLACE (0x0002) /* replace existing handler */ 78 + #define IRQ_FLG_FAST (0x0004) 79 + #define IRQ_FLG_SLOW (0x0008) 80 + #define IRQ_FLG_STD (0x8000) /* internally used */ 81 + #endif 82 + 83 + /* 84 + * This structure is used to chain together the ISRs for a particular 85 + * interrupt source (if it supports chaining). 86 + */ 87 + typedef struct irq_node { 88 + irqreturn_t (*handler)(int, void *); 89 + void *dev_id; 90 + struct irq_node *next; 91 + unsigned long flags; 92 + const char *devname; 93 + } irq_node_t; 94 + 95 + /* 96 + * This structure has only 4 elements for speed reasons 97 + */ 98 + struct irq_handler { 99 + int (*handler)(int, void *); 100 + unsigned long flags; 101 + void *dev_id; 102 + const char *devname; 103 + }; 104 + 105 + struct irq_controller { 106 + const char *name; 107 + spinlock_t lock; 108 + int (*startup)(unsigned int irq); 109 + void (*shutdown)(unsigned int irq); 110 + void (*enable)(unsigned int irq); 111 + void (*disable)(unsigned int irq); 112 + }; 113 + 114 + extern int m68k_irq_startup(unsigned int); 115 + extern void m68k_irq_shutdown(unsigned int); 116 + 117 + /* 118 + * This function returns a new irq_node_t 119 + */ 120 + extern irq_node_t *new_irq_node(void); 121 + 122 + extern void m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)); 123 + extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, 124 + void (*handler)(unsigned int, struct pt_regs *)); 125 + extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int); 126 + 127 + asmlinkage void m68k_handle_int(unsigned int); 128 + asmlinkage void __m68k_handle_int(unsigned int, struct pt_regs *); 129 + 130 + #else 131 + #define irq_canonicalize(irq) (irq) 132 + #endif /* CONFIG_MMU */ 133 + 134 + #endif /* _M68K_IRQ_H_ */
-126
arch/m68k/include/asm/irq_mm.h
··· 1 - #ifndef _M68K_IRQ_H_ 2 - #define _M68K_IRQ_H_ 3 - 4 - #include <linux/linkage.h> 5 - #include <linux/hardirq.h> 6 - #include <linux/irqreturn.h> 7 - #include <linux/spinlock_types.h> 8 - 9 - /* 10 - * This should be the same as the max(NUM_X_SOURCES) for all the 11 - * different m68k hosts compiled into the kernel. 12 - * Currently the Atari has 72 and the Amiga 24, but if both are 13 - * supported in the kernel it is better to make room for 72. 14 - */ 15 - #if defined(CONFIG_VME) || defined(CONFIG_SUN3) || defined(CONFIG_SUN3X) 16 - #define NR_IRQS 200 17 - #elif defined(CONFIG_ATARI) || defined(CONFIG_MAC) 18 - #define NR_IRQS 72 19 - #elif defined(CONFIG_Q40) 20 - #define NR_IRQS 43 21 - #elif defined(CONFIG_AMIGA) 22 - #define NR_IRQS 32 23 - #elif defined(CONFIG_APOLLO) 24 - #define NR_IRQS 24 25 - #elif defined(CONFIG_HP300) 26 - #define NR_IRQS 8 27 - #else 28 - #define NR_IRQS 0 29 - #endif 30 - 31 - /* 32 - * The hardirq mask has to be large enough to have 33 - * space for potentially all IRQ sources in the system 34 - * nesting on a single CPU: 35 - */ 36 - #if (1 << HARDIRQ_BITS) < NR_IRQS 37 - # error HARDIRQ_BITS is too low! 38 - #endif 39 - 40 - /* 41 - * Interrupt source definitions 42 - * General interrupt sources are the level 1-7. 43 - * Adding an interrupt service routine for one of these sources 44 - * results in the addition of that routine to a chain of routines. 45 - * Each one is called in succession. Each individual interrupt 46 - * service routine should determine if the device associated with 47 - * that routine requires service. 48 - */ 49 - 50 - #define IRQ_SPURIOUS 0 51 - 52 - #define IRQ_AUTO_1 1 /* level 1 interrupt */ 53 - #define IRQ_AUTO_2 2 /* level 2 interrupt */ 54 - #define IRQ_AUTO_3 3 /* level 3 interrupt */ 55 - #define IRQ_AUTO_4 4 /* level 4 interrupt */ 56 - #define IRQ_AUTO_5 5 /* level 5 interrupt */ 57 - #define IRQ_AUTO_6 6 /* level 6 interrupt */ 58 - #define IRQ_AUTO_7 7 /* level 7 interrupt (non-maskable) */ 59 - 60 - #define IRQ_USER 8 61 - 62 - extern unsigned int irq_canonicalize(unsigned int irq); 63 - 64 - struct pt_regs; 65 - 66 - /* 67 - * various flags for request_irq() - the Amiga now uses the standard 68 - * mechanism like all other architectures - IRQF_DISABLED and 69 - * IRQF_SHARED are your friends. 70 - */ 71 - #ifndef MACH_AMIGA_ONLY 72 - #define IRQ_FLG_LOCK (0x0001) /* handler is not replaceable */ 73 - #define IRQ_FLG_REPLACE (0x0002) /* replace existing handler */ 74 - #define IRQ_FLG_FAST (0x0004) 75 - #define IRQ_FLG_SLOW (0x0008) 76 - #define IRQ_FLG_STD (0x8000) /* internally used */ 77 - #endif 78 - 79 - /* 80 - * This structure is used to chain together the ISRs for a particular 81 - * interrupt source (if it supports chaining). 82 - */ 83 - typedef struct irq_node { 84 - irqreturn_t (*handler)(int, void *); 85 - void *dev_id; 86 - struct irq_node *next; 87 - unsigned long flags; 88 - const char *devname; 89 - } irq_node_t; 90 - 91 - /* 92 - * This structure has only 4 elements for speed reasons 93 - */ 94 - struct irq_handler { 95 - int (*handler)(int, void *); 96 - unsigned long flags; 97 - void *dev_id; 98 - const char *devname; 99 - }; 100 - 101 - struct irq_controller { 102 - const char *name; 103 - spinlock_t lock; 104 - int (*startup)(unsigned int irq); 105 - void (*shutdown)(unsigned int irq); 106 - void (*enable)(unsigned int irq); 107 - void (*disable)(unsigned int irq); 108 - }; 109 - 110 - extern int m68k_irq_startup(unsigned int); 111 - extern void m68k_irq_shutdown(unsigned int); 112 - 113 - /* 114 - * This function returns a new irq_node_t 115 - */ 116 - extern irq_node_t *new_irq_node(void); 117 - 118 - extern void m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)); 119 - extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, 120 - void (*handler)(unsigned int, struct pt_regs *)); 121 - extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int); 122 - 123 - asmlinkage void m68k_handle_int(unsigned int); 124 - asmlinkage void __m68k_handle_int(unsigned int, struct pt_regs *); 125 - 126 - #endif /* _M68K_IRQ_H_ */
-26
arch/m68k/include/asm/irq_no.h
··· 1 - #ifndef _M68KNOMMU_IRQ_H_ 2 - #define _M68KNOMMU_IRQ_H_ 3 - 4 - #ifdef CONFIG_COLDFIRE 5 - /* 6 - * On the ColdFire we keep track of all vectors. That way drivers 7 - * can register whatever vector number they wish, and we can deal 8 - * with it. 9 - */ 10 - #define SYS_IRQS 256 11 - #define NR_IRQS SYS_IRQS 12 - 13 - #else 14 - 15 - /* 16 - * # of m68k interrupts 17 - */ 18 - #define SYS_IRQS 8 19 - #define NR_IRQS (24 + SYS_IRQS) 20 - 21 - #endif /* CONFIG_COLDFIRE */ 22 - 23 - 24 - #define irq_canonicalize(irq) (irq) 25 - 26 - #endif /* _M68KNOMMU_IRQ_H_ */