home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / avr32 / include / asm / irqflags.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.5 KB  |  69 lines

  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.  
  13. static 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.  */
  28. static inline void raw_local_irq_restore(unsigned long flags)
  29. {
  30.     sysreg_write(SR, flags);
  31.     asm volatile("" : : : "memory", "cc");
  32. }
  33.  
  34. static inline void raw_local_irq_disable(void)
  35. {
  36.     asm volatile("ssrf %0" : : "n"(SYSREG_GM_OFFSET) : "memory");
  37. }
  38.  
  39. static inline void raw_local_irq_enable(void)
  40. {
  41.     asm volatile("csrf %0" : : "n"(SYSREG_GM_OFFSET) : "memory");
  42. }
  43.  
  44. static inline int raw_irqs_disabled_flags(unsigned long flags)
  45. {
  46.     return (flags & SYSREG_BIT(GM)) != 0;
  47. }
  48.  
  49. static 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.  
  56. static 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.