# 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_FLASH_SECTOR_SIZE
	int "Flash device sector size"
	default 512
	help
	  This is the file system sector size in bytes.

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
