minix/common/include/termios.h
Thomas Veerman b01e9ebfdb TTY: seperate hardware dependent parts + add new serial driver
.Split TTY in order to support both x86 and ARM.
.Add support for the TI 16750 UARTs on OMAP35x.
.Various other improvements:
  .Kernel messages are printed using generic terminal write
   functions. That is, they are no longer directly displayed
   on the console.
  .The console can now be displayed on any terminal. This
   is configured by the "console={tty00,tty01,ttyc2,ttyc3,ttyc4}"
   boot variable -- basically any valid /dev/tty* terminal.
  .Cutify kernel messages with colors. Configured by
   "kernelclr={1,2,3,4,5,6,7}" boot variable.
2012-10-30 11:33:29 +00:00

218 lines
8.5 KiB
C

/* The <termios.h> header is used for controlling tty modes. */
#ifndef _TERMIOS_H
#define _TERMIOS_H
typedef unsigned short tcflag_t;
typedef unsigned char cc_t;
typedef unsigned int speed_t;
#define NCCS 20 /* size of cc_c array, some extra space
* for extensions. */
/* Primary terminal control structure. POSIX Table 7-1. */
struct termios {
tcflag_t c_iflag; /* input modes */
tcflag_t c_oflag; /* output modes */
tcflag_t c_cflag; /* control modes */
tcflag_t c_lflag; /* local modes */
speed_t c_ispeed; /* input speed */
speed_t c_ospeed; /* output speed */
cc_t c_cc[NCCS]; /* control characters */
};
/* Values for termios c_iflag bit map. POSIX Table 7-2. */
#define BRKINT 0x0001 /* signal interrupt on break */
#define ICRNL 0x0002 /* map CR to NL on input */
#define IGNBRK 0x0004 /* ignore break */
#define IGNCR 0x0008 /* ignore CR */
#define IGNPAR 0x0010 /* ignore characters with parity errors */
#define INLCR 0x0020 /* map NL to CR on input */
#define INPCK 0x0040 /* enable input parity check */
#define ISTRIP 0x0080 /* mask off 8th bit */
#define IXOFF 0x0100 /* enable start/stop input control */
#define IXON 0x0200 /* enable start/stop output control */
#define PARMRK 0x0400 /* mark parity errors in the input queue */
/* Values for termios c_oflag bit map. POSIX Sec. 7.1.2.3. */
#define OPOST 0x0001 /* perform output processing */
/* Values for termios c_cflag bit map. POSIX Table 7-3. */
#define CLOCAL 0x0001 /* ignore modem status lines */
#define CREAD 0x0002 /* enable receiver */
#define CSIZE 0x000C /* number of bits per character */
#define CS5 0x0000 /* if CSIZE is CS5, characters are 5 bits */
#define CS6 0x0004 /* if CSIZE is CS6, characters are 6 bits */
#define CS7 0x0008 /* if CSIZE is CS7, characters are 7 bits */
#define CS8 0x000C /* if CSIZE is CS8, characters are 8 bits */
#define CSTOPB 0x0010 /* send 2 stop bits if set, else 1 */
#define HUPCL 0x0020 /* hang up on last close */
#define PARENB 0x0040 /* enable parity on output */
#define PARODD 0x0080 /* use odd parity if set, else even */
/* Values for termios c_lflag bit map. POSIX Table 7-4. */
#define ECHO 0x0001 /* enable echoing of input characters */
#define ECHOE 0x0002 /* echo ERASE as backspace */
#define ECHOK 0x0004 /* echo KILL */
#define ECHONL 0x0008 /* echo NL */
#define ICANON 0x0010 /* canonical input (erase and kill enabled) */
#define IEXTEN 0x0020 /* enable extended functions */
#define ISIG 0x0040 /* enable signals */
#define NOFLSH 0x0080 /* disable flush after interrupt or quit */
#define TOSTOP 0x0100 /* send SIGTTOU (job control, not implemented*/
/* Indices into c_cc array. Default values in parentheses. POSIX Table 7-5. */
#define VEOF 0 /* cc_c[VEOF] = EOF char (^D) */
#define VEOL 1 /* cc_c[VEOL] = EOL char (undef) */
#define VERASE 2 /* cc_c[VERASE] = ERASE char (^H) */
#define VINTR 3 /* cc_c[VINTR] = INTR char (DEL) */
#define VKILL 4 /* cc_c[VKILL] = KILL char (^U) */
#define VMIN 5 /* cc_c[VMIN] = MIN value for timer */
#define VQUIT 6 /* cc_c[VQUIT] = QUIT char (^\) */
#define VTIME 7 /* cc_c[VTIME] = TIME value for timer */
#define VSUSP 8 /* cc_c[VSUSP] = SUSP (^Z, ignored) */
#define VSTART 9 /* cc_c[VSTART] = START char (^S) */
#define VSTOP 10 /* cc_c[VSTOP] = STOP char (^Q) */
#ifdef __NBSD_LIBC
/* This is defined in <unistd.h> in NetBSD headers. */
#else /* !__NBSD_LIBC */
#define _POSIX_VDISABLE (cc_t)0xFF /* You can't even generate this
* character with 'normal' keyboards.
* But some language specific keyboards
* can generate 0xFF. It seems that all
* 256 are used, so cc_t should be a
* short...
*/
#endif /* !__NBSD_LIBC */
/* Values for the baud rate settings. POSIX Table 7-6. */
#define B0 0x0000 /* hang up the line */
#define B50 0x1000 /* 50 baud */
#define B75 0x2000 /* 75 baud */
#define B110 0x3000 /* 110 baud */
#define B134 0x4000 /* 134.5 baud */
#define B150 0x5000 /* 150 baud */
#define B200 0x6000 /* 200 baud */
#define B300 0x7000 /* 300 baud */
#define B600 0x8000 /* 600 baud */
#define B1200 0x9000 /* 1200 baud */
#define B1800 0xA000 /* 1800 baud */
#define B2400 0xB000 /* 2400 baud */
#define B4800 0xC000 /* 4800 baud */
#define B9600 0xD000 /* 9600 baud */
#define B19200 0xE000 /* 19200 baud */
#define B38400 0xF000 /* 38400 baud */
/* Optional actions for tcsetattr(). POSIX Sec. 7.2.1.2. */
#define TCSANOW 1 /* changes take effect immediately */
#define TCSADRAIN 2 /* changes take effect after output is done */
#define TCSAFLUSH 3 /* wait for output to finish and flush input */
/* Queue_selector values for tcflush(). POSIX Sec. 7.2.2.2. */
#define TCIFLUSH 1 /* flush accumulated input data */
#define TCOFLUSH 2 /* flush accumulated output data */
#define TCIOFLUSH 3 /* flush accumulated input and output data */
/* Action values for tcflow(). POSIX Sec. 7.2.2.2. */
#define TCOOFF 1 /* suspend output */
#define TCOON 2 /* restart suspended output */
#define TCIOFF 3 /* transmit a STOP character on the line */
#define TCION 4 /* transmit a START character on the line */
int tcsendbreak(int _fildes, int _duration);
int tcdrain(int _filedes);
int tcflush(int _filedes, int _queue_selector);
int tcflow(int _filedes, int _action);
speed_t cfgetispeed(const struct termios *_termios_p);
speed_t cfgetospeed(const struct termios *_termios_p);
int cfsetispeed(struct termios *_termios_p, speed_t _speed);
int cfsetospeed(struct termios *_termios_p, speed_t _speed);
int tcgetattr(int _filedes, struct termios *_termios_p);
int tcsetattr(int _filedes, int _opt_actions, const struct termios
*_termios_p);
#ifndef cfgetispeed
#define cfgetispeed(termios_p) ((termios_p)->c_ispeed)
#endif
#ifndef cfgetospeed
#define cfgetospeed(termios_p) ((termios_p)->c_ospeed)
#endif
#ifndef cfsetispeed
#define cfsetispeed(termios_p, speed) ((termios_p)->c_ispeed = (speed), 0)
#endif
#ifndef cfsetospeed
#define cfsetospeed(termios_p, speed) ((termios_p)->c_ospeed = (speed), 0)
#endif
/* Here are the local extensions to the POSIX standard for Minix. */
/* Extensions to the termios c_iflag bit map. */
#define IXANY 0x0800 /* allow any key to continue ouptut */
#define SCANCODES 0x1000 /* send scancodes */
/* Extensions to the termios c_oflag bit map. They are only active iff
* OPOST is enabled. */
#define ONLCR 0x0002 /* Map NL to CR-NL on output */
#define XTABS 0x0004 /* Expand tabs to spaces */
#define ONOEOT 0x0008 /* discard EOT's (^D) on output) */
/* Extensions to the termios c_lflag bit map. */
#define LFLUSHO 0x0200 /* Flush output. */
/* Extensions to the c_cc array. */
#define VREPRINT 11 /* cc_c[VREPRINT] (^R) */
#define VLNEXT 12 /* cc_c[VLNEXT] (^V) */
#define VDISCARD 13 /* cc_c[VDISCARD] (^O) */
/* Extensions to baud rate settings. */
#ifdef _MINIX
#define B57600 0x0100 /* 57600 baud */
#define B115200 0x0200 /* 115200 baud */
#define B230400 0x0400 /* 230400 baud */
#define B460800 0x0800 /* 460800 baud */
#define B921600 0x1000 /* 921600 baud */
#define B1843200 0x2000 /* 1843200 baud */
#define B3000000 0x4000 /* 3000000 baud */
#define B3686400 0x8000 /* 3686400 baud */
#endif /* _MINIX */
/* These are the default settings used by the kernel and by 'stty sane' */
#define TCTRL_DEF (CREAD | CS8 | HUPCL)
#define TINPUT_DEF (BRKINT | ICRNL | IXON | IXANY)
#define TOUTPUT_DEF (OPOST | ONLCR)
#define TLOCAL_DEF (ISIG | IEXTEN | ICANON | ECHO | ECHOE)
#define TSPEED_DEF B9600
#define TEOF_DEF '\4' /* ^D */
#define TEOL_DEF _POSIX_VDISABLE
#define TERASE_DEF '\10' /* ^H */
#define TINTR_DEF '\3' /* ^C */
#define TKILL_DEF '\25' /* ^U */
#define TMIN_DEF 1
#define TQUIT_DEF '\34' /* ^\ */
#define TSTART_DEF '\21' /* ^Q */
#define TSTOP_DEF '\23' /* ^S */
#define TSUSP_DEF '\32' /* ^Z */
#define TTIME_DEF 0
#define TREPRINT_DEF '\22' /* ^R */
#define TLNEXT_DEF '\26' /* ^V */
#define TDISCARD_DEF '\17' /* ^O */
/* Window size. This information is stored in the TTY driver but not used.
* This can be used for screen based applications in a window environment.
* The ioctls TIOCGWINSZ and TIOCSWINSZ can be used to get and set this
* information.
*/
struct winsize
{
unsigned short ws_row; /* rows, in characters */
unsigned short ws_col; /* columns, in characters */
unsigned short ws_xpixel; /* horizontal size, pixels */
unsigned short ws_ypixel; /* vertical size, pixels */
};
#endif /* _TERMIOS_H */