1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _H8300_SEGMENT_H
3 #define _H8300_SEGMENT_H
4 
5 /* define constants */
6 #define USER_DATA     (1)
7 #ifndef __USER_DS
8 #define __USER_DS     (USER_DATA)
9 #endif
10 #define USER_PROGRAM  (2)
11 #define SUPER_DATA    (3)
12 #ifndef __KERNEL_DS
13 #define __KERNEL_DS   (SUPER_DATA)
14 #endif
15 #define SUPER_PROGRAM (4)
16 
17 #ifndef __ASSEMBLY__
18 
19 typedef struct {
20 	unsigned long seg;
21 } mm_segment_t;
22 
23 #define MAKE_MM_SEG(s)	((mm_segment_t) { (s) })
24 #define USER_DS		MAKE_MM_SEG(__USER_DS)
25 #define KERNEL_DS	MAKE_MM_SEG(__KERNEL_DS)
26 
27 /*
28  * Get/set the SFC/DFC registers for MOVES instructions
29  */
30 
get_fs(void)31 static inline mm_segment_t get_fs(void)
32 {
33 	return USER_DS;
34 }
35 
36 #define uaccess_kernel()	(get_fs().seg == KERNEL_DS.seg)
37 
38 #endif /* __ASSEMBLY__ */
39 
40 #endif /* _H8300_SEGMENT_H */
41