|
|
1.1 ! root 1: /* ! 2: * Mach Operating System ! 3: * Copyright (c) 1993-1990 Carnegie Mellon University ! 4: * All Rights Reserved. ! 5: * ! 6: * Permission to use, copy, modify and distribute this software and its ! 7: * documentation is hereby granted, provided that both the copyright ! 8: * notice and this permission notice appear in all copies of the ! 9: * software, derivative works or modified versions, and any portions ! 10: * thereof, and that both notices appear in supporting documentation. ! 11: * ! 12: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" ! 13: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR ! 14: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. ! 15: * ! 16: * Carnegie Mellon requests users of this software to return to ! 17: * ! 18: * Software Distribution Coordinator or [email protected] ! 19: * School of Computer Science ! 20: * Carnegie Mellon University ! 21: * Pittsburgh PA 15213-3890 ! 22: * ! 23: * any improvements or extensions that they make and grant Carnegie Mellon ! 24: * the rights to redistribute these changes. ! 25: */ ! 26: /* ! 27: * Author: David B. Golub, Carnegie Mellon University ! 28: * Date: 7/90 ! 29: * ! 30: * Compatibility TTY structure for existing TTY device drivers. ! 31: */ ! 32: ! 33: #ifndef _DEVICE_TTY_H_ ! 34: #define _DEVICE_TTY_H_ ! 35: ! 36: #include <kern/lock.h> ! 37: #include <kern/queue.h> ! 38: #include <mach/port.h> ! 39: ! 40: #include <device/device_types.h> ! 41: #include <device/tty_status.h> ! 42: #include <device/cirbuf.h> ! 43: #include <device/io_req.h> ! 44: ! 45: #ifdef luna88k ! 46: #include <luna88k/jtermio.h> ! 47: #endif ! 48: ! 49: struct tty { ! 50: decl_simple_lock_data(,t_lock) ! 51: struct cirbuf t_inq; /* input buffer */ ! 52: struct cirbuf t_outq; /* output buffer */ ! 53: char * t_addr; /* device pointer */ ! 54: int t_dev; /* device number */ ! 55: int (*t_start)(struct tty *); ! 56: /* routine to start output */ ! 57: #define t_oproc t_start ! 58: int (*t_stop)(struct tty *, int); ! 59: /* routine to stop output */ ! 60: int (*t_mctl)(struct tty *, int, int); ! 61: /* (optional) routine to control ! 62: modem signals */ ! 63: char t_ispeed; /* input speed */ ! 64: char t_ospeed; /* output speed */ ! 65: char t_breakc; /* character to deliver when 'break' ! 66: condition received */ ! 67: int t_flags; /* mode flags */ ! 68: int t_state; /* current state */ ! 69: int t_line; /* fake line discipline number, ! 70: for old drivers - always 0 */ ! 71: queue_head_t t_delayed_read; /* pending read requests */ ! 72: queue_head_t t_delayed_write;/* pending write requests */ ! 73: queue_head_t t_delayed_open; /* pending open requests */ ! 74: ! 75: /* ! 76: * Items beyond this point should be removed to device-specific ! 77: * extension structures. ! 78: */ ! 79: int (*t_getstat)(); /* routine to get status */ ! 80: int (*t_setstat)(); /* routine to set status */ ! 81: dev_ops_t t_tops; /* another device to possibly ! 82: push through */ ! 83: }; ! 84: typedef struct tty *tty_t; ! 85: ! 86: /* ! 87: * Common TTY service routines ! 88: */ ! 89: extern io_return_t char_open( ! 90: int dev, ! 91: struct tty * tp, ! 92: dev_mode_t mode, ! 93: io_req_t ior); ! 94: ! 95: extern io_return_t char_read( ! 96: struct tty * tp, ! 97: io_req_t ior); ! 98: ! 99: extern io_return_t char_write( ! 100: struct tty * tp, ! 101: io_req_t ior); ! 102: ! 103: extern void ttyinput( ! 104: unsigned int c, ! 105: struct tty * tp); ! 106: ! 107: extern boolean_t ttymodem( ! 108: struct tty * tp, ! 109: boolean_t carrier_up); ! 110: ! 111: extern void tty_queue_completion( ! 112: queue_t queue); ! 113: #define tt_open_wakeup(tp) \ ! 114: (tty_queue_completion(&(tp)->t_delayed_open)) ! 115: #define tt_write_wakeup(tp) \ ! 116: (tty_queue_completion(&(tp)->t_delayed_write)) ! 117: ! 118: extern void ttychars( ! 119: struct tty * tp); ! 120: ! 121: #define TTMINBUF 90 ! 122: ! 123: short tthiwat[NSPEEDS], ttlowat[NSPEEDS]; ! 124: #define TTHIWAT(tp) tthiwat[(tp)->t_ospeed] ! 125: #define TTLOWAT(tp) ttlowat[(tp)->t_ospeed] ! 126: ! 127: /* internal state bits */ ! 128: #define TS_INIT 0x00000001 /* tty structure initialized */ ! 129: #define TS_TIMEOUT 0x00000002 /* delay timeout in progress */ ! 130: #define TS_WOPEN 0x00000004 /* waiting for open to complete */ ! 131: #define TS_ISOPEN 0x00000008 /* device is open */ ! 132: #define TS_FLUSH 0x00000010 /* outq has been flushed during DMA */ ! 133: #define TS_CARR_ON 0x00000020 /* software copy of carrier-present */ ! 134: #define TS_BUSY 0x00000040 /* output in progress */ ! 135: #define TS_ASLEEP 0x00000080 /* wakeup when output done */ ! 136: ! 137: #define TS_TTSTOP 0x00000100 /* output stopped by ctl-s */ ! 138: #define TS_HUPCLS 0x00000200 /* hang up upon last close */ ! 139: #define TS_TBLOCK 0x00000400 /* tandem queue blocked */ ! 140: ! 141: #define TS_NBIO 0x00001000 /* tty in non-blocking mode */ ! 142: #define TS_ONDELAY 0x00002000 /* device is open; software copy of ! 143: * carrier is not present */ ! 144: #define TS_MIN 0x00004000 /* buffer input chars, if possible */ ! 145: #define TS_MIN_TO 0x00008000 /* timeout for the above is active */ ! 146: ! 147: #define TS_OUT 0x00010000 /* tty in use for dialout only */ ! 148: #define TS_RTS_DOWN 0x00020000 /* modem pls stop */ ! 149: ! 150: #define TS_TRANSLATE 0x00100000 /* translation device enabled */ ! 151: #define TS_KDB 0x00200000 /* should enter kdb on ALT */ ! 152: ! 153: #define TS_MIN_TO_RCV 0x00400000 /* character recived during ! 154: receive timeout interval */ ! 155: ! 156: /* flags - old names defined in terms of new ones */ ! 157: ! 158: #define TANDEM TF_TANDEM ! 159: #define ODDP TF_ODDP ! 160: #define EVENP TF_EVENP ! 161: #define ANYP (ODDP|EVENP) ! 162: #define MDMBUF TF_MDMBUF ! 163: #define LITOUT TF_LITOUT ! 164: #define NOHANG TF_NOHANG ! 165: ! 166: #define ECHO TF_ECHO ! 167: #define CRMOD TF_CRMOD ! 168: #define XTABS TF_XTABS ! 169: ! 170: /* these are here only to let old code compile - they are never set */ ! 171: #define RAW LITOUT ! 172: #define PASS8 LITOUT ! 173: ! 174: /* ! 175: * Hardware bits. ! 176: * SHOULD NOT BE HERE. ! 177: */ ! 178: #define DONE 0200 ! 179: #define IENABLE 0100 ! 180: ! 181: /* ! 182: * Modem control commands. ! 183: */ ! 184: #define DMSET 0 ! 185: #define DMBIS 1 ! 186: #define DMBIC 2 ! 187: #define DMGET 3 ! 188: ! 189: /* ! 190: * Fake 'line discipline' switch, for the benefit of old code ! 191: * that wants to call through it. ! 192: */ ! 193: struct ldisc_switch { ! 194: int (*l_read) (struct tty *, io_req_t); /* read */ ! 195: int (*l_write)(struct tty *, io_req_t); /* write */ ! 196: void (*l_rint) (unsigned int, struct tty *); /* character input */ ! 197: boolean_t (*l_modem)(struct tty *, boolean_t); /* modem change */ ! 198: void (*l_start)(struct tty *); /* start output */ ! 199: }; ! 200: ! 201: extern struct ldisc_switch linesw[]; ! 202: ! 203: #endif /* _DEVICE_TTY_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.