# SPDX-License-Identifier: GPL-2.0-only
config ROMFS_FS
	tristate "ROM file system support"
	depends on BLOCK || MTD
	help
	  This is a very small read-only file system mainly intended for
	  initial ram disks of installation disks, but it could be used for
	  other read-only media as well.  Read
	  <file:Documentation/filesystems/romfs.rst> for details.

	  To compile this file system support as a module, choose M here: the
	  module will be called romfs.  Note that the file system of your
	  root partition (the one containing the directory /) cannot be a
	  module.

	  If you don't know whether you need it, then you don't need it:
	  answer N.

#
# Select the backing stores to be supported
#
choice
	prompt "RomFS backing stores"
	depends on ROMFS_FS
	default ROMFS_BACKED_BY_BLOCK
	help
	  Select the backing stores to be supported.

config ROMFS_BACKED_BY_BLOCK
	bool "Block device-backed ROM file system support"
	depends on BLOCK
	help
	  This permits ROMFS to use block devices buffered through the page
	  cache as the medium from which to retrieve data.  It does not allow
	  direct mapping of the medium.

	  If unsure, answer Y.

config ROMFS_BACKED_BY_MTD
	bool "MTD-backed ROM file system support"
	depends on MTD=y || (ROMFS_FS=m && MTD)
	help
	  This permits ROMFS to use MTD based devices directly, without the
	  intercession of the block layer (which may have been disabled).  It
	  also allows direct mapping of MTD devices through romfs files under
	  NOMMU conditions if the underlying device is directly addressable by
	  the CPU.

	  If unsure, answer Y.

config ROMFS_BACKED_BY_BOTH
	bool "Both the above"
	depends on BLOCK && (MTD=y || (ROMFS_FS=m && MTD))
endchoice


config ROMFS_ON_BLOCK
	bool
	default y if ROMFS_BACKED_BY_BLOCK || ROMFS_BACKED_BY_BOTH

config ROMFS_ON_MTD
	bool
	default y if ROMFS_BACKED_BY_MTD || ROMFS_BACKED_BY_BOTH
