segment.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _M68K_SEGMENT_H
  2. #define _M68K_SEGMENT_H
  3. /* define constants */
  4. /* Address spaces (FC0-FC2) */
  5. #define USER_DATA     (1)
  6. #ifndef __USER_DS
  7. #define __USER_DS     (USER_DATA)
  8. #endif
  9. #define USER_PROGRAM  (2)
  10. #define SUPER_DATA    (5)
  11. #ifndef __KERNEL_DS
  12. #define __KERNEL_DS   (SUPER_DATA)
  13. #endif
  14. #define SUPER_PROGRAM (6)
  15. #define CPU_SPACE     (7)
  16. #ifndef __ASSEMBLY__
  17. typedef struct {
  18. unsigned long seg;
  19. } mm_segment_t;
  20. #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
  21. #define USER_DS MAKE_MM_SEG(__USER_DS)
  22. #define KERNEL_DS MAKE_MM_SEG(__KERNEL_DS)
  23. /*
  24.  * Get/set the SFC/DFC registers for MOVES instructions
  25.  */
  26. static inline mm_segment_t get_fs(void)
  27. {
  28. mm_segment_t _v;
  29. __asm__ ("movec %/dfc,%0":"=r" (_v.seg):);
  30. return _v;
  31. }
  32. static inline mm_segment_t get_ds(void)
  33. {
  34.     /* return the supervisor data space code */
  35.     return KERNEL_DS;
  36. }
  37. static inline void set_fs(mm_segment_t val)
  38. {
  39. __asm__ __volatile__ ("movec %0,%/sfcnt"
  40.       "movec %0,%/dfcnt"
  41.       : /* no outputs */ : "r" (val.seg) : "memory");
  42. }
  43. #define segment_eq(a,b) ((a).seg == (b).seg)
  44. #endif /* __ASSEMBLY__ */
  45. #endif /* _M68K_SEGMENT_H */