# /*
#  * Misc utility routines for accessing chip-specific features
#  * of the SiliconBackplane-based Broadcom chips.
#  *
#  * Copyright 1999-2016, Broadcom Corporation
#  * All rights reserved,
#  *
#  * Redistribution and use in source and binary forms, with or without modification,
#  * are permitted provided that the following conditions are met:
#  *    1. Redistributions of source code must retain the above copyright notice,
#  *       this list of conditions and the following disclaimer.
#  *    2. Redistributions in binary form must reproduce the above copyright notice,
#  *       this list of conditions and the following disclaimer in the documentation
#  *       and/or other materials provided with the distribution.
#  *
#  * This software is provided by the copyright holder "as is" and any express or
#  * implied warranties, including, but not limited to, the implied warranties of
#  * merchantability and fitness for a particular purpose are disclaimed. In no event
#  * shall copyright holder be liable for any direct, indirect, incidental, special,
#  * exemplary, or consequential damages (including, but not limited to, procurement
#  * of substitute goods or services; loss of use, data, or profits; or business
#  * interruption) however caused and on any theory of liability, whether in
#  * contract, strict liability, or tort (including negligence or otherwise) arising
#  * in any way out of the use of this software, even if advised of the possibility
#  * of such damage
#  *
#  *
#  * <<Broadcom-WL-IPTag/Open:>>
#  */
 
menu "Broadcom DHD Driver"
config BCMDHD
	tristate "Broadcom FullMAC wireless cards support"
	---help---
	  This module adds support for wireless adapters based on
	  Broadcom FullMAC chipset.

config BCMDHD_FW_PATH
	depends on BCMDHD
	string "Firmware path"
	default "/system/etc/firmware/fw_bcmdhd.bin"
	---help---
	  Path to the firmware file.

config BCMDHD_NVRAM_PATH
	depends on BCMDHD
	string "NVRAM path"
	default "/system/etc/firmware/nvram.txt"
	---help---
	  Path to the calibration file.

config BCMDHD_GWIFI_SUPPORT
	bool "GWIFI Feature"
	depends on BCMDHD
	---help---
	  This is a configuration for GWIFI features.

config BCMDHD_ANDROID_CMDS
	bool "Enable commands for Android framework"
	depends on BCMDHD
	---help---
	  Enable commands for Android framework.

config BCMDHD_WEXT
	bool "Enable WEXT support"
	depends on BCMDHD && CFG80211 = n
	select WIRELESS_EXT
	select WEXT_PRIV
	help
	  Enables WEXT support
endmenu

choice
	prompt "Enable Chip Interface"
	depends on BCMDHD
	---help---
		Enable Chip Interface.
config BCMDHD_SDIO
		bool "SDIO bus interface support"
		depends on BCMDHD && MMC
config BCMDHD_PCIE
		bool "PCIe bus interface support"
		depends on BCMDHD && PCI
endchoice

choice
	depends on BCMDHD && BCMDHD_SDIO
	prompt "Interrupt type"
	---help---
		Interrupt type
config BCMDHD_OOB
	depends on BCMDHD && BCMDHD_SDIO
	bool "Out-of-Band Interrupt"
	---help---
		Interrupt from WL_HOST_WAKE.
config BCMDHD_SDIO_IRQ
	depends on BCMDHD && BCMDHD_SDIO
	bool "In-Band Interrupt"
	---help---
	  Interrupt from SDIO DAT[1]
endchoice
