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 / sh / include / asm / atomic-irq.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.3 KB  |  72 lines

  1. #ifndef __ASM_SH_ATOMIC_IRQ_H
  2. #define __ASM_SH_ATOMIC_IRQ_H
  3.  
  4. /*
  5.  * To get proper branch prediction for the main line, we must branch
  6.  * forward to code at the end of this object's .text section, then
  7.  * branch back to restart the operation.
  8.  */
  9. static inline void atomic_add(int i, atomic_t *v)
  10. {
  11.     unsigned long flags;
  12.  
  13.     local_irq_save(flags);
  14.     *(long *)v += i;
  15.     local_irq_restore(flags);
  16. }
  17.  
  18. static inline void atomic_sub(int i, atomic_t *v)
  19. {
  20.     unsigned long flags;
  21.  
  22.     local_irq_save(flags);
  23.     *(long *)v -= i;
  24.     local_irq_restore(flags);
  25. }
  26.  
  27. static inline int atomic_add_return(int i, atomic_t *v)
  28. {
  29.     unsigned long temp, flags;
  30.  
  31.     local_irq_save(flags);
  32.     temp = *(long *)v;
  33.     temp += i;
  34.     *(long *)v = temp;
  35.     local_irq_restore(flags);
  36.  
  37.     return temp;
  38. }
  39.  
  40. static inline int atomic_sub_return(int i, atomic_t *v)
  41. {
  42.     unsigned long temp, flags;
  43.  
  44.     local_irq_save(flags);
  45.     temp = *(long *)v;
  46.     temp -= i;
  47.     *(long *)v = temp;
  48.     local_irq_restore(flags);
  49.  
  50.     return temp;
  51. }
  52.  
  53. static inline void atomic_clear_mask(unsigned int mask, atomic_t *v)
  54. {
  55.     unsigned long flags;
  56.  
  57.     local_irq_save(flags);
  58.     *(long *)v &= ~mask;
  59.     local_irq_restore(flags);
  60. }
  61.  
  62. static inline void atomic_set_mask(unsigned int mask, atomic_t *v)
  63. {
  64.     unsigned long flags;
  65.  
  66.     local_irq_save(flags);
  67.     *(long *)v |= mask;
  68.     local_irq_restore(flags);
  69. }
  70.  
  71. #endif /* __ASM_SH_ATOMIC_IRQ_H */
  72.