freebsd-dev/usr.sbin/xntpd/kernel
1993-12-21 18:36:48 +00:00
..
Makefile.tmpl xntpd 3.3b from UDel 1993-12-21 18:36:48 +00:00
README xntpd 3.3b from UDel 1993-12-21 18:36:48 +00:00
README.kern xntpd 3.3b from UDel 1993-12-21 18:36:48 +00:00
README.streams xntpd 3.3b from UDel 1993-12-21 18:36:48 +00:00
tty_chu_STREAMS.c xntpd 3.3b from UDel 1993-12-21 18:36:48 +00:00
tty_chu.c xntpd 3.3b from UDel 1993-12-21 18:36:48 +00:00
tty_clk_STREAMS.c xntpd 3.3b from UDel 1993-12-21 18:36:48 +00:00
tty_clk.c xntpd 3.3b from UDel 1993-12-21 18:36:48 +00:00

This directory contains code for two line disciplines which may
work with BSD-style terminal drivers.  While I'll try to cover
installation details for the more useful one here as best I can,
you really should know what you are doing before attempting to
put one of these in your kernel since the details seem to vary
from BSD variant to BSD variant.

Tty_clk.c contains a generic clock support line discipline.
The terminal driver is actually run in raw mode, giving you an
eight bit data path.  Instead of delivering the data
character-by-character, however, the line discipline collects
characters until one of two magic characters (your current erase
and kill characters.  Don't throw up) is received.  A timestamp
is then taken (by calling microtime()), inserted in the input
buffer after the magic character, and the whole mess made available
for input by the application.  Both select() and SIGIO are supported
by the discipline.

Tty_chu.c is a special purpose line discipline for receiving
the CHU time code.  It understands enough about the format of the
code CHU transmits to filter out errors, and delivers an entire
ten character code group to the application all at once, including
a timestamp for each character.  The structure the code group is
delivered in is defined in chudefs.h.  Note that this line discipline
is old and could use some rewriting for better portability.  Please
drop me a line if you are interested in using this.

To install the clock line discipline, do something like the following:

(1) Copy tty_clk.c into /sys/sys

(2) Edit /sys/sys/tty_conf.c.  You will want to include some facsimile
    of the following lines:

#include "clk.h"
#if NCLK > 0
int	clkopen(), clkclose(), clkwrite(), clkinput(), clkioctl();
#endif

#if NCLK > 0
	{ clkopen, clkclose, ttread, clkwrite, clkioctl,
	  clkinput, nodev, nulldev, ttstart, nullmodem,	/* 10- CLKLDISC */
	  ttselect },
#else
	{ nodev, nodev, nodev, nodev, nodev,
	  nodev, nodev, nodev, nodev, nodev,
	  nodev					    },
#endif

    In Ultrix 4.2a and 4.3 the file to edit is /sys/data/tty_conf_data.c.
    The lines should be

#if NCLK > 0
	clkopen, clkclose, ttread, clkwrite, clkioctl,          /* 10 */
	clkinput, nodev, nulldev, ttstart, nulldev,
#else
	nodev, nodev, nodev, nodev, nodev,
	nodev, nodev, nodev, nodev, nodev,
#endif

    Note that if your kernel doesn't include the ??select() entry in
    the structure (i.e. there are only 10 entry points in the structure)
    just leave it out.  Also note that the number you give the line
    discipline (10 in my kernel) will be specific to your kernel and
    will depend on what is in there already. The entries sould be in
    order with no missing space; that is, if there are only seven
    disciplines already defined and you want to use 10 for good reason,
    you should define a dummy 9th entry like this

	nodev, nodev, nodev, nodev, nodev,                      /* 9 */
	nodev, nodev, nodev, nodev, nodev,

(3) Edit /sys/h/ioctl.h and include a line (somewhere near where other
    line disciplines are defined) like:

#define	CLKLDISC	10		/* clock line discipline */

    The `10' should match what you used in /sys/sys/tty_conf.c.

(4) Edit /sys/conf/files and add a line which looks like:

sys/tty_clk.c		optional clk

(5) Edit the configuration file for the machine you want to use
    the clock line discipline on to include the following:

pseudo-device	clk 4

(6) Run config, then make clean, then make depend, then make vmunix.
    Then reboot the new kernel.