linux/arch/avr32/include/asm/irqflags.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2004-2006 Atmel Corporation
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License version 2 as
   6 * published by the Free Software Foundation.
   7 */
   8#ifndef __ASM_AVR32_IRQFLAGS_H
   9#define __ASM_AVR32_IRQFLAGS_H
  10
  11#include <asm/sysreg.h>
  12
  13static inline unsigned long __raw_local_save_flags(void)
  14{
  15        return sysreg_read(SR);
  16}
  17
  18#define raw_local_save_flags(x)                                 \
  19        do { (x) = __raw_local_save_flags(); } while (0)
  20
  21/*
  22 * This will restore ALL status register flags, not only the interrupt
  23 * mask flag.
  24 *
  25 * The empty asm statement informs the compiler of this fact while
  26 * also serving as a barrier.
  27 */
  28static inline void raw_local_irq_restore(unsigned long flags)
  29{
  30        sysreg_write(SR, flags);
  31        asm volatile("" : : : "memory", "cc");
  32}
  33
  34static inline void raw_local_irq_disable(void)
  35{
  36        asm volatile("ssrf %0" : : "n"(SYSREG_GM_OFFSET) : "memory");
  37}
  38
  39static inline void raw_local_irq_enable(void)
  40{
  41        asm volatile("csrf %0" : : "n"(SYSREG_GM_OFFSET) : "memory");
  42}
  43
  44static inline int raw_irqs_disabled_flags(unsigned long flags)
  45{
  46        return (flags & SYSREG_BIT(GM)) != 0;
  47}
  48
  49static inline int raw_irqs_disabled(void)
  50{
  51        unsigned long flags = __raw_local_save_flags();
  52
  53        return raw_irqs_disabled_flags(flags);
  54}
  55
  56static inline unsigned long __raw_local_irq_save(void)
  57{
  58        unsigned long flags = __raw_local_save_flags();
  59
  60        raw_local_irq_disable();
  61
  62        return flags;
  63}
  64
  65#define raw_local_irq_save(flags)                               \
  66        do { (flags) = __raw_local_irq_save(); } while (0)
  67
  68#endif /* __ASM_AVR32_IRQFLAGS_H */
  69