1 /* SPDX-License-Identifier: GPL-2.0 */ 1 2 /* 3 * Copyright (C) 2006 Atmark Techno, Inc. 4 */ 5 6 #ifndef _ASM_MICROBLAZE_IRQFLAGS_H 7 #define _ASM_MICROBLAZE_IRQFLAGS_H 8 9 #include <linux/types.h> 10 #include <asm/registers.h> 11 12 #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR 13 14 static inline notrace unsigned long arch_local 15 { 16 unsigned long flags; 17 asm volatile(" msrclr %0, %1 \n" 18 " nop \n" 19 : "=r"(flags) 20 : "i"(MSR_IE) 21 : "memory"); 22 return flags; 23 } 24 25 static inline notrace void arch_local_irq_disa 26 { 27 /* this uses r0 without declaring it - 28 asm volatile(" msrclr r0, %0 \n" 29 " nop \n" 30 : 31 : "i"(MSR_IE) 32 : "memory"); 33 } 34 35 static inline notrace void arch_local_irq_enab 36 { 37 /* this uses r0 without declaring it - 38 asm volatile(" msrset r0, %0 \n" 39 " nop \n" 40 : 41 : "i"(MSR_IE) 42 : "memory"); 43 } 44 45 #else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_IN 46 47 static inline notrace unsigned long arch_local 48 { 49 unsigned long flags, tmp; 50 asm volatile (" mfs %0, rmsr 51 " nop 52 " andi %1, %0, %2 53 " mts rmsr, %1 54 " nop 55 : "=r"(flags), "=r"(tmp) 56 : "i"(~MSR_IE) 57 : "memory"); 58 return flags; 59 } 60 61 static inline notrace void arch_local_irq_disa 62 { 63 unsigned long tmp; 64 asm volatile(" mfs %0, rmsr 65 " nop 66 " andi %0, %0, %1 67 " mts rmsr, %0 68 " nop 69 : "=r"(tmp) 70 : "i"(~MSR_IE) 71 : "memory"); 72 } 73 74 static inline notrace void arch_local_irq_enab 75 { 76 unsigned long tmp; 77 asm volatile(" mfs %0, rmsr 78 " nop 79 " ori %0, %0, %1 80 " mts rmsr, %0 81 " nop 82 : "=r"(tmp) 83 : "i"(MSR_IE) 84 : "memory"); 85 } 86 87 #endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_IN 88 89 static inline notrace unsigned long arch_local 90 { 91 unsigned long flags; 92 asm volatile(" mfs %0, rmsr 93 " nop 94 : "=r"(flags) 95 : 96 : "memory"); 97 return flags; 98 } 99 100 static inline notrace void arch_local_irq_rest 101 { 102 asm volatile(" mts rmsr, %0 103 " nop 104 : 105 : "r"(flags) 106 : "memory"); 107 } 108 109 static inline notrace bool arch_irqs_disabled_ 110 { 111 return (flags & MSR_IE) == 0; 112 } 113 114 static inline notrace bool arch_irqs_disabled( 115 { 116 return arch_irqs_disabled_flags(arch_l 117 } 118 119 #endif /* _ASM_MICROBLAZE_IRQFLAGS_H */ 120
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.