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