~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/microblaze/include/asm/irqflags.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  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_irq_save(void)
 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_disable(void)
 26 {
 27         /* this uses r0 without declaring it - is that correct? */
 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_enable(void)
 36 {
 37         /* this uses r0 without declaring it - is that correct? */
 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_INSTR */
 46 
 47 static inline notrace unsigned long arch_local_irq_save(void)
 48 {
 49         unsigned long flags, tmp;
 50         asm volatile (" mfs     %0, rmsr        \n"
 51                       " nop                     \n"
 52                       " andi    %1, %0, %2      \n"
 53                       " mts     rmsr, %1        \n"
 54                       " nop                     \n"
 55                       : "=r"(flags), "=r"(tmp)
 56                       : "i"(~MSR_IE)
 57                       : "memory");
 58         return flags;
 59 }
 60 
 61 static inline notrace void arch_local_irq_disable(void)
 62 {
 63         unsigned long tmp;
 64         asm volatile("  mfs     %0, rmsr        \n"
 65                      "  nop                     \n"
 66                      "  andi    %0, %0, %1      \n"
 67                      "  mts     rmsr, %0        \n"
 68                      "  nop                     \n"
 69                      : "=r"(tmp)
 70                      : "i"(~MSR_IE)
 71                      : "memory");
 72 }
 73 
 74 static inline notrace void arch_local_irq_enable(void)
 75 {
 76         unsigned long tmp;
 77         asm volatile("  mfs     %0, rmsr        \n"
 78                      "  nop                     \n"
 79                      "  ori     %0, %0, %1      \n"
 80                      "  mts     rmsr, %0        \n"
 81                      "  nop                     \n"
 82                      : "=r"(tmp)
 83                      : "i"(MSR_IE)
 84                      : "memory");
 85 }
 86 
 87 #endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
 88 
 89 static inline notrace unsigned long arch_local_save_flags(void)
 90 {
 91         unsigned long flags;
 92         asm volatile("  mfs     %0, rmsr        \n"
 93                      "  nop                     \n"
 94                      : "=r"(flags)
 95                      :
 96                      : "memory");
 97         return flags;
 98 }
 99 
100 static inline notrace void arch_local_irq_restore(unsigned long flags)
101 {
102         asm volatile("  mts     rmsr, %0        \n"
103                      "  nop                     \n"
104                      :
105                      : "r"(flags)
106                      : "memory");
107 }
108 
109 static inline notrace bool arch_irqs_disabled_flags(unsigned long flags)
110 {
111         return (flags & MSR_IE) == 0;
112 }
113 
114 static inline notrace bool arch_irqs_disabled(void)
115 {
116         return arch_irqs_disabled_flags(arch_local_save_flags());
117 }
118 
119 #endif /* _ASM_MICROBLAZE_IRQFLAGS_H */
120 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php