Import 2.3.28
[davej-history.git] / include / asm-ppc / irq_control.h
blob5a79e3e374efc8758030b867ab3f048255c8e191
1 /*
2 * $Id: irq_control.h,v 1.8 1999/09/15 23:58:48 cort Exp $
4 * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu>
5 */
6 #ifndef _PPC_IRQ_CONTROL_H
7 #define _PPC_IRQ_CONTROL_H
9 #include <asm/irq.h>
10 #include <asm/atomic.h>
12 /* Structure describing interrupts */
13 struct hw_interrupt_type {
14 const char * typename;
15 void (*startup)(unsigned int irq);
16 void (*shutdown)(unsigned int irq);
17 void (*enable)(unsigned int irq);
18 void (*disable)(unsigned int irq);
19 void (*mask_and_ack)(unsigned int irq);
20 int irq_offset;
23 struct irqdesc {
24 struct irqaction *action;
25 struct hw_interrupt_type *ctl;
28 extern struct irqdesc irq_desc[NR_IRQS];
30 struct int_control_struct
32 void (*int_cli)(void);
33 void (*int_sti)(void);
34 void (*int_restore_flags)(unsigned long);
35 void (*int_save_flags)(unsigned long *);
37 extern struct int_control_struct int_control;
38 extern unsigned long timer_interrupt_intercept;
39 extern unsigned long do_IRQ_intercept;
40 void timer_interrupt(struct pt_regs *);
42 extern void __no_use_sti(void);
43 extern void __no_use_cli(void);
44 extern void __no_use_restore_flags(unsigned long);
45 extern void __no_use_save_flags(unsigned long *);
47 #define __cli() int_control.int_cli()
48 #define __sti() int_control.int_sti()
49 #define __save_flags(flags) int_control.int_save_flags(&flags)
50 #define __restore_flags(flags) int_control.int_restore_flags(flags)
51 #define __save_and_cli(flags) ({__save_flags(flags);__cli();})
53 extern void do_lost_interrupts(unsigned long);
54 extern atomic_t ppc_n_lost_interrupts;
56 #define mask_irq(irq) ({if (irq_desc[irq].ctl && irq_desc[irq].ctl->disable) irq_desc[irq].ctl->disable(irq);})
57 #define unmask_irq(irq) ({if (irq_desc[irq].ctl && irq_desc[irq].ctl->enable) irq_desc[irq].ctl->enable(irq);})
58 #define mask_and_ack_irq(irq) ({if (irq_desc[irq].ctl && irq_desc[irq].ctl->mask_and_ack) irq_desc[irq].ctl->mask_and_ack(irq);})
60 #endif /* _PPC_IRQ_CONTROL_H */