# SPDX-License-Identifier: GPL-2.0-only
menuconfig USB4
	tristate "Unified support for USB4 and Thunderbolt"
	depends on PCI
	select APPLE_PROPERTIES if EFI_STUB && X86
	select CRC32
	select CRYPTO_LIB_SHA256
	select CRYPTO_LIB_UTILS
	select NVMEM
	help
	  USB4 and Thunderbolt driver. USB4 is the public specification
	  based on the Thunderbolt 3 protocol. This driver is required if
	  you want to hotplug Thunderbolt and USB4 compliant devices on
	  Apple hardware or on PCs with Intel Falcon Ridge or newer.

	  To compile this driver a module, choose M here. The module will be
	  called thunderbolt.

if USB4

config USB4_CONFIGFS
	def_tristate USB4
	depends on CONFIGFS_FS && !(USB4=y && CONFIGFS_FS=m)

config USB4_DEBUGFS_WRITE
	bool "Enable write by debugfs to configuration spaces (DANGEROUS)"
	help
	  Enables writing to device configuration registers through
	  debugfs interface. You can use tools such as Thunderbolt/USB4
	  debugging tools to access these registers. For more
	  information see:

	    https://github.com/intel/tbtools

	  Only enable this if you know what you are doing! Never enable
	  this for production systems or distro kernels.

config USB4_DEBUGFS_MARGINING
	bool "Expose receiver lane margining operations under USB4 ports and retimers (DANGEROUS)"
	depends on DEBUG_FS
	depends on USB4_DEBUGFS_WRITE
	help
	  Enables hardware and software based receiver lane margining
	  support under each USB4 port and retimer, including retimers
	  on the other side of the cable. Used for electrical quality
	  and robustness validation during manufacturing. Should not be
	  enabled by distro kernels.

config USB4_KUNIT_TEST
	bool "KUnit tests" if !KUNIT_ALL_TESTS
	depends on USB4 && KUNIT=y
	default KUNIT_ALL_TESTS

config USB4_DMA_TEST
	tristate "DMA traffic test driver"
	depends on DEBUG_FS
	help
	  This allows sending and receiving DMA traffic through loopback
	  connection. Loopback connection can be done by either special
	  dongle that has TX/RX lines crossed, or by simply connecting a
	  cable back to the host. Only enable this if you know what you
	  are doing. Normal users and distro kernels should say N here.

	  To compile this driver a module, choose M here. The module will be
	  called thunderbolt_dma_test.

config USB4_STREAM
	tristate "Stream data over Thunderbolt/USB4 cable"
	depends on USB4_CONFIGFS
	help
	  This adds support for USB4STREAM protocol that allows two
	  hosts to stream data directly over Thunderbolt/USB4 cable
	  through /dev/tbstreamX devices.

	  To compile this driver a module, choose M here. The module will be
	  called thunderbolt_stream.

endif # USB4
