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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27#ifndef __SYS_TERMIOS_H 28#define __SYS_TERMIOS_H 29 30#pragma ident "%Z%%M% %I% %E% SMI" 31 32#include <sys/stdtypes.h> 33#include <sys/ioccom.h> 34#include <sys/ttydev.h> 35#include <sys/ttycom.h> 36 37#ifdef __cplusplus 38extern "C" { 39#endif 40 41#define NCCS 17 42 43/* 44 * control characters 45 * the following are not (yet) posix 46 * VEOL2, VSWTCH, VDSUSP, VREPRINT, VDISCARD, VWERASE, VLNEXT, VSTATUS 47 */ 48#define VINTR 0 49#define VQUIT 1 50#define VERASE 2 51#define VKILL 3 52#define VEOF 4 53#define VEOL 5 54#ifndef _POSIX_SOURCE 55#define VEOL2 6 56#define VSWTCH 7 57#endif 58#define VSTART 8 59#define VSTOP 9 60#define VSUSP 10 61#ifndef _POSIX_SOURCE 62#define VDSUSP 11 63#define VREPRINT 12 64#define VDISCARD 13 65#define VWERASE 14 66#define VLNEXT 15 67#define VSTATUS 16 68#endif 69 70#define VMIN VEOF 71#define VTIME VEOL 72 73#ifndef _POSIX_SOURCE 74#define _CTRL(c) ('c'&037) 75 76/* 77 * default control chars. 78 * guarded for ttychars.h. 79 */ 80#ifndef CINTR 81#define CINTR _CTRL(c) 82#define CQUIT 034 /* FS, ^\ */ 83#define CERASE 0177 /* DEL, ^? */ 84#define CKILL _CTRL(u) 85#define CEOF _CTRL(d) 86#define CEOT CEOF 87#define CEOL 0 88#define CEOL2 0 89#define CSWTCH 0 90#define CNSWTCH 0 91#define CSTART _CTRL(q) 92#define CSTOP _CTRL(s) 93#define CSUSP _CTRL(z) 94#define CDSUSP _CTRL(y) 95#define CRPRNT _CTRL(r) 96#define CFLUSH _CTRL(o) 97#define CWERASE _CTRL(w) 98#define CLNEXT _CTRL(v) 99#endif /* !CINTR */ 100 101#define CESC '\\' 102#define CNUL 0 103#define CDEL 0377 104#endif /* !_POSIX_SOURCE */ 105 106/* input modes */ 107#define IGNBRK 0x00000001 108#define BRKINT 0x00000002 109#define IGNPAR 0x00000004 110#define PARMRK 0x00000008 111#define INPCK 0x00000010 112#define ISTRIP 0x00000020 113#define INLCR 0x00000040 114#define IGNCR 0x00000080 115#define ICRNL 0x00000100 116/* IUCLC 0x00000200 not posix, defined below */ 117#define IXON 0x00000400 118/* IXANY 0x00000800 not posix, defined below */ 119#define IXOFF 0x00001000 120/* IMAXBEL 0x00002000 not posix, defined below */ 121 122#ifndef _POSIX_SOURCE 123#define IUCLC 0x00000200 124#define IXANY 0x00000800 125#define IMAXBEL 0x00002000 126#endif /* !_POSIX_SOURCE */ 127 128/* output modes */ 129#define OPOST 0x00000001 130#ifndef _POSIX_SOURCE 131#define OLCUC 0x00000002 132#define ONLCR 0x00000004 133#define OCRNL 0x00000008 134#define ONOCR 0x00000010 135#define ONLRET 0x00000020 136#define OFILL 0x00000040 137#define OFDEL 0x00000080 138#define NLDLY 0x00000100 139#define NL0 0 140#define NL1 0x00000100 141#define CRDLY 0x00000600 142#define CR0 0 143#define CR1 0x00000200 144#define CR2 0x00000400 145#define CR3 0x00000600 146#define TABDLY 0x00001800 147#define TAB0 0 148#define TAB1 0x00000800 149#define TAB2 0x00001000 150#define XTABS 0x00001800 151#define TAB3 XTABS 152#define BSDLY 0x00002000 153#define BS0 0 154#define BS1 0x00002000 155#define VTDLY 0x00004000 156#define VT0 0 157#define VT1 0x00004000 158#define FFDLY 0x00008000 159#define FF0 0 160#define FF1 0x00008000 161#define PAGEOUT 0x00010000 162#define WRAP 0x00020000 163#endif /* !_POSIX_SOURCE */ 164 165/* control modes */ 166#ifndef _POSIX_SOURCE 167#define CBAUD 0x0000000f 168#endif 169#define CSIZE 0x00000030 170#define CS5 0 171#define CS6 0x00000010 172#define CS7 0x00000020 173#define CS8 0x00000030 174#define CSTOPB 0x00000040 175#define CREAD 0x00000080 176#define PARENB 0x00000100 177#define PARODD 0x00000200 178#define HUPCL 0x00000400 179#define CLOCAL 0x00000800 180#ifndef _POSIX_SOURCE 181#define LOBLK 0x00001000 182#define CIBAUD 0x000f0000 183#define CRTSXOFF 0x40000000 184#define CRTSCTS 0x80000000 185#define CBAUDEXT 0x200000 186#define CIBAUDEXT 0x400000 187 188/* 189 * 4.4BSD flags for hardware flow control 190 */ 191#define CRTS_IFLOW 0x40000000 192#define CCTS_OFLOW 0x80000000 193 194#define IBSHIFT 16 195#endif /* !_POSIX_SOURCE */ 196 197/* line discipline 0 modes */ 198#define ISIG 0x00000001 199#define ICANON 0x00000002 200/* XCASE 0x00000004 not posix, defined below */ 201#define ECHO 0x00000008 202#define ECHOE 0x00000010 203#define ECHOK 0x00000020 204#define ECHONL 0x00000040 205#define NOFLSH 0x00000080 206#define TOSTOP 0x00000100 207/* ECHOCTL 0x00000200 not posix, defined below */ 208/* ECHOPRT 0x00000400 not posix, defined below */ 209/* ECHOKE 0x00000800 not posix, defined below */ 210/* DEFECHO 0x00001000 not posix, defined below */ 211/* FLUSHO 0x00002000 not posix, defined below */ 212/* PENDIN 0x00004000 not posix, defined below */ 213#define IEXTEN 0x00008000 214 215#ifndef _POSIX_SOURCE 216#define XCASE 0x00000004 217#define ECHOCTL 0x00000200 218#define ECHOPRT 0x00000400 219#define ECHOKE 0x00000800 220#define DEFECHO 0x00001000 221#define FLUSHO 0x00002000 222#define PENDIN 0x00004000 223#endif /* !_POSIX_SOURCE */ 224 225#ifndef _POSIX_SOURCE 226/* 227 * codes 1 through 5, not shown here, are old "termio" calls 228 */ 229#define TCXONC _IO('T', 6) 230#define TCFLSH _IO('T', 7) 231#define TCGETS _IOR('T', 8, struct termios) 232#define TCSETS _IOW('T', 9, struct termios) 233#define TCSETSW _IOW('T', 10, struct termios) 234#define TCSETSF _IOW('T', 11, struct termios) 235#endif /* !_POSIX_SOURCE */ 236 237#define TCOOFF 0 /* arg to TCXONC & tcflow() */ 238#define TCOON 1 /* arg to TCXONC & tcflow() */ 239#define TCIOFF 2 /* arg to TCXONC & tcflow() */ 240#define TCION 3 /* arg to TCXONC & tcflow() */ 241#define TCIFLUSH 0 /* arg to TCFLSH & tcflush() */ 242#define TCOFLUSH 1 /* arg to TCFLSH & tcflush() */ 243#define TCIOFLUSH 2 /* arg to TCFLSH & tcflush() */ 244#define TCSANOW 0 /* arg to tcsetattr() */ 245#define TCSADRAIN 1 /* arg to tcsetattr() */ 246#define TCSAFLUSH 2 /* arg to tcsetattr() */ 247 248/* 249 * Ioctl control packet 250 */ 251struct termios { 252 tcflag_t c_iflag; /* input modes */ 253 tcflag_t c_oflag; /* output modes */ 254 tcflag_t c_cflag; /* control modes */ 255 tcflag_t c_lflag; /* line discipline modes */ 256 char c_line; /* line discipline XXX */ 257 cc_t c_cc[NCCS]; /* control chars */ 258}; 259 260 261#ifndef KERNEL 262speed_t cfgetispeed(/* struct termios *termios_p */); 263speed_t cfgetospeed(/* struct termios *termios_p */); 264int cfsetispeed(/* struct termios *termios_p, speed_t speed */); 265int cfsetospeed(/* struct termios *termios_p, speed_t speed */); 266int tcdrain(/* int fildes */); 267int tcflow(/* int fildes, int action */); 268int tcflush(/* int fildes, int queue_selector */); 269int tcgetattr(/* int fildes, struct termios *termios_p */); 270int tcsendbreak(/* int fildes, int duration */); 271int tcsetattr(/* int fildes, int optional_actions, struct *termios_p */); 272#endif /* !KERNEL */ 273 274#ifdef __cplusplus 275} 276#endif 277 278#endif /* __SYS_TERMIOS_H */ 279