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> 6 #ifndef _PPC_IRQ_CONTROL_H 7 #define _PPC_IRQ_CONTROL_H 9 #include <linux/config.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
); 25 __asm__
__volatile__("sync; mtmsr %0; isync" 26 : :"r"(flags
) :"memory"); 30 extern __inline__
void__no_use_sti(void) 34 __asm__
__volatile__("mfmsr %0":"=r"(flags
)); 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) 44 __asm__
__volatile__("mfmsr %0":"=r"(flags
)); 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);}) 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) 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 */