# SPDX-License-Identifier: GPL-2.0-only
#
# Bluetooth subsystem configuration
#

menuconfig BT
	tristate "Bluetooth subsystem support"
	depends on NET && !S390
	depends on RFKILL || !RFKILL
	select CRC16
	select CRYPTO
	select CRYPTO_SKCIPHER
	select CRYPTO_LIB_AES
	imply CRYPTO_AES
	select CRYPTO_CMAC
	select CRYPTO_ECB
	select CRYPTO_SHA256
	select CRYPTO_ECDH
	help
	  Bluetooth is low-cost, low-power, short-range wireless technology.
	  It was designed as a replacement for cables and other short-range
	  technologies like IrDA.  Bluetooth operates in personal area range
	  that typically extends up to 10 meters.  More information about
	  Bluetooth can be found at <http://www.bluetooth.com/>.

	  Linux Bluetooth subsystem consist of several layers:
	     Bluetooth Core
		HCI device and connection manager, scheduler
		SCO audio links
		L2CAP (Logical Link Control and Adaptation Protocol)
		SMP (Security Manager Protocol) on LE (Low Energy) links
	     HCI Device drivers (Interface to the hardware)
	     RFCOMM Module (RFCOMM Protocol)  
	     BNEP Module (Bluetooth Network Encapsulation Protocol)
	     CMTP Module (CAPI Message Transport Protocol)
	     HIDP Module (Human Interface Device Protocol)

	  Say Y here to compile Bluetooth support into the kernel or say M to
	  compile it as module (bluetooth).

	  To use Linux Bluetooth subsystem, you will need several user-space
	  utilities like hciconfig and bluetoothd.  These utilities and updates
	  to Bluetooth kernel modules are provided in the BlueZ packages.  For
	  more information, see <http://www.bluez.org/>.

config BT_BREDR
	bool "Bluetooth Classic (BR/EDR) features"
	depends on BT
	default y
	help
	  Bluetooth Classic includes support for Basic Rate (BR)
	  available with Bluetooth version 1.0b or later and support
	  for Enhanced Data Rate (EDR) available with Bluetooth
	  version 2.0 or later.

source "net/bluetooth/rfcomm/Kconfig"

source "net/bluetooth/bnep/Kconfig"

source "net/bluetooth/cmtp/Kconfig"

source "net/bluetooth/hidp/Kconfig"

config BT_HS
	bool "Bluetooth High Speed (HS) features"
	depends on BT_BREDR
	default y
	help
	  Bluetooth High Speed includes support for off-loading
	  Bluetooth connections via 802.11 (wifi) physical layer
	  available with Bluetooth version 3.0 or later.

config BT_LE
	bool "Bluetooth Low Energy (LE) features"
	depends on BT
	default y
	help
	  Bluetooth Low Energy includes support low-energy physical
	  layer available with Bluetooth version 4.0 or later.

config BT_6LOWPAN
	tristate "Bluetooth 6LoWPAN support"
	depends on BT_LE && 6LOWPAN
	help
	  IPv6 compression over Bluetooth Low Energy.

config BT_LEDS
	bool "Enable LED triggers"
	depends on BT
	depends on LEDS_CLASS
	select LEDS_TRIGGERS
	help
	  This option selects a few LED triggers for different
	  Bluetooth events.

config BT_SELFTEST
	bool "Bluetooth self testing support"
	depends on BT && DEBUG_KERNEL
	help
	  Run self tests when initializing the Bluetooth subsystem.  This
	  is a developer option and can cause significant delay when booting
	  the system.

	  When the Bluetooth subsystem is built as module, then the test
	  cases are run first thing at module load time.  When the Bluetooth
	  subsystem is compiled into the kernel image, then the test cases
	  are run late in the initcall hierarchy.

config BT_SELFTEST_ECDH
	bool "ECDH test cases"
	depends on BT_LE && BT_SELFTEST
	help
	  Run test cases for ECDH cryptographic functionality used by the
	  Bluetooth Low Energy Secure Connections feature.

config BT_SELFTEST_SMP
	bool "SMP test cases"
	depends on BT_LE && BT_SELFTEST
	help
	  Run test cases for SMP cryptographic functionality, including both
	  legacy SMP as well as the Secure Connections features.

config BT_DEBUGFS
	bool "Export Bluetooth internals in debugfs"
	depends on BT && DEBUG_FS
	default y
	help
	  Provide extensive information about internal Bluetooth states
	  in debugfs.

source "drivers/bluetooth/Kconfig"
