Import 2.3.18pre1
[davej-history.git] / include / asm-ppc / irq_control.h
blob022cee7cc7d83e5725cceb3b4f8e10bf1c6983e6
1 /*
2 * $Id: irq_control.h,v 1.2 1999/07/17 20:23:58 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 <linux/config.h>
11 #include <asm/irq.h>
12 #include <asm/atomic.h>
14 externvoiddo_lost_interrupts(unsigned long);
15 extern atomic_t ppc_n_lost_interrupts;
17 #define __no_use_save_flags(flags) \
18 ({__asm__ __volatile__ ("mfmsr %0" :"=r" ((flags)) : :"memory"); })
20 extern __inline__ void__no_use_restore_flags(unsigned long flags)
22 if((flags & MSR_EE) &&atomic_read(&ppc_n_lost_interrupts) !=0) {
23 do_lost_interrupts(flags);
24 }else{
25 __asm__ __volatile__("sync; mtmsr %0; isync"
26 : :"r"(flags) :"memory");
30 extern __inline__ void__no_use_sti(void)
32 unsigned long flags;
34 __asm__ __volatile__("mfmsr %0":"=r"(flags));
35 flags |= MSR_EE;
36 if(atomic_read(&ppc_n_lost_interrupts) )
37 do_lost_interrupts(flags);
38 __asm__ __volatile__("sync; mtmsr %0; isync"::"r"(flags));
41 extern __inline__ void__no_use_cli(void)
43 unsigned long flags;
44 __asm__ __volatile__("mfmsr %0":"=r"(flags));
45 flags &= ~MSR_EE;
46 __asm__ __volatile__("sync; mtmsr %0; isync"::"r"(flags));
49 #define __no_use_mask_irq(irq) ({if (irq_desc[irq].ctl && irq_desc[irq].ctl->disable) irq_desc[irq].ctl->disable(irq);})
50 #define __no_use_unmask_irq(irq) ({if (irq_desc[irq].ctl && irq_desc[irq].ctl->enable) irq_desc[irq].ctl->enable(irq);})
51 #define __no_use_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);})
53 #ifdef CONFIG_RTL
55 /* the rtl system provides these -- Cort */
56 externvoid__sti(void);
57 externvoid__cli(void);
58 externvoid__restore_flags(unsigned int);
59 externunsigned int__return_flags(void);
60 #define __save_flags(flags) (flags = __return_flags())
62 #define rtl_hard_cli __no_use_cli
63 #define rtl_hard_sti __no_use_sti
64 #define rtl_hard_save_flags(flags) __no_use_save_flags(flags)
65 #define rtl_hard_restore_flags(flags) __no_use_restore_flags(flags)
67 #define rtl_hard_mask_irq(irq) __no_use_mask_irq(irq)
68 #define rtl_hard_unmask_irq(irq) __no_use_unmask_irq(irq)
69 #define rtl_hard_mask_and_ack_irq(irq) __no_use_mask_and_ack_irq(irq)
71 #else/* CONFIG_RTL */
73 #define __cli __no_use_cli
74 #define __sti __no_use_sti
75 #define __save_flags(flags) __no_use_save_flags(flags)
76 #define __restore_flags(flags) __no_use_restore_flags(flags)
78 #define mask_irq(irq) __no_use_mask_irq(irq)
79 #define unmask_irq(irq) __no_use_unmask_irq(irq)
80 #define mask_and_ack_irq(irq) __no_use_mask_and_ack_irq(irq)
82 #endif/* CONFIG_RTL */
84 #endif/* _PPC_IRQ_CONTROL_H */
close