# SPDX-License-Identifier: GPL-2.0-only
menu "IEEE 1394 (FireWire) support"
	depends on PCI || COMPILE_TEST
	# firewire-core does not depend on PCI but is
	# not useful without PCI controller driver

config FIREWIRE
	tristate "FireWire driver stack"
	select CRC_ITU_T
	help
	  This is the new-generation IEEE 1394 (FireWire) driver stack
	  a.k.a. Juju, a new implementation designed for robustness and
	  simplicity.
	  See http://ieee1394.docs.kernel.org/en/latest/migration.html
	  for information about migration from the older Linux 1394 stack
	  to the new driver stack.

	  To compile this driver as a module, say M here: the module will be
	  called firewire-core.

config FIREWIRE_KUNIT_UAPI_TEST
	tristate "KUnit tests for layout of structure in UAPI" if !KUNIT_ALL_TESTS
	depends on FIREWIRE && KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the KUnit tests whether structures exposed to user
	  space have expected layout.

	  KUnit tests run during boot and output the results to the debug
	  log in TAP format (https://testanything.org/). Only useful for
	  kernel devs running KUnit test harness and are not for inclusion
	  into a production build.

	  For more information on KUnit and unit tests in general, refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

config FIREWIRE_KUNIT_DEVICE_ATTRIBUTE_TEST
	tristate "KUnit tests for device attributes" if !KUNIT_ALL_TESTS
	depends on FIREWIRE && KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the KUnit tests for device attribute for node and
	  unit.

	  KUnit tests run during boot and output the results to the debug
	  log in TAP format (https://testanything.org/). Only useful for
	  kernel devs running KUnit test harness and are not for inclusion
	  into a production build.

	  For more information on KUnit and unit tests in general, refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

config FIREWIRE_KUNIT_PACKET_SERDES_TEST
	tristate "KUnit tests for packet serialization/deserialization" if !KUNIT_ALL_TESTS
	depends on FIREWIRE && KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the KUnit tests for packet serialization and
	  deserialization.

	  KUnit tests run during boot and output the results to the debug
	  log in TAP format (https://testanything.org/). Only useful for
	  kernel devs running KUnit test harness and are not for inclusion
	  into a production build.

	  For more information on KUnit and unit tests in general, refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

config FIREWIRE_KUNIT_SELF_ID_SEQUENCE_HELPER_TEST
	tristate "KUnit tests for helpers of self ID sequence" if !KUNIT_ALL_TESTS
	depends on FIREWIRE && KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the KUnit tests for helpers of self ID sequence.

	  KUnit tests run during boot and output the results to the debug
	  log in TAP format (https://testanything.org/). Only useful for
	  kernel devs running KUnit test harness and are not for inclusion
	  into a production build.

	  For more information on KUnit and unit tests in general, refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

config FIREWIRE_OHCI
	tristate "OHCI-1394 controllers"
	depends on PCI && FIREWIRE && MMU
	help
	  Enable this driver if you have a FireWire controller based
	  on the OHCI specification.  For all practical purposes, this
	  is the only chipset in use, so say Y here.

	  To compile this driver as a module, say M here:  The module will be
	  called firewire-ohci.

config FIREWIRE_KUNIT_OHCI_SERDES_TEST
	tristate "KUnit tests for serialization/deserialization of data in buffers/registers" if !KUNIT_ALL_TESTS
	depends on FIREWIRE && KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the KUnit tests to check serialization and deserialization
	  of data in buffers and registers defined in 1394 OHCI specification.

	  KUnit tests run during boot and output the results to the debug
	  log in TAP format (https://testanything.org/). Only useful for
	  kernel devs running KUnit test harness and are not for inclusion
	  into a production build.

	  For more information on KUnit and unit tests in general, refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

config FIREWIRE_SBP2
	tristate "Storage devices (SBP-2 protocol)"
	depends on FIREWIRE && SCSI
	help
	  This option enables you to use SBP-2 devices connected to a
	  FireWire bus.  SBP-2 devices include storage devices like
	  harddisks and DVD drives, also some other FireWire devices
	  like scanners.

	  To compile this driver as a module, say M here:  The module will be
	  called firewire-sbp2.

	  You should also enable support for disks, CD-ROMs, etc. in the SCSI
	  configuration section.

config FIREWIRE_NET
	tristate "IP networking over 1394"
	depends on FIREWIRE && INET
	help
	  This enables IPv4/IPv6 over IEEE 1394, providing IP connectivity
	  with other implementations of RFC 2734/3146 as found on several
	  operating systems.  Multicast support is currently limited.

	  To compile this driver as a module, say M here:  The module will be
	  called firewire-net.

config FIREWIRE_NOSY
	tristate "Nosy - a FireWire traffic sniffer for PCILynx cards"
	depends on PCI
	help
	  Nosy is an IEEE 1394 packet sniffer that is used for protocol
	  analysis and in development of IEEE 1394 drivers, applications,
	  or firmwares.

	  This driver lets you use a Texas Instruments PCILynx 1394 to PCI
	  link layer controller TSB12LV21/A/B as a low-budget bus analyzer.
	  PCILynx is a nowadays very rare IEEE 1394 controller which is
	  not OHCI 1394 compliant.

	  The following cards are known to be based on PCILynx or PCILynx-2:
	  IOI IOI-1394TT (PCI card), Unibrain Fireboard 400 PCI Lynx-2
	  (PCI card), Newer Technology FireWire 2 Go (CardBus card),
	  Apple Power Mac G3 blue & white and G4 with PCI graphics
	  (onboard controller).

	  To compile this driver as a module, say M here:  The module will be
	  called nosy.  Source code of a userspace interface to nosy, called
	  nosy-dump, can be found in tools/firewire/ of the kernel sources.

	  If unsure, say N.

endmenu
