# 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.wiki.kernel.org/index.php/Juju_Migration
	  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_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_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
