1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 22 /* All Rights Reserved */ 23 24 25 /* 26 * Copyright 2014 Garrett D'Amore <garrett@damore.org> 27 * 28 * Copyright (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved. 29 */ 30 31 #ifndef _SYS_TERMIOS_H 32 #define _SYS_TERMIOS_H 33 34 #include <sys/feature_tests.h> 35 36 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 37 #include <sys/ttydev.h> 38 #include <sys/time.h> 39 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 40 41 #include <sys/types.h> 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 /* 48 * _POSIX_VDISABLE has been defined in <sys/termios.h> since the 49 * introduction of the header. The POSIX standard, IEEE Std. 50 * 1003.1-1988 also required the existence of _POSIX_VDISABLE in 51 * this header. Subsequent versions of the IEEE Standard as well 52 * as the X/Open specifications required that _POSIX_VDISABLE be 53 * defined in <unistd.h> while still allowing for it's existence 54 * here. With the introduction of XPG6, _POSIX_VDISABLE can only 55 * be defined in <unistd.h>. 56 */ 57 #if !defined(_XPG6) || defined(__EXTENSIONS__) 58 #ifndef _POSIX_VDISABLE 59 #define _POSIX_VDISABLE 0 /* Disable special character functions */ 60 #endif 61 #endif /* !defined(_XPG6) || defined(__EXTENSIONS__) */ 62 63 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 64 #define CTRL(c) ((c)&037) 65 #define IBSHIFT 16 66 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 67 68 /* required by termio.h and VCEOF/VCEOL */ 69 #define _NCC 8 70 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 71 #define NCC _NCC 72 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 73 74 /* some defines required by POSIX */ 75 #define NCCS 19 76 77 /* 78 * types defined by POSIX. These are better off in types.h, but 79 * the standard says that they have to be in termios.h. 80 */ 81 typedef unsigned int tcflag_t; 82 typedef unsigned char cc_t; 83 typedef unsigned int speed_t; 84 85 /* 86 * Ioctl control packet 87 */ 88 struct termios { 89 tcflag_t c_iflag; /* input modes */ 90 tcflag_t c_oflag; /* output modes */ 91 tcflag_t c_cflag; /* control modes */ 92 tcflag_t c_lflag; /* line discipline modes */ 93 cc_t c_cc[NCCS]; /* control chars */ 94 }; 95 96 /* 97 * POSIX termios functions 98 * These functions get mapped into ioctls. 99 */ 100 101 #ifndef _KERNEL 102 103 extern speed_t cfgetospeed(const struct termios *); 104 extern int cfsetospeed(struct termios *, speed_t); 105 extern speed_t cfgetispeed(const struct termios *); 106 extern int cfsetispeed(struct termios *, speed_t); 107 extern int tcgetattr(int, struct termios *); 108 extern int tcsetattr(int, int, const struct termios *); 109 extern int tcsendbreak(int, int); 110 extern int tcdrain(int); 111 extern int tcflush(int, int); 112 extern int tcflow(int, int); 113 114 #if !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2) || defined(__EXTENSIONS__) 115 116 extern pid_t tcgetsid(int); 117 118 #endif /* !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2) ... */ 119 120 #endif 121 122 /* control characters */ 123 #define VINTR 0 124 #define VQUIT 1 125 #define VERASE 2 126 #define VKILL 3 127 #define VEOF 4 128 #define VEOL 5 129 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 130 #define VEOL2 6 131 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 132 #define VMIN 4 133 #define VTIME 5 134 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 135 #define VSWTCH 7 136 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 137 #define VSTART 8 138 #define VSTOP 9 139 #define VSUSP 10 140 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 141 #define VDSUSP 11 142 #define VREPRINT 12 143 #define VDISCARD 13 144 #define VWERASE 14 145 #define VLNEXT 15 146 #define VSTATUS 16 147 #define VERASE2 17 148 /* 18 through 19 reserved for future use */ 149 150 /* 151 * control characters form Xenix termio.h 152 */ 153 #define VCEOF NCC /* RESERVED true EOF char (V7 compatability) */ 154 #define VCEOL (NCC + 1) /* RESERVED true EOL char */ 155 156 #define CNUL 0 157 #define CDEL 0177 158 159 /* S5 default control chars */ 160 /* CINTR, CERASE and CKILL modified to SunOS traditional values */ 161 #define CESC '\\' 162 #define CINTR CTRL('c') 163 #define CQUIT 034 /* FS, cntl | */ 164 #define CERASE 0177 /* DEL */ 165 #define CERASE2 CTRL('h') 166 #define CKILL CTRL('u') 167 #define CEOT 04 168 #define CEOL 0 169 #define CEOL2 0 170 #define CEOF 04 /* cntl d */ 171 #define CSTART 021 /* cntl q */ 172 #define CSTOP 023 /* cntl s */ 173 #define CSWTCH 032 /* cntl z */ 174 #define CNSWTCH 0 175 #define CSUSP CTRL('z') 176 #define CDSUSP CTRL('y') 177 #define CRPRNT CTRL('r') 178 #define CFLUSH CTRL('o') 179 #define CWERASE CTRL('w') 180 #define CLNEXT CTRL('v') 181 #define CSTATUS CTRL('t') 182 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 183 184 185 /* input modes */ 186 #define IGNBRK 0000001 187 #define BRKINT 0000002 188 #define IGNPAR 0000004 189 #define PARMRK 0000010 190 #define INPCK 0000020 191 #define ISTRIP 0000040 192 #define INLCR 0000100 193 #define IGNCR 0000200 194 #define ICRNL 0000400 195 #if !defined(_POSIX_C_SOURCE) || \ 196 (defined(_XOPEN_SOURCE) && !defined(_XPG6)) || \ 197 defined(__EXTENSIONS__) 198 #define IUCLC 0001000 199 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 200 #define IXON 0002000 201 #if !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ 202 defined(__EXTENSIONS__) 203 #define IXANY 0004000 204 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 205 #define IXOFF 0010000 206 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 207 #define IMAXBEL 0020000 208 #define DOSMODE 0100000 /* for 386 compatibility */ 209 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 210 211 /* output modes */ 212 #define OPOST 0000001 213 #if !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ 214 defined(__EXTENSIONS__) 215 #if !defined(_XPG6) || defined(__EXTENSIONS__) 216 #define OLCUC 0000002 217 #endif 218 #define ONLCR 0000004 219 #define OCRNL 0000010 220 #define ONOCR 0000020 221 #define ONLRET 0000040 222 #define OFILL 0000100 223 #define OFDEL 0000200 224 #define NLDLY 0000400 225 #define NL0 0 226 #define NL1 0000400 227 #define CRDLY 0003000 228 #define CR0 0 229 #define CR1 0001000 230 #define CR2 0002000 231 #define CR3 0003000 232 #define TABDLY 0014000 233 #define TAB0 0 234 #define TAB1 0004000 235 #define TAB2 0010000 236 #define TAB3 0014000 237 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 238 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 239 #define XTABS 0014000 240 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 241 #if !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ 242 defined(__EXTENSIONS__) 243 #define BSDLY 0020000 244 #define BS0 0 245 #define BS1 0020000 246 #define VTDLY 0040000 247 #define VT0 0 248 #define VT1 0040000 249 #define FFDLY 0100000 250 #define FF0 0 251 #define FF1 0100000 252 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 253 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 254 #define PAGEOUT 0200000 255 #define WRAP 0400000 256 257 /* control modes */ 258 #define CBAUD 0000017 259 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 260 #define CSIZE 0000060 261 #define CS5 0 262 #define CS6 0000020 263 #define CS7 0000040 264 #define CS8 0000060 265 #define CSTOPB 0000100 266 #define CREAD 0000200 267 #define PARENB 0000400 268 #define PARODD 0001000 269 #define HUPCL 0002000 270 #define CLOCAL 0004000 271 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 272 #define RCV1EN 0010000 273 #define XMT1EN 0020000 274 #define LOBLK 0040000 275 #define XCLUDE 0100000 /* *V7* exclusive use coming fron XENIX */ 276 #define CRTSXOFF 010000000000 277 #define CRTSCTS 020000000000 278 #define CIBAUD 03600000 279 #define PAREXT 04000000 280 #define CBAUDEXT 010000000 281 #define CIBAUDEXT 020000000 282 283 /* 284 * 4.4BSD hardware flow control flags 285 */ 286 #define CRTS_IFLOW 010000000000 287 #define CCTS_OFLOW 020000000000 288 289 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 290 291 /* line discipline 0 modes */ 292 #define ISIG 0000001 293 #define ICANON 0000002 294 #if !defined(_POSIX_C_SOURCE) || \ 295 (defined(_XOPEN_SOURCE) && !defined(_XPG6)) || \ 296 defined(__EXTENSIONS__) 297 #define XCASE 0000004 298 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 299 #define ECHO 0000010 300 #define ECHOE 0000020 301 #define ECHOK 0000040 302 #define ECHONL 0000100 303 #define NOFLSH 0000200 304 #define TOSTOP 0000400 305 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 306 #define ECHOCTL 0001000 307 #define ECHOPRT 0002000 308 #define ECHOKE 0004000 309 #define DEFECHO 0010000 310 #define FLUSHO 0020000 311 #define PENDIN 0040000 312 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 313 314 #define IEXTEN 0100000 /* POSIX flag - enable POSIX extensions */ 315 #define _TIOC ('T'<<8) 316 317 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 318 319 #define TIOC _TIOC 320 321 #define TCGETA (_TIOC|1) 322 #define TCSETA (_TIOC|2) 323 #define TCSETAW (_TIOC|3) 324 #define TCSETAF (_TIOC|4) 325 #define TCSBRK (_TIOC|5) 326 #define TCXONC (_TIOC|6) 327 #define TCFLSH (_TIOC|7) 328 329 /* Slots reserved for 386/XENIX compatibility - keyboard control */ 330 331 #define TIOCKBON (_TIOC|8) 332 #define TIOCKBOF (_TIOC|9) 333 #define KBENABLED (_TIOC|10) 334 335 #ifndef IOCTYPE 336 #define IOCTYPE 0xff00 337 #endif 338 339 #define TCDSET (_TIOC|32) 340 #define RTS_TOG (_TIOC|33) /* 386 - "RTS" toggle define 8A1 protocol */ 341 342 #define TIOCGWINSZ (_TIOC|104) 343 #define TIOCSWINSZ (_TIOC|103) 344 345 /* 346 * Softcarrier ioctls 347 */ 348 #define TIOCGSOFTCAR (_TIOC|105) 349 #define TIOCSSOFTCAR (_TIOC|106) 350 351 352 /* termios ioctls */ 353 354 #define TCGETS (_TIOC|13) 355 #define TCSETS (_TIOC|14) 356 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 357 #define TCSANOW (_TIOC|14) /* same as TCSETS */ 358 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 359 #define TCSETSW (_TIOC|15) 360 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 361 #define TCSADRAIN (_TIOC|15) /* same as TCSETSW */ 362 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 363 #define TCSETSF (_TIOC|16) 364 365 /* 366 * NTP PPS ioctls 367 */ 368 #define TIOCGPPS (_TIOC|125) 369 #define TIOCSPPS (_TIOC|126) 370 #define TIOCGPPSEV (_TIOC|127) 371 372 /* Argument filled in by TIOCGPPSEV */ 373 struct ppsclockev { 374 struct timeval tv; 375 uint_t serial; 376 }; 377 378 #if defined(_SYSCALL32) 379 struct ppsclockev32 { 380 struct timeval32 tv; 381 uint32_t serial; 382 }; 383 #endif /* _SYSCALL32 */ 384 385 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 386 387 #define TCSAFLUSH (_TIOC|16) /* same as TCSETSF */ 388 389 /* termios option flags */ 390 391 #define TCIFLUSH 0 /* flush data received but not read */ 392 #define TCOFLUSH 1 /* flush data written but not transmitted */ 393 #define TCIOFLUSH 2 /* flush both data both input and output queues */ 394 395 #define TCOOFF 0 /* suspend output */ 396 #define TCOON 1 /* restart suspended output */ 397 #define TCIOFF 2 /* suspend input */ 398 #define TCION 3 /* restart suspended input */ 399 400 /* TIOC ioctls for BSD, ptys, job control and modem control */ 401 402 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 403 #define tIOC ('t'<<8) 404 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 405 406 /* Slots for 386/XENIX compatibility */ 407 /* BSD includes these ioctls in ttold.h */ 408 409 #ifndef _SYS_TTOLD_H 410 411 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 412 #define TIOCGETD (tIOC|0) 413 #define TIOCSETD (tIOC|1) 414 #define TIOCHPCL (tIOC|2) 415 #define TIOCGETP (tIOC|8) 416 #define TIOCSETP (tIOC|9) 417 #define TIOCSETN (tIOC|10) 418 #define TIOCEXCL (tIOC|13) 419 #define TIOCNXCL (tIOC|14) 420 #define TIOCFLUSH (tIOC|16) 421 #define TIOCSETC (tIOC|17) 422 #define TIOCGETC (tIOC|18) 423 /* 424 * BSD ioctls that are not the same as XENIX are included here. 425 * There are also some relevant ioctls from SUN/BSD sys/ttycom.h 426 * BSD pty ioctls like TIOCPKT are not supported in SVR4. 427 */ 428 429 #define TIOCLBIS (tIOC|127) /* bis local mode bits */ 430 #define TIOCLBIC (tIOC|126) /* bic local mode bits */ 431 #define TIOCLSET (tIOC|125) /* set entire local mode word */ 432 #define TIOCLGET (tIOC|124) /* get local modes */ 433 #define TIOCSBRK (tIOC|123) /* set break bit */ 434 #define TIOCCBRK (tIOC|122) /* clear break bit */ 435 #define TIOCSDTR (tIOC|121) /* set data terminal ready */ 436 #define TIOCCDTR (tIOC|120) /* clear data terminal ready */ 437 #define TIOCSLTC (tIOC|117) /* set local special chars */ 438 #define TIOCGLTC (tIOC|116) /* get local special chars */ 439 #define TIOCOUTQ (tIOC|115) /* driver output queue size */ 440 #define TIOCNOTTY (tIOC|113) /* void tty association */ 441 #define TIOCSCTTY (tIOC|132) /* get a ctty */ 442 #define TIOCSTOP (tIOC|111) /* stop output, like ^S */ 443 #define TIOCSTART (tIOC|110) /* start output, like ^Q */ 444 #define TIOCSILOOP (tIOC|109) /* private to Sun; do not use */ 445 #define TIOCCILOOP (tIOC|108) /* private to Sun; do not use */ 446 447 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 448 449 #endif /* end _SYS_TTOLD_H */ 450 451 /* POSIX job control ioctls */ 452 453 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 454 #define TIOCGPGRP (tIOC|20) /* get pgrp of tty */ 455 #define TIOCSPGRP (tIOC|21) /* set pgrp of tty */ 456 #define TIOCGSID (tIOC|22) /* get session id on ctty */ 457 458 /* Miscellaneous */ 459 #define TIOCSTI (tIOC|23) /* simulate terminal input */ 460 461 /* Modem control */ 462 #define TIOCMSET (tIOC|26) /* set all modem bits */ 463 #define TIOCMBIS (tIOC|27) /* bis modem bits */ 464 #define TIOCMBIC (tIOC|28) /* bic modem bits */ 465 #define TIOCMGET (tIOC|29) /* get all modem bits */ 466 #define TIOCM_LE 0001 /* line enable */ 467 #define TIOCM_DTR 0002 /* data terminal ready */ 468 #define TIOCM_RTS 0004 /* request to send */ 469 #define TIOCM_ST 0010 /* secondary transmit */ 470 #define TIOCM_SR 0020 /* secondary receive */ 471 #define TIOCM_CTS 0040 /* clear to send */ 472 #define TIOCM_CAR 0100 /* carrier detect */ 473 #define TIOCM_CD TIOCM_CAR 474 #define TIOCM_RNG 0200 /* ring */ 475 #define TIOCM_RI TIOCM_RNG 476 #define TIOCM_DSR 0400 /* data set ready */ 477 478 /* pseudo-tty */ 479 480 #define TIOCREMOTE (tIOC|30) /* remote input editing */ 481 #define TIOCSIGNAL (tIOC|31) /* pty: send signal to slave */ 482 483 484 /* Some more 386 xenix stuff */ 485 486 #define LDIOC ('D'<<8) 487 488 #define LDOPEN (LDIOC|0) 489 #define LDCLOSE (LDIOC|1) 490 #define LDCHG (LDIOC|2) 491 #define LDGETT (LDIOC|8) 492 #define LDSETT (LDIOC|9) 493 494 /* Slots for 386 compatibility */ 495 496 #define LDSMAP (LDIOC|110) 497 #define LDGMAP (LDIOC|111) 498 #define LDNMAP (LDIOC|112) 499 #define LDEMAP (LDIOC|113) 500 #define LDDMAP (LDIOC|114) 501 502 /* 503 * These are retained for 386/XENIX compatibility. 504 */ 505 506 #define DIOC ('d'<<8) 507 #define DIOCGETP (DIOC|8) /* V7 */ 508 #define DIOCSETP (DIOC|9) /* V7 */ 509 510 /* 511 * Returns a non-zero value if there 512 * are characters in the input queue. 513 * 514 * XXX - somebody is confused here. V7 had no such "ioctl", although XENIX may 515 * have added it; 4BSD had FIONREAD, which returned the number of characters 516 * waiting, and was supposed to work on all descriptors (i.e., every driver 517 * should make a stab at implementing it). 518 */ 519 #define FIORDCHK (('f'<<8)|3) /* V7 */ 520 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 521 522 /* 523 * Speeds 524 */ 525 #define B0 0 526 #define B50 1 527 #define B75 2 528 #define B110 3 529 #define B134 4 530 #define B150 5 531 #define B200 6 532 #define B300 7 533 #define B600 8 534 #define B1200 9 535 #define B1800 10 536 #define B2400 11 537 #define B4800 12 538 #define B9600 13 539 #define B19200 14 540 #define B38400 15 541 #define B57600 16 542 #define B76800 17 543 #define B115200 18 544 #define B153600 19 545 #define B230400 20 546 #define B307200 21 547 #define B460800 22 548 #define B921600 23 549 #define B1000000 24 550 #define B1152000 25 551 #define B1500000 26 552 #define B2000000 27 553 #define B2500000 28 554 #define B3000000 29 555 #define B3500000 30 556 #define B4000000 31 557 558 #ifndef _SYS_TTOLD_H 559 560 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 561 /* Windowing structure to support JWINSIZE/TIOCSWINSZ/TIOCGWINSZ */ 562 struct winsize { 563 unsigned short ws_row; /* rows, in characters */ 564 unsigned short ws_col; /* columns, in character */ 565 unsigned short ws_xpixel; /* horizontal size, pixels */ 566 unsigned short ws_ypixel; /* vertical size, pixels */ 567 }; 568 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 569 570 #endif /* end _SYS_TTOLD_H */ 571 572 #ifdef __cplusplus 573 } 574 #endif 575 576 #endif /* _SYS_TERMIOS_H */ 577