# Bluetooth Controller configuration options

# Copyright (c) 2016-2017 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

# The following symbols are enabled depending if the controller actually
# supports the respective features.

config BT_CTLR_LE_ENC_SUPPORT
	bool

config BT_CTLR_CONN_PARAM_REQ_SUPPORT
	bool

config BT_CTLR_EXT_REJ_IND_SUPPORT
	bool

config BT_CTLR_PER_INIT_FEAT_XCHG_SUPPORT
	bool

config BT_CTLR_DATA_LEN_UPDATE_SUPPORT
	bool

config BT_CTLR_PRIVACY_SUPPORT
	bool

config BT_CTLR_EXT_SCAN_FP_SUPPORT
	bool

config BT_CTLR_PHY_UPDATE_SUPPORT
	bool

config BT_CTLR_PHY_2M_SUPPORT
	bool

config BT_CTLR_PHY_CODED_SUPPORT
	bool

config BT_CTLR_ADV_EXT_SUPPORT
	bool

config BT_CTLR_ADV_PERIODIC_SUPPORT
	depends on BT_CTLR_ADV_EXT_SUPPORT
	bool

config BT_CTLR_SYNC_PERIODIC_SUPPORT
	depends on BT_CTLR_ADV_EXT_SUPPORT
	bool

config BT_CTLR_SYNC_TRANSFER_SENDER_SUPPORT
	depends on BT_CTLR_SYNC_PERIODIC_SUPPORT
	bool

config BT_CTLR_SYNC_TRANSFER_RECEIVER_SUPPORT
	depends on BT_CTLR_SYNC_PERIODIC_SUPPORT
	bool

config BT_CTLR_ADV_ISO_SUPPORT
	depends on BT_CTLR_ADV_PERIODIC_SUPPORT
	bool

config BT_CTLR_SYNC_ISO_SUPPORT
	depends on BT_CTLR_SYNC_PERIODIC_SUPPORT
	bool

config BT_CTLR_CENTRAL_ISO_SUPPORT
	bool

config BT_CTLR_PERIPHERAL_ISO_SUPPORT
	bool

config BT_CTLR_CHAN_SEL_2_SUPPORT
	bool

config BT_CTLR_MIN_USED_CHAN_SUPPORT
	bool

config BT_CTLR_SMI_SUPPORT
	bool

config BT_CTLR_SCA_UPDATE_SUPPORT
	bool

config BT_CTLR_CONN_RSSI_SUPPORT
	bool

config BT_CTLR_ECDH_SUPPORT
	bool

config BT_CTLR_READ_ISO_LINK_QUALITY_SUPPORT
	depends on BT_CTLR_SYNC_ISO_SUPPORT || \
		   BT_CTLR_CENTRAL_ISO_SUPPORT || \
		   BT_CTLR_PERIPHERAL_ISO_SUPPORT
	bool

config BT_CTLR
	bool "Bluetooth Controller"
	help
	  Enables support for SoC native controller implementations.

if BT_CTLR

choice BT_LL_CHOICE
	prompt "Bluetooth Link Layer Selection"
	help
	  Select the Bluetooth Link Layer to compile.

config BT_LL_SW_SPLIT
	bool "Software-based BLE Link Layer"
	select ENTROPY_GENERATOR
	select NRF_HW_TIMER0_RESERVED
	select NRF_HW_RTC0_RESERVED
	help
	  Use Zephyr software BLE Link Layer ULL LLL split implementation.

endchoice

comment "BLE Controller configuration"

config BT_CTLR_CRYPTO
	bool "Crypto functions in Controller"
	default y
	select ENTROPY_GENERATOR
	help
	  Use random number generation and AES encryption support functions
	  provided by the controller.

config BT_CTLR_HCI_VS_BUILD_INFO
	string "Zephyr HCI VS Build Info string"
	default ""
	depends on BT_HCI_VS_EXT
	help
	  User-defined string that will be returned by the Zephyr VS Read Build
	  Information command after the Zephyr version and build time. When
	  setting this to a value different from an empty string, a space
	  character is required at the beginning to separate it from the
	  already included information.

config BT_CTLR_AD_DATA_BACKUP
	bool "Legacy AD Data backup"
	depends on BT_PERIPHERAL || BT_CTLR_ADV_EXT
	default y
	help
	  Backup Legacy Advertising Data when switching to Legacy Directed or
	  to Extended Advertising mode, and restore it when switching back to
	  Legacy Non-Directed Advertising mode.
	  Application can disable this feature if not using Directed
	  Advertising or switch between Legacy and Extended Advertising.

config BT_CTLR_HCI_ADV_HANDLE_MAPPING
	bool "Advertising set handle mapping between HCI and LL"
	depends on BT_CTLR_ADV_EXT
	default y if BT_HCI_RAW
	help
	  Enable mapping of advertising set handles between HCI and LL when
	  using external host since it can use arbitrary numbers as set handles
	  (as defined by Core specification) as opposed to LL which always uses
	  zero-based numbering. When using with Zephyr host this option can be
	  disabled to remove extra mapping logic.

config BT_CTLR_DUP_FILTER_LEN
	int "Number of addresses in the scan duplicate filter"
	depends on BT_OBSERVER
	default 16
	help
	  Set the number of unique BLE addresses that can be filtered as
	  duplicates while scanning.

config BT_CTLR_DUP_FILTER_ADV_SET_MAX
	int "Number of Extended Advertising Sets in the scan duplicate filter"
	depends on BT_OBSERVER && BT_CTLR_ADV_EXT && (BT_CTLR_DUP_FILTER_LEN > 0)
	range 1 16
	default 1
	help
	  Set the number of unique Advertising Set ID per Bluetooth Low Energy
	  addresses that can be filtered as duplicates while Extended Scanning.

config BT_CTLR_MESH_SCAN_FILTERS
	int "Number of Mesh scan filters"
	depends on BT_HCI_MESH_EXT
	default 1
	range 1 15
	help
	  Set the number of unique Mesh Scan Filters available as part of
	  the Intel Mesh Vendor Specific Extensions.

config BT_CTLR_MESH_SF_PATTERNS
	int "Number of Mesh scan filter patterns"
	depends on BT_HCI_MESH_EXT
	default 15
	range 1 15
	help
	  Set the number of unique Mesh Scan Filter patterns available per
	  Scan Filter as part of the Intel Mesh Vendor Specific Extensions.

config BT_CTLR_RX_BUFFERS
	int "Number of Rx buffers"
	default 6 if BT_HCI_RAW
	default 1
	range 1 18
	help
	  Set the number of Rx PDUs to be buffered in the controller. In a 7.5ms
	  connection interval and 2M PHY, maximum 18 packets with L2CAP payload
	  size of 1 byte can be received.

config BT_CTLR_ISO_RX_BUFFERS
	int "Number of Isochronous Rx buffers"
	depends on BT_CTLR_SYNC_ISO || BT_CTLR_CONN_ISO
	default 8
	range 1 30
	help
	  Set the number of Isochronous Rx PDUs to be buffered in the
	  controller. Number of required RX buffers would worst-case be
	  the number of RX nodes prepared in one ISO event for each
	  active ISO group. This depends on the number of bursts in an
	  ISO group and number of groups, and may need to be set lower
	  that the theoretical maximum. Default of 8 is for supporting
	  two groups of 4 payloads, e.g. 2 CIGs with 2 CISes of BN=2.

config BT_CTLR_ISO_TX_BUFFERS
	int "Number of Isochronous Tx buffers"
	depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
	range 1 19
	default 3
	help
	  Set the number of Isochronous Tx PDUs to be queued for transmission
	  in the controller.

config BT_CTLR_ISO_TX_BUFFER_SIZE
	int "Isochronous Tx buffer size"
	depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
	range 1 4095
	default 27
	help
	  Size of the Isochronous Tx buffers and the value returned in HCI LE
	  Read Buffer Size V2 command response.

config BT_CTLR_ISOAL_SOURCES
	int "Number of Isochronous Adaptation Layer sources"
	depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
	range 1 64
	default 1
	help
	  Set the number of concurrently active sources supported by the
	  ISO AL.

config BT_CTLR_ISOAL_SINKS
	int "Number of Isochronous Adaptation Layer sinks"
	depends on BT_CTLR_SYNC_ISO || BT_CTLR_CONN_ISO
	range 1 64
	default 1
	help
	  Set the number of concurrently active sinks supported by the
	  ISO AL.

config BT_CTLR_ISO_RX_SDU_BUFFERS
	int "Number of SDU fragments that the ISO-AL can buffer"
	depends on BT_CTLR_SYNC_ISO || BT_CTLR_CONN_ISO
	default 0
	range 0 64
	help
	  Set the number of Isochronous Rx SDU fragments to be buffered in the
	  ISO-AL per sink. Buffering is required to compute the size and status
	  of the received SDU across all the fragments before each is released.
	  The number of buffers and maximum SDU fragment size will limit the
	  maximum size of an SDU that can be accurately declared in the HCI ISO
	  Data header.

config BT_CTLR_ISO_TX_SEG_PLAYLOAD_MIN
	int "Minimum number of playload data bytes in a new segment"
	depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
	default 1
	range 1 64
	help
	  Minimum number of payload bytes that would make inserting a new
	  segment into a PDU worthwhile.

config BT_CTLR_ISO_VENDOR_DATA_PATH
	bool "Vendor-specific ISO data path"
	depends on BT_CTLR_SYNC_ISO || BT_CTLR_CONN_ISO
	select BT_CTLR_HCI_CODEC_AND_DELAY_INFO

choice BT_CTLR_TX_PWR
	prompt "Tx Power"
	default BT_CTLR_TX_PWR_0
	depends on BT_CTLR_TX_PWR_ANTENNA = 0 || BT_LL_SW_SPLIT
	help
	  Select a supported BLE Radio transmit power level in dBm.
	  Only values supported natively by the SoC are available.
	  The value set here represents the actual default power level fed
	  to the antenna.

config BT_CTLR_TX_PWR_PLUS_8
	bool "+8 dBm"
	depends on HAS_HW_NRF_RADIO_TX_PWR_HIGH

config BT_CTLR_TX_PWR_PLUS_7
	bool "+7 dBm"
	depends on HAS_HW_NRF_RADIO_TX_PWR_HIGH

config BT_CTLR_TX_PWR_PLUS_6
	bool "+6 dBm"
	depends on HAS_HW_NRF_RADIO_TX_PWR_HIGH

config BT_CTLR_TX_PWR_PLUS_5
	bool "+5 dBm"
	depends on HAS_HW_NRF_RADIO_TX_PWR_HIGH

config BT_CTLR_TX_PWR_PLUS_4
	bool "+4 dBm"
	depends on SOC_SERIES_NRF51X || SOC_COMPATIBLE_NRF52X

config BT_CTLR_TX_PWR_PLUS_3
	bool "+3 dBm"
	depends on SOC_COMPATIBLE_NRF52X || SOC_SERIES_NRF53X

config BT_CTLR_TX_PWR_PLUS_2
	bool "+2 dBm"
	depends on HAS_HW_NRF_RADIO_TX_PWR_HIGH

config BT_CTLR_TX_PWR_0
	bool "0 dBm"

config BT_CTLR_TX_PWR_MINUS_4
	bool "-4 dBm"

config BT_CTLR_TX_PWR_MINUS_8
	bool "-8 dBm"

config BT_CTLR_TX_PWR_MINUS_12
	bool "-12 dBm"

config BT_CTLR_TX_PWR_MINUS_16
	bool "-16 dBm"

config BT_CTLR_TX_PWR_MINUS_20
	bool "-20 dBm"

config BT_CTLR_TX_PWR_MINUS_30
	bool "-30 dBm"
	depends on SOC_SERIES_NRF51X

config BT_CTLR_TX_PWR_MINUS_40
	bool "-40 dBm"
	depends on SOC_COMPATIBLE_NRF52X || SOC_SERIES_NRF53X

endchoice

config BT_CTLR_TX_PWR_ANTENNA
	int "Set TX power (dBm)"
	range -127 127
	default 0
	depends on !BT_LL_SW_SPLIT
	help
	  Request a TX power in dBm. The power level set will be equal to or
	  less than the one requested, based on the values supported by the
	  hardware used. Values outside the supported range will be set to the
	  nearest supported value.
	  The value set here represents the actual power level fed to the
	  antenna. When a Front-End Module is used, gain values for the SoC and
	  FEM are calculated automatically to guarantee the closest possible
	  match to the value requested by the user at the RF output.

config BT_CTLR_TX_PWR_DYNAMIC_CONTROL
	bool "Tx Power Dynamic Control"
	depends on BT_HCI_VS_EXT
	help
	  Enable dynamic control of Tx power per role/connection.
	  Provides HCI VS commands to set and get the current Tx
	  power on an individual role/connection basis.

comment "BLE Controller features"

if BT_CONN

config BT_CTLR_LE_ENC
	bool "LE Encryption"
	depends on BT_CTLR_LE_ENC_SUPPORT
	default y
	help
	  Enable support for Bluetooth v4.0 LE Encryption feature in the
	  Controller.

config BT_CTLR_ECDH
	bool "Elliptic Curve Diffie-Hellman (ECDH)"
	depends on BT_CTLR_ECDH_SUPPORT
	default y
	help
	  Enable support for Bluetooth v4.2 Elliptic Curve Diffie-Hellman
	  feature in the controller.

config BT_CTLR_CONN_PARAM_REQ
	bool "Connection Parameter Request"
	depends on BT_CTLR_CONN_PARAM_REQ_SUPPORT
	select BT_CTLR_EXT_REJ_IND
	default y
	help
	  Enable support for Bluetooth v4.1 Connection Parameter Request feature
	  in the Controller.

config BT_CTLR_EXT_REJ_IND
	bool "Extended Reject Indication"
	depends on BT_CTLR_EXT_REJ_IND_SUPPORT
	default y
	help
	  Enable support for Bluetooth v4.1 Extended Reject Indication feature
	  in the Controller.

config BT_CTLR_PER_INIT_FEAT_XCHG
	bool "Peripheral-initiated Features Exchange"
	depends on BT_CTLR_PER_INIT_FEAT_XCHG_SUPPORT
	default y
	help
	  Enable support for Bluetooth v4.1 Peripheral-initiated Features Exchange
	  feature in the Controller.

config BT_CTLR_LE_PING
	bool "LE Ping"
	depends on BT_CTLR_LE_ENC
	default y
	help
	  Enable support for Bluetooth v4.1 LE Ping feature in the Controller.

config BT_CTLR_DATA_LENGTH
	# Hidden option to enable support for Bluetooth v4.2 LE Data Length
	# Update procedure in the Controller.
	bool
	depends on BT_DATA_LEN_UPDATE && BT_CTLR_DATA_LEN_UPDATE_SUPPORT
	default y

config BT_CTLR_DATA_LENGTH_MAX
	int "Maximum data length supported"
	depends on BT_CTLR_DATA_LENGTH
	default 27
	range 27 BT_BUF_ACL_RX_SIZE if BT_BUF_ACL_RX_SIZE < 251
	range 27 251
	help
	  Set the maximum data length of PDU supported in the Controller.

config BT_CTLR_PHY
	# Hidden option to enable support for Bluetooth 5.0 PHY Update
	# Procedure in the Controller.
	bool
	depends on BT_PHY_UPDATE && BT_CTLR_PHY_UPDATE_SUPPORT
	select BT_CTLR_EXT_REJ_IND
	default y

config BT_CTLR_MIN_USED_CHAN
	bool "Minimum Number of Used Channels"
	depends on BT_CTLR_MIN_USED_CHAN_SUPPORT
	default y
	help
	  Enable support for Bluetooth 5.0 Minimum Number of Used Channels
	  Procedure in the Controller.

config BT_CTLR_SCA_UPDATE
	bool "Sleep Clock Accuracy Update procedure"
	depends on BT_SCA_UPDATE && BT_CTLR_SCA_UPDATE_SUPPORT
	default y if BT_CTLR_CONN_ISO
	help
	  Enable support for Bluetooth 5.1 Sleep Clock Accuracy
	  Update procedure in the Controller.

config BT_CTLR_CONN_RSSI
	bool "Connection RSSI"
	depends on BT_CTLR_CONN_RSSI_SUPPORT
	default y if BT_HCI_RAW
	help
	  Enable connection RSSI measurement.

config BT_CTLR_CHECK_SAME_PEER_CONN
	bool
	default BT_MAX_CONN > 1 && !BT_CTLR_ALLOW_SAME_PEER_CONN

endif # BT_CONN

config BT_CTLR_FILTER_ACCEPT_LIST
	bool "Filter Accept List Support"
	default y if BT_HCI_RAW || BT_FILTER_ACCEPT_LIST
	help
	  Enable support for controller Filter Accept List feature

config BT_CTLR_PRIVACY
	bool "LE Controller-based Privacy"
	depends on BT_CTLR_PRIVACY_SUPPORT
	select BT_CTLR_FILTER_ACCEPT_LIST if BT_LL_SW_SPLIT
	select BT_RPA
	default y if BT_HCI_RAW || BT_SMP
	help
	  Enable support for Bluetooth v4.2 LE Controller-based Privacy feature
	  in the Controller.

config BT_CTLR_FAL_SIZE
	int "LE Controller-based Privacy White List size"
	depends on BT_CTLR_FILTER_ACCEPT_LIST
	default 8
	range 1 8  if  (SOC_COMPATIBLE_NRF || SOC_OPENISA_RV32M1_RISCV32)
	range 1 16 if !(SOC_COMPATIBLE_NRF || SOC_OPENISA_RV32M1_RISCV32)
	help
	  Set the size of the Filter Accept List for LE Controller-based Privacy.
	  On nRF5x-based controllers, the hardware imposes a limit of 8 devices.
	  On OpenISA-based controllers, the hardware imposes a limit of 8 devices.

config BT_CTLR_RL_SIZE
	int "LE Controller-based Privacy Resolving List size"
	depends on BT_CTLR_PRIVACY
	default 8
	range 1 8 if SOC_COMPATIBLE_NRF
	range 1 8 if SOC_OPENISA_RV32M1_RISCV32
	help
	  Set the size of the Resolving List for LE Controller-based Privacy.
	  On nRF5x-based controllers, the hardware imposes a limit of 8 devices.
	  On OpenISA-based controllers, the hardware imposes a limit of 8 devices.

config BT_CTLR_EXT_SCAN_FP
	bool "LE Extended Scanner Filter Policies"
	depends on BT_OBSERVER && BT_CTLR_EXT_SCAN_FP_SUPPORT
	default y
	help
	  Enable support for Bluetooth v4.2 LE Extended Scanner Filter Policies
	  in the Controller.

config BT_CTLR_PHY_2M
	bool "2Mbps PHY Support"
	depends on (BT_CTLR_PHY || BT_CTLR_ADV_EXT) && BT_CTLR_PHY_2M_SUPPORT
	default y
	help
	  Enable support for Bluetooth 5.0 2Mbps PHY in the Controller.

config BT_CTLR_PHY_CODED
	bool "Coded PHY Support"
	depends on (BT_CTLR_PHY || BT_CTLR_ADV_EXT) && BT_CTLR_PHY_CODED_SUPPORT
	default y if BT_HCI_RAW
	help
	  Enable support for Bluetooth 5.0 Coded PHY in the Controller.

config BT_CTLR_CHAN_SEL_2
	bool "Channel Selection Algorithm #2"
	depends on (BT_CONN || (BT_BROADCASTER && BT_CTLR_ADV_EXT) || BT_CTLR_ADV_PERIODIC || BT_CTLR_SYNC_PERIODIC) && BT_CTLR_CHAN_SEL_2_SUPPORT
	default y
	help
	  Enable support for Bluetooth 5.0 LE Channel Selection Algorithm #2 in
	  the Controller.

config BT_CTLR_ADV_EXT
	bool "LE Advertising Extensions"
	depends on BT_CTLR_ADV_EXT_SUPPORT
	select BT_CTLR_CHAN_SEL_2 if BT_LL_SW_SPLIT && BT_BROADCASTER
	select BT_CTLR_SCAN_REQ_NOTIFY if BT_LL_SW_SPLIT && BT_BROADCASTER
	default y if BT_EXT_ADV
	help
	  Enable support for Bluetooth 5.0 LE Advertising Extensions in the
	  Controller.

if BT_CTLR_ADV_EXT

config BT_CTLR_ADV_SET
	int "LE Advertising Extensions Sets"
	depends on BT_BROADCASTER
	range 1 64
	default BT_EXT_ADV_MAX_ADV_SET if BT_EXT_ADV
	help
	  Maximum supported advertising sets.

config BT_CTLR_ADV_INTERVAL_MAX
	hex "Primary Advertising Interval Maximum"
	depends on BT_BROADCASTER
	range 0x000020 0x004000 if BT_LL_SW_SPLIT
	range 0x000020 0xFFFFFF
	default 0x004000 if BT_LL_SW_SPLIT
	default 0xFFFFFF
	help
	  Supported Primary Advertising Interval Maximum value.
	  Bluetooth Core Specification v5.3 permitted range is 0x000020 to
	  0xFFFFFF in 0.625 ms units.

config BT_CTLR_ADV_DATA_LEN_MAX
	int "Maximum Advertising Data Length"
	depends on BT_BROADCASTER
	range 31 191 if BT_LL_SW_SPLIT && !BT_CTLR_ADV_DATA_CHAIN
	range 31 1650
	help
	  Maximum Extended Advertising Data Length.

config BT_CTLR_ADV_EXT_RX_PDU_LEN_MAX
	int "Maximum Advertising Extensions Receive PDU Length"
	depends on BT_OBSERVER
	range 255 255 if BT_HCI_RAW
	range 31 255
	default 255
	help
	  Maximum Advertising Extensions Receive PDU Length.

config BT_CTLR_SCAN_DATA_LEN_MAX
	int "Maximum Extended Scanning Data Length"
	depends on BT_OBSERVER
	range 31 1650
	help
	  Maximum Extended Scanning Data Length.

config BT_CTLR_ADV_PERIODIC
	bool "LE Periodic Advertising in Advertising State"
	depends on BT_BROADCASTER && BT_CTLR_ADV_PERIODIC_SUPPORT
	select BT_CTLR_CHAN_SEL_2
	default y if BT_PER_ADV
	help
	  Enable support for Bluetooth 5.0 LE Periodic Advertising in the
	  Controller.

if BT_CTLR_ADV_PERIODIC

config BT_CTLR_ADV_PERIODIC_ADI_SUPPORT
	bool "Periodic Advertising ADI support"
	default y
	help
	  Enable support for adding AdvDataInfo in Periodic Advertising PDUs.

config BT_CTLR_ADV_PERIODIC_INTERVAL_MAX
	hex "Periodic Advertising Interval Maximum"
	range 0x0006 0x2000 if BT_LL_SW_SPLIT
	range 0x0006 0xFFFF
	default 0x2000 if BT_LL_SW_SPLIT
	default 0xFFFF
	help
	  Supported Periodic Advertising Interval Maximum value.
	  Bluetooth Core Specification v5.3 permitted range is 0x0006 to
	  0xFFFF in 1.25 ms units.

endif # BT_CTLR_ADV_PERIODIC

config BT_CTLR_SYNC_PERIODIC
	bool "LE Periodic Advertising in Synchronization State"
	depends on BT_OBSERVER && BT_CTLR_SYNC_PERIODIC_SUPPORT
	select BT_CTLR_CHAN_SEL_2
	default y if BT_PER_ADV_SYNC
	help
	  Enable support for Bluetooth 5.0 LE Periodic Advertising in
	  Synchronization state in the Controller.

if BT_CTLR_SYNC_PERIODIC

config BT_CTLR_SYNC_PERIODIC_ADV_LIST
	bool "LE Periodic Advertiser List support"
	default y
	help
	  Enable support for LE Periodic Advertiser List support.

config BT_CTLR_SYNC_PERIODIC_ADV_LIST_SIZE
	int "LE Periodic Advertiser List size"
	depends on BT_CTLR_SYNC_PERIODIC_ADV_LIST
	range 1 255
	default 8
	help
	  Set Periodic Advertiser List size, this will be return in the HCI LE
	  Read Periodic Advertiser List Command.

config BT_CTLR_SYNC_PERIODIC_ADI_SUPPORT
	bool "Periodic Advertising Sync with ADI support (duplicate filtering)"
	default y
	help
	  Enable support for duplicate filtering using AdvDataInfo present in
	  Periodic Advertising PDUs.

config BT_CTLR_SYNC_PERIODIC_CTE_TYPE_FILTERING
	bool "LE Periodic Advertiser filtering by CTE type"
	default y
	help
	  Enable filtering of periodic advertisements depending on type of
	  Constant Tone Extension.

config BT_CTLR_CHECK_SAME_PEER_SYNC
	# Hidden Kconfig to add same peer synchronization check
	bool
	default BT_PER_ADV_SYNC_MAX > 1

config BT_CTLR_SYNC_TRANSFER_SENDER
	bool "Periodic Advertising Sync Transfer sender"
	depends on BT_CTLR_SYNC_TRANSFER_SENDER_SUPPORT
	default BT_PER_ADV_SYNC_TRANSFER_SENDER
	help
	  Enable support for the Periodic Advertising Sync Transfer control procedure
	  as a transmitter of the LL_PERIODIC_SYNC_IND. See Core_v5.3, Vol 6, Part B,
	  Section 5.1.13

config BT_CTLR_SYNC_TRANSFER_RECEIVER
	bool "Periodic Advertising Sync Transfer receiver"
	depends on BT_CTLR_SYNC_TRANSFER_RECEIVER_SUPPORT
	default BT_PER_ADV_SYNC_TRANSFER_RECEIVER
	help
	  Enable support for the Periodic Advertising Sync Transfer control procedure
	  as a receiver of the LL_PERIODIC_SYNC_IND. See Core_v5.3, Vol 6, Part B,
	  Section 5.1.13

endif # BT_CTLR_SYNC_PERIODIC

config BT_CTLR_ADV_ISO
	bool "LE Broadcast Isochronous Channel advertising" if !BT_LL_SW_SPLIT
	depends on BT_BROADCASTER && BT_CTLR_ADV_ISO_SUPPORT
	select BT_CTLR_ADV_PERIODIC
	select BT_CTLR_SET_HOST_FEATURE
	help
	  Enable support for Bluetooth 5.2 LE Isochronous Advertising in the
	  Controller.

config BT_CTLR_ADV_ISO
	bool "LE Broadcast Isochronous Channel advertising (Split Link Layer) [EXPERIMENTAL]" if BT_LL_SW_SPLIT
	select EXPERIMENTAL if BT_LL_SW_SPLIT

config BT_CTLR_SYNC_ISO
	bool "LE Broadcast Isochronous Channel advertising sync" if !BT_LL_SW_SPLIT
	depends on BT_OBSERVER && BT_CTLR_SYNC_ISO_SUPPORT
	select BT_CTLR_SYNC_PERIODIC
	select BT_CTLR_SET_HOST_FEATURE
	help
	  Enable support for Bluetooth 5.2 LE Isochronous Advertising sync in
	  the Controller.

config BT_CTLR_SYNC_ISO
	bool "LE Broadcast Isochronous Channel advertising sync (Split Link Layer) [EXPERIMENTAL]" if BT_LL_SW_SPLIT
	select EXPERIMENTAL if BT_LL_SW_SPLIT

config BT_CTLR_BROADCAST_ISO
	bool
	default BT_CTLR_ADV_ISO || BT_CTLR_SYNC_ISO

config BT_CTLR_ADV_ISO_SET
	int "LE Isochronous Channel advertising sets"
	depends on BT_CTLR_ADV_ISO
	range 1 32
	help
	  Maximum supported advertising sets.

config BT_CTLR_ADV_ISO_STREAM_MAX
	int "Maximum supported Broadcast ISO Streams per Broadcast ISO group"
	depends on BT_CTLR_ADV_ISO
	range 1 31
	help
	  Maximum supported Broadcast ISO Streams per Broadcast ISO group.

config BT_CTLR_ADV_ISO_STREAM_COUNT
	int "Maximum Broadcast ISO Streams"
	depends on BT_CTLR_ADV_ISO
	range BT_CTLR_ADV_ISO_STREAM_MAX 64
	help
	  Maximum Broadcast ISO Streams supported in the the Controller across
	  all Broadcast ISO groups.

config BT_CTLR_ADV_ISO_PDU_LEN_MAX
	int "Maximum Broadcast Isochronous Channel PDU Length"
	depends on BT_CTLR_ADV_ISO
	range 27 251
	default 251
	help
	  Maximum Broadcast Isochronous Channel PDU Length.

config BT_CTLR_SYNC_ISO_STREAM_MAX
	int "Maximum supported ISO Synchronized Receiver Streams per Broadcast ISO group"
	depends on BT_CTLR_SYNC_ISO
	range 1 31
	help
	  Maximum supported ISO Synchronized Receiver Streams per Broadcast ISO
	  group.

config BT_CTLR_SYNC_ISO_STREAM_COUNT
	int "Maximum ISO Synchronized Receiver Streams"
	depends on BT_CTLR_SYNC_ISO
	range BT_CTLR_SYNC_ISO_STREAM_MAX 64
	help
	  Maximum ISO Synchronized Receiver Streams supported in the the
	  Controller across all Broadcast ISO groups.

config BT_CTLR_SYNC_ISO_PDU_LEN_MAX
	int "Maximum Synchronized Isochronous Channel PDU Length"
	depends on BT_CTLR_SYNC_ISO
	range 251 251 if BT_HCI_RAW
	range 27 251
	default 251
	help
	  Maximum Synchronized Receiver Isochronous Channel PDU Length.

endif # BT_CTLR_ADV_EXT

config BT_CTLR_SET_HOST_FEATURE
	bool "LE Set Host Feature Command [EXPERIMENTAL]"
	select EXPERIMENTAL
	help
	  Enables optional LE Set Host Feature Command

config BT_CTLR_CENTRAL_ISO
	bool "LE Connected Isochronous Stream Central" if !BT_LL_SW_SPLIT
	depends on BT_CTLR_CENTRAL_ISO_SUPPORT && BT_CENTRAL
	help
	  Enable support for Bluetooth 5.2 LE Connected Isochronous Stream
	  Central role in the Controller.

config BT_CTLR_CENTRAL_ISO
	bool "LE Connected Isochronous Stream Central (Split Link Layer) [EXPERIMENTAL]" if BT_LL_SW_SPLIT
	select BT_CTLR_SET_HOST_FEATURE
	select EXPERIMENTAL if BT_LL_SW_SPLIT

config BT_CTLR_PERIPHERAL_ISO
	bool "LE Connected Isochronous Stream Peripheral" if !BT_LL_SW_SPLIT
	depends on BT_CTLR_PERIPHERAL_ISO_SUPPORT && BT_PERIPHERAL
	help
	  Enable support for Bluetooth 5.2 LE Connected Isochronous Stream
	  Peripheral role in the Controller.

config BT_CTLR_PERIPHERAL_ISO
	bool "LE Connected Isochronous Stream Peripheral (Split Link Layer) [EXPERIMENTAL]" if BT_LL_SW_SPLIT
	select BT_CTLR_SET_HOST_FEATURE
	select EXPERIMENTAL if BT_LL_SW_SPLIT

config BT_CTLR_CONN_ISO
	bool
	default BT_CTLR_CENTRAL_ISO || BT_CTLR_PERIPHERAL_ISO

config BT_CTLR_CONN_ISO_STREAMS
	int "LE Connected Isochronous Streams"
	depends on BT_CTLR_CONN_ISO
	range 1 64
	default 2
	help
	  Maximum supported total number of CISes.

config BT_CTLR_CONN_ISO_GROUPS
	int "LE Connected Isochronous Groups"
	depends on BT_CTLR_CONN_ISO
	range 1 240
	default 1
	help
	  Maximum supported CIGs.

config BT_CTLR_CONN_ISO_STREAMS_PER_GROUP
	int "LE Connected Isochronous Streams per Group"
	depends on BT_CTLR_CONN_ISO
	range 1 31
	default 2
	help
	  Maximum supported CISes per CIG.

config BT_CTLR_CONN_ISO_HCI_DATAPATH_SKIP_INVALID_DATA
	bool "Do not pass invalid SDUs on HCI datapath"
	depends on BT_CTLR_CONN_ISO
	help
	  This allows for applications to decide whether to
	  forward invalid SDUs through HCI upwards.

config BT_CTLR_CONN_ISO_STREAMS_MAX_NSE
	int "LE Connected Isochronous Streams max number of subevents"
	depends on BT_CTLR_CONN_ISO
	range 1 31
	default 31
	help
	  Maximum number of CIS subevents.

choice
	prompt "CIS Creation Policy Selection"
	default BT_CTLR_CONN_ISO_RELIABILITY_POLICY

config BT_CTLR_CONN_ISO_RELIABILITY_POLICY
	bool "CIS creation policy for reliability"
	depends on BT_CTLR_CENTRAL_ISO
	help
	  Select this option to use reliability policy for CIS creation. This
	  favors a CIS layout/configuration which utilizes the full range of the
	  Max_Transmission_Latency for maximum retransmission and payload
	  recovery.

config BT_CTLR_CONN_ISO_LOW_LATENCY_POLICY
	bool "CIS creation policy for low latency"
	depends on BT_CTLR_CENTRAL_ISO
	help
	  Select this option to use low latency policy for CIS creation. This
	  favors a CIS layout/configuration which compacts payload transmission
	  for lowest possible latency.
endchoice

config BT_CTLR_ISO
	bool
	default BT_CTLR_BROADCAST_ISO || BT_CTLR_CONN_ISO

config BT_CTLR_READ_ISO_LINK_QUALITY
	bool "LE Read ISO Link Quality"
	depends on BT_CTLR_READ_ISO_LINK_QUALITY_SUPPORT
	depends on BT_CTLR_SYNC_ISO || BT_CTLR_CONN_ISO
	help
	  Enable support for LE Read ISO Link Quality command.

config BT_CTLR_SMI_RX
	bool "Stable modulation index - Receiver"
	depends on BT_CTLR_SMI_SUPPORT
	help
	  Enable support for Bluetooth 5.0 SMI RX in the Controller.

config BT_CTLR_SMI_TX
	bool "Stable modulation index - Transmitter"
	depends on BT_CTLR_SMI_SUPPORT
	help
	  Enable support for Bluetooth 5.0 SMI TX in the Controller.

config BT_CTLR_SMI_TX_SETTING
	bool "Stable modulation index - Transmitter as setting"
	depends on BT_CTLR_SMI_TX && BT_CTLR_SETTINGS
	help
	  Enable support for Bluetooth 5.0 SMI TX through a system setting.

config BT_CTLR_HCI_CODEC_AND_DELAY_INFO
	bool "Codecs and controller delay information commands"
	help
	  Enable HCI commands to read information about supported
	  codecs, codec capabilities, and controller delay.

rsource "Kconfig.df"
rsource "Kconfig.ll_sw_split"
rsource "Kconfig.dtm"

config BT_CTLR_ASSERT_HANDLER
	bool "Application Defined Assertion Handler"
	help
	  This option enables an application-defined sink for the
	  controller assertion mechanism. This must be defined in
	  application code as void \"bt_ctlr_assert_handle(char \*, int)\"
	  and will be invoked whenever the controller code encounters
	  an unrecoverable error.

config BT_CTLR_TEST
	bool "Run in-system unit tests"
	help
	  Run in-system unit tests

endif # BT_CTLR

config BT_CTLR_DEBUG_PINS_CPUAPP
	bool "Bluetooth Controller Debug Pins"
	depends on BOARD_NRF5340DK_NRF5340_CPUAPP
	help
	  Route debug GPIO toggling for the BLE Controller. Enable this when
	  using Bluetooth Controller Debug Pins in co-processor and the main
	  processor needs to setup and/or route the signals.
