home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-sparc / termios.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.6 KB  |  166 lines

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