system.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #ifndef __ASM_CRIS_ARCH_SYSTEM_H
  2. #define __ASM_CRIS_ARCH_SYSTEM_H
  3. /* read the CPU version register */
  4. static inline unsigned long rdvr(void) {
  5. unsigned char vr;
  6. __asm__ volatile ("move $vr,%0" : "=rm" (vr));
  7. return vr;
  8. }
  9. #define cris_machine_name "cris"
  10. /* read/write the user-mode stackpointer */
  11. static inline unsigned long rdusp(void) {
  12. unsigned long usp;
  13. __asm__ __volatile__("move $usp,%0" : "=rm" (usp));
  14. return usp;
  15. }
  16. #define wrusp(usp) \
  17. __asm__ __volatile__("move %0,$usp" : /* no outputs */ : "rm" (usp))
  18. /* read the current stackpointer */
  19. static inline unsigned long rdsp(void) {
  20. unsigned long sp;
  21. __asm__ __volatile__("move.d $sp,%0" : "=rm" (sp));
  22. return sp;
  23. }
  24. static inline unsigned long _get_base(char * addr)
  25. {
  26. return 0;
  27. }
  28. #define nop() __asm__ __volatile__ ("nop");
  29. #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
  30. #define tas(ptr) (xchg((ptr),1))
  31. struct __xchg_dummy { unsigned long a[100]; };
  32. #define __xg(x) ((struct __xchg_dummy *)(x))
  33. /* interrupt control.. */
  34. #define local_save_flags(x) __asm__ __volatile__ ("move $ccr,%0" : "=rm" (x) : : "memory");
  35. #define local_irq_restore(x) __asm__ __volatile__ ("move %0,$ccr" : : "rm" (x) : "memory");
  36. #define local_irq_disable() __asm__ __volatile__ ( "di" : : :"memory");
  37. #define local_irq_enable() __asm__ __volatile__ ( "ei" : : :"memory");
  38. #define irqs_disabled() \
  39. ({ \
  40. unsigned long flags; \
  41. local_save_flags(flags); \
  42. !(flags & (1<<5)); \
  43. })
  44. /* For spinlocks etc */
  45. #define local_irq_save(x) __asm__ __volatile__ ("move $ccr,%0\n\tdi" : "=rm" (x) : : "memory");
  46. #endif