This source file includes following definitions.
- __put_user
- __get_user
- get_user_byte
- get_user_word
- get_user_long
- put_user_byte
- put_user_word
- put_user_long
- get_fs
- get_ds
- set_fs
1
2 #ifndef _ASM_SEGMENT_H
3 #define _ASM_SEGMENT_H
4
5
6 #define KERNEL_DS 0
7 #define USER_DS 1
8
9 #include <linux/string.h>
10 #include <asm/vac-ops.h>
11
12 #ifndef __ASSEMBLY__
13
14
15
16
17
18
19 #define put_user(x,ptr) __put_user((unsigned long)(x),(ptr),sizeof(*(ptr)))
20 #define get_user(ptr) ((__typeof__(*(ptr)))__get_user((ptr),sizeof(*(ptr))))
21
22
23
24
25
26
27 extern int bad_user_access_length(void);
28
29
30 static inline void __put_user(unsigned long x, void * y, int size)
31 {
32 switch (size) {
33 case 1:
34 *(char *) y = x;
35 break;
36 case 2:
37 *(short *) y = x;
38 break;
39 case 4:
40 *(int *) y = x;
41 break;
42 default:
43 bad_user_access_length();
44 }
45 }
46
47
48 static inline unsigned long __get_user(const void * y, int size)
49 {
50 switch (size) {
51 case 1:
52 return *(unsigned char *) y;
53 case 2:
54 return *(unsigned short *) y;
55 case 4:
56 return *(unsigned int *) y;
57 default:
58 return bad_user_access_length();
59 }
60 }
61
62
63
64
65
66 static inline unsigned char get_user_byte(const char * addr)
67 {
68 return *addr;
69 }
70
71 #define get_fs_byte(addr) get_user_byte((char *)(addr))
72
73 static inline unsigned short get_user_word(const short *addr)
74 {
75 return *addr;
76 }
77
78 #define get_fs_word(addr) get_user_word((short *)(addr))
79
80 static inline unsigned long get_user_long(const int *addr)
81 {
82 return *addr;
83 }
84
85 #define get_fs_long(addr) get_user_long((int *)(addr))
86
87 static inline void put_user_byte(char val,char *addr)
88 {
89 *addr = val;
90 }
91
92 #define put_fs_byte(x,addr) put_user_byte((x),(char *)(addr))
93
94 static inline void put_user_word(short val,short * addr)
95 {
96 *addr = val;
97 }
98
99 #define put_fs_word(x,addr) put_user_word((x),(short *)(addr))
100
101 static inline void put_user_long(unsigned long val,int * addr)
102 {
103 *addr = val;
104 }
105
106 #define put_fs_long(x,addr) put_user_long((x),(int *)(addr))
107
108 #define memcpy_fromfs(to, from, n) memcpy((to),(from),(n))
109
110 #define memcpy_tofs(to, from, n) memcpy((to),(from),(n))
111
112 extern int current_user_segment;
113
114 static inline unsigned long get_fs(void)
115 {
116 return current_user_segment;
117 }
118
119 static inline unsigned long get_ds(void)
120 {
121 return KERNEL_DS;
122 }
123
124 static inline void set_fs(unsigned long val)
125 {
126 current_user_segment = val;
127 }
128
129 #endif
130
131 #endif