2005-04-21 16:53:53 +02:00
|
|
|
/* tty.h - Terminals */
|
|
|
|
|
|
|
|
#include <timers.h>
|
2005-09-30 15:01:34 +02:00
|
|
|
|
|
|
|
#undef lock
|
|
|
|
#undef unlock
|
2005-04-21 16:53:53 +02:00
|
|
|
|
2006-06-20 11:02:54 +02:00
|
|
|
#define TTY_REVIVE 6767
|
|
|
|
|
2005-08-05 15:50:58 +02:00
|
|
|
/* First minor numbers for the various classes of TTY devices. */
|
2005-09-11 19:09:11 +02:00
|
|
|
#define CONS_MINOR 0
|
|
|
|
#define LOG_MINOR 15
|
|
|
|
#define RS232_MINOR 16
|
2005-11-09 16:45:48 +01:00
|
|
|
#define KBD_MINOR 127
|
|
|
|
#define KBDAUX_MINOR 126
|
|
|
|
#define VIDEO_MINOR 125
|
2005-09-11 19:09:11 +02:00
|
|
|
#define TTYPX_MINOR 128
|
|
|
|
#define PTYPX_MINOR 192
|
2005-08-05 15:50:58 +02:00
|
|
|
|
2005-08-03 13:53:36 +02:00
|
|
|
#define LINEWRAP 1 /* console.c - wrap lines at column 80 */
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
#define TTY_IN_BYTES 256 /* tty input queue size */
|
|
|
|
#define TAB_SIZE 8 /* distance between tab stops */
|
|
|
|
#define TAB_MASK 7 /* mask to compute a tab stop position */
|
|
|
|
|
|
|
|
#define ESC '\33' /* escape */
|
|
|
|
|
|
|
|
#define O_NOCTTY 00400 /* from <fcntl.h>, or cc will choke */
|
|
|
|
#define O_NONBLOCK 04000
|
|
|
|
|
|
|
|
struct tty;
|
2005-06-17 15:37:41 +02:00
|
|
|
typedef _PROTOTYPE( int (*devfun_t), (struct tty *tp, int try_only) );
|
2005-04-21 16:53:53 +02:00
|
|
|
typedef _PROTOTYPE( void (*devfunarg_t), (struct tty *tp, int c) );
|
|
|
|
|
|
|
|
typedef struct tty {
|
|
|
|
int tty_events; /* set when TTY should inspect this line */
|
|
|
|
int tty_index; /* index into TTY table */
|
2005-08-05 15:50:58 +02:00
|
|
|
int tty_minor; /* device minor number */
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* Input queue. Typed characters are stored here until read by a program. */
|
|
|
|
u16_t *tty_inhead; /* pointer to place where next char goes */
|
|
|
|
u16_t *tty_intail; /* pointer to next char to be given to prog */
|
|
|
|
int tty_incount; /* # chars in the input queue */
|
|
|
|
int tty_eotct; /* number of "line breaks" in input queue */
|
|
|
|
devfun_t tty_devread; /* routine to read from low level buffers */
|
|
|
|
devfun_t tty_icancel; /* cancel any device input */
|
|
|
|
int tty_min; /* minimum requested #chars in input queue */
|
|
|
|
timer_t tty_tmr; /* the timer for this tty */
|
|
|
|
|
|
|
|
/* Output section. */
|
|
|
|
devfun_t tty_devwrite; /* routine to start actual device output */
|
|
|
|
devfunarg_t tty_echo; /* routine to echo characters input */
|
|
|
|
devfun_t tty_ocancel; /* cancel any ongoing device output */
|
|
|
|
devfun_t tty_break; /* let the device send a break */
|
|
|
|
|
|
|
|
/* Terminal parameters and status. */
|
|
|
|
int tty_position; /* current position on the screen for echoing */
|
|
|
|
char tty_reprint; /* 1 when echoed input messed up, else 0 */
|
|
|
|
char tty_escaped; /* 1 when LNEXT (^V) just seen, else 0 */
|
|
|
|
char tty_inhibited; /* 1 when STOP (^S) just seen (stops output) */
|
Server/driver protocols: no longer allow third-party copies.
Before safecopies, the IO_ENDPT and DL_ENDPT message fields were needed
to know which actual process to copy data from/to, as that process may
not always be the caller. Now that we have full safecopy support, these
fields have become useless for that purpose: the owner of the grant is
*always* the caller. Allowing the caller to supply another endpoint is
in fact dangerous, because the callee may then end up using a grant
from a third party. One could call this a variant of the confused
deputy problem.
From now on, safecopy calls should always use the caller's endpoint as
grant owner. This fully obsoletes the DL_ENDPT field in the
inet/ethernet protocol. IO_ENDPT has other uses besides identifying the
grant owner though. This patch renames IO_ENDPT to USER_ENDPT, not only
because that is a more fitting name (it should never be used for I/O
after all), but also in order to intentionally break any old system
source code outside the base system. If this patch breaks your code,
fixing it is fairly simple:
- DL_ENDPT should be replaced with m_source;
- IO_ENDPT should be replaced with m_source when used for safecopies;
- IO_ENDPT should be replaced with USER_ENDPT for any other use, e.g.
when setting REP_ENDPT, matching requests in CANCEL calls, getting
DEV_SELECT flags, and retrieving of the real user process's endpoint
in DEV_OPEN.
The changes in this patch are binary backward compatible.
2011-04-11 19:35:05 +02:00
|
|
|
endpoint_t tty_pgrp; /* endpoint of controlling process */
|
2005-04-21 16:53:53 +02:00
|
|
|
char tty_openct; /* count of number of opens of this tty */
|
|
|
|
|
|
|
|
/* Information about incomplete I/O requests is stored here. */
|
2006-05-19 14:19:37 +02:00
|
|
|
int tty_inrepcode; /* reply code, TASK_REPLY or REVIVE */
|
2005-07-27 16:32:16 +02:00
|
|
|
char tty_inrevived; /* set to 1 if revive callback is pending */
|
Server/driver protocols: no longer allow third-party copies.
Before safecopies, the IO_ENDPT and DL_ENDPT message fields were needed
to know which actual process to copy data from/to, as that process may
not always be the caller. Now that we have full safecopy support, these
fields have become useless for that purpose: the owner of the grant is
*always* the caller. Allowing the caller to supply another endpoint is
in fact dangerous, because the callee may then end up using a grant
from a third party. One could call this a variant of the confused
deputy problem.
From now on, safecopy calls should always use the caller's endpoint as
grant owner. This fully obsoletes the DL_ENDPT field in the
inet/ethernet protocol. IO_ENDPT has other uses besides identifying the
grant owner though. This patch renames IO_ENDPT to USER_ENDPT, not only
because that is a more fitting name (it should never be used for I/O
after all), but also in order to intentionally break any old system
source code outside the base system. If this patch breaks your code,
fixing it is fairly simple:
- DL_ENDPT should be replaced with m_source;
- IO_ENDPT should be replaced with m_source when used for safecopies;
- IO_ENDPT should be replaced with USER_ENDPT for any other use, e.g.
when setting REP_ENDPT, matching requests in CANCEL calls, getting
DEV_SELECT flags, and retrieving of the real user process's endpoint
in DEV_OPEN.
The changes in this patch are binary backward compatible.
2011-04-11 19:35:05 +02:00
|
|
|
endpoint_t tty_incaller; /* process that made the call (usually VFS) */
|
|
|
|
endpoint_t tty_inproc; /* process that wants to read from tty */
|
2011-03-25 11:43:24 +01:00
|
|
|
cp_grant_id_t tty_ingrant; /* grant where data is to go */
|
|
|
|
vir_bytes tty_inoffset; /* offset into grant */
|
2005-04-21 16:53:53 +02:00
|
|
|
int tty_inleft; /* how many chars are still needed */
|
|
|
|
int tty_incum; /* # chars input so far */
|
2006-03-03 11:21:45 +01:00
|
|
|
int tty_outrepcode; /* reply code, TASK_REPLY or REVIVE */
|
|
|
|
int tty_outrevived; /* set to 1 if revive callback is pending */
|
Server/driver protocols: no longer allow third-party copies.
Before safecopies, the IO_ENDPT and DL_ENDPT message fields were needed
to know which actual process to copy data from/to, as that process may
not always be the caller. Now that we have full safecopy support, these
fields have become useless for that purpose: the owner of the grant is
*always* the caller. Allowing the caller to supply another endpoint is
in fact dangerous, because the callee may then end up using a grant
from a third party. One could call this a variant of the confused
deputy problem.
From now on, safecopy calls should always use the caller's endpoint as
grant owner. This fully obsoletes the DL_ENDPT field in the
inet/ethernet protocol. IO_ENDPT has other uses besides identifying the
grant owner though. This patch renames IO_ENDPT to USER_ENDPT, not only
because that is a more fitting name (it should never be used for I/O
after all), but also in order to intentionally break any old system
source code outside the base system. If this patch breaks your code,
fixing it is fairly simple:
- DL_ENDPT should be replaced with m_source;
- IO_ENDPT should be replaced with m_source when used for safecopies;
- IO_ENDPT should be replaced with USER_ENDPT for any other use, e.g.
when setting REP_ENDPT, matching requests in CANCEL calls, getting
DEV_SELECT flags, and retrieving of the real user process's endpoint
in DEV_OPEN.
The changes in this patch are binary backward compatible.
2011-04-11 19:35:05 +02:00
|
|
|
endpoint_t tty_outcaller; /* process that made the call (usually VFS) */
|
|
|
|
endpoint_t tty_outproc; /* process that wants to write to tty */
|
2011-03-25 11:43:24 +01:00
|
|
|
cp_grant_id_t tty_outgrant; /* grant where data comes from */
|
|
|
|
vir_bytes tty_outoffset; /* offset into grant */
|
2005-04-21 16:53:53 +02:00
|
|
|
int tty_outleft; /* # chars yet to be output */
|
|
|
|
int tty_outcum; /* # chars output so far */
|
Server/driver protocols: no longer allow third-party copies.
Before safecopies, the IO_ENDPT and DL_ENDPT message fields were needed
to know which actual process to copy data from/to, as that process may
not always be the caller. Now that we have full safecopy support, these
fields have become useless for that purpose: the owner of the grant is
*always* the caller. Allowing the caller to supply another endpoint is
in fact dangerous, because the callee may then end up using a grant
from a third party. One could call this a variant of the confused
deputy problem.
From now on, safecopy calls should always use the caller's endpoint as
grant owner. This fully obsoletes the DL_ENDPT field in the
inet/ethernet protocol. IO_ENDPT has other uses besides identifying the
grant owner though. This patch renames IO_ENDPT to USER_ENDPT, not only
because that is a more fitting name (it should never be used for I/O
after all), but also in order to intentionally break any old system
source code outside the base system. If this patch breaks your code,
fixing it is fairly simple:
- DL_ENDPT should be replaced with m_source;
- IO_ENDPT should be replaced with m_source when used for safecopies;
- IO_ENDPT should be replaced with USER_ENDPT for any other use, e.g.
when setting REP_ENDPT, matching requests in CANCEL calls, getting
DEV_SELECT flags, and retrieving of the real user process's endpoint
in DEV_OPEN.
The changes in this patch are binary backward compatible.
2011-04-11 19:35:05 +02:00
|
|
|
endpoint_t tty_iocaller; /* process that made the call (usually VFS) */
|
2006-06-20 11:02:54 +02:00
|
|
|
int tty_iorevived; /* set to 1 if revive callback is pending */
|
Server/driver protocols: no longer allow third-party copies.
Before safecopies, the IO_ENDPT and DL_ENDPT message fields were needed
to know which actual process to copy data from/to, as that process may
not always be the caller. Now that we have full safecopy support, these
fields have become useless for that purpose: the owner of the grant is
*always* the caller. Allowing the caller to supply another endpoint is
in fact dangerous, because the callee may then end up using a grant
from a third party. One could call this a variant of the confused
deputy problem.
From now on, safecopy calls should always use the caller's endpoint as
grant owner. This fully obsoletes the DL_ENDPT field in the
inet/ethernet protocol. IO_ENDPT has other uses besides identifying the
grant owner though. This patch renames IO_ENDPT to USER_ENDPT, not only
because that is a more fitting name (it should never be used for I/O
after all), but also in order to intentionally break any old system
source code outside the base system. If this patch breaks your code,
fixing it is fairly simple:
- DL_ENDPT should be replaced with m_source;
- IO_ENDPT should be replaced with m_source when used for safecopies;
- IO_ENDPT should be replaced with USER_ENDPT for any other use, e.g.
when setting REP_ENDPT, matching requests in CANCEL calls, getting
DEV_SELECT flags, and retrieving of the real user process's endpoint
in DEV_OPEN.
The changes in this patch are binary backward compatible.
2011-04-11 19:35:05 +02:00
|
|
|
endpoint_t tty_ioproc; /* process that wants to do an ioctl */
|
2006-06-20 11:02:54 +02:00
|
|
|
int tty_iostatus; /* result */
|
2005-04-21 16:53:53 +02:00
|
|
|
int tty_ioreq; /* ioctl request code */
|
2011-03-25 11:43:24 +01:00
|
|
|
cp_grant_id_t tty_iogrant; /* virtual address of ioctl buffer or grant */
|
2005-04-21 16:53:53 +02:00
|
|
|
|
2005-06-17 15:37:41 +02:00
|
|
|
/* select() data */
|
|
|
|
int tty_select_ops; /* which operations are interesting */
|
Server/driver protocols: no longer allow third-party copies.
Before safecopies, the IO_ENDPT and DL_ENDPT message fields were needed
to know which actual process to copy data from/to, as that process may
not always be the caller. Now that we have full safecopy support, these
fields have become useless for that purpose: the owner of the grant is
*always* the caller. Allowing the caller to supply another endpoint is
in fact dangerous, because the callee may then end up using a grant
from a third party. One could call this a variant of the confused
deputy problem.
From now on, safecopy calls should always use the caller's endpoint as
grant owner. This fully obsoletes the DL_ENDPT field in the
inet/ethernet protocol. IO_ENDPT has other uses besides identifying the
grant owner though. This patch renames IO_ENDPT to USER_ENDPT, not only
because that is a more fitting name (it should never be used for I/O
after all), but also in order to intentionally break any old system
source code outside the base system. If this patch breaks your code,
fixing it is fairly simple:
- DL_ENDPT should be replaced with m_source;
- IO_ENDPT should be replaced with m_source when used for safecopies;
- IO_ENDPT should be replaced with USER_ENDPT for any other use, e.g.
when setting REP_ENDPT, matching requests in CANCEL calls, getting
DEV_SELECT flags, and retrieving of the real user process's endpoint
in DEV_OPEN.
The changes in this patch are binary backward compatible.
2011-04-11 19:35:05 +02:00
|
|
|
endpoint_t tty_select_proc; /* which process wants notification */
|
2005-06-17 15:37:41 +02:00
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* Miscellaneous. */
|
|
|
|
devfun_t tty_ioctl; /* set line speed, etc. at the device level */
|
|
|
|
devfun_t tty_close; /* tell the device that the tty is closed */
|
|
|
|
void *tty_priv; /* pointer to per device private data */
|
|
|
|
struct termios tty_termios; /* terminal attributes */
|
|
|
|
struct winsize tty_winsize; /* window size (#lines and #columns) */
|
|
|
|
|
|
|
|
u16_t tty_inbuf[TTY_IN_BYTES];/* tty input buffer */
|
2005-06-17 15:37:41 +02:00
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
} tty_t;
|
|
|
|
|
|
|
|
/* Memory allocated in tty.c, so extern here. */
|
|
|
|
extern tty_t tty_table[NR_CONS+NR_RS_LINES+NR_PTYS];
|
|
|
|
extern int ccurrent; /* currently visible console */
|
2008-12-08 17:40:29 +01:00
|
|
|
extern u32_t system_hz; /* system clock frequency */
|
2005-04-21 16:53:53 +02:00
|
|
|
|
2005-07-29 17:22:58 +02:00
|
|
|
extern unsigned long kbd_irq_set;
|
|
|
|
extern unsigned long rs_irq_set;
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* Values for the fields. */
|
|
|
|
#define NOT_ESCAPED 0 /* previous character is not LNEXT (^V) */
|
|
|
|
#define ESCAPED 1 /* previous character was LNEXT (^V) */
|
|
|
|
#define RUNNING 0 /* no STOP (^S) has been typed to stop output */
|
|
|
|
#define STOPPED 1 /* STOP (^S) has been typed to stop output */
|
|
|
|
|
|
|
|
/* Fields and flags on characters in the input queue. */
|
|
|
|
#define IN_CHAR 0x00FF /* low 8 bits are the character itself */
|
|
|
|
#define IN_LEN 0x0F00 /* length of char if it has been echoed */
|
|
|
|
#define IN_LSHIFT 8 /* length = (c & IN_LEN) >> IN_LSHIFT */
|
|
|
|
#define IN_EOT 0x1000 /* char is a line break (^D, LF) */
|
|
|
|
#define IN_EOF 0x2000 /* char is EOF (^D), do not return to user */
|
|
|
|
#define IN_ESC 0x4000 /* escaped by LNEXT (^V), no interpretation */
|
|
|
|
|
|
|
|
/* Times and timeouts. */
|
|
|
|
#define force_timeout() ((void) (0))
|
|
|
|
|
|
|
|
/* Number of elements and limit of a buffer. */
|
|
|
|
#define buflen(buf) (sizeof(buf) / sizeof((buf)[0]))
|
|
|
|
#define bufend(buf) ((buf) + buflen(buf))
|
|
|
|
|
|
|
|
/* Memory allocated in tty.c, so extern here. */
|
2005-04-29 17:36:43 +02:00
|
|
|
extern struct machine machine; /* machine information (a.o.: pc_at, ega) */
|
2005-04-21 16:53:53 +02:00
|
|
|
|
2005-09-30 15:01:34 +02:00
|
|
|
/* The tty outputs diagnostic messages in a circular buffer. */
|
|
|
|
extern struct kmessages kmess;
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* Function prototypes for TTY driver. */
|
|
|
|
/* tty.c */
|
|
|
|
_PROTOTYPE( void handle_events, (struct tty *tp) );
|
2009-04-06 11:39:42 +02:00
|
|
|
_PROTOTYPE( void sigchar, (struct tty *tp, int sig, int mayflush) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( void tty_task, (void) );
|
2010-04-15 08:55:42 +02:00
|
|
|
_PROTOTYPE( int in_process, (struct tty *tp, char *buf, int count,
|
|
|
|
int scode) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( void out_process, (struct tty *tp, char *bstart, char *bpos,
|
|
|
|
char *bend, int *icount, int *ocount) );
|
|
|
|
_PROTOTYPE( void tty_wakeup, (clock_t now) );
|
2006-06-20 11:02:54 +02:00
|
|
|
#define tty_reply(c, r, p, s) tty_reply_f(__FILE__, __LINE__, (c), (r), (p), (s))
|
|
|
|
_PROTOTYPE( void tty_reply_f, (char *f, int l, int code, int replyee, int proc_nr,
|
2005-04-21 16:53:53 +02:00
|
|
|
int status) );
|
2005-09-11 19:09:11 +02:00
|
|
|
_PROTOTYPE( int select_try, (struct tty *tp, int ops) );
|
2005-06-17 15:37:41 +02:00
|
|
|
_PROTOTYPE( int select_retry, (struct tty *tp) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* rs232.c */
|
|
|
|
_PROTOTYPE( void rs_init, (struct tty *tp) );
|
2005-07-29 17:22:58 +02:00
|
|
|
_PROTOTYPE( void rs_interrupt, (message *m) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
#if (CHIP == INTEL)
|
|
|
|
/* console.c */
|
|
|
|
_PROTOTYPE( void kputc, (int c) );
|
|
|
|
_PROTOTYPE( void cons_stop, (void) );
|
New RS and new signal handling for system processes.
UPDATING INFO:
20100317:
/usr/src/etc/system.conf updated to ignore default kernel calls: copy
it (or merge it) to /etc/system.conf.
The hello driver (/dev/hello) added to the distribution:
# cd /usr/src/commands/scripts && make clean install
# cd /dev && MAKEDEV hello
KERNEL CHANGES:
- Generic signal handling support. The kernel no longer assumes PM as a signal
manager for every process. The signal manager of a given process can now be
specified in its privilege slot. When a signal has to be delivered, the kernel
performs the lookup and forwards the signal to the appropriate signal manager.
PM is the default signal manager for user processes, RS is the default signal
manager for system processes. To enable ptrace()ing for system processes, it
is sufficient to change the default signal manager to PM. This will temporarily
disable crash recovery, though.
- sys_exit() is now split into sys_exit() (i.e. exit() for system processes,
which generates a self-termination signal), and sys_clear() (i.e. used by PM
to ask the kernel to clear a process slot when a process exits).
- Added a new kernel call (i.e. sys_update()) to swap two process slots and
implement live update.
PM CHANGES:
- Posix signal handling is no longer allowed for system processes. System
signals are split into two fixed categories: termination and non-termination
signals. When a non-termination signaled is processed, PM transforms the signal
into an IPC message and delivers the message to the system process. When a
termination signal is processed, PM terminates the process.
- PM no longer assumes itself as the signal manager for system processes. It now
makes sure that every system signal goes through the kernel before being
actually processes. The kernel will then dispatch the signal to the appropriate
signal manager which may or may not be PM.
SYSLIB CHANGES:
- Simplified SEF init and LU callbacks.
- Added additional predefined SEF callbacks to debug crash recovery and
live update.
- Fixed a temporary ack in the SEF init protocol. SEF init reply is now
completely synchronous.
- Added SEF signal event type to provide a uniform interface for system
processes to deal with signals. A sef_cb_signal_handler() callback is
available for system processes to handle every received signal. A
sef_cb_signal_manager() callback is used by signal managers to process
system signals on behalf of the kernel.
- Fixed a few bugs with memory mapping and DS.
VM CHANGES:
- Page faults and memory requests coming from the kernel are now implemented
using signals.
- Added a new VM call to swap two process slots and implement live update.
- The call is used by RS at update time and in turn invokes the kernel call
sys_update().
RS CHANGES:
- RS has been reworked with a better functional decomposition.
- Better kernel call masks. com.h now defines the set of very basic kernel calls
every system service is allowed to use. This makes system.conf simpler and
easier to maintain. In addition, this guarantees a higher level of isolation
for system libraries that use one or more kernel calls internally (e.g. printf).
- RS is the default signal manager for system processes. By default, RS
intercepts every signal delivered to every system process. This makes crash
recovery possible before bringing PM and friends in the loop.
- RS now supports fast rollback when something goes wrong while initializing
the new version during a live update.
- Live update is now implemented by keeping the two versions side-by-side and
swapping the process slots when the old version is ready to update.
- Crash recovery is now implemented by keeping the two versions side-by-side
and cleaning up the old version only when the recovery process is complete.
DS CHANGES:
- Fixed a bug when the process doing ds_publish() or ds_delete() is not known
by DS.
- Fixed the completely broken support for strings. String publishing is now
implemented in the system library and simply wraps publishing of memory ranges.
Ideally, we should adopt a similar approach for other data types as well.
- Test suite fixed.
DRIVER CHANGES:
- The hello driver has been added to the Minix distribution to demonstrate basic
live update and crash recovery functionalities.
- Other drivers have been adapted to conform the new SEF interface.
2010-03-17 02:15:29 +01:00
|
|
|
_PROTOTYPE( void do_new_kmess, (void) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( void scr_init, (struct tty *tp) );
|
|
|
|
_PROTOTYPE( void toggle_scroll, (void) );
|
|
|
|
_PROTOTYPE( int con_loadfont, (message *m) );
|
|
|
|
_PROTOTYPE( void select_console, (int cons_line) );
|
2005-10-24 15:57:19 +02:00
|
|
|
_PROTOTYPE( void beep_x, ( unsigned freq, clock_t dur) );
|
2005-11-09 16:45:48 +01:00
|
|
|
_PROTOTYPE( void do_video, (message *m) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* keyboard.c */
|
|
|
|
_PROTOTYPE( void kb_init, (struct tty *tp) );
|
2005-08-24 10:15:23 +02:00
|
|
|
_PROTOTYPE( void kb_init_once, (void) );
|
2011-03-25 11:43:24 +01:00
|
|
|
_PROTOTYPE( int kbd_loadmap, (message *m) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( void do_fkey_ctl, (message *m) );
|
2005-07-29 17:22:58 +02:00
|
|
|
_PROTOTYPE( void kbd_interrupt, (message *m) );
|
2005-10-24 15:57:19 +02:00
|
|
|
_PROTOTYPE( void do_kbd, (message *m) );
|
2010-11-17 15:53:07 +01:00
|
|
|
_PROTOTYPE( void do_kb_inject, (message *m) );
|
2005-10-24 15:57:19 +02:00
|
|
|
_PROTOTYPE( void do_kbdaux, (message *m) );
|
|
|
|
_PROTOTYPE( int kbd_status, (message *m_ptr) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* pty.c */
|
|
|
|
_PROTOTYPE( void do_pty, (struct tty *tp, message *m_ptr) );
|
|
|
|
_PROTOTYPE( void pty_init, (struct tty *tp) );
|
2005-09-11 19:09:11 +02:00
|
|
|
_PROTOTYPE( void select_retry_pty, (struct tty *tp) );
|
2005-08-01 16:40:21 +02:00
|
|
|
_PROTOTYPE( int pty_status, (message *m_ptr) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
#endif /* (CHIP == INTEL) */
|
|
|
|
|