1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2006 Atmark Techno, Inc.
6 #ifndef _ASM_MICROBLAZE_IRQFLAGS_H
7 #define _ASM_MICROBLAZE_IRQFLAGS_H
9 #include <linux/types.h>
10 #include <asm/registers.h>
12 #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
14 static inline notrace
unsigned long arch_local_irq_save(void)
17 asm volatile(" msrclr %0, %1 \n"
25 static inline notrace
void arch_local_irq_disable(void)
27 /* this uses r0 without declaring it - is that correct? */
28 asm volatile(" msrclr r0, %0 \n"
35 static inline notrace
void arch_local_irq_enable(void)
37 /* this uses r0 without declaring it - is that correct? */
38 asm volatile(" msrset r0, %0 \n"
45 #else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
47 static inline notrace
unsigned long arch_local_irq_save(void)
49 unsigned long flags
, tmp
;
50 asm volatile (" mfs %0, rmsr \n"
55 : "=r"(flags
), "=r"(tmp
)
61 static inline notrace
void arch_local_irq_disable(void)
64 asm volatile(" mfs %0, rmsr \n"
74 static inline notrace
void arch_local_irq_enable(void)
77 asm volatile(" mfs %0, rmsr \n"
87 #endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
89 static inline notrace
unsigned long arch_local_save_flags(void)
92 asm volatile(" mfs %0, rmsr \n"
100 static inline notrace
void arch_local_irq_restore(unsigned long flags
)
102 asm volatile(" mts rmsr, %0 \n"
109 static inline notrace
bool arch_irqs_disabled_flags(unsigned long flags
)
111 return (flags
& MSR_IE
) == 0;
114 static inline notrace
bool arch_irqs_disabled(void)
116 return arch_irqs_disabled_flags(arch_local_save_flags());
119 #endif /* _ASM_MICROBLAZE_IRQFLAGS_H */