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

DT_COMPAT_ST_STM32_SDMMC := st,stm32-sdmmc

menuconfig DISK_ACCESS
	bool "Disk Interface"
	help
	  Enable disk access over a supported media backend like FLASH or RAM

if DISK_ACCESS

module = DISK
module-str = disk
source "subsys/logging/Kconfig.template.log_config"

config DISK_ACCESS_RAM
	bool "RAM Disk"
	help
	  RAM buffer used to emulate storage disk.
	  This option can be used to test the file
	  system.

if DISK_ACCESS_RAM

config DISK_RAM_VOLUME_SIZE
	int "RAM Disk size in kilobytes"
	default 96
	help
	  Size of the RAM Disk.

config DISK_RAM_VOLUME_NAME
	string "RAM Disk mount point or drive name"
	default "RAM"
	help
	  Disk name as per file system naming guidelines.

endif # DISK_ACCESS_RAM

config DISK_ACCESS_FLASH
	bool "Flash"
	select FLASH
	help
	  Flash device is used for the file system.

if DISK_ACCESS_FLASH

config DISK_FLASH_VOLUME_NAME
	string "Flash mount point or drive name"
	default "NAND"
	help
	  Disk name as per file system naming guidelines.

config DISK_FLASH_DEV_NAME
	string "Flash device name to be used as storage backend"

config DISK_FLASH_START
	hex "Flash device start address in hex"
	help
	  This is start address of the flash to be used as storage backend.

config DISK_FLASH_MAX_RW_SIZE
	int "Flash device max read-write size in decimal"
	help
	  This is the maximum number of bytes that the
	  flash_write API can accept per invocation.
	  API.

config DISK_FLASH_ERASE_ALIGNMENT
	hex "Flash device erase alignment in hex"
	help
	  This is the start address alignment required by
	  the flash component.

config DISK_ERASE_BLOCK_SIZE
	hex "Flash device erasable block size in hex"
	help
	  This is typically the minimum block size that
	  is erased at one time in flash storage.
	  Typically it is equal to the flash memory page size.

config DISK_VOLUME_SIZE
	hex "Flash device volume size in hex"
	help
	  This is the file system volume size in bytes.

endif # DISK_ACCESS_FLASH

config DISK_ACCESS_SDHC
	bool "SDHC card access"
	select FLASH
	help
	  File system on a SDHC card.

if DISK_ACCESS_SDHC

config DISK_ACCESS_SPI_SDHC
	bool "SDHC access over SPI"
	depends on SPI
	help
	  File system on a SDHC card accessed over SPI.

config DISK_ACCESS_USDHC
	bool "NXP i.MXRT USDHC driver"
	depends on (HAS_MCUX_USDHC1 || HAS_MCUX_USDHC2)
	help
	  File system on a SDHC card accessed over
	  NXP USDHC.

if DISK_ACCESS_USDHC

config DISK_ACCESS_USDHC1
	bool "NXP i.MXRT USDHC instance 1"
	depends on HAS_MCUX_USDHC1
	help
	  File system on a SDHC card accessed over
	  USDHC instance 1.

config DISK_ACCESS_USDHC2
	bool "NXP i.MXRT USDHC instance 2"
	depends on HAS_MCUX_USDHC2
	help
	  File system on a SDHC card accessed over
	  USDHC instance 2.

endif # DISK_ACCESS_USDHC

config DISK_SDHC_VOLUME_NAME
	string "SDHC Disk mount point or drive name"
	default "SD" if FAT_FILESYSTEM_ELM
	default "SDHC"
	help
	  Disk name as per file system naming guidelines.

endif # DISK_ACCESS_SDHC

config DISK_ACCESS_STM32_SDMMC
	bool "STM32 SDMMC driver"
	depends on HAS_STM32CUBE
	select USE_STM32_HAL_SD
	select USE_STM32_LL_SDMMC
	default $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_SDMMC))
	help
	  File system on sdmmc accessed through stm32 sdmmc.

config DISK_STM32_SDMMC_VOLUME_NAME
	string "SDMMC Disk mount point or drive name"
	depends on DISK_ACCESS_STM32_SDMMC
	default "SD" if FAT_FILESYSTEM_ELM
	default "SDMMC"
	help
	  Disk name as per file system naming guidelines.

endif # DISK_ACCESS
