# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "File Systems"

config FILE_SYSTEM
	bool "File system support"
	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 FAT_FILESYSTEM_ELM
	bool "ELM FAT File System"
	select DISK_ACCESS
	help
	  Use the ELM FAT File system implementation.

config FILE_SYSTEM_NFFS
	bool "NFFS file system support"
	depends on FLASH_PAGE_LAYOUT
	help
	  Enables NFFS file system support.
	  Note: NFFS requires 1-byte unaligned access to flash thus it
	  will not work on devices that support only aligned flash access.

config FILE_SYSTEM_LITTLEFS
	bool "LittleFS file system support"
	depends on FLASH_MAP
	depends on FLASH_PAGE_LAYOUT
	help
	  Enables LittleFS file system support.

config FILE_SYSTEM_SHELL
	bool "Enable 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.

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

menu "FatFs Settings"
	visible if FAT_FILESYSTEM_ELM

config FS_FATFS_NUM_FILES
	int "Maximum number of opened files"
	default 4

config FS_FATFS_NUM_DIRS
	int "Maximum number of opened directories"
	default 4
endmenu

menu "NFFS Settings"
	visible if FILE_SYSTEM_NFFS

config FS_NFFS_FLASH_DEV_NAME
	string "Flash device name to be used"

config FS_NFFS_NUM_INODES
	int "Maximum number of inodes"
	range 1 32768
	default 100

config FS_NFFS_NUM_BLOCKS
	int "Maximum number of blocks"
	range 1 32768
	default 100

config FS_NFFS_NUM_FILES
	int "Maximum number of opened files"
	range 1 256
	default 4

config FS_NFFS_NUM_DIRS
	int "Maximum number of opened directories"
	range 1 256
	default 4

config FS_NFFS_NUM_CACHE_INODES
	int "Number of cached files' inodes"
	range 1 512
	default 4

config FS_NFFS_NUM_CACHE_BLOCKS
	int "Number of cached blocks"
	range 1 512
	default 64

config NFFS_FILESYSTEM_MAX_AREAS
	int "Maximum number of areas"
	range 2 64
	default 8
	help
	  This defines maximum number of areas located on flash. Each area can
	  be erased without affecting other areas thus the size of area can
	  affect performance of GC where single area has to be rewritten.
	  At least one scratch and one non-scratch area is required.

config NFFS_FILESYSTEM_MAX_BLOCK_SIZE
	int "Maximum block size"
	range 16 2048
	default 2048
	help
	  This determines the maximum size of data block written to flash.
	  Writes larger than this size are split into multiple write operations.

endmenu

source "subsys/fs/Kconfig.littlefs"

endif # FILE_SYSTEM

source "subsys/fs/fcb/Kconfig"
source "subsys/fs/nvs/Kconfig"

endmenu
