#
# WiMAX LAN device configuration
#
# Note the ugly 'depends on' on WIMAX: that disallows RFKILL to be a
# module if WIMAX is to be linked in. The WiMAX code is done in such a
# way that it doesn't require and explicit dependency on RFKILL in
# case an embedded system wants to rip it out.
#
# As well, enablement of the RFKILL code means we need the INPUT layer
# support to inject events coming from hw rfkill switches. That
# dependency could be killed if input.h provided appropiate means to
# work when input is disabled.

comment "WiMAX Wireless Broadband support requires CONFIG_INPUT enabled"
	depends on INPUT = n && RFKILL != n

menuconfig WIMAX
	tristate "WiMAX Wireless Broadband support"
	depends on (y && RFKILL != m) || m
	depends on (INPUT && RFKILL != n) || RFKILL = n
	help

	  Select to configure support for devices that provide
	  wireless broadband connectivity using the WiMAX protocol
	  (IEEE 802.16).

	  Please note that most of these devices require signing up
	  for a service plan with a provider.

	  The different WiMAX drivers can be enabled in the menu entry

	  Device Drivers > Network device support > WiMAX Wireless
	  Broadband devices

	  If unsure, it is safe to select M (module).

config WIMAX_DEBUG_LEVEL
	int "WiMAX debug level"
	depends on WIMAX
	default 8
	help

	  Select the maximum debug verbosity level to be compiled into
	  the WiMAX stack code.

	  By default, debug messages are disabled at runtime and can
	  be selectively enabled for different parts of the code using
	  the sysfs debug-levels file.

	  If set at zero, this will compile out all the debug code.

	  It is recommended that it is left at 8.
