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 toflush 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().