segment.h 886 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _H8300_SEGMENT_H
  3. #define _H8300_SEGMENT_H
  4. /* define constants */
  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 (3)
  11. #ifndef __KERNEL_DS
  12. #define __KERNEL_DS (SUPER_DATA)
  13. #endif
  14. #define SUPER_PROGRAM (4)
  15. #ifndef __ASSEMBLY__
  16. typedef struct {
  17. unsigned long seg;
  18. } mm_segment_t;
  19. #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
  20. #define USER_DS MAKE_MM_SEG(__USER_DS)
  21. #define KERNEL_DS MAKE_MM_SEG(__KERNEL_DS)
  22. /*
  23. * Get/set the SFC/DFC registers for MOVES instructions
  24. */
  25. static inline mm_segment_t get_fs(void)
  26. {
  27. return USER_DS;
  28. }
  29. static inline mm_segment_t get_ds(void)
  30. {
  31. /* return the supervisor data space code */
  32. return KERNEL_DS;
  33. }
  34. #define segment_eq(a, b) ((a).seg == (b).seg)
  35. #endif /* __ASSEMBLY__ */
  36. #endif /* _H8300_SEGMENT_H */