menu "IEEE 1394 (FireWire) support"

config IEEE1394
	tristate "IEEE 1394 (FireWire) support"
	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.

comment "Subsystem Options"
	depends on IEEE1394

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 subsystem which includes a dump of the header of every sent
	  and received packet.  This can amount to a high amount of data
	  collected in a very short time which is usually also saved to
	  disk by the system logging daemons.

	  Say Y if you really want or need the debugging output, everyone
	  else says N.

comment "Controllers"
	depends on IEEE1394

comment "Texas Instruments PCILynx requires I2C"
	depends on IEEE1394 && I2C=n

config IEEE1394_PCILYNX
	tristate "Texas Instruments PCILynx support"
	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.

config IEEE1394_OHCI1394
	tristate "OHCI-1394 support"
	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.

comment "Protocols"
	depends on IEEE1394

config IEEE1394_VIDEO1394
	tristate "OHCI-1394 Video support"
	depends on IEEE1394 && IEEE1394_OHCI1394
	help
	  This option enables video device usage for OHCI-1394 cards.  Enable
	  this option only if you have an IEEE 1394 video device connected to
	  an OHCI-1394 card.

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

config IEEE1394_SBP2
	tristate "SBP-2 support (Harddisks etc.)"
	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 && IEEE1394_SBP2 && EXPERIMENTAL && (X86_32 || PPC_32)
	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 over 1394"
	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_DV1394
	tristate "OHCI-DV I/O support (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_RAWIO
	tristate "Raw IEEE1394 I/O support"
	depends on IEEE1394
	help
	  This option adds support for the raw1394 device file which enables
	  direct communication of user programs with the IEEE 1394 bus and thus
	  with the attached peripherals.  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.

endmenu
