# SPDX-License-Identifier: GPL-2.0-only
config NVME_CORE
	tristate

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 controls support for multipath access to NVMe
	  subsystems. If this option is enabled support for NVMe multipath
	  access is included in the kernel. If this option is disabled support
	  for NVMe multipath access is excluded from the kernel. When this
	  option is disabled each controller/namespace receives its
	  own /dev/nvmeXnY device entry and NVMe multipath access is
	  not supported.

	  If unsure, say Y.

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
	select NVME_KEYRING if NVME_TCP_TLS
	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 CRC32
	select NET_CRC32C
	select NVME_FABRICS
	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 NET_HANDSHAKE
	select KEYS
	select TLS
	help
	  Enables TLS encryption for NVMe TCP using the netlink handshake API.

	  The TLS handshake daemon is available 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
	select NVME_KEYRING
	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.
