#
# UWB device configuration
#

menuconfig UWB
	tristate "Ultra Wideband devices (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	depends on PCI
	default n
	help
	  UWB is a high-bandwidth, low-power, point-to-point radio
	  technology using a wide spectrum (3.1-10.6GHz). It is
	  optimized for in-room use (480Mbps at 2 meters, 110Mbps at
	  10m). It serves as the transport layer for other protocols,
	  such as Wireless USB (WUSB), IP (WLP) and upcoming
	  Bluetooth and 1394

	  The topology is peer to peer; however, higher level
	  protocols (such as WUSB) might impose a master/slave
	  relationship.

	  Say Y here if your computer has UWB radio controllers (USB or PCI)
	  based. You will need to enable the radio controllers
	  below.  It is ok to select all of them, no harm done.

	  For more help check the UWB and WUSB related files in
	  <file:Documentation/usb/>.

	  To compile the UWB stack as a module, choose M here.

if UWB

config UWB_HWA
	tristate "UWB Radio Control driver for WUSB-compliant USB dongles (HWA)"
	depends on USB
	help
	  This driver enables the radio controller for HWA USB
	  devices. HWA stands for Host Wire Adapter, and it is a UWB
	  Radio Controller connected to your system via USB. Most of
	  them come with a Wireless USB host controller also.

	  To compile this driver select Y (built in) or M (module). It
	  is safe to select any even if you do not have the hardware.

config UWB_WHCI
        tristate "UWB Radio Control driver for WHCI-compliant cards"
        depends on PCI
        help
          This driver enables the radio controller for WHCI cards.

          WHCI is an specification developed by Intel
          (http://www.intel.com/technology/comms/wusb/whci.htm) much
          in the spirit of USB's EHCI, but for UWB and Wireless USB
          radio/host controllers connected via memmory mapping (eg:
          PCI). Most of these cards come also with a Wireless USB host
          controller.

          To compile this driver select Y (built in) or M (module). It
          is safe to select any even if you do not have the hardware.

config UWB_WLP
	tristate "Support WiMedia Link Protocol (Ethernet/IP over UWB)"
	depends on UWB && NET
	help
	  This is a common library for drivers that implement
	  networking over UWB.

config UWB_I1480U
        tristate "Support for Intel Wireless UWB Link 1480 HWA"
        depends on UWB_HWA
        select FW_LOADER
        help
         This driver enables support for the i1480 when connected via
         USB. It consists of a firmware uploader that will enable it
         to behave as an HWA device.

         To compile this driver select Y (built in) or M (module). It
         is safe to select any even if you do not have the hardware.

config UWB_I1480U_WLP
        tristate "Support for Intel Wireless UWB Link 1480 HWA's WLP interface"
        depends on UWB_I1480U &&  UWB_WLP && NET
        help
         This driver enables WLP support for the i1480 when connected via
         USB. WLP is the WiMedia Link Protocol, or IP over UWB.

         To compile this driver select Y (built in) or M (module). It
         is safe to select any even if you don't have the hardware.

endif # UWB
