(Emacs: -*- indented-text -*-)

			     What's new?
	    Copyright (c) 1997, 1998, 1999 by Ulrich Windl

			    NEWS for 0.8.0

+ Updated documentation: ``INSTALL'' (prefer ntp-4.0), ``MANIFEST'',
  ``README''

+ Updated ``enable_pps.c'' to support new PPS API.  Added more error
  checking.

+ Updated documentation ``magic-number.txt'' to include ``PPSCLOCK_MAGIC''.
  Updated ``ioctl-number.txt'' to document the used numbers.

+ Updated PPS API to ``draft-05'' (dated 1999-08-17), causing severe
  incompatibilities (the older draft had expired).  Implemented new
  ``time_pps_kcbind()'' with ``PPS_TSFMT_TSPEC'' and ``PPS_KC_HARDPPS''.

			    NEWS for 0.7.2

+ Implemented ``PPS_ECHOASSERT'' and ``PPS_ECHOCLEAR'' via UART's RTS
  bit (documented in README).  Fixed bug for ``CLEAR'' events
  (actually ``ASSERT'' events had been captured before).

+ Added and updated future plans in ``TODO''.

+ Updated ``enable_pps.c'' for draft conformance.  Added option to set
  PPS offset (``-oXY'').  Added option to enable event echo (``-EX'').

+ PPS API consolidation (draft "03" dated 1999-02-11): Added some
  comments to ``timepps.h''.  Tightened permission checking in serial
  driver for maximum conformance to the specification.

+ Added dynamic jitter threshold (``PPS_POPCORN'') and an extra error
  condition for bad pulses in ``hardpps()'' (Taken from
  nanokernel-19990829).

+ Added little optimizations in ``kernel/time.c'' that may reduce
  extra jitter under heavy load.  Warning message about
  ``update_wall_time: ticks is >1'' suppressed unless debugging (I had
  seen values up to 5).

+ Updated patch for ntp-4.0.97.  Updated NTP sample configuration
  file.  Updated README with some details about the PPS activation.

+ Merged patch for Linux-2.2.12: Some extra blanks removed in
  ``arch/ppc/kernel/time.c'' (untested).  ``kernel/time.c'' needs
  ``linux/config.h'' now (well, it always did).  Heavily tested the
  code for i386 architecture (386SX and Pentium).  Corrected spelling
  in ``kernel-time.txt''.

			    NEWS for 0.7.1

+ Merged changes for Linux-2.2.11 and tested with proven configuration
  (PPSkit-0.7.0 performed quite well).  Modified ``adjtimex()'' in
  kernel to clamp invalid values instead of rejecting them.  This is
  because ``ntpd'' does not care much about failing system calls, and
  after very long thought I think avoiding the ``Ariane V'' failure
  would not be bad.

+ Added a note about compilation problems and ``<sys/timex.h>'' (see
  file ``BUGS'').  Added a not about system include files and symbolic
  links for glibc-2.1 in ``INSTALL''.

+ Updated ``enable_pps.c'' to compile with glibc-2.1 (glibc-2.1 uses
  an ugly forward declaration of ``struct timeval'').  Added version
  of C library to compiled binary.

+ Fixed patch for ``ntpd/refclock.c'' to return success if PPS API was
  set up correctly (Stupid bug found by David Schwartz).

			    NEWS for 0.7.0

+ ``madtime.txt'' is finally gone.  Updated ``ntp.conf.PPS'' example
  (used with ntpd-4.0.92h).

+ The behavior for late pulses in ``hardpps()'' was too aggressive: Be
  more careful now (silently start a new calibration interval).
  Changes merged into Linux-2.2.9.

+ Occasional time warps worth one tick were observed on an i386/SX
  16MHz.  The problem could be caused by ``lost_ticks'' being changed
  while the time offset is being composed.  Tried to reduce the
  probability by reading the variable earlier.

+ Added workaround when ``time_constant'' exceeds its allowed range.

+ Added dynamic adjustment of ``time_tolerance'', because the default
  worst-case estimate (500PPM) was too high: Simply monitor the PPS
  frequency (the normal PLL/FLL frequency is not trusted enough).  Do
  some trickery for the first estimate to avoid excessive
  ``STA_PPSWANDER'' conditions.

+ Implemented ``time_pps_wait()'' to wait for events non-busily (My
  first try with scheduling, interrupts and wait queues).
  ``enable_pps.c'' now uses this function to wait for events.
  Enhanced jitter monitor.

+ Updated the test program ``enable_pps.c'' to use the PPS API.
  Changed the option ``-p'' for ``polarity'' to ``-t'' for
  ``trigger'': To specify the event to capture use one of `a', `c', or
  `b' for ``assert'', ``clear'', or ``both'' respectively.  To connect
  the captured event to ``hardpps()'' add an extra `h'.

+ Use a new method to capture timestamps: This should reduce jitter,
  and should improve accuracy.  In addition, it's easier now to
  capture other events like received characters.  Added a more
  effective way to enable interrupts for status changes on the modem
  lines (read: the mysterious jitter is gone!)

+ Updated patch for Linux 2.2.7.  Merged in code contributed by Reg
  Clemens to implement the (still draft status) PPS API (Experiments
  with my Pentium 100 and ntpd-4-0.92h showed that we need
  sub-microsecond resolution).  Move closer to the standard
  ``hardpps()''.  Adedd a new ``include/linux/timepps.h'' for the PPS
  API.  The old ``CIOGETEV'' is still present, but a separate
  parameter setup is required now.  The old constants
  ``ASYNC_PPS_CD_*'' are gone.

+ Added patch to support ``LDISC_PPS'' in ``ntp_refclock.c'' (a hack
  that is no longer necessary in ntpd-4.0.92h).  Updated
  ``patch-ntp-4.0''.

			    NEWS for 0.6.1

+ Merged into Linux 2.2.6, basically without conflict (read: should
  still work with 2.2.5).  Increased speed of adjtime from 0.5ms/s to
  50ms/s.

+ Avoid potential negative spikes in time (architecture independent).
  Rewrote algorithm for ``do_clock_getres()'' (for fun).

+ Fixed minor problem with uninitialized data in ``enable_pps.c''.

+ Added enhanced nanokernel support for ntp-4.0.92g (ntpdc, ntptime,
  tickadj).

+ Added a reminder that applications must be recompiled for some
  features of ``adjtimex()''.

+ Fixed a potential instability in ``hardpps()'', related to the FLL
  when pulses arrive doubled.  ``STA_PPSSIGNAL'' is set with greater
  care now.

+ Several minor fixes: ``time_adjust'' is a private variable now.
  NTP's precision adjustments (actually ``STA_PPSTIME'' and
  ``MOD_OFFSET'') will cancel any remaining correction left from a
  preceding adjtime() call.  This is specifically important because of
  the slow adjustment in Linux (0.05%).

+ Removed unnecessary code in ``arch/sparc/kernel/pcic.c''.

+ Fixed compilation for i386 architecture where ``CONFIG_X86_TSC'' is
  not defined.  The variable is referenced also in ``smp.c'', so it's
  always there now, even if the value is zero.

			    NEWS for 0.6.0

+ Updated BUGS about the ``mysterious jitter'' effect.  Updated patch
  for Linux-2.2.5 after extensive debugging runs.  Several tests passed
  without problems.

+ ``adjtimex()'' accepts any offset for ``MOD_OFFSET'', but
  ``hardupdate()'' will clamp the offsets.

+ Fixed bug with possibly persistent ``TIME_ERROR'' in ``adjtimex()''.
  Moved time functions that are not architecture dependent to common
  ``kernel/time.c''.

+ Added nanosecond time resolution (at least for i386 architecture).

+ Fixed problem in ``arch/i386/kernel/time.c'' when ``CONFIG_X86_TSC''
  was defined, but the processor was buggy (uninitialized variables
  would be used then).

+ Major cleanups with renaming: instead of calling ``get_fast_time()''
  you are expected to use ``get_exact_time()'' now (the ``fast''
  version wasn't faster than the ``normal'' version).  Likewise the
  ``slow'' versions are called ``poor'' now.  To avoid future
  confusion, ``[get]timeoffset'' has been renamed to ``microtime'',
  because it returns microsecods.  Funtions returning nanoseconds will
  have ``nanotime'' instead.  ``<linux/time.h>'' won't include
  ``<linux/timex.h>'' any longer; only ``<asm/timex.h>'' will be
  included.  ``<linux/timex.h>'' will only include the NTP interface
  stuff.

+ Updated serial driver to use ``do_clock_gettime()''.  Fixed memory
  leak associated with ``CIOGETEV''.

+ Added new POSIX.4 compatible functions ``do_clock_gettime()'',
  ``do_clock_settime()'', and ``do_clock_getres()'' that deal with
  nanoseconds.  Several related cleanups.

+ Merged the new ``nanokernel'' stuff into ``kernel/time.c'' (took
  over 4 hours without being complete).  Several cleanups and changes
  done.

+ Merged the new ``nanokernel'' stuff into ``<include/linux/timex.h>''.
  As some new bit definitions clash with older Linux extensions, the
  latter had to be relocated.  This will definitely break binary
  compatibility (``adjtime()'' is affected), so that I'll possibly
  clean up all the old mess.  ``<timex.h>'' is purely for
  ``adjtimex()'' now.

+ Updated ``INSTALL'' about xntp.  Updated ``enable_pps.c'' to support
  new nanokernel.  Added several new options.  Completely rewritten
  logic.

			    NEWS for 0.5.0

+ Prepare for new ``nanokernel'' by moving closer to Dave Mills'
  naming convention, even if there are problems with namespaces:
  Renamed ``hardware_pps'' back to ``hardpps''. Re-introduced
  ``hardupdate'' as inline function.

+ Added test in adjtimex() to reject unsupported mode bits
  (``~ADJ_SERVED_MODE_BITS'') with ``EINVAL''.

+ Increased year in LSM file; it's 1999 for several days now :)

+ Moved kernel time related code from ``sched.c'' to ``time.c''
  (likewise for the header files ``sched.h'' and ``time.h'').

+ Added ``#ifdef CONFIG_NTP'' to remove unneeded code where NTP is not
  needed.

+ Split ``CONFIG_PPS_SYNC'' into ``CONFIG_NTP_PPS'' (basic PPS
  support) and ``CONFIG_NTP_PPS_SERIAL'' (support for PPS signal on
  serial port).  Added new ``CONFIG_NTP'' for basic NTP support
  (embedded systems might not want it).  Updated ``Configure.help'',
  all ``config.in''s and ``defconfig''s to have compatible defaults.

+ Merged patch into Linux 2.2.1 and included fix.

			    NEWS for 0.4.2

+ Fixed registering the line discipline in ``drivers/char/tty_io.c''
  (was wrong in ``/proc/tty/ldiscs'').  Added a `+' to the serial
  driver's ``serinfo''.

+ Updated patch for Linux 2.2.0 (parts of the PPSkit went into the
  standard kernel).

			    NEWS for 0.4.1

+ Merged changes into Linux 2.1.132.  ``N_PPSCLOCK'' had to be changed
  in ``asm/termios.h'' again; the current value is ``13'' now.
  Revised ``Documentation/kernel-time.txt'' to correct the outdated
  interface description.  Added missing patch for
  ``include/asm-sparc/termios.h''.

+ Notes from the merge: ``N_MASC'' (8) and ``N_R3964'' (9) are missing
  in ``include/asm-{alpha,i386,m68k,mips,sparc64}/termios.h''


+ Updated ``enable_pps.c'' to work even if ``STA_UNSYNC'' is set.
  Numerous related changes to improve the usefulness.  Fixed bug when
  ADJ_SINGLE_SHOT should be used.

			    NEWS for 0.4.0

+ The patch has been created by CVS-1.9.28 with ``rdiff''.  Manually
  edited patch to remove erroneously changed RCS keywords due to lack
  of ``-ko''.

+ Use new patch for kernel 2.1.131 (also known previously as
  PPSkit-0.4.0pre1.diff.bz2).  Basically this patch merges the recent
  time changes from Linux 2.0 and PPSkit-0.3.8.  ``N_PPSCLOCK'' had to
  be changed from 9 (5 very early) to 11 to avoid conflicts in
  Linux-2.1.  As all ``dot zero'' revisions, this code has not been
  tested by many people...

+ Added new files ``CREDITS'' (from ``README'') and ``MANIFEST''.
  Updated ``README'' for the new version.  Updated ``INSTALL''.

+ Updated enable_pps.c to provide better tests (hopefully).

			    NEWS for 0.3.8

+ Updated README.  Updated INSTALL.

+ Checked xntp3-5.93: Unpatched version works with ATOM and CIOGETEV.
  Replaced bad patch for xntp with new one (`patch.xntp3').

+ Updated file <ppsclock.h> to work with glibc2 (libc6) and xntp-3-5.93.

+ Added a fix (and warning) for glibc2 (libc6) to compile enable_pps.c

+ Added a warning about SMP in madtime.txt.

+ Updated patch for kernel 2.0.36. Patch for `completely mad time'
  still needs no changes.

			    NEWS for 0.3.7

+ Changed numeric value for ``N_PPSCLOCK'' in <asm/termios.h> to avoid
  a conflict with ``N_AX25'' in linux-2.0.35.  The new value has been
  negotiated with Alan Cox.

			    NEWS for 0.3.6

+ Updated patch for xntp3-5.92, but you should use a more recent
  version of xntp (3-5.92 has a severe bug)

+ Minor changes to INSTALL to reflect current versions of xntp.

+ Updated patch for `completely mad time'.

+ Merged in patch for adjustable `tickadj', thereby discovering that
  my patch had a broken format.  Updated README to reflect that.

+ Updated Documentation/Configure.help similar to a suggestion of
  Martin Spott <martin@quickstep.dirnet.com> (already sent on Nov '97)

+ Merged patch into 2.0.34.  arch/sparc/kernel/time.c needed manual
  patching.

			    NEWS for 0.3.5

+ Partially replaced patch for SPARC architecture. The current patch
  was provided by Nigel Metheringham
  <Nigel.Metheringham@theplanet.net> on 1998-01-26 for kernel 2.0.33
  (arch/sparc/kernel/time.c, drivers/char/time.c). Untested by me.

+ Corrected minor bug in enable_pps.c and gen_pps.c to make gcc-2.8.0
  happy.

			    NEWS for 0.3.4

+ Added bug fix to update CMOS clock (interval was too short,
  especially for ``tick % 2 != 0''). Patch extended for all
  architectures, but untested for non-i386.

+ Updated patch for "completely mad time" for kernel 2.0.32 (renamed
  patch file).

+ Updated patch for kernel 2.0.32 (Parts of the previous patch are
  included in the standard kernel now). Architectures other than i386
  still need some work.

			    NEWS for 0.3.3

+ Added ``ntp.conf.PPS'' as an example configuration file for xntpd
  and PPS usage (uses ATOM driver)

+ Updated INSTALL to have numeric steps (I hope you'll get lost a bit
  harder now)

+ Modified ``hardware_pps'' to reset calibration interval when
  ``STA_PPSWANDER'' is detected. Dave Mills did not fully confirm the
  problem: ``I gotta put you on hold. It's been awhile since I last
  danced with that code and I have a couple of heavy conferences to
  survive. However, I recall the intent of the code was not
  necessarily to ignore jitter or even wander, as long as the
  calibration interval could safely increase while avoiding a slip of
  the tick, which could cause severe error. The idea is to discipline
  the frequency in a closed- loop system, not necessarily to calculate
  the exact frequency. Once the frequency has been measured and the
  interval increased to the max, it's pretty hard to kick the loop out
  of lock, unless the PPS jitter becomes much larger than the tick
  interval.''

+ Updated xntpd/ntp_refclock patch to give better status messages.

+ Changes to the serial driver have been minimized.

+ Patch has been updated for Linux-2.0.31.

+ Updated kernel patch to include architectures (alpha, m68k, mips,
  ppc, sparc), but did not test anything at all:

    - alpha, m68k, mips, sparc have no ``do_gettimeoffset'' function.

    - mips and sparc have different structure of their
      ``include/asm-<arch>'' directories; they still lack CIOGETEV

			    NEWS for 0.3.2

+ Updated patch for linux-2.0.31pre10.

+ Added new flags to adjtimex(): ``ADJ_TICKADJ'' allows to get/set the
  value of ``tickadj'' within reasonable bounds. As one of the
  reserved fill-ups has been used the size of ``struct timex'' should
  be unchanged, and binary compatibility should be fine.

+ Updated ``enable_pps.c'' to print time state and messages for state
  changes.  State changes are written in comprehensible format now.

+ Removed most of the ``patch-xntp3-5.90.4'' because it's included in
  ``xntp3-5.91''.  In fact the complete patch has been replaced by a
  different one that makes the PPS driver (ATOM) work (tested in
  xntp3-5.90.4).

+ Updated patch for ``Completely Mad Time'' (use CONFIG_M586, added
  debug statements, detect lost timer interrupts).  Descriptive text
  is in a new file ``madtime.txt'' now.  Paths in patch follow usual
  conventions.

+ Updated my own description in CREDITS.  Updated documentation files
  as suggested by users.

+ Removed `#define DEBUG_PPS_SYNC' to turn off debugging in serial.c

			    NEWS for 0.3.1

+ A new version of enable_pps.c with more consistent status reporting
  and some new options is provided.

+ Minor cosmetic changes.

+ Fixed some bugs in adjtimex():

    * STA_UNSYNC causes TIME_ERROR to be returned (as per memorandum).

    * Using ADJ_FREQUENCY automatically adds pps_freq (as per
      memorandum).

    * When not doing a plain old adjtime() the required offset is
      returned in the corresponding field now (as per memorandum).

    * The time returned by adjtimex() will include the time offset to
      improve the resolution (as per memorandum).

    * The jitter returned will be in microseconds and no longer in
      scaled microseconds (as per memorandum).

+ Changed constant ``MAXFREQ'' in <linux/timex.h> to really 200ppm.

+ Included file with patch and description for "completely mad time".

+ Include a patch to make xntpd's PPS driver work for Linux.  This
  patch is an ugly hack, but it seems to do the job until we have
  solved all the other problems.

			    NEWS for 0.3.0

+ I decided to break the single text file with everything into a more
  friendly archive, even if I'll surely exceed 20kB for the first
  time. The version number will present ``political version
  numbering'' (as opposed to ``chronological or automated version
  numbering''.  So we have `0', a version that's not yet perfect;
  `3', the third major attempt to make things better; finally we have
  `0', a release that wants testing.

+ new ioctl CIOGETEV was implemented in the hope it can be used from
  xntpd.  I used a trimmed-down version of Harald Koenig's patch
  (k-dcf.patch-1.3.58).  The time stamps are used for both, the PPS
  routine and the line discipline.

+ implementation of TIOCDCDTIMESTAMP was removed again because of the
  change to serial struct.  Furthermore the new CIOGETEV can do things
  even better (it has an event counter)

+ Much improved testing program (I hope; in fact it's almost
  completely rewritten).  User-visible changes include better error
  reporting and edge detection selectable from command line.

+ Possibly improved pulse generator including emulations for common
  errors (see BUGS).

+ CONFIG_HARD_PPS is CONFIG_PPS_SYNC now (for no very good reason)...

+ Major corrections to the kernel, especially `adjtimex':

    * All parameters are checked now.  Previously several parameters
      were unchecked.

    * It's no longer allowed to change read-only status bits, but
      still no error is returned, because it seems that's how xntpd
      expects things to work (it's easier that way).

    * A plain old `adjtime()' can be done independent of any
      STA_-settings (that's what the memorandum says about
      compatibility with existing applications)

    * Avoided some `if's by grouping checking and setting of values
      together (where it was easy ;-))

    * `adjtimex' now returns an error depending on several status bits
      (e.g. when you enable STA_PPSFREQ when there is no
      STA_PPSSIGNAL)

+ (kernel/sched.c) If the clock's maximum error reached
  NTP_PHASE_LIMIT (16 seconds as per memorandum), the clock is
  declared STA_UNSYNC, and the time state will be TIME_ERROR. The
  specification is not too clear on the latter point.

+ The CMOS clock is now updated if STA_UNSYNC is cleared (and no
  longer if time_state is not TIME_ERROR).

+ The `hardware_pps' (hardpps) routine has two parameters now, the
  timeval and the hardware counter (microtime).  Changed for no good
  reason.  Fixed a bug that required 5 good calibrations before the
  interval was increased (memorandum talks about 4).  

+ Added some comments (at various places), reformatted some lines,
  added debugging code, etc.

+ (arch/i386/kernel/time.c) The code to update the CMOS clock is
  broken!  I was unsure how to fix it, so I added a warning message if
  the code fails.  This has to be fixed soon!

+ (drivers/char/serial.c) The version of the driver has been changed
  by adding a 'a'.  In addition the option `PPS' has been defined for
  CONFIG_PPS_SYNC.  The code to print the startup message has been
  improved (a matter of taste).

	       BAD NEWS: There are no NEWS before 0.3.0