config WIRELESS_EXT
	bool

config WEXT_CORE
	def_bool y
	depends on CFG80211_WEXT || WIRELESS_EXT

config WEXT_PROC
	def_bool y
	depends on PROC_FS
	depends on WEXT_CORE

config WEXT_SPY
	bool

config WEXT_PRIV
	bool

config CFG80211
	tristate "cfg80211 - wireless configuration API"
	depends on RFKILL || !RFKILL
	select FW_LOADER
	# may need to update this when certificates are changed and are
	# using a different algorithm, though right now they shouldn't
	# (this is here rather than below to allow it to be a module)
	select CRYPTO_SHA256 if CFG80211_USE_KERNEL_REGDB_KEYS
	---help---
	  cfg80211 is the Linux wireless LAN (802.11) configuration API.
	  Enable this if you have a wireless device.

	  For more information refer to documentation on the wireless wiki:

	  http://wireless.kernel.org/en/developers/Documentation/cfg80211

	  When built as a module it will be called cfg80211.

config NL80211_TESTMODE
	bool "nl80211 testmode command"
	depends on CFG80211
	help
	  The nl80211 testmode command helps implementing things like
	  factory calibration or validation tools for wireless chips.

	  Select this option ONLY for kernels that are specifically
	  built for such purposes.

	  Debugging tools that are supposed to end up in the hands of
	  users should better be implemented with debugfs.

	  Say N.

config CFG80211_DEVELOPER_WARNINGS
	bool "enable developer warnings"
	depends on CFG80211
	default n
	help
	  This option enables some additional warnings that help
	  cfg80211 developers and driver developers, but beware that
	  they can also trigger due to races with userspace.

	  For example, when a driver reports that it was disconnected
	  from the AP, but the user disconnects manually at the same
	  time, the warning might trigger spuriously due to races.

	  Say Y only if you are developing cfg80211 or a driver based
	  on it (or mac80211).


config CFG80211_CERTIFICATION_ONUS
	bool "cfg80211 certification onus"
	depends on CFG80211 && EXPERT
	default n
	---help---
	  You should disable this option unless you are both capable
	  and willing to ensure your system will remain regulatory
	  compliant with the features available under this option.
	  Some options may still be under heavy development and
	  for whatever reason regulatory compliance has not or
	  cannot yet be verified. Regulatory verification may at
	  times only be possible until you have the final system
	  in place.

	  This option should only be enabled by system integrators
	  or distributions that have done work necessary to ensure
	  regulatory certification on the system with the enabled
	  features. Alternatively you can enable this option if
	  you are a wireless researcher and are working in a controlled
	  and approved environment by your local regulatory agency.

config CFG80211_REQUIRE_SIGNED_REGDB
	bool "require regdb signature" if CFG80211_CERTIFICATION_ONUS
	default y
	select SYSTEM_DATA_VERIFICATION
	help
	  Require that in addition to the "regulatory.db" file a
	  "regulatory.db.p7s" can be loaded with a valid PKCS#7
	  signature for the regulatory.db file made by one of the
	  keys in the certs/ directory.

config CFG80211_USE_KERNEL_REGDB_KEYS
	bool "allow regdb keys shipped with the kernel" if CFG80211_CERTIFICATION_ONUS
	default y
	depends on CFG80211_REQUIRE_SIGNED_REGDB
	help
	  Allow the regulatory database to be signed by one of the keys for
	  which certificates are part of the kernel sources
	  (in net/wireless/certs/).

	  This is currently only Seth Forshee's key, who is the regulatory
	  database maintainer.

config CFG80211_EXTRA_REGDB_KEYDIR
	string "additional regdb key directory" if CFG80211_CERTIFICATION_ONUS
	depends on CFG80211_REQUIRE_SIGNED_REGDB
	help
	  If selected, point to a directory with DER-encoded X.509
	  certificates like in the kernel sources (net/wireless/certs/)
	  that shall be accepted for a signed regulatory database.

	  Note that you need to also select the correct CRYPTO_<hash> modules
	  for your certificates, and if cfg80211 is built-in they also must be.

config CFG80211_REG_CELLULAR_HINTS
	bool "cfg80211 regulatory support for cellular base station hints"
	depends on CFG80211_CERTIFICATION_ONUS
	---help---
	  This option enables support for parsing regulatory hints
	  from cellular base stations. If enabled and at least one driver
	  claims support for parsing cellular base station hints the
	  regulatory core will allow and parse these regulatory hints.
	  The regulatory core will only apply these regulatory hints on
	  drivers that support this feature. You should only enable this
	  feature if you have tested and validated this feature on your
	  systems.

config CFG80211_REG_RELAX_NO_IR
	bool "cfg80211 support for NO_IR relaxation"
	depends on CFG80211_CERTIFICATION_ONUS
	---help---
	 This option enables support for relaxation of the NO_IR flag for
	 situations that certain regulatory bodies have provided clarifications
	 on how relaxation can occur. This feature has an inherent dependency on
	 userspace features which must have been properly tested and as such is
	 not enabled by default.

	 A relaxation feature example is allowing the operation of a P2P group
	 owner (GO) on channels marked with NO_IR if there is an additional BSS
	 interface which associated to an AP which userspace assumes or confirms
	 to be an authorized master, i.e., with radar detection support and DFS
	 capabilities. However, note that in order to not create daisy chain
	 scenarios, this relaxation is not allowed in cases where the BSS client
	 is associated to P2P GO and in addition the P2P GO instantiated on
	 a channel due to this relaxation should not allow connection from
	 non P2P clients.

	 The regulatory core will apply these relaxations only for drivers that
	 support this feature by declaring the appropriate channel flags and
	 capabilities in their registration flow.

config CFG80211_DEFAULT_PS
	bool "enable powersave by default"
	depends on CFG80211
	default y
	help
	  This option enables powersave mode by default.

	  If this causes your applications to misbehave you should fix your
	  applications instead -- they need to register their network
	  latency requirement, see Documentation/power/pm_qos_interface.txt.

config CFG80211_DEBUGFS
	bool "cfg80211 DebugFS entries"
	depends on CFG80211
	depends on DEBUG_FS
	---help---
	  You can enable this if you want debugfs entries for cfg80211.

	  If unsure, say N.

config CFG80211_CRDA_SUPPORT
	bool "support CRDA" if EXPERT
	default y
	depends on CFG80211
	help
	  You should enable this option unless you know for sure you have no
	  need for it, for example when using internal regdb (above) or the
	  database loaded as a firmware file.

	  If unsure, say Y.

config CFG80211_WEXT
	bool "cfg80211 wireless extensions compatibility" if !CFG80211_WEXT_EXPORT
	depends on CFG80211
	select WEXT_CORE
	default y if CFG80211_WEXT_EXPORT
	help
	  Enable this option if you need old userspace for wireless
	  extensions with cfg80211-based drivers.

config CFG80211_WEXT_EXPORT
	bool
	depends on CFG80211
	help
	  Drivers should select this option if they require cfg80211's
	  wext compatibility symbols to be exported.

config LIB80211
	tristate
	default n
	help
	  This options enables a library of common routines used
	  by IEEE802.11 wireless LAN drivers.

	  Drivers should select this themselves if needed.

config LIB80211_CRYPT_WEP
	tristate

config LIB80211_CRYPT_CCMP
	tristate

config LIB80211_CRYPT_TKIP
	tristate

config LIB80211_DEBUG
	bool "lib80211 debugging messages"
	depends on LIB80211
	default n
	---help---
	  You can enable this if you want verbose debugging messages
	  from lib80211.

	  If unsure, say N.
