5 * 'tty.h' defines some structures used by tty_io.c and some defines. 9 * These constants are also useful for user-level apps (e.g., VC 12 #define MIN_NR_CONSOLES 1/* must be at least 1 */ 13 #define MAX_NR_CONSOLES 63/* serial lines start at 64 */ 14 #define MAX_NR_USER_CONSOLES 63/* must be root to allocate above this */ 15 /* Note: the ioctl VT_GETSTATE does not work for 16 consoles 16 and higher (since it returns a short) */ 19 #include <linux/config.h> 21 #include <linux/major.h> 22 #include <linux/termios.h> 23 #include <linux/tqueue.h> 24 #include <linux/tty_driver.h> 25 #include <linux/tty_ldisc.h> 27 #include <asm/system.h> 31 * Note: don't mess with NR_PTYS until you understand the tty minor 32 * number allocation game... 33 * (Note: the *_driver.minor_start values 1, 64, 128, 192 are 34 * hardcoded at present.) 36 #define NR_PTYS 256/* ptys/major */ 40 * Unix98 PTY's can be defined as any multiple of NR_PTYS up to 41 * UNIX98_PTY_MAJOR_COUNT; this section defines what we need from the 44 #ifdef CONFIG_UNIX98_PTYS 45 # define UNIX98_NR_MAJORS ((CONFIG_UNIX98_PTY_COUNT+NR_PTYS-1)/NR_PTYS) 46 # if UNIX98_NR_MAJORS <= 0 47 # undef CONFIG_UNIX98_PTYS 48 # elif UNIX98_NR_MAJORS > UNIX98_PTY_MAJOR_COUNT 49 # error Too many Unix98 ptys defined 50 # undef UNIX98_NR_MAJORS 51 # define UNIX98_NR_MAJORS UNIX98_PTY_MAJOR_COUNT 56 * These are set up by the setup-routine at boot-time: 60 unsigned char orig_x
;/* 0x00 */ 61 unsigned char orig_y
;/* 0x01 */ 62 unsigned short dontuse1
;/* 0x02 -- EXT_MEM_K sits here */ 63 unsigned short orig_video_page
;/* 0x04 */ 64 unsigned char orig_video_mode
;/* 0x06 */ 65 unsigned char orig_video_cols
;/* 0x07 */ 66 unsigned short unused2
;/* 0x08 */ 67 unsigned short orig_video_ega_bx
;/* 0x0a */ 68 unsigned short unused3
;/* 0x0c */ 69 unsigned char orig_video_lines
;/* 0x0e */ 70 unsigned char orig_video_isVGA
;/* 0x0f */ 71 unsigned short orig_video_points
;/* 0x10 */ 73 /* VESA graphic mode -- linear frame buffer */ 74 unsigned short lfb_width
;/* 0x12 */ 75 unsigned short lfb_height
;/* 0x14 */ 76 unsigned short lfb_depth
;/* 0x16 */ 77 unsigned long lfb_base
;/* 0x18 */ 78 unsigned long lfb_size
;/* 0x1c */ 79 unsigned short dontuse2
, dontuse3
;/* 0x20 -- CL_MAGIC and CL_OFFSET here */ 80 unsigned short lfb_linelength
;/* 0x24 */ 81 unsigned char red_size
;/* 0x26 */ 82 unsigned char red_pos
;/* 0x27 */ 83 unsigned char green_size
;/* 0x28 */ 84 unsigned char green_pos
;/* 0x29 */ 85 unsigned char blue_size
;/* 0x2a */ 86 unsigned char blue_pos
;/* 0x2b */ 87 unsigned char rsvd_size
;/* 0x2c */ 88 unsigned char rsvd_pos
;/* 0x2d */ 89 unsigned short vesapm_seg
;/* 0x2e */ 90 unsigned short vesapm_off
;/* 0x30 */ 91 unsigned short pages
;/* 0x32 */ 92 /* 0x34 -- 0x3f reserved for future expansion */ 95 externstruct screen_info screen_info
; 97 #define ORIG_X (screen_info.orig_x) 98 #define ORIG_Y (screen_info.orig_y) 99 #define ORIG_VIDEO_MODE (screen_info.orig_video_mode) 100 #define ORIG_VIDEO_COLS (screen_info.orig_video_cols) 101 #define ORIG_VIDEO_EGA_BX (screen_info.orig_video_ega_bx) 102 #define ORIG_VIDEO_LINES (screen_info.orig_video_lines) 103 #define ORIG_VIDEO_ISVGA (screen_info.orig_video_isVGA) 104 #define ORIG_VIDEO_POINTS (screen_info.orig_video_points) 106 #define VIDEO_TYPE_MDA 0x10/* Monochrome Text Display */ 107 #define VIDEO_TYPE_CGA 0x11/* CGA Display */ 108 #define VIDEO_TYPE_EGAM 0x20/* EGA/VGA in Monochrome Mode */ 109 #define VIDEO_TYPE_EGAC 0x21/* EGA in Color Mode */ 110 #define VIDEO_TYPE_VGAC 0x22/* VGA+ in Color Mode */ 111 #define VIDEO_TYPE_VLFB 0x23/* VESA VGA in graphic mode */ 113 #define VIDEO_TYPE_PICA_S3 0x30/* ACER PICA-61 local S3 video */ 114 #define VIDEO_TYPE_MIPS_G364 0x31/* MIPS Magnum 4000 G364 video */ 115 #define VIDEO_TYPE_SNI_RM 0x32/* SNI RM200 PCI video */ 116 #define VIDEO_TYPE_SGI 0x33/* Various SGI graphics hardware */ 118 #define VIDEO_TYPE_TGAC 0x40/* DEC TGA */ 120 #define VIDEO_TYPE_SUN 0x50/* Sun frame buffer. */ 121 #define VIDEO_TYPE_SUNPCI 0x51/* Sun PCI based frame buffer. */ 123 #define VIDEO_TYPE_PMAC 0x60/* PowerMacintosh frame buffer. */ 126 * This character is the same as _POSIX_VDISABLE: it cannot be used as 127 * a c_cc[] character, but indicates that a particular special character 128 * isn't in use (eg VINTR has no character etc) 130 #define __DISABLED_CHAR'\0' 133 * This is the flip buffer used for the tty driver. The buffer is 134 * located in the tty structure, and is used as a high speed interface 135 * between the tty driver and the tty line discipline. 137 #define TTY_FLIPBUF_SIZE 512 139 struct tty_flip_buffer
{ 140 struct tq_struct tqueue
; 141 struct semaphore pty_sem
; 143 unsigned char*flag_buf_ptr
; 146 unsigned char char_buf
[2*TTY_FLIPBUF_SIZE
]; 147 char flag_buf
[2*TTY_FLIPBUF_SIZE
]; 148 unsigned char slop
[4];/* N.B. bug overwrites buffer by 1 */ 151 * The pty uses char_buf and flag_buf as a contiguous buffer 153 #define PTY_BUF_SIZE 4*TTY_FLIPBUF_SIZE 156 * When a break, frame error, or parity error happens, these codes are 157 * stuffed into the flags buffer. 163 #define TTY_OVERRUN 4 165 #define INTR_CHAR(tty) ((tty)->termios->c_cc[VINTR]) 166 #define QUIT_CHAR(tty) ((tty)->termios->c_cc[VQUIT]) 167 #define ERASE_CHAR(tty) ((tty)->termios->c_cc[VERASE]) 168 #define KILL_CHAR(tty) ((tty)->termios->c_cc[VKILL]) 169 #define EOF_CHAR(tty) ((tty)->termios->c_cc[VEOF]) 170 #define TIME_CHAR(tty) ((tty)->termios->c_cc[VTIME]) 171 #define MIN_CHAR(tty) ((tty)->termios->c_cc[VMIN]) 172 #define SWTC_CHAR(tty) ((tty)->termios->c_cc[VSWTC]) 173 #define START_CHAR(tty) ((tty)->termios->c_cc[VSTART]) 174 #define STOP_CHAR(tty) ((tty)->termios->c_cc[VSTOP]) 175 #define SUSP_CHAR(tty) ((tty)->termios->c_cc[VSUSP]) 176 #define EOL_CHAR(tty) ((tty)->termios->c_cc[VEOL]) 177 #define REPRINT_CHAR(tty) ((tty)->termios->c_cc[VREPRINT]) 178 #define DISCARD_CHAR(tty) ((tty)->termios->c_cc[VDISCARD]) 179 #define WERASE_CHAR(tty) ((tty)->termios->c_cc[VWERASE]) 180 #define LNEXT_CHAR(tty) ((tty)->termios->c_cc[VLNEXT]) 181 #define EOL2_CHAR(tty) ((tty)->termios->c_cc[VEOL2]) 183 #define _I_FLAG(tty,f) ((tty)->termios->c_iflag & (f)) 184 #define _O_FLAG(tty,f) ((tty)->termios->c_oflag & (f)) 185 #define _C_FLAG(tty,f) ((tty)->termios->c_cflag & (f)) 186 #define _L_FLAG(tty,f) ((tty)->termios->c_lflag & (f)) 188 #define I_IGNBRK(tty) _I_FLAG((tty),IGNBRK) 189 #define I_BRKINT(tty) _I_FLAG((tty),BRKINT) 190 #define I_IGNPAR(tty) _I_FLAG((tty),IGNPAR) 191 #define I_PARMRK(tty) _I_FLAG((tty),PARMRK) 192 #define I_INPCK(tty) _I_FLAG((tty),INPCK) 193 #define I_ISTRIP(tty) _I_FLAG((tty),ISTRIP) 194 #define I_INLCR(tty) _I_FLAG((tty),INLCR) 195 #define I_IGNCR(tty) _I_FLAG((tty),IGNCR) 196 #define I_ICRNL(tty) _I_FLAG((tty),ICRNL) 197 #define I_IUCLC(tty) _I_FLAG((tty),IUCLC) 198 #define I_IXON(tty) _I_FLAG((tty),IXON) 199 #define I_IXANY(tty) _I_FLAG((tty),IXANY) 200 #define I_IXOFF(tty) _I_FLAG((tty),IXOFF) 201 #define I_IMAXBEL(tty) _I_FLAG((tty),IMAXBEL) 203 #define O_OPOST(tty) _O_FLAG((tty),OPOST) 204 #define O_OLCUC(tty) _O_FLAG((tty),OLCUC) 205 #define O_ONLCR(tty) _O_FLAG((tty),ONLCR) 206 #define O_OCRNL(tty) _O_FLAG((tty),OCRNL) 207 #define O_ONOCR(tty) _O_FLAG((tty),ONOCR) 208 #define O_ONLRET(tty) _O_FLAG((tty),ONLRET) 209 #define O_OFILL(tty) _O_FLAG((tty),OFILL) 210 #define O_OFDEL(tty) _O_FLAG((tty),OFDEL) 211 #define O_NLDLY(tty) _O_FLAG((tty),NLDLY) 212 #define O_CRDLY(tty) _O_FLAG((tty),CRDLY) 213 #define O_TABDLY(tty) _O_FLAG((tty),TABDLY) 214 #define O_BSDLY(tty) _O_FLAG((tty),BSDLY) 215 #define O_VTDLY(tty) _O_FLAG((tty),VTDLY) 216 #define O_FFDLY(tty) _O_FLAG((tty),FFDLY) 218 #define C_BAUD(tty) _C_FLAG((tty),CBAUD) 219 #define C_CSIZE(tty) _C_FLAG((tty),CSIZE) 220 #define C_CSTOPB(tty) _C_FLAG((tty),CSTOPB) 221 #define C_CREAD(tty) _C_FLAG((tty),CREAD) 222 #define C_PARENB(tty) _C_FLAG((tty),PARENB) 223 #define C_PARODD(tty) _C_FLAG((tty),PARODD) 224 #define C_HUPCL(tty) _C_FLAG((tty),HUPCL) 225 #define C_CLOCAL(tty) _C_FLAG((tty),CLOCAL) 226 #define C_CIBAUD(tty) _C_FLAG((tty),CIBAUD) 227 #define C_CRTSCTS(tty) _C_FLAG((tty),CRTSCTS) 229 #define L_ISIG(tty) _L_FLAG((tty),ISIG) 230 #define L_ICANON(tty) _L_FLAG((tty),ICANON) 231 #define L_XCASE(tty) _L_FLAG((tty),XCASE) 232 #define L_ECHO(tty) _L_FLAG((tty),ECHO) 233 #define L_ECHOE(tty) _L_FLAG((tty),ECHOE) 234 #define L_ECHOK(tty) _L_FLAG((tty),ECHOK) 235 #define L_ECHONL(tty) _L_FLAG((tty),ECHONL) 236 #define L_NOFLSH(tty) _L_FLAG((tty),NOFLSH) 237 #define L_TOSTOP(tty) _L_FLAG((tty),TOSTOP) 238 #define L_ECHOCTL(tty) _L_FLAG((tty),ECHOCTL) 239 #define L_ECHOPRT(tty) _L_FLAG((tty),ECHOPRT) 240 #define L_ECHOKE(tty) _L_FLAG((tty),ECHOKE) 241 #define L_FLUSHO(tty) _L_FLAG((tty),FLUSHO) 242 #define L_PENDIN(tty) _L_FLAG((tty),PENDIN) 243 #define L_IEXTEN(tty) _L_FLAG((tty),IEXTEN) 246 * Where all of the state associated with a tty is kept while the tty 247 * is open. Since the termios state should be kept even if the tty 248 * has been closed --- for things like the baud rate, etc --- it is 249 * not stored here, but rather a pointer to the real state is stored 250 * here. Possible the winsize structure should have the same 251 * treatment, but (1) the default 80x24 is usually right and (2) it's 252 * most often used by a windowing system, which will set the correct 253 * size each time the window is created or resized anyway. 254 * IMPORTANT: since this structure is dynamically allocated, it must 255 * be no larger than 4096 bytes. Changing TTY_FLIPBUF_SIZE will change 256 * the size of this structure, and it needs to be done with care. 261 struct tty_driver driver
; 262 struct tty_ldisc ldisc
; 263 struct termios
*termios
, *termios_locked
; 269 struct winsize winsize
; 270 unsigned char stopped
:1, hw_stopped
:1, flow_stopped
:1, packet
:1; 271 unsigned char low_latency
:1, warned
:1; 272 unsigned char ctrl_status
; 274 struct tty_struct
*link
; 275 struct fasync_struct
*fasync
; 276 struct tty_flip_buffer flip
; 278 int alt_speed
;/* For magic substitution of 38400 bps */ 279 wait_queue_head_t write_wait
; 280 wait_queue_head_t read_wait
; 281 struct tq_struct tq_hangup
; 284 struct list_head tty_files
; 286 #define N_TTY_BUF_SIZE 4096 289 * The following is data for the N_TTY line discipline. For 290 * historical reasons, this is included in the tty structure. 293 unsigned char lnext
:1, erasing
:1, raw
:1, real_raw
:1, icanon
:1; 294 unsigned char closing
:1; 295 unsigned short minimum_to_wake
; 296 unsigned overrun_time
; 298 unsigned long process_char_map
[256/(8*sizeof(unsigned long))]; 303 unsigned long read_flags
[N_TTY_BUF_SIZE
/(8*sizeof(unsigned long))]; 305 unsigned long canon_head
; 306 unsigned int canon_column
; 307 struct semaphore atomic_read
; 308 struct semaphore atomic_write
; 309 spinlock_t read_lock
; 312 /* tty magic number */ 313 #define TTY_MAGIC 0x5401 316 * These bits are used in the flags field of the tty structure. 318 * So that interrupts won't be able to mess up the queues, 319 * copy_to_cooked must be atomic with respect to itself, as must 320 * tty->write. Thus, you must use the inline functions set_bit() and 321 * clear_bit() to make things atomic. 323 #define TTY_THROTTLED 0 324 #define TTY_IO_ERROR 1 325 #define TTY_OTHER_CLOSED 2 326 #define TTY_EXCLUSIVE 3 328 #define TTY_DO_WRITE_WAKEUP 5 330 #define TTY_CLOSING 7 331 #define TTY_DONT_FLIP 8 332 #define TTY_HW_COOK_OUT 14 333 #define TTY_HW_COOK_IN 15 334 #define TTY_PTY_LOCK 16 335 #define TTY_NO_WRITE_SPLIT 17 337 #define TTY_WRITE_FLUSH(tty) tty_write_flush((tty)) 339 externvoidtty_write_flush(struct tty_struct
*); 341 externstruct termios tty_std_termios
; 342 externstruct tty_struct
* redirect
; 343 externstruct tty_ldisc ldiscs
[]; 344 externint fg_console
, last_console
, want_console
; 346 externint kmsg_redirect
; 348 externvoidcon_init(void); 349 externvoidconsole_init(void); 351 externintlp_init(void); 352 externintpty_init(void); 353 externvoidtty_init(void); 354 externintmxser_init(void); 355 externintmoxa_init(void); 356 externintip2_init(void); 357 externintpcxe_init(void); 358 externintpc_init(void); 359 externintvcs_init(void); 360 externintrp_init(void); 361 externintcy_init(void); 362 externintstl_init(void); 363 externintstli_init(void); 364 externintspecialix_init(void); 365 externintespserial_init(void); 366 externintmacserial_init(void); 368 externinttty_paranoia_check(struct tty_struct
*tty
, kdev_t device
, 370 externchar*tty_name(struct tty_struct
*tty
,char*buf
); 371 externvoidtty_wait_until_sent(struct tty_struct
* tty
,long timeout
); 372 externinttty_check_change(struct tty_struct
* tty
); 373 externvoidstop_tty(struct tty_struct
* tty
); 374 externvoidstart_tty(struct tty_struct
* tty
); 375 externinttty_register_ldisc(int disc
,struct tty_ldisc
*new_ldisc
); 376 externinttty_register_driver(struct tty_driver
*driver
); 377 externinttty_unregister_driver(struct tty_driver
*driver
); 378 externvoidtty_register_devfs(struct tty_driver
*driver
,unsigned int flags
, 380 externvoidtty_unregister_devfs(struct tty_driver
*driver
,unsigned minor
); 381 externinttty_read_raw_data(struct tty_struct
*tty
,unsigned char*bufp
, 383 externvoidtty_write_message(struct tty_struct
*tty
,char*msg
); 385 externintis_orphaned_pgrp(int pgrp
); 386 externintis_ignored(int sig
); 387 externinttty_signal(int sig
,struct tty_struct
*tty
); 388 externvoidtty_hangup(struct tty_struct
* tty
); 389 externvoidtty_vhangup(struct tty_struct
* tty
); 390 externvoidtty_unhangup(struct file
*filp
); 391 externinttty_hung_up_p(struct file
* filp
); 392 externvoiddo_SAK(struct tty_struct
*tty
); 393 externvoiddisassociate_ctty(int priv
); 394 externvoidtty_flip_buffer_push(struct tty_struct
*tty
); 395 externinttty_get_baud_rate(struct tty_struct
*tty
); 398 externstruct tty_ldisc tty_ldisc_N_TTY
; 401 externintn_tty_ioctl(struct tty_struct
* tty
,struct file
* file
, 402 unsigned int cmd
,unsigned long arg
); 406 externvoidserial_console_init(void); 410 externintpcxe_open(struct tty_struct
*tty
,struct file
*filp
); 414 externvoidconsole_print(const char*); 418 externintvt_ioctl(struct tty_struct
*tty
,struct file
* file
, 419 unsigned int cmd
,unsigned long arg
); 421 #endif/* __KERNEL__ */