#
# YAFFS file system configurations
#

config YAFFS_FS
	tristate "YAFFS2 file system support"
	default n
	depends on MTD
	select YAFFS_YAFFS1
	select YAFFS_YAFFS2
	help
	  YAFFS2, or Yet Another Flash Filing System, is a filing system
	  optimised for NAND Flash chips.

	  To compile the YAFFS2 file system support as a module, choose M
	  here: the module will be called yaffs2.

	  If unsure, say N.

	  Further information on YAFFS2 is available at
	  <http://www.aleph1.co.uk/yaffs/>.

config YAFFS_YAFFS1
	bool "512 byte / page devices"
	depends on YAFFS_FS
	default y
	help
	  Enable YAFFS1 support -- yaffs for 512 byte / page devices
	  
	  Not needed for 2K-page devices.

	  If unsure, say Y.

config YAFFS_9BYTE_TAGS
	bool "Use older-style on-NAND data format with pageStatus byte"
	depends on YAFFS_YAFFS1
	default n
	help

	  Older-style on-NAND data format has a "pageStatus" byte to record
	  chunk/page state.  This byte is zero when the page is discarded.
	  Choose this option if you have existing on-NAND data using this
	  format that you need to continue to support.  New data written
	  also uses the older-style format.  Note: Use of this option
	  generally requires that MTD's oob layout be adjusted to use the
	  older-style format.  See notes on tags formats and MTD versions
	  in yaffs_mtdif1.c.

	  If unsure, say N.

config YAFFS_DOES_ECC
	bool "Lets Yaffs do its own ECC"
	depends on YAFFS_FS && YAFFS_YAFFS1 && !YAFFS_9BYTE_TAGS
	default n
	help
	  This enables Yaffs to use its own ECC functions instead of using
	  the ones from the generic MTD-NAND driver.

	  If unsure, say N.

config YAFFS_ECC_WRONG_ORDER
	bool "Use the same ecc byte order as Steven Hill's nand_ecc.c"
	depends on YAFFS_FS && YAFFS_DOES_ECC && !YAFFS_9BYTE_TAGS
	default n
	help
	  This makes yaffs_ecc.c use the same ecc byte order as Steven
	  Hill's nand_ecc.c. If not set, then you get the same ecc byte
	  order as SmartMedia.

	  If unsure, say N.

config YAFFS_YAFFS2
	bool "2048 byte (or larger) / page devices"
	depends on YAFFS_FS
	default y
	help
	  Enable YAFFS2 support -- yaffs for >= 2K bytes per page devices

	  If unsure, say Y.

config YAFFS_AUTO_YAFFS2
	bool "Autoselect yaffs2 format"
	depends on YAFFS_YAFFS2
	default y
	help
	  Without this, you need to explicitely use yaffs2 as the file
	  system type. With this, you can say "yaffs" and yaffs or yaffs2
	  will be used depending on the device page size (yaffs on
	  512-byte page devices, yaffs2 on 2K page devices).

	  If unsure, say Y.

config YAFFS_DISABLE_LAZY_LOAD
	bool "Disable lazy loading"
	depends on YAFFS_YAFFS2
	default n
	help
	  "Lazy loading" defers loading file details until they are
	  required. This saves mount time, but makes the first look-up
	  a bit longer.

	  Lazy loading will only happen if enabled by this option being 'n'
	  and if the appropriate tags are available, else yaffs2 will
	  automatically fall back to immediate loading and do the right
	  thing.

	  Lazy laoding will be required by checkpointing.

	  Setting this to 'y' will disable lazy loading.

	  If unsure, say N.

config YAFFS_CHECKPOINT_RESERVED_BLOCKS
	int "Reserved blocks for checkpointing"
	depends on YAFFS_YAFFS2
	default 10
	help
          Give the number of Blocks to reserve for checkpointing.
	  Checkpointing saves the state at unmount so that mounting is
	  much faster as a scan of all the flash to regenerate this state
	  is not needed.  These Blocks are reserved per partition, so if
	  you have very small partitions the default (10) may be a mess
	  for you.  You can set this value to 0, but that does not mean
	  checkpointing is disabled at all. There only won't be any
	  specially reserved blocks for checkpointing, so if there is
	  enough free space on the filesystem, it will be used for
	  checkpointing.

	  If unsure, leave at default (10), but don't wonder if there are
	  always 2MB used on your large page device partition (10 x 2k
	  pagesize). When using small partitions or when being very small
	  on space, you probably want to set this to zero.

config YAFFS_DISABLE_WIDE_TNODES
	bool "Turn off wide tnodes"
	depends on YAFFS_FS
	default n
	help
	  Wide tnodes are only used for NAND arrays >=32MB for 512-byte
	  page devices and >=128MB for 2k page devices. They use slightly
	  more RAM but are faster since they eliminate chunk group
	  searching.

	  Setting this to 'y' will force tnode width to 16 bits and save
	  memory but make large arrays slower.

	  If unsure, say N.

config YAFFS_ALWAYS_CHECK_CHUNK_ERASED
	bool "Force chunk erase check"
	depends on YAFFS_FS
	default n
	help
          Normally YAFFS only checks chunks before writing until an erased
	  chunk is found. This helps to detect any partially written
	  chunks that might have happened due to power loss.

	  Enabling this forces on the test that chunks are erased in flash
	  before writing to them. This takes more time but is potentially
	  a bit more secure.
 
	  Suggest setting Y during development and ironing out driver
	  issues etc. Suggest setting to N if you want faster writing.  

	  If unsure, say Y.

config YAFFS_SHORT_NAMES_IN_RAM
	bool "Cache short names in RAM"
	depends on YAFFS_FS
	default y
	help
	  If this config is set, then short names are stored with the
	  yaffs_Object.  This costs an extra 16 bytes of RAM per object,
	  but makes look-ups faster.

	  If unsure, say Y.
