Brief Revision History of FFS
============================================================
Revision 5.27:

- API change: 
	Made change request from TIF.
	
	Renamed functions:
    ffs_init() to ffs_initialize()
    ffs_env_init/start/stop/kill() to ffs_init/start/stop/kill() (in ffs_env.[ch])

	NOTE: Because of this API change are we not backward compatible with earlier FFS 	versions!


Revision 5.18:

- Implemented new ffs protocol. Improvements:
 
	* More intelligible.
	* No static testmode buffer (Before 8kB!)
	* Stream interface (Only flash size limit for file transfer)
	* Use blocking functions in target (waits for data to be written etc)

	The new protocol require etm v0.127 or above in target.

	Note the "old" protocol is still supported.

Revision 5.14:

- BUGFIX: http://bugs.tidk.ti.com/bugs/show_bug.cgi?id=313.
	A sudden power off can in a rare case trikker FFS to use the last free
    block. Because of the missing free block is it not possible to make a
    garbage collection/reclaim data! (no further write will be possible!).
 	 
Revision 5.6:

- Implemented a request id. On success, all non-blocking functions return a unique request identifier (request_id). This same id is returned in the associated request confirm message. This feature can be used to pair requests with confirmations when using the non-blocking function interface.

Revision 4.6:

- Made support for random access to a file (open in RDWR mode).

- Removed API functions ffs_xstat() and ffs_xfstat() because its function is covered by ffs_xlstat().

- Renamed ffs_linkstat() to ffs_lstat() (POSIX alike).

- Made a non blocking version of ffs_seek() because it can now block the caller in several second because it sometimes need to flush the stream buffer.

- Made new API function ffs_fdatasync() which makes it possible to
flush the stream buffer ad any time.

Revision 3.4:

- Changed function ffs_file_write() so it automatil split one huge write up 
  in  several small chunks instead of one big chunk. This makes support of 
  files that is bigger than one flash block.

Revision 3.2:

- Implemented ffs_truncate() and ffs_ftruncate(). These functions make it 
  possible to truncate a file by the file name or the file descriptor.

Revision 3.1:

- Changed ffs_stat() function. Implemented ffs_xlstat() and ffs_fstat().

Revision 2.15:

- Implemented ffs_rename(). This function makes it possible to move and rename 
  files, dirs and symlinks. 

Revision 2.10:

- Implemented stream functions: ffs_open, ffs_close, ffs_read, ffs_write and 
  ffs_seek.  

Revision 1.29:

- The copying of the single bank driver code to RAM is now handled
  internally by ffsdrv_init(). This means linker dependency is gone and the
  linker file does not need to have any special sections for the FFS
  single-bank driver code. Actually, it must NOT have the special sections!


Revision 1.28:

- Updated code for Calypso chipset and RiViera Frame.


Revision 1.27:

- Intel single-bank driver bugfixed, tested and working.


Revision 1.24:

- Implemented Intel dual/multi-bank and single-bank flash support. Untested!
- Changed ffs_fread() and ffs_readlink() semantics and prototype. They now
  return an integer denoting the number of bytes actually read.
- Changed ffs_opendir() semantics and prototype. It now returns an integer
  denoting the number of entries in the directory.
- Replaced 'filesize_t' by 'int' in FFS API functions.
- Increased FFS_INODES_MAX_DEFAULT from 512 to 1024. This means that FFS can
  contain up 1024/2 = 512 objects.


Revision 1.23:

- Implemented ffs_query(Q_DEV_DRIVER) returning the flash device driver
  identifier.


Revision 1.22:

- Implemented AMD single-bank flash support.


Revision 1.21:

- Changed ffs_fcontrol() prototype such that <param> argument is 'int'
  instead of 'uint16'.


Revision 1.20:

- Only one (auto-generated) target file exists now, namely target.c which
  replaces previous targetffs.c and taskffs.c.
- Implemented ffs_query(Q_DEV_BASE) returning the start address of FFS in the
  flash device.
- Removed PCM functionality from testmode ffs protocol (tmffs.c).


Revision 1.19:

- Corrected bug in ffs_query(Q_BYTES_FREE); it did not subtract number of
  bytes lost.


Revision 1.18:

- Implemented call-back functionality. All modify functions have a sibling
  function with same name but suffix '_nb' for 'non-blocking'. This sibling
  function has an additional argument specifying how the caller want the
  result of the operation communicated back; either by mail or call-back
  function. This way, *all* error codes can be returned and caller knows when
  data has actually been written/committed to the actual device memory.


Revision 1.12:

- Replaced old crash recovery code with true journalling system. The old
  crash recovery code had in a few rare scenarios the risk of rendering FFS
  useless upon a power-fail.


Revision 1.9:

- ffs_preformat() now calls the user defined function ffs_is_modifiable()
  with empty string (not a NULL string). This means that permission to
  re-formatting ffs can be controlled.


Revision 1.3:

- Implemented device wear-levelling.


Revision 0.517:

- Added HISTORY file.
- Flash driver updated to take flash base address into account when doing
  writes and erasures (not when auto-detecting device).
- Moved task.[hc] from ffs.mak to ffsdrv.mak. These files are now included
  in object releases.


Revision 0.516:

- Renamed ffs_config.mak to ffsdrv.mak.
- Splitted pcm.c into pcmcode.c and pcmdata.c. pcmcode.c contains only pcm
  function code. pcmdata.c contains only pcm data tables.
- Corrected bug in pcm_WriteRecord().


Revision 0.515:

- Corrected possible bug in erase suspend; it did not check for
  completion. Bug has never been observed in practice.


Revision 0.514:

- Added support of flash devices: AMD Am29DL161T and Fujitsu MBM29DL16xT. 


Revision 0.512:

- Added flash device auto-detection. This *only* works for flash devices
  mapped to address zero! Remember that both ffs_flash_manufact and
  ffs_flash_device (in cfgffs.c) must be zero in order for auto-detection to
  be enabled.


Revision 0.510:

- Added low-level driver for SST flash devices.
- Added support of flash device: SST SST36VF1601.
- Added ffs_query(Q_FFS_FORMAT_WRITE) and renamed Q_FFS_FORMAT to
  Q_FFS_FORMAT_READ. With this, we can both query the ffs format read from
  ffs as well as the format version written on a fresh format. This can be
  used to determine compatibilty between ffs formats.
- Corrected non-critical bug in ffs_remove().
