linux/arch/score/include/asm/system.h
<<
>>
Prefs
   1#ifndef _ASM_SCORE_SYSTEM_H
   2#define _ASM_SCORE_SYSTEM_H
   3
   4#include <linux/types.h>
   5#include <linux/irqflags.h>
   6
   7struct pt_regs;
   8struct task_struct;
   9
  10extern void *resume(void *last, void *next, void *next_ti);
  11
  12#define switch_to(prev, next, last)                             \
  13do {                                                            \
  14        (last) = resume(prev, next, task_thread_info(next));    \
  15} while (0)
  16
  17#define finish_arch_switch(prev)        do {} while (0)
  18
  19typedef void (*vi_handler_t)(void);
  20extern unsigned long arch_align_stack(unsigned long sp);
  21
  22#define mb()            barrier()
  23#define rmb()           barrier()
  24#define wmb()           barrier()
  25#define smp_mb()        barrier()
  26#define smp_rmb()       barrier()
  27#define smp_wmb()       barrier()
  28
  29#define read_barrier_depends()          do {} while (0)
  30#define smp_read_barrier_depends()      do {} while (0)
  31
  32#define set_mb(var, value)              do {var = value; wmb(); } while (0)
  33
  34#define __HAVE_ARCH_CMPXCHG     1
  35
  36#include <asm-generic/cmpxchg-local.h>
  37
  38#ifndef __ASSEMBLY__
  39
  40struct __xchg_dummy { unsigned long a[100]; };
  41#define __xg(x) ((struct __xchg_dummy *)(x))
  42
  43static inline
  44unsigned long __xchg(volatile unsigned long *m, unsigned long val)
  45{
  46        unsigned long retval;
  47        unsigned long flags;
  48
  49        local_irq_save(flags);
  50        retval = *m;
  51        *m = val;
  52        local_irq_restore(flags);
  53        return retval;
  54}
  55
  56#define xchg(ptr, v)                                            \
  57        ((__typeof__(*(ptr))) __xchg((unsigned long *)(ptr),    \
  58                                        (unsigned long)(v)))
  59
  60static inline unsigned long __cmpxchg(volatile unsigned long *m,
  61                                unsigned long old, unsigned long new)
  62{
  63        unsigned long retval;
  64        unsigned long flags;
  65
  66        local_irq_save(flags);
  67        retval = *m;
  68        if (retval == old)
  69                *m = new;
  70        local_irq_restore(flags);
  71        return retval;
  72}
  73
  74#define cmpxchg(ptr, o, n)                                      \
  75        ((__typeof__(*(ptr))) __cmpxchg((unsigned long *)(ptr), \
  76                                        (unsigned long)(o),     \
  77                                        (unsigned long)(n)))
  78
  79extern void __die(const char *, struct pt_regs *, const char *,
  80        const char *, unsigned long) __attribute__((noreturn));
  81extern void __die_if_kernel(const char *, struct pt_regs *, const char *,
  82        const char *, unsigned long);
  83
  84#define die(msg, regs)                                                  \
  85        __die(msg, regs, __FILE__ ":", __func__, __LINE__)
  86#define die_if_kernel(msg, regs)                                        \
  87        __die_if_kernel(msg, regs, __FILE__ ":", __func__, __LINE__)
  88
  89#endif /* !__ASSEMBLY__ */
  90#endif /* _ASM_SCORE_SYSTEM_H */
  91