00001
00002
00003 #include <timers.h>
00004 #include "../../kernel/const.h"
00005 #include "../../kernel/type.h"
00006
00007 #undef lock
00008 #undef unlock
00009
00010
00011 #define CONS_MINOR 0
00012 #define LOG_MINOR 15
00013 #define RS232_MINOR 16
00014 #define KBD_MINOR 127
00015 #define KBDAUX_MINOR 126
00016 #define VIDEO_MINOR 125
00017 #define TTYPX_MINOR 128
00018 #define PTYPX_MINOR 192
00019
00020 #define LINEWRAP 1
00021
00022 #define TTY_IN_BYTES 256
00023 #define TAB_SIZE 8
00024 #define TAB_MASK 7
00025
00026 #define ESC '\33'
00027
00028 #define O_NOCTTY 00400
00029 #define O_NONBLOCK 04000
00030
00031 struct tty;
00032 typedef _PROTOTYPE( int (*devfun_t), (struct tty *tp, int try_only) );
00033 typedef _PROTOTYPE( void (*devfunarg_t), (struct tty *tp, int c) );
00034
00035 typedef struct tty {
00036 int tty_events;
00037 int tty_index;
00038 int tty_minor;
00039
00040
00041 u16_t *tty_inhead;
00042 u16_t *tty_intail;
00043 int tty_incount;
00044 int tty_eotct;
00045 devfun_t tty_devread;
00046 devfun_t tty_icancel;
00047 int tty_min;
00048 timer_t tty_tmr;
00049
00050
00051 devfun_t tty_devwrite;
00052 devfunarg_t tty_echo;
00053 devfun_t tty_ocancel;
00054 devfun_t tty_break;
00055
00056
00057 int tty_position;
00058 char tty_reprint;
00059 char tty_escaped;
00060 char tty_inhibited;
00061 int tty_pgrp;
00062 char tty_openct;
00063
00064
00065 char tty_inrepcode;
00066 char tty_inrevived;
00067 int tty_incaller;
00068 int tty_inproc;
00069 vir_bytes tty_in_vir;
00070 int tty_inleft;
00071 int tty_incum;
00072 int tty_outrepcode;
00073 int tty_outrevived;
00074 int tty_outcaller;
00075 int tty_outproc;
00076 vir_bytes tty_out_vir;
00077 int tty_outleft;
00078 int tty_outcum;
00079 int tty_iocaller;
00080 int tty_ioproc;
00081 int tty_ioreq;
00082 vir_bytes tty_iovir;
00083
00084
00085 int tty_select_ops;
00086 int tty_select_proc;
00087
00088
00089 devfun_t tty_ioctl;
00090 devfun_t tty_close;
00091 void *tty_priv;
00092 struct termios tty_termios;
00093 struct winsize tty_winsize;
00094
00095 u16_t tty_inbuf[TTY_IN_BYTES];
00096
00097 } tty_t;
00098
00099
00100 extern tty_t tty_table[NR_CONS+NR_RS_LINES+NR_PTYS];
00101 extern int ccurrent;
00102 extern int irq_hook_id;
00103
00104 extern unsigned long kbd_irq_set;
00105 extern unsigned long rs_irq_set;
00106
00107 extern int panicing;
00108
00109
00110 #define NOT_ESCAPED 0
00111 #define ESCAPED 1
00112 #define RUNNING 0
00113 #define STOPPED 1
00114
00115
00116 #define IN_CHAR 0x00FF
00117 #define IN_LEN 0x0F00
00118 #define IN_LSHIFT 8
00119 #define IN_EOT 0x1000
00120 #define IN_EOF 0x2000
00121 #define IN_ESC 0x4000
00122
00123
00124 #define force_timeout() ((void) (0))
00125
00126
00127 extern timer_t *tty_timers;
00128 extern clock_t tty_next_timeout;
00129
00130
00131 #define buflen(buf) (sizeof(buf) / sizeof((buf)[0]))
00132 #define bufend(buf) ((buf) + buflen(buf))
00133
00134
00135 extern struct machine machine;
00136
00137
00138 extern struct kmessages kmess;
00139
00140
00141
00142 _PROTOTYPE( void handle_events, (struct tty *tp) );
00143 _PROTOTYPE( void sigchar, (struct tty *tp, int sig) );
00144 _PROTOTYPE( void tty_task, (void) );
00145 _PROTOTYPE( int in_process, (struct tty *tp, char *buf, int count) );
00146 _PROTOTYPE( void out_process, (struct tty *tp, char *bstart, char *bpos,
00147 char *bend, int *icount, int *ocount) );
00148 _PROTOTYPE( void tty_wakeup, (clock_t now) );
00149 _PROTOTYPE( void tty_reply, (int code, int replyee, int proc_nr,
00150 int status) );
00151 _PROTOTYPE( int tty_devnop, (struct tty *tp, int try) );
00152 _PROTOTYPE( int select_try, (struct tty *tp, int ops) );
00153 _PROTOTYPE( int select_retry, (struct tty *tp) );
00154
00155
00156 _PROTOTYPE( void rs_init, (struct tty *tp) );
00157 _PROTOTYPE( void rs_interrupt, (message *m) );
00158
00159 #if (CHIP == INTEL)
00160
00161 _PROTOTYPE( void kputc, (int c) );
00162 _PROTOTYPE( void cons_stop, (void) );
00163 _PROTOTYPE( void do_new_kmess, (message *m) );
00164 _PROTOTYPE( void do_diagnostics, (message *m) );
00165 _PROTOTYPE( void do_get_kmess, (message *m) );
00166 _PROTOTYPE( void scr_init, (struct tty *tp) );
00167 _PROTOTYPE( void toggle_scroll, (void) );
00168 _PROTOTYPE( int con_loadfont, (message *m) );
00169 _PROTOTYPE( void select_console, (int cons_line) );
00170 _PROTOTYPE( void beep_x, ( unsigned freq, clock_t dur) );
00171 _PROTOTYPE( void do_video, (message *m) );
00172
00173
00174 _PROTOTYPE( void kb_init, (struct tty *tp) );
00175 _PROTOTYPE( void kb_init_once, (void) );
00176 _PROTOTYPE( int kbd_loadmap, (message *m) );
00177 _PROTOTYPE( void do_panic_dumps, (message *m) );
00178 _PROTOTYPE( void do_fkey_ctl, (message *m) );
00179 _PROTOTYPE( void kbd_interrupt, (message *m) );
00180 _PROTOTYPE( void do_kbd, (message *m) );
00181 _PROTOTYPE( void do_kbdaux, (message *m) );
00182 _PROTOTYPE( int kbd_status, (message *m_ptr) );
00183
00184
00185 _PROTOTYPE( void do_pty, (struct tty *tp, message *m_ptr) );
00186 _PROTOTYPE( void pty_init, (struct tty *tp) );
00187 _PROTOTYPE( void select_retry_pty, (struct tty *tp) );
00188 _PROTOTYPE( int pty_status, (message *m_ptr) );
00189
00190
00191 _PROTOTYPE( void vid_vid_copy, (unsigned src, unsigned dst, unsigned count));
00192 _PROTOTYPE( void mem_vid_copy, (u16_t *src, unsigned dst, unsigned count));
00193
00194 #endif
00195