1#ifndef __PARISC_IRQFLAGS_H 2#define __PARISC_IRQFLAGS_H 3 4#include <linux/types.h> 5#include <asm/psw.h> 6 7static inline unsigned long arch_local_save_flags(void) 8{ 9 unsigned long flags; 10 asm volatile("ssm 0, %0" : "=r" (flags) : : "memory"); 11 return flags; 12} 13 14static inline void arch_local_irq_disable(void) 15{ 16 asm volatile("rsm %0,%%r0\n" : : "i" (PSW_I) : "memory"); 17} 18 19static inline void arch_local_irq_enable(void) 20{ 21 asm volatile("ssm %0,%%r0\n" : : "i" (PSW_I) : "memory"); 22} 23 24static inline unsigned long arch_local_irq_save(void) 25{ 26 unsigned long flags; 27 asm volatile("rsm %1,%0" : "=r" (flags) : "i" (PSW_I) : "memory"); 28 return flags; 29} 30 31static inline void arch_local_irq_restore(unsigned long flags) 32{ 33 asm volatile("mtsm %0" : : "r" (flags) : "memory"); 34} 35 36static inline bool arch_irqs_disabled_flags(unsigned long flags) 37{ 38 return (flags & PSW_I) == 0; 39} 40 41static inline bool arch_irqs_disabled(void) 42{ 43 return arch_irqs_disabled_flags(arch_local_save_flags()); 44} 45 46#endif /* __PARISC_IRQFLAGS_H */ 47