Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

# Bluetooth configuration options

# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig BT
	bool "Bluetooth"
	# Some BT threads use co-op priorities to implement critical sections,
	# will need some refactoring to work on SMP systems.
	depends on !SMP
	select NET_BUF
	help
	  This option enables Bluetooth support.

if BT

module = BT
module-str = bt
source "subsys/logging/Kconfig.template.log_config"

choice
	prompt "Bluetooth Stack Selection"
	default BT_HCI
	help
	  Select the Bluetooth stack to compile.

config BT_HCI
	bool "HCI-based"
	help
	  HCI-based stack with optional host & controller parts and an
	  HCI driver in between.

config BT_CUSTOM
	bool "Custom"
	help
	  Select a custom, non-HCI based stack. If you're not sure what
	  this is, you probably want the HCI-based stack instead.

endchoice

# The Bluetooth subsystem requires the system workqueue to execute at
# a cooperative priority.
config SYSTEM_WORKQUEUE_PRIORITY
	range -256 -1

if BT_HCI

config BT_HCI_RAW
	bool "RAW HCI access"
	help
	  This option allows to access Bluetooth controller
	  from the application with the RAW HCI protocol.

config BT_HCI_RAW_H4
	bool "RAW HCI H:4 transport"
	help
	  This option enables HCI RAW access to work over an H:4
	  transport, note that it still need to be selected at runtime.

config BT_HCI_RAW_H4_ENABLE
	bool "RAW HCI H:4 transport enable"
	depends on BT_HCI_RAW_H4
	help
	  This option enables use of H:4 transport for HCI RAW access at
	  build time.

config BT_HCI_RAW_RESERVE
	int "Buffer headroom needed for HCI transport"
	depends on BT_HCI_RAW
	default 1 if BT_HCI_RAW_H4
	default 0
	help
	  This option is used by the HCI raw transport implementation to
	  declare how much headroom it needs for any HCI transport headers.

config BT_HCI_RAW_CMD_EXT
	bool "RAW HCI Command Extension"
	help
	  This option enables HCI RAW command extension so the driver can
	  register it own command table extension.

config BT_PERIPHERAL
	bool "Peripheral Role support"
	select BT_BROADCASTER
	select BT_CONN
	default y if BT_HCI_RAW
	help
	  Select this for LE Peripheral role support.

config BT_CENTRAL
	bool "Central Role support"
	select BT_OBSERVER
	select BT_CONN
	default y if BT_HCI_RAW
	help
	  Select this for LE Central role support.

menu "Broadcaster"
	visible if !BT_PERIPHERAL

config BT_BROADCASTER
	bool "Broadcaster Role support"
	default y if !BT_OBSERVER
	help
	  Select this for LE Broadcaster role support.

endmenu

config BT_EXT_ADV
	bool "Extended Advertising and Scanning support [EXPERIMENTAL]"
	help
	  Select this to enable Extended Advertising API support.
	  This enables support for advertising with multiple advertising sets,
	  extended advertising data, and advertising on LE Coded PHY.
	  It enables support for receiving extended advertising data as a
	  scanner, including support for advertising data over the LE coded PHY.
	  It enables establishing connections over LE Coded PHY.

if BT_EXT_ADV
config BT_EXT_ADV_LEGACY_SUPPORT
	bool "Support starting advertising through legacy commands"
	help
	  Select this to enable the use of the Legacy Advertising HCI commands.
	  This option should be used where the capabilities of the controller
	  is not known.
	  If this option is not enabled the controller must support the extended
	  advertising feature.

config BT_EXT_ADV_MAX_ADV_SET
	int "Maximum number of simultaneous advertising sets"
	range 1 64
	default 1
	help
	  Maximum number of simultaneous Bluetooth advertising sets
	  supported.

config BT_PER_ADV
	bool "Periodic Advertising and Scanning support [EXPERIMENTAL]"
	help
	  Select this to enable Periodic Advertising API support. This allows
	  the device to send advertising data periodically at deterministic
	  intervals. Scanners can synchronize to the periodic advertisements
	  to periodically get the data.

config BT_PER_ADV_SYNC
	bool "Periodic advertising sync support [EXPERIMENTAL]"
	depends on BT_OBSERVER
	help
	  Select this to enable Periodic Advertising Sync API support.
	  Syncing with a periodic advertiser allows the device to periodically
	  and deterministic receive data from that device in a connectionless
	  manner.

if BT_PER_ADV_SYNC
config BT_PER_ADV_SYNC_MAX
	int "Maximum number of simultaneous periodic advertising syncs"
	range 1 64
	default 1
	help
	  Maximum number of simultaneous periodic advertising syncs supported.
endif # BT_PER_ADV_SYNC

endif # BT_EXT_ADV

menu "Observer"
	visible if !BT_CENTRAL

config BT_OBSERVER
	bool "Observer Role support"
	help
	  Select this for LE Observer role support.

endmenu

source "subsys/bluetooth/services/Kconfig"

config BT_CONN
	bool

config BT_MAX_CONN
	int "Maximum number of simultaneous connections"
	depends on BT_CONN
	range 1 64
	default 1
	help
	  Maximum number of simultaneous Bluetooth connections
	  supported.

if BT_CONN
config BT_HCI_ACL_FLOW_CONTROL
	bool "Controller to Host ACL flow control support"
	# Enable if building a Host-only build
	default y if !BT_CTLR && !BT_STM32_IPM && !BT_ESP32
	# Enable if building a Controller-only build
	default y if BT_HCI_RAW
	select POLL
	help
	  Enable support for throttling ACL buffers from the controller
	  to the host. This is particularly useful when the host and
	  controller are on separate cores since it ensures that we do
	  not run out of incoming ACL buffers.

config BT_REMOTE_VERSION
	bool "Enable fetching of remote version"
	# Enable if building a Controller-only build
	default y if BT_HCI_RAW
	help
	  Enable this to get access to the remote version in the Controller and
	  in the Host through bt_conn_get_info(). The fields in question can
	  be then found in the bt_conn_info struct.

config BT_PHY_UPDATE
	bool "PHY Update"
	default y
	help
	  Enable support for Bluetooth 5.0 PHY Update Procedure.

config BT_DATA_LEN_UPDATE
	bool "Data Length Update"
	default y
	help
	  Enable support for Bluetooth v4.2 LE Data Length Update procedure.
endif # BT_CONN


config BT_ISO
	bool "Bluetooth Isochronous Channel Support [EXPERIMENTAL]"
	depends on BT_CONN
	help
	  Select this to enable Isochronous Channel support.

if BT_ISO

config BT_ISO_MAX_CHAN
	int "Maximum number of simultaneous ISO channels"
	depends on BT_ISO
	default BT_MAX_CONN
	range 1 64
	help
	  Maximum number of simultaneous Bluetooth isochronous channels
	  supported.

config BT_ISO_TX_BUF_COUNT
	int "Number of Isochronous TX buffers"
	default 1
	range 1 255
	help
	  Number of buffers available for outgoing Isochronous channel SDUs.

config BT_ISO_TX_FRAG_COUNT
	int "Number of ISO TX fragment buffers"
	default 2
	range 0 255
	help
	  Number of buffers available for fragments of TX buffers. Warning:
	  setting this to 0 means that the application must ensure that
	  queued TX buffers never need to be fragmented, i.e. that the
	  controller's buffer size is large enough. If this is not ensured,
	  and there are no dedicated fragment buffers, a deadlock may occur.
	  In most cases the default value of 2 is a safe bet.

config BT_ISO_TX_MTU
	int "Maximum supported MTU for Isochronous TX buffers"
	default 251
	range 23 4095
	help
	  Maximum MTU for Isochronous channels TX buffers.

config BT_ISO_RX_BUF_COUNT
	int "Number of Isochronous RX buffers"
	default 1
	range 1 255
	help
	  Number of buffers available for incoming Isochronous channel SDUs.

config BT_ISO_RX_MTU
	int "Maximum supported MTU for Isochronous RX buffers"
	default 251
	range 23 4095
	help
	  Maximum MTU for Isochronous channels RX buffers.

# TODO: Split between broadcaster and observer for optimization
config BT_ISO_BROADCAST
	bool "Bluetooth ISO Broadcast Channels supported"
	select BT_EXT_ADV
	select BT_PER_ADV
	select BT_PER_ADV_SYNC
	help
	  This option enables support for Bluetooth Broadcast
	  Isochronous channels.

if BT_ISO_BROADCAST

config BT_ISO_MAX_BIG
	int "Maximum number of Broadcast Isochronous Groups (BIGs) to support"
	default 1
	help
	  Maximmum number of BIGs that are supported by the host. A BIG can be
	  used for either transmitting or receiving, but not at the same time.

endif # BT_ISO_BROADCAST
endif # BT_ISO

source "subsys/bluetooth/common/Kconfig"
source "subsys/bluetooth/host/Kconfig"
source "subsys/bluetooth/controller/Kconfig"
source "subsys/bluetooth/shell/Kconfig"

endif # BT_HCI

config BT_COMPANY_ID
	hex "Company Id"
	default 0x05F1
	range 0x0000 0xFFFF
	help
	  Set the Bluetooth Company Identifier for this device. The Linux
	  Foundation's Company Identifier (0x05F1) is the default value for
	  this option although silicon vendors and hardware manufacturers
	  can set their own. Note that the controller's Company Identifier is
	  controlled by BT_CTLR_COMPANY_ID. The full list of Bluetooth
	  Company Identifiers can be found here:
	  https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers

source "subsys/bluetooth/mesh/Kconfig"
source "subsys/bluetooth/audio/Kconfig"

endif # BT