# Copyright (c) 2016 Intel Corporation
# Copyright (c) 2020 Nordic Semiconductor (ASA)
# SPDX-License-Identifier: Apache-2.0

menu "File Systems"

config FILE_SYSTEM_LIB_LINK
	bool "Link file system libraries into build"
	help
	  Link in the underlying file system libraries. This can be
	  enabled without CONFIG_FILE_SYSTEM to enable applications
	  to work directly with the underlying file system libraries.
	  This can be useful to avoid linking in the entire filesystem
	  implementation via `struct fs_file_system_t` if only a subset
	  is used.

config FILE_SYSTEM
	bool "File system support"
	select FILE_SYSTEM_LIB_LINK
	help
	  Enables support for file system.

if FILE_SYSTEM

module = FS
module-str = fs
source "subsys/logging/Kconfig.template.log_config"

config APP_LINK_WITH_FS
	bool "Link 'app' with FS"
	default y
	help
	  Add FS header files to the 'app' include path. It may be
	  disabled if the include paths for FS are causing aliasing
	  issues for 'app'.

config FILE_SYSTEM_MAX_TYPES
	int "Maximum number of distinct file system types allowed"
	default 2
	help
	  Zephyr provides several file system types including FatFS and
	  LittleFS, but it is possible to define additional ones and
	  register them.  A slot is required for each type.

config FILE_SYSTEM_MAX_FILE_NAME
	int "Optional override for maximum file name length"
	default -1
	help
	  Specify the maximum file name allowed across all enabled file
	  system types.  Zero or a negative value selects the maximum
	  file name length for enabled in-tree file systems.  This
	  default may be inappropriate when registering an out-of-tree
	  file system.  Selecting a value less than the actual length
	  supported by a file system may result in memory access
	  violations.

config FILE_SYSTEM_INIT_PRIORITY
	int "File system initialization priority"
	default 99
	help
	  Specify the initialization priority for file systems. In case
	  automount is enabled, the initialization should be done after
	  the underlying storage device is initialized.

config FILE_SYSTEM_SHELL
	bool "File system shell"
	depends on SHELL
	depends on HEAP_MEM_POOL_SIZE > 0
	help
	  This shell provides basic browsing of the contents of the
	  file system.

if FILE_SYSTEM_SHELL

config FILE_SYSTEM_SHELL_TEST_COMMANDS
	bool "File system shell read/write/erase test commands"
	select CBPRINTF_FP_SUPPORT
	help
	  Enable additional file system shell commands for performing
	  read/write/erase tests with speed output.

config FILE_SYSTEM_SHELL_BUFFER_SIZE
	hex "File system shell buffer size"
	depends on FILE_SYSTEM_SHELL_TEST_COMMANDS
	default 0x100
	range 0x20 0x1000000
	help
	  Size of the buffer used for file system commands, will determine the
	  maximum size that can be used with a read/write test. Note that this
	  is used on the stack.

endif # FILE_SYSTEM_SHELL

config FILE_SYSTEM_MKFS
	bool "Allow to format file system"
	help
	  Enables function fs_mkfs that can be used to format a storage device.

config FUSE_FS_ACCESS
	bool "FUSE based access to file system partitions"
	depends on ARCH_POSIX
	help
	  Expose file system partitions to the host system through FUSE.

rsource "Kconfig.fatfs"
rsource "Kconfig.littlefs"
rsource "ext2/Kconfig"

endif # FILE_SYSTEM

rsource "fcb/Kconfig"
rsource "nvs/Kconfig"
rsource "zms/Kconfig"

endmenu
