History of CAPI for BSD (C4B) and all its components
====================================================



[11.03.2006] Package v1.1.1
===========================

   [11.03.2006] startup scripts
      Bugfix: The startup scripts capibase, avmaic, daic, ix1a and i4bcapimgr
      did not work on system startup. Loading the kernel modules and the board
      firmware did only work when executed "by hand" after system startup.



[28.02.2006] Package v1.1
=========================

   [28.02.2006] avmaicctl, daicctl, ix1actl
      Bugfix: On termination these tools could dump core.

   [28.02.2006] avmaic
      The driver now compiles and installs under 7-CURRENT (at least from
      2006-01-17). Not sure if the PC-Card part really works under 6.x or 7.x,
      currently it is only tested under 5.x.

   [27.02.2006] avmaicctl, daicctl, ix1actl
      Bugfix: The command line options "-d" and "-b <dir>" did not work. Using
      them lead to unexpected behaviour.

   [26.02.2006] patches
      Established a new method for creating and distributing patchsets. Now
      only the absolutely necessary system source files are modified, i.e. the
      i4b part. And even this is only necessary if one uses c4b together with
      i4b.

      Updated the patchsets for 5.3-RELEASE and 5.4-RELEASE, created new
      patchsets for 5.5-RELEASE (in fact for 5.5-PRERELEASE) and 6.0-STABLE
      from 2006-01-16. The later should work for all 6.x versions in the
      foreseeable future.

   [19.02.2006] all
      Restructured the project. All kernel modules are now bundeled under the
      "kernel" subdirectory. The tools to be installed under "/usr/sbin" were
      collected under "tools". This way the project subdirectories are better
      suited to be integrated into the official FreeBSD source tree.

      And on the other side it is possible to completely build and install
      everything outside the FreeBSD source tree. This makes it possible to
      create new patch sets that only contain patches absolutely necessary to
      run the system. Future patchsets will no more make the attempt to
      integrate c4b into the FreeBSD source tree to make updating c4b and
      FreeBSD separately much easier.

   [27.12.2005] avmaic
      The driver now uses busdma(9) for communicating with dma-based boards (B1
      PCI v4, C2, C4, T1 PCI). Driver version number raised to 2.0.

   [30.10.2005] avmaicctl, daicctl, ix1actl
      Bugfix: At program termination these tools could dump core.



[27.05.2005] Package v1.0
=========================

   [06.05.2005] avmaicctl, daicctl, ix1actl, capitest, capitrace
      The new directory "common" under "/usr/src/usr.sbin/c4b" contains source
      files common to all c4b tools.

   [14.04.2005] all
      Everything (maybe besides "i4bcapimgr" because of "i4b") is ready to
      compile under the AMD64 architecture. If it really works must be checked
      by some other person.

   [03.04.2005] kcapimgr, capidev, avmaic, daic, ix1a
      Raised the internal module version numbers to "1.0".

   [01.04.2005] ix1a, ix1actl
      Several bug fixes and tests. All S0 boards work.

   [30.03.2005] avmaicctl
      All ports of an AVM C2 or C4 can now be separately configured. E.g. some
      can be configured for multipoint access, the remaining ones may be set
      for point-to-point operation.

   [26.03.2005] capitrace
      Bugfix: The "B-Channel Information" structure produced an error message
      if a non-empty structure was provided in the "Additional Information"
      structure of e.g. a Connect-Request.

   [23.03.2005] Startup scripts for "/etc/rc.d"
      From 5.3-RELEASE on the old startup file "/etc/rc.d/capi" will no longer
      be used. It is replaced by several new scripts:
         capibase   -  Start and stop the basic CAPI subsystem (kcapimgr,
                       capidev)
         avmaic     - Load the avmaic driver and load all configured boards
         daic       - Load the daic driver and load all configured boards
         ix1a       - Load the ix1a driver and load all configured boards.
         i4bcapimgr - Load the link between c4b and i4b, if both are enabled
      It is now necessary to enable the CAPI controller drivers in
      "/etc/rc.conf", i.e. "avmaic_enable" and others must be set to "YES" to
      make the startup scripts do real work.

   [23.03.2005] avmaicctl, daicctl
      These tools now work with a configuration file, by default
      "/etc/avmaic.cfg" and "/etc/daic.cfg", respectively. The manual files for
      the tools and the driver were updated accordingly. Two new manual pages
      "avmaic.cfg.5" and "daic.cfg.5" were added.

   [24.01.2004] ix1a
      First working version of this driver with a Datafire Basic ISA 4MB.

   [17.01.2004] kcapimgr
      Bugfix: When unloading an error message was printed that the message
      handler thread could not be terminated.

   [29.12.2004] avmaic, daic
      Removed the limitation for the maximum number of supported boards (by
      default four). It is now possible to drive more than four boards without
      the need to re-compile the kernel modules with a higher maximum number of
      units (AVMAIC_MAX_UNITS and DAIC_MAX_UNITS, respectively). These module
      options have now disappeared, because they are not needed any more.

      The 5.3-RELEASE patchset was updated to reflect this change. For older
      systems the options mentionned are registered but not used by the driver.
      
      Raised the versions to 0.10 for avamic and 0.4 for daic.

   [29.12.2004] avmaic
      Added support for the B1-PCMCIA (and basically support for the M1 / M2,
      their PCMCIA product ids are still missing). The only drawback is that
      the card does not work directly after inserting it into the cardbus slot.
      The avmaic driver must be unloaded and reloaded to make it work.
      
      A solution could be to have the pccard driver patched to not toggle the
      socket power when performing the attach operation. But this must be
      discussed with the maintainer(s) of the pccard driver.



[23.12.2004] Package v0.93
--------------------------

   [22.12.2004] avmaic
      Modified some timing issues. Some DELAY() calls were removed, most
      timeouts are now handled through getmicrotime().

   [24.11.2004]
      New patchset for 5.3-RELEASE.

   [07.11.2004] avmaic
      Modified some timeout values to be more tolerant against high system or
      board load.

   [17.10.2004] avmaic
      Bugfix: A kernel crash could occur if the i/o range for a B1-ISA could
      not be allocated, e.g. another device might occupy this range.

   [17.10.2004] capitrace
      Bugfix: With some recent 5.2-Current a new compiler version was
      introduced that could not compile the program. The cause was some
      erraneous macro calls, that could be compiled with earlier compiler
      versions, but are not understood by the current version.

   [01.07.2004] i4bcapimgr
      Support for 64bit CAPI specification.

   [29.06.2004] capidev
      Bugfix: Data-B3-Requests are now again accepted if they do not contain
      the qwData64 field for 64bit CAPI applications.

   [29.06.2004] capi20.h
      Extension: There are now structure definitions explicitly for 32 and 64
      bit applications for Data-B3-Requests and -Indications. The "old"
      structures for both architectures remains the same.

   [29.06.2004] kcapimgr
      Bugfix: The trace routine for application registration was left out when
      kcapimgr was made 64bit ready according to the CAPI specification.

   [29.06.2004] kcapimgr
      Bugfix: atomic_* functions were applied to variables of type size_t.



[01.06.2004] Package v0.92
--------------------------

   [30.05.2004] New patchset for Current from 30.05.2004.

   [30.05.2004] avmaic
      Update of the firmware files to 3-11-03 for AVM-B1 and to 3-11-04 for
      AVM-C2 and -C4.

   [30.05.2004] daic
      The driver now seems to work. It is possible to establish voice, HDLC
      and X.75 connections. ISO 8208 should also be possible (with more than
      one NCCI per PLCI), but capitest is currently not capable of handling
      such connections. Of course DTMF detection is still not possible (no
      support by controller).
      
      The only real known problem is flow control for HDLC and X.75
      connections, maybe also for voice connections. A Disconnect-B3-Request
      for an X.75 connection bypasses any pending data block in the
      controller. The other side receives a Disconnect-B3-Indication, but not
      the data blocks sent out (and buffered) before.

   [20.05.2004] capidev
      Bugfix: If kcapi_get_message() was called before any message was reported
      through the callback function or it was called more often than messages
      are reported, the poll call would have returned immediately for a very
      long time, even if there was no message to retrieve. Even well
      implemented applications used up 100% cpu time in this case.

   [13.05.2004] capitest
      Bugfix: When echoing data for incoming connections, the Data-B3-Request
      always contained a data block of 2KB, even if the received data block was
      shorter.
      
      Bugfix: When echoing data for incoming connections, the connection was
      aborted on the first incoming data block.

   [12.05.2004] kcapimgr
      In kcapi_put_message() a check is made, if the application id as the
      function argument and the one within the CAPI message are the same. If
      they are different, the message is rejected.

   [15.04.2004] capitest
      Bugfix: If a connection is to be aborted in state P-2, now a negative
      Connect-Response is sent instead of a Disconnect-Request.

   [14.04.2004] libcapi20
      Bugfix: The capi20_wait_for_message() function could return with a result
      value of EINTR that is no CAPI result value. Now the internal poll() call
      is restarted if it is aborted by receiving a signal.

   [08.04.2004] kcapimgr
      Raised the window for Data-B3-blocks to send from 7 to 8. Capi4Hylafax
      by default has a send window of 8 data blocks and it expects the CAPI
      implementation to accept this number of unconfirmed data blocks in all
      cases.



[08.04.2004] Package v0.91
--------------------------

   [08.04.2004] i4bcapimgr
      Bugfix: Some source files included "limits.h" instead of "sys/limits.h".
      This prevented this module from beeing directly compiled into the kernel.

   [06.04.2004] capidev
      Removed the last occurrence of splxxx() (besides the use in i4bcapimgr
      because of the necessary interaction with i4b).

   [06.04.2004] kcapimgr, capidev, avmaic, i4bcapimgr
      Changed the logging facility from bit masks to levels. The output now
      contains a character that resembles the logging level for each message.
      So it is easier to distinguish error messages from debugging output.

   [06.04.2004] all
      Added support for 64bit applications. All kernel modules and tool
      programs should work in Intel-/AMD-based 64bit hardware as well as on
      32bit i386-systems. Due to lack of 64bit hardware this is currently
      untested. But the 32bit part seems to work.

      Note: This includes some change in "capi_bsd.h". In order to evade
      alignment problems with some hardware, the length of the strings in
      structure CAPICtlrDriverInfo_t is modified, so the word members of the
      structure are aligned on word boundaries. This leads to a binary
      incompatibility to earlier versions.



[01.04.2004] Package v0.9
-------------------------

   [31.03.2004] daicctl, daic
      After some bugfixes the driver receives incoming calls and we can start
      outgoing calls. But a real connection is still not possible.

   [31.03.2004] CAPI header files
      Updated the headers according to echo cancellation (substituted
      preliminary stuff by approved definitions).

   [29.03.2004] all
      Created a working patchset for 5.2-Current from 29.03.2004.

   [14.03.2004] all
      Created a working patchset for 5.2-Current from 08.03.2004.

   [14.03.2004] i4bcapimgr, kcapimgr
      Before calling kthread_exit() the Giant mutex is now acquired, because
      kthread_exit() will not do it for us.

   [14.03.2004] i4bcapimgr
      Bugfix: The mutexes for accessing the rx and tx queues for each
      connection data structure are now released when unloading the kernel
      module.

      Bugfix: When cleaning up tx and rx queues, the queue mutex was obtained
      twice.

   [26.02.2004] capitest
      Bugfix: If the Connect-Request failed, the counter for the current number
      of outgoing connections became negative. Because it is an unsigned value
      and before termination the program will wait for all connections to be
      terminated, the program could only be killed by "kill -9".

   [25.02.2004]
      Updated the patchset for 5.0-RELEASE to integrate c4b completely into the
      source tree.

   [16.02.2004]
      Some minor changes to let the package compile under 5.2-RELEASE.

   [16.02.2004] daic
      Did some rework, but the driver is still not working.

   [25.01.2004]
      Created a new patch set that is now hopefully complete with respect to
      the necessary source tree modifications. It is not applied with the
      script "getall.sh" any more. Instead there is a script "do-patches.sh" in
      the patch directory that does it.

   [25.01.2004]
      Restructured the scripts and patches to integrate c4b into a source tree.
      This includes some places in the source tree that were missing until now.
      The patches should now be complete to insert c4b into a source tree with
      every detail (at least until 5.1-RELEASE, 5.2-RELEASE and Current will
      follow). The work to create a new patch set for a new release or for a
      new Current version shall now be much less than before.
   
   [21.01.2004]
      Changed the location of the CAPI header files from /usr/src/include to
      /sys/c4b/include. Otherwise the kernel could only be build with the rest
      of the source tree available. The CAPI header files are still installed
      through /usr/src/include/Makefile into /usr/include. To let the header
      files remain unchanged, the kernel needs an additional include path
      "${S}/c4b/include" if the c4b modules are to be compiled directly into
      the kernel. This directory is added by a makeoptions line in the kernel
      configuration file. For the kernel modules the additional include
      directory is added through the respective module makefile.

   [21.01.2004] all c4b kernel modules
      Some minor changes to eliminate compiler warnings. This also includes the
      makefiles for the kernel modules.

   [01.01.2004] i4bcapimgr
      Bugfix: Sending an Alert-Request led to a kernel panic.

   [31.12.2003] libcapi20
      Turned the library source from C++ to C. This could be useful for
      programs that are implemented in pure C and a system operator has turned
      off building C++ related stuff for building the whole system.

   [31.12.2003] daic
      First complete and compilable version of the CAPI driver for legacy Diehl
      active ISDN boards. The driver will now be built as a second CAPI driver
      besides the avmaic driver. The driver should support the boards S, Sn,
      Sx, SCOM and Quattro. There is currently no support for the Diehl S2m
      board. It should use the same logical interface as the S0 boards, but the
      physical interface is something different. The driver is considered to be
      pre-alpha (only compiled, not even loaded yet).
      
      The daic driver should be a good step in two directions: to create a
      driver for the current Eicon DIVA Server boards and to create a driver
      for passive boards.



[28.09.2003] Package v0.8
-------------------------

   [27.09.2003] i4bcapimgr
      Bugfix: The eighth unconfirmed data block was dropped because of an
      unterminated loop if kcapi_put_message() delivered "queue full" or
      "busy".

   [23.09.2003] capitest
      All known / detected bugs fixed after rewriting.

   [21.09.2003] kcapimgr
      The application part needed rework like the controller part. The two
      synchronisation objects used earlier are replaced by a single sx mutex.
      This object type is used because it is necessary to hold this mutex when
      calling into the tracing part, where again an sx mutex must be obtained,
      possibly sleeping to gain access.

   [17.09.2003] capidev
      Like kcapimgr the synchronisation mechanism had to be corrected. A file
      lock was held while calling into the CAPI manager. And this call would
      finally lead into a sleep call, resulting into a panic.

   [14.09.2003] kcapimgr
      Again the synchronisation mechanism in the controller handling part had
      to be worked over. Now the mutex is never held any more when a thread
      goes to sleep. This would otherwise lead to a kernel panic.

   [30.08.2003] capitest
      The program was modified to handle incoming connections over all
      available controllers and to handle batches of outgoing calls over more
      than one controller at a time. And additionally user-user data for the
      connection type and for checksum data can be sent to the partner side.
      These modifications can be used to perform stress tests for the CAPI
      manager and CAPI controller drivers.

   [18.08.2003]
      Modifications to the synchronisation mechanism in the kcapimgr module.
      The most often called functions in the controller handling part
      (application register, release and put_message in kcapi_ctlr) now only
      need to acquire one non-recursive mutex (before: a recursive mutex and a
      shared / recursive "struct lock").

   [31.07.2003]
      First version compilable under 5.1-RELEASE (and current at this time).
      
      For 5.1-RELEASE there is a new script "/etc/rc.d/capi" to startup CAPI
      support. It will still load the kernel modules for kcapimgr and capidev
      if enabled through "rc.conf". This is also true for controller drivers,
      their download commands and the i4bcapimgr module. These jobs should be
      put into their own startup scripts.
      
      Version number raised to 0.8.

   [28.06.2003]
      First version compilable under 5.0-RELEASE. Complete reimplementation of
      the (kernel) thread synchronization mechanisms. From this point on the
      package can only be compiled under FreeBSD 5.0 and higher. The only
      version available vor v4.x will remain package v0.6. Bugfixes to this
      package will lead to version numbers v0.6.x.
      
      Version number raised to 0.7.

      

[24.03.2003] Package v0.6
-------------------------

   [09.03.2003] i4bcapimgr
      Bugfix: A burst of data transmit requests could lead to a loop of
      Data-B3-Requests while the destination controller is busy with eight
      unconfirmed data blocks. During this loop no other operation was possible
      and thus no Data-B3-Confirm or Data-B3-Indication could be processed. The
      effect was e.g. a stalled connection during a put operation in a ftp
      session.

      Added version information as a sysctl variable and a version number of
      0.6.

   [09.03.2003] kcapimgr
      Version number raised to 0.6.

   [09.03.2003] avmaic
      Version number raised to 0.6.

   [09.03.2003] kcapimgr, capidev, i4bcapimgr, avmaic
      The internal handling for sysctl variables has changed. Such variables
      are now defined with the macros intended for this purpose. In this
      context the sysctl variables were moved away from the "debug" tree. The
      CAPI manager now introduces its own "capi" variable tree.
      
      Some values, namely the logging masks of all modules, may now be
      initialized on module load through kernel "tunable" environment variables
      in "/boot/loader.conf". So it is normally not needed any more to compile
      a module with a specific default logging mask.

   [01.03.2003] avmaic
      Bugfix: The check of the flags device field in the attach function was
      wrong for a AVM-T1.

   [20.02.2003] avmaic
      Bugfix: The i/o transfer of a specific byte or series of bytes could lock
      up the board and even the complete system. There was a misunderstanding
      in the concept of the i/o port based communication with a board that is
      now corrected.

   [02.02.2003] avmaic
      Bugfix: Memory for bus-master DMA is now allocated through contigmalloc()
      to get a contiguous memory block of physical memory for communication
      with a DMA based board. This was formerly done by simply calling
      malloc().

   [02.02.2003] i4bcapimgr
      Bugfix: The initial logging mask was set to null. Now it is correctly set
      to LOG_ERROR.

   [29.01.2003] i4bcapimgr
      Changed the data block resend timeout from 200ms to 250ms and the number
      of send attempts from 10 to 60. So if a Data-B3-Request results in an
      0x1103, the overall time to try to send it is raised from 2s to 15s. When
      establishing a new connection, sometimes an outgoing data block was lost.
      Maybe this will solve the problem. Because the send queue of the network
      might be filled too much in this situation, a burst could lead to the
      CAPI controller queue fill up (only 8 entries).



[28.01.2003] Package v0.5
-------------------------

   - Contains kcapimgr v0.5 and avmaic v0.5.
   - Testing and bug fixes for AVM-B1 PCI v4 and the i/o port only mode to
     simulate a AVM-B1 PCI v3 (i.e. without DMA use). Now only AVM-C2 and the
     T1 variants are untested.
   - Bugfix: There was a potential deadlock in the CAPI manager. If one
     application performed a kcapi_release() with still a connection active
     and another application calling kcapi_put_message() at the same time, the
     threads for both applications owned one lock and wanted to get a second
     lock, the classical deadlock. This lead to blocking the whole CAPI
     manager and thus the CAPI system.
   - Added preliminary support for kernel tunable 'constants' (settable in
     /boot/loader.conf) for the logging masks in kcapimgr and avmaic. So there
     is no need any more to compile these modules with a special logging mask
     set through make options. This will be documented when all other modules
     have support for kernel tunable parameters as far as it makes sense.
   - Added a README as a cook book to incorporate C4B into a FreeBSD system
     out-of-the-box. As C4B will only be included in a future v5 release, this
     is the only option for people running earlier versions of FreeBSD.
     4.6-RELEASE and 4.7-RELEASE are supported, other versions may work but are
     not supported by the author.
   - Added a history (this file).



[14.01.2003] Package v0.4
-------------------------

   - Contains kcapimgr v0.4 and avmaic v0.4.
   - Some minor bugfixes.
   - Completed capitrace program for trace file evaluation. Still some message
     parameters are not decoded, namely all Facility-Parameter structures.
   - Added system patches for FreeBSD 4.7-RELEASE to automatically patch the
     system for inclusion of CAPI for BSD.
   - Added a lot of manual pages for documentation of the whole C4B package.
     The starting point is c4b(4).



[23.12.2002] Package v0.3
-------------------------

   - Contains kcapimgr v0.3 and avmaic v0.3.
   - Some bugfixes and internal changes.
   - Preliminary support for CAPI traces. The capitrace program is still not
     complete. The trace file evaluation functionality is nearly non-existing.
   - Added shell script to automatically patch FreeBSD 4.6-RELEASE to include
     CAPI for BSD into the system.



[14.07.2002] Package v0.2
-------------------------

   - Contains kcapimgr v0.2 and avmaic v0.2.
   - First working version of CAPI for BSD.
   - Tested with AVM-B1 ISA and AVM-C4.
