# 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_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.

menu "FatFs Settings"
	visible if FAT_FILESYSTEM_ELM

config FS_FATFS_EXFAT
	bool "Enable exFAT support"
	select FS_FATFS_LFN
	help
	  Enable the exFAT format support for FatFs.

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

config FS_FATFS_LFN
	bool "Enable long filenames (LFN)"
	help
	  Without long filenames enabled, file names are limited to 8.3 format.
	  This option increases working buffer size.

if FS_FATFS_LFN

choice
	prompt "LFN memory mode"
	default FS_FATFS_LFN_MODE_BSS

config FS_FATFS_LFN_MODE_BSS
	bool "Static buffer"
	help
	  Enable LFN with static working buffer on the BSS. Always NOT thread-safe.

config FS_FATFS_LFN_MODE_STACK
	bool "Stack buffer"
	help
	  Enable LFN with dynamic working buffer on the STACK.

config FS_FATFS_LFN_MODE_HEAP
	bool "Heap buffer"
	help
	  Enable LFN with dynamic working buffer on the HEAP.

endchoice

config FS_FATFS_MAX_LFN
	int "Max filename length"
	range 12 255
	default 255
	help
	  The working buffer occupies (FS_FATFS_MAX_LFN + 1) * 2 bytes and
	  additional 608 bytes at exFAT enabled.
	  It should be set 255 to support full featured LFN operations.

endif # FS_FATFS_LFN

config FS_FATFS_CODEPAGE
	int "FatFS code page (character set)"
	default 437 if FS_FATFS_LFN
	default 1
	help
	  Valid code page values:
	  1   - ASCII (No extended character. Non-LFN cfg. only)
	  437 - U.S.
	  720 - Arabic
	  737 - Greek
	  771 - KBL
	  775 - Baltic
	  850 - Latin 1
	  852 - Latin 2
	  855 - Cyrillic
	  857 - Turkish
	  860 - Portuguese
	  861 - Icelandic
	  862 - Hebrew
	  863 - Canadian French
	  864 - Arabic
	  865 - Nordic
	  866 - Russian
	  869 - Greek 2
	  932 - Japanese (DBCS)
	  936 - Simplified Chinese (DBCS)
	  949 - Korean (DBCS)
	  950 - Traditional Chinese (DBCS)

endmenu

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.


source "subsys/fs/Kconfig.littlefs"

endif # FILE_SYSTEM

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

endmenu
