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

menuconfig BT
	tristate "Bluetooth subsystem support"
	depends on !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 <https://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
		ISO isochronous links
	     HCI Device drivers (Interface to the hardware)
	     RFCOMM Module (RFCOMM Protocol)  
	     BNEP Module (Bluetooth Network Encapsulation 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/hidp/Kconfig"

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_LE_L2CAP_ECRED
	bool "Bluetooth L2CAP Enhanced Credit Flow Control"
	depends on BT_LE
	default y
	help
	  Bluetooth Low Energy L2CAP Enhanced Credit Flow Control available with
	  Bluetooth version 5.2 or later.

	  This can be overridden by passing bluetooth.enable_ecred=[1|0]
	  on the kernel commandline.

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_MSFTEXT
	bool "Enable Microsoft extensions"
	depends on BT
	help
	  This options enables support for the Microsoft defined HCI
	  vendor extensions.

config BT_AOSPEXT
	bool "Enable Android Open Source Project extensions"
	depends on BT
	help
	  This options enables support for the Android Open Source
	  Project defined HCI vendor extensions.

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.

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_FEATURE_DEBUG
	bool "Enable runtime option for debugging statements"
	depends on BT && !DYNAMIC_DEBUG
	help
	  This provides an option to enable/disable debugging statements
	  at runtime via the experimental features interface.

source "drivers/bluetooth/Kconfig"
