menu "IEEE 1394 (FireWire) support"
	depends on PCI || BROKEN

source "drivers/firewire/Kconfig"

config IEEE1394
	tristate "Legacy alternative FireWire driver stack"
	depends on PCI || BROKEN
	help
	  IEEE 1394 describes a high performance serial bus, which is also
	  known as FireWire(tm) or i.Link(tm) and is used for connecting all
	  sorts of devices (most notably digital video cameras) to your
	  computer.

	  If you have FireWire hardware and want to use it, say Y here.  This
	  is the core support only, you will also need to select a driver for
	  your IEEE 1394 adapter.

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

config IEEE1394_OHCI1394
	tristate "OHCI-1394 controllers"
	depends on PCI && IEEE1394
	help
	  Enable this driver if you have an IEEE 1394 controller based on the
	  OHCI-1394 specification. The current driver is only tested with OHCI
	  chipsets made by Texas Instruments and NEC. Most third-party vendors
	  use one of these chipsets.  It should work with any OHCI-1394
	  compliant card, however.

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

	  NOTE:
	  If you want to install firewire-ohci and ohci1394 together, you
	  should configure them only as modules and blacklist the driver(s)
	  which you don't want to have auto-loaded.  Add either

	      blacklist firewire-ohci
	  or
	      blacklist ohci1394
	      blacklist video1394
	      blacklist dv1394

	  to /etc/modprobe.conf or /etc/modprobe.d/* and update modprobe.conf
	  depending on your distribution.

comment "PCILynx controller requires I2C"
	depends on IEEE1394 && I2C=n

config IEEE1394_PCILYNX
	tristate "PCILynx controller"
	depends on PCI && IEEE1394 && I2C
	select I2C_ALGOBIT
	help
	  Say Y here if you have an IEEE-1394 controller with the Texas
	  Instruments PCILynx chip.  Note: this driver is written for revision
	  2 of this chip and may not work with revision 0.

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

	  Only some old and now very rare PCI and CardBus cards and
	  PowerMacs G3 B&W contain the PCILynx controller.  Therefore
	  almost everybody can say N here.

comment "SBP-2 support (for storage devices) requires SCSI"
	depends on IEEE1394 && SCSI=n

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

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

config IEEE1394_SBP2_PHYS_DMA
	bool "Enable replacement for physical DMA in SBP2"
	depends on IEEE1394_SBP2 && VIRT_TO_BUS && EXPERIMENTAL
	help
	  This builds sbp2 for use with non-OHCI host adapters which do not
	  support physical DMA or for when ohci1394 is run with phys_dma=0.
	  Physical DMA is data movement without assistance of the drivers'
	  interrupt handlers.  This option includes the interrupt handlers
	  that are required in absence of this hardware feature.

	  This option is buggy and currently broken on some architectures.
	  If unsure, say N.

config IEEE1394_ETH1394_ROM_ENTRY
	depends on IEEE1394
	bool
	default n

config IEEE1394_ETH1394
	tristate "IP networking over 1394 (experimental)"
	depends on IEEE1394 && EXPERIMENTAL && INET
	select IEEE1394_ETH1394_ROM_ENTRY
	help
	  This driver implements a functional majority of RFC 2734: IPv4 over
	  1394.  It will provide IP connectivity with implementations of RFC
	  2734 found on other operating systems.  It will not communicate with
	  older versions of this driver found in stock kernels prior to 2.6.3.
	  This driver is still considered experimental.  It does not yet support
	  MCAP, therefore multicast support is significantly limited.

	  The module is called eth1394 although it does not emulate Ethernet.

config IEEE1394_RAWIO
	tristate "raw1394 userspace interface"
	depends on IEEE1394
	help
	  This option adds support for the raw1394 device file which enables
	  direct communication of user programs with IEEE 1394 devices
	  (isochronous and asynchronous).  Almost all application programs
	  which access FireWire require this option.

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

config IEEE1394_VIDEO1394
	tristate "video1394 userspace interface"
	depends on IEEE1394 && IEEE1394_OHCI1394
	help
	  This option adds support for the video1394 device files which enable
	  isochronous communication of user programs with IEEE 1394 devices,
	  especially video capture or export.  This interface is used by all
	  libdc1394 based programs and by several other programs, in addition to
	  the raw1394 interface.  It is generally not required for DV capture.

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

config IEEE1394_DV1394
	tristate "dv1394 userspace interface (deprecated)"
	depends on IEEE1394 && IEEE1394_OHCI1394
	help
	  The dv1394 driver is unsupported and may be removed from Linux in a
	  future release.  Its functionality is now provided by raw1394 together
	  with libraries such as libiec61883.

config IEEE1394_VERBOSEDEBUG
	bool "Excessive debugging output"
	depends on IEEE1394
	help
	  If you say Y here, you will get very verbose debugging logs from the
	  ieee1394 drivers, including sent and received packet headers.  This
	  will quickly result in large amounts of data sent to the system log.

	  Say Y if you really need the debugging output.  Everyone else says N.

endmenu
