diff options
-rw-r--r-- | include/asm-x86/termios.h | 74 |
1 files changed, 45 insertions, 29 deletions
diff --git a/include/asm-x86/termios.h b/include/asm-x86/termios.h index d501748700d2..f72956331c49 100644 --- a/include/asm-x86/termios.h +++ b/include/asm-x86/termios.h | |||
@@ -41,6 +41,8 @@ struct termio { | |||
41 | 41 | ||
42 | #ifdef __KERNEL__ | 42 | #ifdef __KERNEL__ |
43 | 43 | ||
44 | #include <asm/uaccess.h> | ||
45 | |||
44 | /* intr=^C quit=^\ erase=del kill=^U | 46 | /* intr=^C quit=^\ erase=del kill=^U |
45 | eof=^D vtime=\0 vmin=\1 sxtc=\0 | 47 | eof=^D vtime=\0 vmin=\1 sxtc=\0 |
46 | start=^Q stop=^S susp=^Z eol=\0 | 48 | start=^Q stop=^S susp=^Z eol=\0 |
@@ -58,39 +60,53 @@ struct termio { | |||
58 | *(unsigned short *) &(termios)->x = __tmp; \ | 60 | *(unsigned short *) &(termios)->x = __tmp; \ |
59 | } | 61 | } |
60 | 62 | ||
61 | #define user_termio_to_kernel_termios(termios, termio) \ | 63 | static inline int user_termio_to_kernel_termios(struct ktermios *termios, |
62 | ({ \ | 64 | struct termio __user *termio) |
63 | SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \ | 65 | { |
64 | SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \ | 66 | SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); |
65 | SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \ | 67 | SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); |
66 | SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \ | 68 | SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); |
67 | copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ | 69 | SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); |
68 | }) | 70 | return copy_from_user(termios->c_cc, termio->c_cc, NCC); |
71 | } | ||
69 | 72 | ||
70 | /* | 73 | /* |
71 | * Translate a "termios" structure into a "termio". Ugh. | 74 | * Translate a "termios" structure into a "termio". Ugh. |
72 | */ | 75 | */ |
73 | #define kernel_termios_to_user_termio(termio, termios) \ | 76 | static inline int kernel_termios_to_user_termio(struct termio __user *termio, |
74 | ({ \ | 77 | struct ktermios *termios) |
75 | put_user((termios)->c_iflag, &(termio)->c_iflag); \ | 78 | { |
76 | put_user((termios)->c_oflag, &(termio)->c_oflag); \ | 79 | put_user((termios)->c_iflag, &(termio)->c_iflag); |
77 | put_user((termios)->c_cflag, &(termio)->c_cflag); \ | 80 | put_user((termios)->c_oflag, &(termio)->c_oflag); |
78 | put_user((termios)->c_lflag, &(termio)->c_lflag); \ | 81 | put_user((termios)->c_cflag, &(termio)->c_cflag); |
79 | put_user((termios)->c_line, &(termio)->c_line); \ | 82 | put_user((termios)->c_lflag, &(termio)->c_lflag); |
80 | copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ | 83 | put_user((termios)->c_line, &(termio)->c_line); |
81 | }) | 84 | return copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); |
82 | 85 | } | |
83 | #define user_termios_to_kernel_termios(k, u) \ | 86 | |
84 | copy_from_user(k, u, sizeof(struct termios2)) | 87 | static inline int user_termios_to_kernel_termios(struct ktermios *k, |
85 | 88 | struct termios2 __user *u) | |
86 | #define kernel_termios_to_user_termios(u, k) \ | 89 | { |
87 | copy_to_user(u, k, sizeof(struct termios2)) | 90 | return copy_from_user(k, u, sizeof(struct termios2)); |
88 | 91 | } | |
89 | #define user_termios_to_kernel_termios_1(k, u) \ | 92 | |
90 | copy_from_user(k, u, sizeof(struct termios)) | 93 | static inline int kernel_termios_to_user_termios(struct termios2 __user *u, |
91 | 94 | struct ktermios *k) | |
92 | #define kernel_termios_to_user_termios_1(u, k) \ | 95 | { |
93 | copy_to_user(u, k, sizeof(struct termios)) | 96 | return copy_to_user(u, k, sizeof(struct termios2)); |
97 | } | ||
98 | |||
99 | static inline int user_termios_to_kernel_termios_1(struct ktermios *k, | ||
100 | struct termios __user *u) | ||
101 | { | ||
102 | return copy_from_user(k, u, sizeof(struct termios)); | ||
103 | } | ||
104 | |||
105 | static inline int kernel_termios_to_user_termios_1(struct termios __user *u, | ||
106 | struct ktermios *k) | ||
107 | { | ||
108 | return copy_to_user(u, k, sizeof(struct termios)); | ||
109 | } | ||
94 | 110 | ||
95 | #endif /* __KERNEL__ */ | 111 | #endif /* __KERNEL__ */ |
96 | 112 | ||