config IWLWIFI
	tristate

config IWLCORE
	tristate "Intel Wireless Wifi Core"
	depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
	select IWLWIFI
	select MAC80211_LEDS if IWLWIFI_LEDS
	select LEDS_CLASS if IWLWIFI_LEDS
	select RFKILL if IWLWIFI_RFKILL
	select RFKILL_INPUT if IWLWIFI_RFKILL

config IWLWIFI_LEDS
	bool
	default n

config IWLWIFI_RUN_TIME_CALIB
	bool
	depends on IWLCORE
	default n
	---help---
	  This option will enable run time calibration for the iwlwifi driver.
	  These calibrations are Sensitivity and Chain Noise.


config IWLWIFI_RFKILL
	boolean "IWLWIFI RF kill support"
	depends on IWLCORE

config IWL4965
	tristate "Intel Wireless WiFi 4965AGN"
	depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
	select FW_LOADER
	select IWLCORE
	---help---
	  Select to build the driver supporting the:

	  Intel Wireless WiFi Link 4965AGN

	  This driver uses the kernel's mac80211 subsystem.

	  In order to use this driver, you will need a microcode (uCode)
	  image for it. You can obtain the microcode from:

	          <http://intellinuxwireless.org/>.

	  The microcode is typically installed in /lib/firmware. You can
	  look in the hotplug script /etc/hotplug/firmware.agent to
	  determine which directory FIRMWARE_DIR is set to when the script
	  runs.

	  If you want to compile the driver as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want),
	  say M here and read <file:Documentation/kbuild/modules.txt>.  The
	  module will be called iwl4965.ko.

config IWL4965_HT
	bool "Enable 802.11n HT features in iwl4965 driver"
	depends on EXPERIMENTAL
	depends on IWL4965
	---help---
	  This option enables IEEE 802.11n High Throughput features
	  for the iwl4965 driver.

config IWL4965_LEDS
	bool "Enable LEDS features in iwl4965 driver"
	depends on IWL4965
	select IWLWIFI_LEDS
	---help---
	  This option enables LEDS for the iwlwifi drivers


config IWL4965_SPECTRUM_MEASUREMENT
	bool "Enable Spectrum Measurement in iwl4965 driver"
	depends on IWL4965
	---help---
	  This option will enable spectrum measurement for the iwl4965 driver.

config IWL4965_RUN_TIME_CALIB
	bool "Enable run time Calibration for 4965 NIC"
	select IWLWIFI_RUN_TIME_CALIB
	depends on IWL4965
	default y
	---help---
	  This option will enable run time calibration for the iwl4965 driver.
	  These calibrations are Sensitivity and Chain Noise. If unsure, say yes

config IWLWIFI_DEBUG
	bool "Enable full debugging output in iwl4965 driver"
	depends on IWL4965
	---help---
	  This option will enable debug tracing output for the iwl4965
	  driver.

	  This will result in the kernel module being ~100k larger.  You can
	  control which debug output is sent to the kernel log by setting the
	  value in

		/sys/class/net/wlan0/device/debug_level

	  This entry will only exist if this option is enabled.

	  To set a value, simply echo an 8-byte hex value to the same file:

		  % echo 0x43fff > /sys/class/net/wlan0/device/debug_level

	  You can find the list of debug mask values in:
		  drivers/net/wireless/iwlwifi/iwl-4965-debug.h

	  If this is your first time using this driver, you should say Y here
	  as the debug information can assist others in helping you resolve
	  any problems you may encounter.

config IWL5000
	bool "Intel Wireless WiFi 5000AGN"
	depends on IWL4965
	---help---
	  This option enables support for Intel Wireless WiFi Link 5000AGN Family
	  Dependency on 4965 is temporary

config IWL5000_RUN_TIME_CALIB
	bool "Enable run time Calibration for 5000 NIC"
	select IWLWIFI_RUN_TIME_CALIB
	depends on IWL5000
	default y
	---help---
	  This option will enable run time calibration for the iwl5000 driver.
	  These calibrations are Sensitivity and Chain Noise. If unsure, say yes


config IWLWIFI_DEBUGFS
        bool "Iwlwifi debugfs support"
        depends on IWLCORE && IWLWIFI_DEBUG && MAC80211_DEBUGFS
        ---help---
	  Enable creation of debugfs files for the iwlwifi drivers.

config IWL3945
	tristate "Intel PRO/Wireless 3945ABG/BG Network Connection"
	depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
	select FW_LOADER
	select IWLWIFI
	select MAC80211_LEDS if IWL3945_LEDS
	select LEDS_CLASS if IWL3945_LEDS
	---help---
	  Select to build the driver supporting the:

	  Intel PRO/Wireless 3945ABG/BG Network Connection

	  This driver uses the kernel's mac80211 subsystem.

	  In order to use this driver, you will need a microcode (uCode)
	  image for it. You can obtain the microcode from:

	          <http://intellinuxwireless.org/>.

	  The microcode is typically installed in /lib/firmware. You can
	  look in the hotplug script /etc/hotplug/firmware.agent to
	  determine which directory FIRMWARE_DIR is set to when the script
	  runs.

	  If you want to compile the driver as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want),
	  say M here and read <file:Documentation/kbuild/modules.txt>.  The
	  module will be called iwl3945.ko.

config IWL3945_SPECTRUM_MEASUREMENT
	bool "Enable Spectrum Measurement in iwl3945 drivers"
	depends on IWL3945
	---help---
	  This option will enable spectrum measurement for the iwl3945 driver.

config IWL3945_LEDS
	bool "Enable LEDS features in iwl3945 driver"
	depends on IWL3945
	---help---
	  This option enables LEDS for the iwl3945 driver.

config IWL3945_DEBUG
	bool "Enable full debugging output in iwl3945 driver"
	depends on IWL3945
	---help---
	  This option will enable debug tracing output for the iwl3945
	  driver.

	  This will result in the kernel module being ~100k larger.  You can
	  control which debug output is sent to the kernel log by setting the
	  value in

	          /sys/bus/pci/drivers/${DRIVER}/debug_level

	  This entry will only exist if this option is enabled.

	  To set a value, simply echo an 8-byte hex value to the same file:

		  % echo 0x43fff > /sys/bus/pci/drivers/${DRIVER}/debug_level

	  You can find the list of debug mask values in:
		  drivers/net/wireless/iwlwifi/iwl-3945-debug.h

	  If this is your first time using this driver, you should say Y here
	  as the debug information can assist others in helping you resolve
	  any problems you may encounter.

