uboot/arch/sh/include/asm/irqflags.h
<<
>>
Prefs
   1#ifndef __ASM_SH_IRQFLAGS_H
   2#define __ASM_SH_IRQFLAGS_H
   3
   4static inline void raw_local_irq_enable(void)
   5{
   6        unsigned long __dummy0, __dummy1;
   7
   8        __asm__ __volatile__ (
   9                "stc    sr, %0\n\t"
  10                "and    %1, %0\n\t"
  11#ifdef CONFIG_CPU_HAS_SR_RB
  12                "stc    r6_bank, %1\n\t"
  13                "or     %1, %0\n\t"
  14#endif
  15                "ldc    %0, sr\n\t"
  16                : "=&r" (__dummy0), "=r" (__dummy1)
  17                : "1" (~0x000000f0)
  18                : "memory"
  19        );
  20}
  21
  22static inline void raw_local_irq_disable(void)
  23{
  24        unsigned long flags;
  25
  26        __asm__ __volatile__ (
  27                "stc    sr, %0\n\t"
  28                "or     #0xf0, %0\n\t"
  29                "ldc    %0, sr\n\t"
  30                : "=&z" (flags)
  31                : /* no inputs */
  32                : "memory"
  33        );
  34}
  35
  36static inline void set_bl_bit(void)
  37{
  38        unsigned long __dummy0, __dummy1;
  39
  40        __asm__ __volatile__ (
  41                "stc    sr, %0\n\t"
  42                "or     %2, %0\n\t"
  43                "and    %3, %0\n\t"
  44                "ldc    %0, sr\n\t"
  45                : "=&r" (__dummy0), "=r" (__dummy1)
  46                : "r" (0x10000000), "r" (0xffffff0f)
  47                : "memory"
  48        );
  49}
  50
  51static inline void clear_bl_bit(void)
  52{
  53        unsigned long __dummy0, __dummy1;
  54
  55        __asm__ __volatile__ (
  56                "stc    sr, %0\n\t"
  57                "and    %2, %0\n\t"
  58                "ldc    %0, sr\n\t"
  59                : "=&r" (__dummy0), "=r" (__dummy1)
  60                : "1" (~0x10000000)
  61                : "memory"
  62        );
  63}
  64
  65static inline unsigned long __raw_local_save_flags(void)
  66{
  67        unsigned long flags;
  68
  69        __asm__ __volatile__ (
  70                "stc    sr, %0\n\t"
  71                "and    #0xf0, %0\n\t"
  72                : "=&z" (flags)
  73                : /* no inputs */
  74                : "memory"
  75        );
  76
  77        return flags;
  78}
  79
  80#define raw_local_save_flags(flags) \
  81                do { (flags) = __raw_local_save_flags(); } while (0)
  82
  83static inline int raw_irqs_disabled_flags(unsigned long flags)
  84{
  85        return (flags != 0);
  86}
  87
  88static inline int raw_irqs_disabled(void)
  89{
  90        unsigned long flags = __raw_local_save_flags();
  91
  92        return raw_irqs_disabled_flags(flags);
  93}
  94
  95static inline unsigned long __raw_local_irq_save(void)
  96{
  97        unsigned long flags, __dummy;
  98
  99        __asm__ __volatile__ (
 100                "stc    sr, %1\n\t"
 101                "mov    %1, %0\n\t"
 102                "or     #0xf0, %0\n\t"
 103                "ldc    %0, sr\n\t"
 104                "mov    %1, %0\n\t"
 105                "and    #0xf0, %0\n\t"
 106                : "=&z" (flags), "=&r" (__dummy)
 107                : /* no inputs */
 108                : "memory"
 109        );
 110
 111        return flags;
 112}
 113
 114#define raw_local_irq_save(flags) \
 115                do { (flags) = __raw_local_irq_save(); } while (0)
 116
 117#define local_irq_save raw_local_irq_save
 118
 119static inline void raw_local_irq_restore(unsigned long flags)
 120{
 121        if ((flags & 0xf0) != 0xf0)
 122                raw_local_irq_enable();
 123}
 124#define local_irq_restore raw_local_irq_restore
 125
 126#endif /* __ASM_SH_IRQFLAGS_H */
 127