# SPDX-License-Identifier: GPL-2.0-only
config NVME_CORE
	tristate
	select BLK_DEV_INTEGRITY_T10 if BLK_DEV_INTEGRITY

config BLK_DEV_NVME
	tristate "NVM Express block device"
	depends on PCI && BLOCK
	select NVME_CORE
	help
	  The NVM Express driver is for solid state drives directly
	  connected to the PCI or PCI Express bus.  If you know you
	  don't have one of these, it is safe to answer N.

	  To compile this driver as a module, choose M here: the
	  module will be called nvme.

config NVME_MULTIPATH
	bool "NVMe multipath support"
	depends on NVME_CORE
	help
	   This option enables support for multipath access to NVMe
	   subsystems.  If this option is enabled only a single
	   /dev/nvmeXnY device will show up for each NVMe namespace,
	   even if it is accessible through multiple controllers.

config NVME_VERBOSE_ERRORS
	bool "NVMe verbose error reporting"
	depends on NVME_CORE
	help
	   This option enables verbose reporting for NVMe errors. The
	   error translation table will grow the kernel image size by
	   about 4 KB.

config NVME_HWMON
	bool "NVMe hardware monitoring"
	depends on (NVME_CORE=y && HWMON=y) || (NVME_CORE=m && HWMON)
	help
	  This provides support for NVMe hardware monitoring. If enabled,
	  a hardware monitoring device will be created for each NVMe drive
	  in the system.

config NVME_FABRICS
	select NVME_CORE
	tristate

config NVME_RDMA
	tristate "NVM Express over Fabrics RDMA host driver"
	depends on INFINIBAND && INFINIBAND_ADDR_TRANS && BLOCK
	select NVME_FABRICS
	select SG_POOL
	help
	  This provides support for the NVMe over Fabrics protocol using
	  the RDMA (Infiniband, RoCE, iWarp) transport.  This allows you
	  to use remote block devices exported using the NVMe protocol set.

	  To configure a NVMe over Fabrics controller use the nvme-cli tool
	  from https://github.com/linux-nvme/nvme-cli.

	  If unsure, say N.

config NVME_FC
	tristate "NVM Express over Fabrics FC host driver"
	depends on BLOCK
	depends on HAS_DMA
	select NVME_FABRICS
	select SG_POOL
	help
	  This provides support for the NVMe over Fabrics protocol using
	  the FC transport.  This allows you to use remote block devices
	  exported using the NVMe protocol set.

	  To configure a NVMe over Fabrics controller use the nvme-cli tool
	  from https://github.com/linux-nvme/nvme-cli.

	  If unsure, say N.

config NVME_TCP
	tristate "NVM Express over Fabrics TCP host driver"
	depends on INET
	depends on BLOCK
	select NVME_FABRICS
	select CRYPTO
	select CRYPTO_CRC32C
	help
	  This provides support for the NVMe over Fabrics protocol using
	  the TCP transport.  This allows you to use remote block devices
	  exported using the NVMe protocol set.

	  To configure a NVMe over Fabrics controller use the nvme-cli tool
	  from https://github.com/linux-nvme/nvme-cli.

	  If unsure, say N.

config NVME_TCP_TLS
	bool "NVMe over Fabrics TCP TLS encryption support"
	depends on NVME_TCP
	select NVME_KEYRING
	select NET_HANDSHAKE
	select KEYS
	help
	  Enables TLS encryption for NVMe TCP using the netlink handshake API.

	  The TLS handshake daemon is availble at
	  https://github.com/oracle/ktls-utils.

	  If unsure, say N.

config NVME_HOST_AUTH
	bool "NVMe over Fabrics In-Band Authentication in host side"
	depends on NVME_CORE
	select NVME_AUTH
	help
	  This provides support for NVMe over Fabrics In-Band Authentication in
	  host side.

	  If unsure, say N.

config NVME_APPLE
	tristate "Apple ANS2 NVM Express host driver"
	depends on OF && BLOCK
	depends on APPLE_RTKIT && APPLE_SART
	depends on ARCH_APPLE || COMPILE_TEST
	select NVME_CORE
	help
	  This provides support for the NVMe controller embedded in Apple SoCs
	  such as the M1.

	  To compile this driver as a module, choose M here: the
	  module will be called nvme-apple.
