Path: blob/master/arch/score/include/asm/irqflags.h
10819 views
#ifndef _ASM_SCORE_IRQFLAGS_H1#define _ASM_SCORE_IRQFLAGS_H23#ifndef __ASSEMBLY__45#include <linux/types.h>67static inline unsigned long arch_local_save_flags(void)8{9unsigned long flags;1011asm volatile(12" mfcr r8, cr0 \n"13" nop \n"14" nop \n"15" mv %0, r8 \n"16" nop \n"17" nop \n"18" nop \n"19" nop \n"20" nop \n"21" ldi r9, 0x1 \n"22" and %0, %0, r9 \n"23: "=r" (flags)24:25: "r8", "r9");26return flags;27}2829static inline unsigned long arch_local_irq_save(void)30{31unsigned long flags;3233asm volatile(34" mfcr r8, cr0 \n"35" li r9, 0xfffffffe \n"36" nop \n"37" mv %0, r8 \n"38" and r8, r8, r9 \n"39" mtcr r8, cr0 \n"40" nop \n"41" nop \n"42" nop \n"43" nop \n"44" nop \n"45: "=r" (flags)46:47: "r8", "r9", "memory");4849return flags;50}5152static inline void arch_local_irq_restore(unsigned long flags)53{54asm volatile(55" mfcr r8, cr0 \n"56" ldi r9, 0x1 \n"57" and %0, %0, r9 \n"58" or r8, r8, %0 \n"59" mtcr r8, cr0 \n"60" nop \n"61" nop \n"62" nop \n"63" nop \n"64" nop \n"65:66: "r"(flags)67: "r8", "r9", "memory");68}6970static inline void arch_local_irq_enable(void)71{72asm volatile(73" mfcr r8,cr0 \n"74" nop \n"75" nop \n"76" ori r8,0x1 \n"77" mtcr r8,cr0 \n"78" nop \n"79" nop \n"80" nop \n"81" nop \n"82" nop \n"83:84:85: "r8", "memory");86}8788static inline void arch_local_irq_disable(void)89{90asm volatile(91" mfcr r8,cr0 \n"92" nop \n"93" nop \n"94" srli r8,r8,1 \n"95" slli r8,r8,1 \n"96" mtcr r8,cr0 \n"97" nop \n"98" nop \n"99" nop \n"100" nop \n"101" nop \n"102:103:104: "r8", "memory");105}106107static inline bool arch_irqs_disabled_flags(unsigned long flags)108{109return !(flags & 1);110}111112static inline bool arch_irqs_disabled(void)113{114return arch_irqs_disabled_flags(arch_local_save_flags());115}116117#endif /* __ASSEMBLY__ */118119#endif /* _ASM_SCORE_IRQFLAGS_H */120121122