root/arch/microblaze/include/asm/irqflags.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. arch_local_irq_save
  2. arch_local_irq_disable
  3. arch_local_irq_enable
  4. arch_local_irq_save
  5. arch_local_irq_disable
  6. arch_local_irq_enable
  7. arch_local_save_flags
  8. arch_local_irq_restore
  9. arch_irqs_disabled_flags
  10. arch_irqs_disabled

   1 /*
   2  * Copyright (C) 2006 Atmark Techno, Inc.
   3  *
   4  * This file is subject to the terms and conditions of the GNU General Public
   5  * License. See the file "COPYING" in the main directory of this archive
   6  * for more details.
   7  */
   8 
   9 #ifndef _ASM_MICROBLAZE_IRQFLAGS_H
  10 #define _ASM_MICROBLAZE_IRQFLAGS_H
  11 
  12 #include <linux/types.h>
  13 #include <asm/registers.h>
  14 
  15 #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
  16 
  17 static inline notrace unsigned long arch_local_irq_save(void)
  18 {
  19         unsigned long flags;
  20         asm volatile("  msrclr %0, %1   \n"
  21                      "  nop             \n"
  22                      : "=r"(flags)
  23                      : "i"(MSR_IE)
  24                      : "memory");
  25         return flags;
  26 }
  27 
  28 static inline notrace void arch_local_irq_disable(void)
  29 {
  30         /* this uses r0 without declaring it - is that correct? */
  31         asm volatile("  msrclr r0, %0   \n"
  32                      "  nop             \n"
  33                      :
  34                      : "i"(MSR_IE)
  35                      : "memory");
  36 }
  37 
  38 static inline notrace void arch_local_irq_enable(void)
  39 {
  40         /* this uses r0 without declaring it - is that correct? */
  41         asm volatile("  msrset  r0, %0  \n"
  42                      "  nop             \n"
  43                      :
  44                      : "i"(MSR_IE)
  45                      : "memory");
  46 }
  47 
  48 #else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
  49 
  50 static inline notrace unsigned long arch_local_irq_save(void)
  51 {
  52         unsigned long flags, tmp;
  53         asm volatile (" mfs     %0, rmsr        \n"
  54                       " nop                     \n"
  55                       " andi    %1, %0, %2      \n"
  56                       " mts     rmsr, %1        \n"
  57                       " nop                     \n"
  58                       : "=r"(flags), "=r"(tmp)
  59                       : "i"(~MSR_IE)
  60                       : "memory");
  61         return flags;
  62 }
  63 
  64 static inline notrace void arch_local_irq_disable(void)
  65 {
  66         unsigned long tmp;
  67         asm volatile("  mfs     %0, rmsr        \n"
  68                      "  nop                     \n"
  69                      "  andi    %0, %0, %1      \n"
  70                      "  mts     rmsr, %0        \n"
  71                      "  nop                     \n"
  72                      : "=r"(tmp)
  73                      : "i"(~MSR_IE)
  74                      : "memory");
  75 }
  76 
  77 static inline notrace void arch_local_irq_enable(void)
  78 {
  79         unsigned long tmp;
  80         asm volatile("  mfs     %0, rmsr        \n"
  81                      "  nop                     \n"
  82                      "  ori     %0, %0, %1      \n"
  83                      "  mts     rmsr, %0        \n"
  84                      "  nop                     \n"
  85                      : "=r"(tmp)
  86                      : "i"(MSR_IE)
  87                      : "memory");
  88 }
  89 
  90 #endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
  91 
  92 static inline notrace unsigned long arch_local_save_flags(void)
  93 {
  94         unsigned long flags;
  95         asm volatile("  mfs     %0, rmsr        \n"
  96                      "  nop                     \n"
  97                      : "=r"(flags)
  98                      :
  99                      : "memory");
 100         return flags;
 101 }
 102 
 103 static inline notrace void arch_local_irq_restore(unsigned long flags)
 104 {
 105         asm volatile("  mts     rmsr, %0        \n"
 106                      "  nop                     \n"
 107                      :
 108                      : "r"(flags)
 109                      : "memory");
 110 }
 111 
 112 static inline notrace bool arch_irqs_disabled_flags(unsigned long flags)
 113 {
 114         return (flags & MSR_IE) == 0;
 115 }
 116 
 117 static inline notrace bool arch_irqs_disabled(void)
 118 {
 119         return arch_irqs_disabled_flags(arch_local_save_flags());
 120 }
 121 
 122 #endif /* _ASM_MICROBLAZE_IRQFLAGS_H */

/* [<][>][^][v][top][bottom][index][help] */