diff options
Diffstat (limited to 'arch/sparc/kernel/irq.h')
-rw-r--r-- | arch/sparc/kernel/irq.h | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/arch/sparc/kernel/irq.h b/arch/sparc/kernel/irq.h index 008453b798ec..100b9c204e78 100644 --- a/arch/sparc/kernel/irq.h +++ b/arch/sparc/kernel/irq.h | |||
@@ -2,6 +2,23 @@ | |||
2 | 2 | ||
3 | #include <asm/btfixup.h> | 3 | #include <asm/btfixup.h> |
4 | 4 | ||
5 | struct irq_bucket { | ||
6 | struct irq_bucket *next; | ||
7 | unsigned int real_irq; | ||
8 | unsigned int irq; | ||
9 | unsigned int pil; | ||
10 | }; | ||
11 | |||
12 | #define SUN4D_MAX_BOARD 10 | ||
13 | #define SUN4D_MAX_IRQ ((SUN4D_MAX_BOARD + 2) << 5) | ||
14 | |||
15 | /* Map between the irq identifier used in hw to the | ||
16 | * irq_bucket. The map is sufficient large to hold | ||
17 | * the sun4d hw identifiers. | ||
18 | */ | ||
19 | extern struct irq_bucket *irq_map[SUN4D_MAX_IRQ]; | ||
20 | |||
21 | |||
5 | /* sun4m specific type definitions */ | 22 | /* sun4m specific type definitions */ |
6 | 23 | ||
7 | /* This maps direct to CPU specific interrupt registers */ | 24 | /* This maps direct to CPU specific interrupt registers */ |
@@ -35,6 +52,10 @@ struct sparc_irq_config { | |||
35 | }; | 52 | }; |
36 | extern struct sparc_irq_config sparc_irq_config; | 53 | extern struct sparc_irq_config sparc_irq_config; |
37 | 54 | ||
55 | unsigned int irq_alloc(unsigned int real_irq, unsigned int pil); | ||
56 | void irq_link(unsigned int irq); | ||
57 | void irq_unlink(unsigned int irq); | ||
58 | void handler_irq(unsigned int pil, struct pt_regs *regs); | ||
38 | 59 | ||
39 | /* Dave Redman (djhr@tadpole.co.uk) | 60 | /* Dave Redman (djhr@tadpole.co.uk) |
40 | * changed these to function pointers.. it saves cycles and will allow | 61 | * changed these to function pointers.. it saves cycles and will allow |
@@ -44,33 +65,9 @@ extern struct sparc_irq_config sparc_irq_config; | |||
44 | * Changed these to btfixup entities... It saves cycles :) | 65 | * Changed these to btfixup entities... It saves cycles :) |
45 | */ | 66 | */ |
46 | 67 | ||
47 | BTFIXUPDEF_CALL(void, disable_irq, unsigned int) | ||
48 | BTFIXUPDEF_CALL(void, enable_irq, unsigned int) | ||
49 | BTFIXUPDEF_CALL(void, disable_pil_irq, unsigned int) | ||
50 | BTFIXUPDEF_CALL(void, enable_pil_irq, unsigned int) | ||
51 | BTFIXUPDEF_CALL(void, clear_clock_irq, void) | 68 | BTFIXUPDEF_CALL(void, clear_clock_irq, void) |
52 | BTFIXUPDEF_CALL(void, load_profile_irq, int, unsigned int) | 69 | BTFIXUPDEF_CALL(void, load_profile_irq, int, unsigned int) |
53 | 70 | ||
54 | static inline void __disable_irq(unsigned int irq) | ||
55 | { | ||
56 | BTFIXUP_CALL(disable_irq)(irq); | ||
57 | } | ||
58 | |||
59 | static inline void __enable_irq(unsigned int irq) | ||
60 | { | ||
61 | BTFIXUP_CALL(enable_irq)(irq); | ||
62 | } | ||
63 | |||
64 | static inline void disable_pil_irq(unsigned int irq) | ||
65 | { | ||
66 | BTFIXUP_CALL(disable_pil_irq)(irq); | ||
67 | } | ||
68 | |||
69 | static inline void enable_pil_irq(unsigned int irq) | ||
70 | { | ||
71 | BTFIXUP_CALL(enable_pil_irq)(irq); | ||
72 | } | ||
73 | |||
74 | static inline void clear_clock_irq(void) | 71 | static inline void clear_clock_irq(void) |
75 | { | 72 | { |
76 | BTFIXUP_CALL(clear_clock_irq)(); | 73 | BTFIXUP_CALL(clear_clock_irq)(); |
@@ -89,4 +86,10 @@ BTFIXUPDEF_CALL(void, set_irq_udt, int) | |||
89 | #define set_cpu_int(cpu,level) BTFIXUP_CALL(set_cpu_int)(cpu,level) | 86 | #define set_cpu_int(cpu,level) BTFIXUP_CALL(set_cpu_int)(cpu,level) |
90 | #define clear_cpu_int(cpu,level) BTFIXUP_CALL(clear_cpu_int)(cpu,level) | 87 | #define clear_cpu_int(cpu,level) BTFIXUP_CALL(clear_cpu_int)(cpu,level) |
91 | #define set_irq_udt(cpu) BTFIXUP_CALL(set_irq_udt)(cpu) | 88 | #define set_irq_udt(cpu) BTFIXUP_CALL(set_irq_udt)(cpu) |
89 | |||
90 | /* All SUN4D IPIs are sent on this IRQ, may be shared with hard IRQs */ | ||
91 | #define SUN4D_IPI_IRQ 14 | ||
92 | |||
93 | extern void sun4d_ipi_interrupt(void); | ||
94 | |||
92 | #endif | 95 | #endif |