Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.14-rc5 174 lines 4.9 kB view raw
1/* $Id: termios.h,v 1.32 2001/06/01 08:12:11 davem Exp $ */ 2#ifndef _SPARC_TERMIOS_H 3#define _SPARC_TERMIOS_H 4 5#include <asm/ioctls.h> 6#include <asm/termbits.h> 7 8#if defined(__KERNEL__) || defined(__DEFINE_BSD_TERMIOS) 9struct sgttyb { 10 char sg_ispeed; 11 char sg_ospeed; 12 char sg_erase; 13 char sg_kill; 14 short sg_flags; 15}; 16 17struct tchars { 18 char t_intrc; 19 char t_quitc; 20 char t_startc; 21 char t_stopc; 22 char t_eofc; 23 char t_brkc; 24}; 25 26struct ltchars { 27 char t_suspc; 28 char t_dsuspc; 29 char t_rprntc; 30 char t_flushc; 31 char t_werasc; 32 char t_lnextc; 33}; 34#endif /* __KERNEL__ */ 35 36struct sunos_ttysize { 37 int st_lines; /* Lines on the terminal */ 38 int st_columns; /* Columns on the terminal */ 39}; 40 41/* Used for packet mode */ 42#define TIOCPKT_DATA 0 43#define TIOCPKT_FLUSHREAD 1 44#define TIOCPKT_FLUSHWRITE 2 45#define TIOCPKT_STOP 4 46#define TIOCPKT_START 8 47#define TIOCPKT_NOSTOP 16 48#define TIOCPKT_DOSTOP 32 49 50struct winsize { 51 unsigned short ws_row; 52 unsigned short ws_col; 53 unsigned short ws_xpixel; 54 unsigned short ws_ypixel; 55}; 56 57/* line disciplines */ 58#define N_TTY 0 59#define N_SLIP 1 60#define N_MOUSE 2 61#define N_PPP 3 62#define N_STRIP 4 63#define N_AX25 5 64#define N_X25 6 65#define N_6PACK 7 66#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ 67#define N_R3964 9 /* Reserved for Simatic R3964 module */ 68#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ 69#define N_IRDA 11 /* Linux IrDa - http://irda.sourceforge.net/ */ 70#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */ 71#define N_HDLC 13 /* synchronous HDLC */ 72#define N_SYNC_PPP 14 /* synchronous PPP */ 73#define N_HCI 15 /* Bluetooth HCI UART */ 74 75#ifdef __KERNEL__ 76#include <linux/module.h> 77 78/* 79 * c_cc characters in the termio structure. Oh, how I love being 80 * backwardly compatible. Notice that character 4 and 5 are 81 * interpreted differently depending on whether ICANON is set in 82 * c_lflag. If it's set, they are used as _VEOF and _VEOL, otherwise 83 * as _VMIN and V_TIME. This is for compatibility with OSF/1 (which 84 * is compatible with sysV)... 85 */ 86#define _VMIN 4 87#define _VTIME 5 88 89 90/* intr=^C quit=^\ erase=del kill=^U 91 eof=^D eol=\0 eol2=\0 sxtc=\0 92 start=^Q stop=^S susp=^Z dsusp=^Y 93 reprint=^R discard=^U werase=^W lnext=^V 94 vmin=\1 vtime=\0 95*/ 96#define INIT_C_CC "\003\034\177\025\004\000\000\000\021\023\032\031\022\025\027\026\001" 97 98/* 99 * Translate a "termio" structure into a "termios". Ugh. 100 */ 101#define user_termio_to_kernel_termios(termios, termio) \ 102({ \ 103 unsigned short tmp; \ 104 get_user(tmp, &(termio)->c_iflag); \ 105 (termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \ 106 get_user(tmp, &(termio)->c_oflag); \ 107 (termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \ 108 get_user(tmp, &(termio)->c_cflag); \ 109 (termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \ 110 get_user(tmp, &(termio)->c_lflag); \ 111 (termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \ 112 copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ 113 0; \ 114}) 115 116/* 117 * Translate a "termios" structure into a "termio". Ugh. 118 * 119 * Note the "fun" _VMIN overloading. 120 */ 121#define kernel_termios_to_user_termio(termio, termios) \ 122({ \ 123 put_user((termios)->c_iflag, &(termio)->c_iflag); \ 124 put_user((termios)->c_oflag, &(termio)->c_oflag); \ 125 put_user((termios)->c_cflag, &(termio)->c_cflag); \ 126 put_user((termios)->c_lflag, &(termio)->c_lflag); \ 127 put_user((termios)->c_line, &(termio)->c_line); \ 128 copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ 129 if (!((termios)->c_lflag & ICANON)) { \ 130 put_user((termios)->c_cc[VMIN], &(termio)->c_cc[_VMIN]); \ 131 put_user((termios)->c_cc[VTIME], &(termio)->c_cc[_VTIME]); \ 132 } \ 133 0; \ 134}) 135 136#define user_termios_to_kernel_termios(k, u) \ 137({ \ 138 get_user((k)->c_iflag, &(u)->c_iflag); \ 139 get_user((k)->c_oflag, &(u)->c_oflag); \ 140 get_user((k)->c_cflag, &(u)->c_cflag); \ 141 get_user((k)->c_lflag, &(u)->c_lflag); \ 142 get_user((k)->c_line, &(u)->c_line); \ 143 copy_from_user((k)->c_cc, (u)->c_cc, NCCS); \ 144 if((k)->c_lflag & ICANON) { \ 145 get_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \ 146 get_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \ 147 } else { \ 148 get_user((k)->c_cc[VMIN], &(u)->c_cc[_VMIN]); \ 149 get_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \ 150 } \ 151 0; \ 152}) 153 154#define kernel_termios_to_user_termios(u, k) \ 155({ \ 156 put_user((k)->c_iflag, &(u)->c_iflag); \ 157 put_user((k)->c_oflag, &(u)->c_oflag); \ 158 put_user((k)->c_cflag, &(u)->c_cflag); \ 159 put_user((k)->c_lflag, &(u)->c_lflag); \ 160 put_user((k)->c_line, &(u)->c_line); \ 161 copy_to_user((u)->c_cc, (k)->c_cc, NCCS); \ 162 if(!((k)->c_lflag & ICANON)) { \ 163 put_user((k)->c_cc[VMIN], &(u)->c_cc[_VMIN]); \ 164 put_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \ 165 } else { \ 166 put_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \ 167 put_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \ 168 } \ 169 0; \ 170}) 171 172#endif /* __KERNEL__ */ 173 174#endif /* _SPARC_TERMIOS_H */