# Zephyr Bluetooth Controller configuration options

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

if BT_LL_SW_SPLIT

config BT_LLL_VENDOR_NORDIC
	bool "Use Nordic LLL"
	depends on SOC_COMPATIBLE_NRF
	select BT_HAS_HCI_VS
	select ENTROPY_NRF5_RNG
	select ENTROPY_NRF5_BIAS_CORRECTION
	select BT_CTLR_LE_ENC_SUPPORT if !BT_CTLR_DATA_LENGTH_CLEAR && \
					 !BT_CTLR_PHY_2M_NRF
	select BT_CTLR_CONN_PARAM_REQ_SUPPORT
	select BT_CTLR_EXT_REJ_IND_SUPPORT
	select BT_CTLR_PER_INIT_FEAT_XCHG_SUPPORT
	select BT_CTLR_DATA_LEN_UPDATE_SUPPORT if HAS_HW_NRF_CCM_LFLEN_8BIT || \
						  BT_CTLR_DATA_LENGTH_CLEAR
	select BT_CTLR_PRIVACY_SUPPORT if !SOC_SERIES_NRF51X
	select BT_CTLR_EXT_SCAN_FP_SUPPORT

	select BT_CTLR_PHY_2M_SUPPORT if HAS_HW_NRF_RADIO_BLE_2M || \
					 BT_CTLR_PHY_2M_NRF
	select BT_CTLR_PHY_CODED_SUPPORT if HAS_HW_NRF_RADIO_BLE_CODED
	select BT_CTLR_PHY_UPDATE_SUPPORT if BT_CTLR_PHY_2M_SUPPORT || \
					     BT_CTLR_PHY_CODED_SUPPORT
	select BT_CTLR_ADV_EXT_SUPPORT
	select BT_CTLR_ADV_PERIODIC_SUPPORT
	select BT_CTLR_SYNC_PERIODIC_SUPPORT
	select BT_CTLR_ADV_ISO_SUPPORT
	select BT_CTLR_SYNC_ISO_SUPPORT
	select BT_CTLR_DF_SUPPORT if HAS_HW_NRF_RADIO_DFE
	select BT_CTLR_CTEINLINE_SUPPORT if HAS_HW_NRF_RADIO_DFE
	select BT_CTLR_CHAN_SEL_2_SUPPORT
	select BT_CTLR_MIN_USED_CHAN_SUPPORT
	select BT_CTLR_DTM_HCI_SUPPORT
	select BT_CTLR_CONN_RSSI_SUPPORT

	select BT_CTLR_XTAL_ADVANCED_SUPPORT
	select BT_CTLR_SCHED_ADVANCED_SUPPORT
	select BT_CTLR_TIFS_HW_SUPPORT
	select BT_CTLR_ULL_LLL_PRIO_SUPPORT

	select BT_TICKER_REMAINDER_GET if BT_BROADCASTER && BT_CTLR_ADV_EXT
	select BT_TICKER_LAZY_GET if BT_CTLR_ADV_PERIODIC

	default y
	help
	  Use Nordic Lower Link Layer implementation.

config BT_LLL_VENDOR_OPENISA
	bool "Use OpenISA LLL"
	depends on SOC_OPENISA_RV32M1_RISCV32
	select BT_CTLR_PHY_UPDATE_SUPPORT
	select BT_CTLR_EXT_REJ_IND_SUPPORT
	select BT_HAS_HCI_VS
	select BT_CTLR_LE_ENC_SUPPORT if !BT_CTLR_DATA_LENGTH_CLEAR
	select BT_CTLR_PRIVACY_SUPPORT
	default y
	help
	  Use OpenISA Lower Link Layer implementation.

config BT_CTLR_XTAL_ADVANCED_SUPPORT
	bool

config BT_CTLR_SCHED_ADVANCED_SUPPORT
	bool

config BT_CTLR_TIFS_HW_SUPPORT
	bool

config BT_CTLR_ULL_LLL_PRIO_SUPPORT
	bool

choice BT_LL_SW_LLCP_IMPL
	prompt "Bluetooth Low Energy Software Link Layer Control Procedure Implementation"
	default BT_LL_SW_LLCP
	help
	  Select the Bluetooth Low Energy Software Link Layer Control Procedure implementation.

config BT_LL_SW_LLCP_LEGACY
	bool "Legacy implementation"
	depends on !BT_CTLR_DF_CONN_CTE_RX && !BT_CTLR_DF_CONN_CTE_TX
	help
	  Use the Bluetooth Low Energy Software Link Layer Legacy Control Procedure implementation.

config BT_LL_SW_LLCP
	bool "State-machine based implementation, replacing the legacy one"
	help
	  Use the new Bluetooth Low Energy Software Link Layer Control Procedure implementation.

endchoice


config BT_CTLR_RX_PRIO_STACK_SIZE
	# Controller's Co-Operative high priority Rx thread stack size.
	int "High priority Rx thread stack size"
	default 448

config BT_CTLR_SETTINGS
	bool "Settings System"
	depends on SETTINGS
	help
	  Enable use of settings system in controller.

config BT_CTLR_VERSION_SETTINGS
	bool "Version Settings"
	depends on BT_CTLR_SETTINGS
	help
	  Make the controller's Company Id and Subversion Number configurable
	  through settings system.

config BT_CTLR_COMPANY_ID
	hex "Controller Company Id"
	default BT_COMPANY_ID
	range 0x0000 0xFFFF
	help
	  Set the Bluetooth Company Identifier that will be used in
	  the VERSION_IND PDU. Uses BT_COMPANY_ID by default, although
	  silicon vendors and hardware manufacturers can set their own
	  Company Identifier for the controller. The full list of Bluetooth
	  Company Identifiers can be found here:
	  https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers

config BT_CTLR_SUBVERSION_NUMBER
	hex "Subversion Number"
	default 0xFFFF
	range 0x0000 0xFFFF
	help
	  Set the Subversion Number that will be used in VERSION_IND PDU.

config BT_CTLR_ADVANCED_FEATURES
	bool "Show advanced features"
	help
	  Makes advanced features visible to controller developers.

menu "Advanced features"
	visible if BT_CTLR_ADVANCED_FEATURES

config BT_CTLR_SW_DEFERRED_PRIVACY
	bool "LE Controller-based Software Privacy"
	depends on BT_CTLR_PRIVACY
	help
	  Enable support for software based deferred privacy calculations.

config BT_CTLR_RPA_CACHE_SIZE
	int "LE Controller-based Software Privacy Resolving List size"
	depends on BT_CTLR_SW_DEFERRED_PRIVACY
	default 8
	range 1 64
	help
	  Set the size of the Known Unknown Resolving List for LE
	  Controller-based Software deferred Privacy.

config BT_CTLR_DATA_LENGTH_CLEAR
	bool "Data Length Support (Cleartext only)"
	depends on SOC_SERIES_NRF51X
	help
	  Enable support for Bluetooth v4.2 LE Data Length Update procedure, up to
	  251 byte cleartext payloads in the Controller. Encrypted connections
	  are not supported.


config BT_CTLR_PHY_2M_NRF
	bool "2Mbps Nordic Semiconductor PHY Support (Cleartext only)"
	depends on SOC_SERIES_NRF51X
	select BT_CTLR_PHY_2M
	help
	  Enable support for Nordic Semiconductor proprietary 2Mbps PHY in the
	  Controller. Encrypted connections are not supported.

config BT_CTLR_ADV_AUX_SET
	int "LE Extended Advertising Auxiliary Sets"
	depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
	range 1 BT_CTLR_ADV_SET if BT_CTLR_ADV_PERIODIC
	range 0 BT_CTLR_ADV_SET
	default 1 if BT_CTLR_ADV_PERIODIC
	default BT_CTLR_ADV_SET
	help
	  Maximum supported advertising auxiliary channel sets.

config BT_CTLR_ADV_SYNC_SET
	int "LE Periodic Advertising Sets"
	depends on BT_CTLR_ADV_PERIODIC
	range 1 BT_CTLR_ADV_AUX_SET
	default 1
	help
	  Maximum supported periodic advertising sets.

config BT_CTLR_ADV_DATA_CHAIN
	bool "Advertising Data chaining [EXPERIMENTAL]"
	select EXPERIMENTAL
	help
	  Enable support for Advertising Data chaining in Extended and
	  Periodic Advertising. This will allow to have Advertising Data Length
	  upto 1650 bytes.

	  This is experimental and work in progress, does not implement
	  recombining the AD Data and could return BT_HCI_ERR_PACKET_TOO_LONG
	  when a chain PDU needs its AD data overflow into a new chain PDU.
	  I.e. AD data in the last PDU could overflow due to the need to add
	  Aux Pointer field, and if this overflow bytes plus the next AD data
	  fragment length could be over 255 bytes needing additional chain PDU.
	  This is not implemented.

config BT_CTLR_ADV_PDU_LINK
	# Enables extra space in each advertising PDU to allow linking PDUs.
	# This is required to enable advertising data trains (i.e. transmission
	# of AUX_CHAIN_IND).
	bool

config BT_CTLR_ADV_AUX_PDU_LINK
	# Enable chaining in Extended Advertising
	bool
	select BT_CTLR_ADV_PDU_LINK

config BT_CTLR_ADV_AUX_PDU_BACK2BACK
	bool "Back-to-back transmission of extended advertising trains"
	depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
	select BT_CTLR_ADV_AUX_PDU_LINK
	default y if BT_CTLR_ADV_DATA_LEN_MAX > 191
	help
	  Enables transmission of AUX_CHAIN_IND in extended advertising train by
	  sending each AUX_CHAIN_IND one after another back-to-back.

config BT_CTLR_ADV_AUX_PDU_BACK2BACK_AFS
	int "AUX Frame Space for back-to-back transmission of extended advertising trains"
	depends on BT_CTLR_ADV_AUX_PDU_BACK2BACK
	range 300 1000
	default 300
	help
	  Specific AUX Frame Space to be used for back-to-back transmission of
	  extended advertising trains. Time specified in microseconds.

config BT_CTLR_ADV_SYNC_PDU_LINK
	bool
	depends on BT_CTLR_ADV_PERIODIC
	select BT_CTLR_ADV_PDU_LINK

config BT_CTLR_ADV_SYNC_PDU_BACK2BACK
	bool "Back-to-back transmission of periodic advertising trains"
	depends on BT_CTLR_ADV_PERIODIC
	select BT_CTLR_ADV_SYNC_PDU_LINK
	help
	  Enables transmission of AUX_CHAIN_IND in periodic advertising train by
	  sending each AUX_CHAIN_IND one after another back-to-back.
	  Note, consecutive AUX_CHAIN_IND packets are not scheduled but sent at
	  a constant offset on a best effort basis. This means advertising train can
	  be preempted by other event at any time.

config BT_CTLR_ADV_SYNC_PDU_BACK2BACK_AFS
	int "AUX Frame Space for back-to-back transmission of periodic advertising trains"
	depends on BT_CTLR_ADV_SYNC_PDU_BACK2BACK
	range 300 1000
	default 300
	help
	  Specific AUX Frame Space to be used for back-to-back transmission of
	  periodic advertising trains. Time specified in microseconds.

config BT_CTLR_ADV_RESERVE_MAX
	bool "Use maximum Advertising PDU size time reservation"
	depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
	default y
	help
	  Use the maximum advertising PDU size time reservation considering the
	  Advertising Data could be updated from zero to maximum support size.
	  If maximum time reservation is disabled then time reservation
	  corresponding to the Advertising Data present at the time of the
	  start/enable of Advertising is used.

config BT_CTLR_ADV_DATA_BUF_MAX
	int "Advertising Data Maximum Buffers"
	depends on BT_BROADCASTER
	range 1 64 if BT_CTLR_ADV_EXT
	range 1 1 if !BT_CTLR_ADV_EXT
	default 1
	help
	  Maximum number of buffered Advertising Data payload across enabled
	  advertising sets.

config BT_CTLR_ADV_EXT_PDU_EXTRA_DATA_MEMORY
	bool
	depends on BT_CTLR_ADV_EXT
	help
	  Add additional memory to advertising PDU storage. The memory is a
	  general purpose storage for data that should be send from ULL to LLL.
	  The data stored in the memory are in synchronization with content
	  of PDU memory.

	  For example, the extra data memory is used for storage for parameters
	  to configure Radio peripheral to transmit CTE. The configuration data
	  must be synchronized with CTEInfo field in extended advertising header
	  that is part of PDU data.

config BT_CTRL_ADV_ADI_IN_SCAN_RSP
	bool "Include ADI in AUX_SCAN_RSP PDU"
	depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
	help
	  Enable ADI field in AUX_SCAN_RSP PDU

config BT_CTLR_SCAN_AUX_SYNC_RESERVE_MIN
	bool "Use minimal Scan Auxiliary and Periodic Sync PDU time reservation"
	depends on (BT_OBSERVER && BT_CTLR_ADV_EXT) || BT_CTLR_SYNC_PERIODIC
	default y
	help
	  Use minimal time reservation for Auxiliary and Periodic Sync PDU
	  reception. A peer device could scheduling multiple advertising sets
	  in a short duration with small PDUs hence using the minimal time
	  reservation would avoid skipping closely scheduled reception of
	  multiple Auxiliary or Periodic Sync PDUs.

config BT_CTLR_SYNC_PERIODIC_SKIP_ON_SCAN_AUX
	bool "Skip Periodic Sync event on overlap with Extended Scan Event"
	depends on BT_CTLR_SYNC_PERIODIC
	help
	  When AUX_ADV_IND or AUX_CHAIN_IND auxiliary channel PDU scan radio
	  event overlaps Periodic Sync radio event in unreserved time space,
	  let the Periodic Sync radio event be aborted so that the auxiliary
	  channel PDU can be received to generate Extended Advertising Reports.

	  By default we want Periodic Advertising Sync Events to take priority
	  over any overlapping Extended Advertising Primary and Auxiliary
	  channel PDU reception in order to not skip Periodic Advertising Report
	  generation.

	  But under simultaneous multiple Periodic Advertising Sync support with
	  small Periodic Advertising Intervals where there will be a lot of
	  overlapping Periodic Advertising Sync events, it is desirable to
	  permit Extended Advertising auxiliary PDU reception be allowed in a
	  round robin scheduling to skip the overlapping Periodic Advertising
	  Sync event. This permits new Periodic Advertising peers be discovered.

config BT_CTLR_SCAN_AUX_SET
	int "LE Extended Scanning Auxiliary Sets"
	depends on BT_OBSERVER && BT_CTLR_ADV_EXT
	range 1 64
	default 1
	help
	  Maximum supported auxiliary channel scan sets.

config BT_CTLR_SCAN_SYNC_ISO_SET
	int "LE ISO Broadcast Isochronous Groups Sync Sets"
	depends on BT_CTLR_SYNC_ISO
	range 1 64
	default 1
	help
	  Maximum supported broadcast isochronous groups (BIGs) sync sets.

config BT_CTLR_ADV_ENABLE_STRICT
	bool "Enforce Strict Advertising Enable/Disable"
	depends on BT_BROADCASTER
	help
	  Enforce returning HCI Error Command Disallowed on enabling/disabling
	  already enabled/disabled advertising.

config BT_CTLR_SCAN_ENABLE_STRICT
	bool "Enforce Strict Scan Enable/Disable"
	depends on BT_OBSERVER
	help
	  Enforce returning HCI Error Command Disallowed on enabling/disabling
	  already enabled/disabled scanning.

config BT_CTLR_ZLI
	bool "Use Zero Latency IRQs"
	depends on ZERO_LATENCY_IRQS
	default y
	help
	  Enable support for use of Zero Latency IRQ feature. Note, applications
	  shall not use Zero Latency IRQ themselves when this option is selected,
	  else will impact controller stability.

config BT_CTLR_OPTIMIZE_FOR_SPEED
	prompt "Optimize for Speed" if !(SOC_SERIES_NRF51X && BT_CTLR_LE_ENC)
	bool
	default y if BT_CTLR_LE_ENC
	help
	  Optimize compilation of controller for execution speed.

config BT_CTLR_XTAL_ADVANCED
	bool "Advanced event preparation"
	depends on BT_CTLR_XTAL_ADVANCED_SUPPORT
	default y
	help
	  Enables advanced event preparation offset ahead of radio tx/rx, taking
	  into account predictive processing time requirements in preparation to
	  the event, like control procedure handling and CPU execution speeds.
	  Crystal oscillator is retained between closely spaced consecutive
	  radio events to reduce the overall number of crystal settling current
	  consumptions.

	  This feature maximizes radio utilization in an average role event
	  timeslice when they are closely spaced by using a reduced offset
	  between preparation and radio event.

	  By disabling this feature, the controller will use a constant offset
	  between the preparation and radio event. The controller will toggle
	  crystal oscillator between two closely spaced radio events leading to
	  higher average current due to increased number of crystal settling
	  current consumptions.

config BT_CTLR_XTAL_THRESHOLD
	int "Crystal shutdown threshold in uS"
	depends on BT_CTLR_XTAL_ADVANCED
	default 1500
	help
	  Configure the optimal delta in micro seconds between two consecutive
	  radio events, event done to next preparation, below which (active
	  clock) crystal will be retained. This value is board dependent.

config BT_CTLR_SCHED_ADVANCED
	bool "Advanced scheduling"
	depends on BT_CTLR_SCHED_ADVANCED_SUPPORT && \
		   (BT_CONN || \
		    (BT_CTLR_ADV_EXT && (BT_CTLR_ADV_AUX_SET > 1)) || \
		    BT_CTLR_ADV_ISO)
	default y if BT_CENTRAL || (BT_BROADCASTER && BT_CTLR_ADV_EXT) || BT_CTLR_ADV_ISO
	help
	  Enable non-overlapping placement of observer, initiator and central
	  roles in timespace. Uses window offset in connection updates and uses
	  connection parameter request in peripheral role to negotiate
	  non-overlapping placement with active central roles to avoid peripheral
	  roles drifting into active central roles in the local controller.

	  This feature maximizes the average data transmission amongst active
	  concurrent central and peripheral connections while other observer,
	  initiator, central or peripheral roles are active in the local controller.

	  Disabling this feature will lead to overlapping role in timespace
	  leading to skipped events amongst active roles.

config BT_CTLR_SCHED_ADVANCED_CENTRAL_CONN_SPACING
	int "Advanced scheduling central preferred connection spacing"
	depends on BT_CTLR_SCHED_ADVANCED
	default 0
	help
	  The central preferred connection spacing defines an additional spacing
	  in microseconds, added to the fixed ~1250 us spacing obtained by enabling
	  BT_CTLR_SCHED_ADVANCED. Specifying 0 (default) will obtain a spacing of
	  ~1250 us, whereas specifying 1250 will yield a spacing of ~2500 us.
	  The spacing is defined as the distance in time between the anchor points
	  of the established central role connections.
	  The precision is determined by the resolution of the platform dependent
	  ticker clock.
	  When specifying values above 6.25 ms, the spacing may be unobtainable if
	  the connection interval becomes smaller than the total spacing. In that
	  case, modulo is applied and a total spacing of 15 ms on a 10 ms connection
	  interval yields 5 ms spacing.
	  For multiple connections, it may become impossible to honor the preferred
	  spacing, in which case overlapping will occur.

config BT_CTLR_LLL_PRIO
	int "Lower Link Layer (Radio) IRQ priority" if (BT_CTLR_ULL_LLL_PRIO_SUPPORT && !BT_CTLR_ZLI)
	range 0 3 if SOC_SERIES_NRF51X
	range 0 6 if (SOC_SERIES_NRF52X || SOC_SERIES_NRF53X)
	default 0
	help
	  The interrupt priority for event preparation and radio IRQ.

config BT_CTLR_ULL_HIGH_PRIO
	int "Upper Link Layer High IRQ priority" if BT_CTLR_ULL_LLL_PRIO_SUPPORT
	range BT_CTLR_LLL_PRIO 3 if SOC_SERIES_NRF51X
	range BT_CTLR_LLL_PRIO 6 if (SOC_SERIES_NRF52X || SOC_SERIES_NRF53X)
	default BT_CTLR_LLL_PRIO if (!BT_CTLR_ULL_LLL_PRIO_SUPPORT || BT_CTLR_ZLI || BT_CTLR_LOW_LAT)
	default 1
	help
	  The interrupt priority for Ticker's Worker IRQ and Upper Link Layer
	  higher priority functions.

config BT_CTLR_ULL_LOW_PRIO
	int "Upper Link Layer Low IRQ priority" if BT_CTLR_ULL_LLL_PRIO_SUPPORT
	range BT_CTLR_ULL_HIGH_PRIO 3 if SOC_SERIES_NRF51X
	range BT_CTLR_ULL_HIGH_PRIO 6 if (SOC_SERIES_NRF52X || SOC_SERIES_NRF53X)
	default BT_CTLR_ULL_HIGH_PRIO
	help
	  The interrupt priority for Ticker's Job IRQ and Upper Link Layer
	  lower priority functions.

config BT_CTLR_LOW_LAT
	bool "Low latency non-negotiating event preemption"
	select BT_CTLR_LOW_LAT_ULL_DONE
	default y if SOC_SERIES_NRF51X
	help
	  Use low latency non-negotiating event preemption. This reduces
	  Radio ISR latencies by the controller event scheduling framework.
	  Consequently, this reduces on-air radio utilization due to redundant
	  radio state switches.

config BT_CTLR_LOW_LAT_ULL
	prompt "Low latency ULL"
	bool
	depends on BT_CTLR_LOW_LAT
	default y
	help
	  Low latency ULL implementation that uses tailchaining instead of while
	  loop to demux rx messages from LLL.

config BT_CTLR_LOW_LAT_ULL_DONE
	prompt "Low latency ULL prepare dequeue"
	bool
	help
	  Done events be processed and dequeued in ULL context.

config BT_CTLR_CONN_META
	prompt "Connection meta data extension"
	bool
	help
	  Enables vendor specific per-connection meta data as part of the
	  LLL connection object.

config BT_CTLR_RX_PDU_META
	prompt "RX pdu meta data"
	bool

config BT_CTLR_RADIO_ENABLE_FAST
	bool "Use tTXEN/RXEN,FAST ramp-up"
	depends on SOC_COMPATIBLE_NRF52X || SOC_SERIES_NRF53X
	default y
	help
	  Enable use of fast radio ramp-up mode.

config BT_CTLR_TIFS_HW
	bool "H/w Accelerated tIFS Trx switching"
	depends on !BT_CTLR_RADIO_ENABLE_FAST && BT_CTLR_TIFS_HW_SUPPORT
	default y
	help
	  Enable use of hardware accelerated tIFS Trx switching.

config BT_CTLR_SW_SWITCH_SINGLE_TIMER
	bool "Single TIMER tIFS Trx SW switching"
	depends on (!BT_CTLR_TIFS_HW) && (SOC_COMPATIBLE_NRF52X || SOC_SERIES_NRF53X)
	help
	  Implement the tIFS Trx SW switch with the same TIMER
	  instance, as the one used for BLE event timing. Requires
	  SW switching be enabled. Using a single TIMER:
	  (+) frees up one TIMER instance
	  (+) removes jitter for HCTO implementation
	  (-) introduces drifting to the absolute time inside BLE
	  events, that increases linearly with the number of
	  packets exchanged in the event
	  (-) makes it impossible to use most of the pre-programmed
	  PPI channels for the controller, resulting in 4 channels
	  less left for other uses

config BT_CTLR_PARAM_CHECK
	bool "HCI Command Parameter checking"
	default y if BT_HCI_RAW
	help
	  Enable code checking HCI Command Parameters. This is not needed in
	  combined host plus controller builds, saving some code space.

if BT_CONN

config BT_CTLR_FAST_ENC
	bool "Fast Encryption Setup"
	depends on BT_CTLR_LE_ENC
	default y if BT_HCI_RAW
	help
	  Enable connection encryption setup in 4 connection events.
	  Peripheral will respond to Encryption Request with Encryption Response
	  in the next connection event, and will transmit Start Encryption
	  Request PDU in the same connection event, hence completing encryption
	  setup in 4 connection events. Encrypted data would be transmitted as
	  fast as in 4th connection event from Encryption Request.

config BT_CTLR_LLCP_CONN
	int "Number of connections with worst-case overlapping procedures"
	default BT_MAX_CONN
	range 1 BT_MAX_CONN
	help
	  Set the number connections for which worst-case buffer requirements
	  for LLCP procedures must be met. Executing LLCP procedures on
	  more than this number of connections simultaneously may cause
	  instabilities.

if !BT_LL_SW_LLCP_LEGACY
config BT_CTLR_LLCP_TX_PER_CONN_TX_CTRL_BUF_NUM_MAX
	int
	default 4
	help
	  The theoretical maximum number of tx ctrl buffers needed for any connection, is 4.
	  two for active encryption procedure plus one for rejecting a remote request
	  and one for a local terminate

config BT_CTLR_LLCP_PER_CONN_TX_CTRL_BUF_NUM
	int "Number of tx control buffers to be reserved per connection"
	default BT_CTLR_LLCP_TX_PER_CONN_TX_CTRL_BUF_NUM_MAX
	range 0 BT_CTLR_LLCP_TX_PER_CONN_TX_CTRL_BUF_NUM_MAX
	help
	  Set the number control buffers that is to be pre allocated per connection
	  This defines the minimum number of buffers available for any connection
	  Setting this to non zero will ensure a connection will always have access
	  to buffer(s) for control procedure TX

config BT_CTLR_LLCP_COMMON_TX_CTRL_BUF_NUM
	int "Number of tx control buffers to be available across all connections"
	default 0
	range 0 255
	help
	  Set the number control buffers that is to be available for tx.
	  This defines the size of the pool of tx buffers available
	  for control procedure tx. This pool is shared across all
	  procedures/connections with allocation through a fifo queue.
	  Configure between 0 and (4 - BT_CTLR_LLCP_PER_CONN_TX_CTRL_BUF_NUM) * BT_CTLR_LLCP_CONN

config BT_CTLR_LLCP_LOCAL_PROC_CTX_BUF_NUM
	int "Number of local control procedure contexts to be available across all connections"
	default 4 if (BT_AUTO_PHY_UPDATE=y || BT_AUTO_DATA_LEN_UPDATE=y) && BT_CTLR_LLCP_CONN < 4
	default 2 if BT_CTLR_LLCP_CONN = 1
	default BT_CTLR_LLCP_CONN if BT_CTLR_LLCP_CONN > 1
	range 2 255
	help
	  Set the number control procedure contexts that is to be available.
	  This defines the size of the pool of control procedure contexts available
	  for handling local initiated control procedures.
	  This pool is shared across all connections, with allocation through a queue.

config BT_CTLR_LLCP_REMOTE_PROC_CTX_BUF_NUM
	int "Number of remote control procedure contexts to be available across all connections"
	default BT_CTLR_LLCP_CONN
	range 1 255
	help
	  Set the number control procedure contexts that is to be available.
	  This defines the size of the pool of control procedure contexts available
	  for handling remote initiated control procedures.
	  This pool is shared across all connections, with allocation through a queue.

endif #!BT_LL_SW_LLCP_LEGACY


config BT_CTLR_LLID_DATA_START_EMPTY
	bool "Handle zero length L2CAP start frame"
	default y if BT_HCI_RAW
	help
	  Handle zero length L2CAP start frame.

config BT_CTLR_RX_ENQUEUE_HOLD
	bool "Procedure Complete after on-air instant"
	depends on BT_LL_SW_LLCP_LEGACY
	default y if BT_HCI_RAW
	help
	  Hold enqueue of Procedure Complete events with instant until after the
	  on-air instant is reached.

config BT_CTLR_TX_RETRY_DISABLE
	bool "Disable Tx Retry"
	help
	  Avoid retransmission of a PDU if peer device Nack-ed a transmission
	  in the current connection event, close the connection event so as to
	  save current consumption on retries (in case peer has no buffers to
	  receive new PDUs).

	  Enabling this will lower power consumption, but increase transmission
	  latencies by one connection interval as the next attempt to send a PDU
	  would happen in the next connection event instead of repeated retries
	  in the current connection event.

config BT_CTLR_THROUGHPUT
	bool "Measure incoming Tx throughput"
	help
	  Measure incoming Tx throughput and log the results.

config BT_CTLR_FORCE_MD_COUNT
	int "Forced MD bit count" if !BT_CTLR_FORCE_MD_AUTO
	depends on !BT_CTLR_LOW_LAT_ULL
	range 0 255
	default 1 if BT_CTLR_FORCE_MD_AUTO
	default 0
	help
	  No. of times to force MD bit to be set in Tx PDU after a successful
	  transmission of non-empty PDU.

	  This will prolong the connection event to from being closed in cases
	  where applications want to send data in same connection event but are
	  slow in providing new Tx data.

config BT_CTLR_FORCE_MD_AUTO
	bool "Forced MD bit automatic calculation"
	depends on !BT_CTLR_LOW_LAT_ULL
	select BT_CTLR_THROUGHPUT
	default y if BT_HCI_RAW
	help
	  Force MD bit in transmitted PDU based on runtime incoming transmit
	  data throughput.

config BT_CTLR_CONN_RANDOM_FORCE
	bool "Random forced scheduling for peripheral on missed anchor point"
	depends on BT_PERIPHERAL
	default y
	help
	  When enabled, controller will have legacy behavior and randomly force
	  priority at next ticker scheduling for peripheral role, if anchor point is
	  missed.
	  Two or more connections with similar interval on a device connected
	  to a peer device having two or more connections at its end with same
	  interval could lock to a round robin pattern where in neither of the central
	  nor peripheral event would be in sync at either end. Randomness allows
	  to break this locked round robin pattern permitting an anchor point sync.

config BT_CTLR_CONN_RSSI_EVENT
	bool "Connection RSSI event"
	depends on BT_CTLR_CONN_RSSI
	help
	  Generate events for connection RSSI measurement.

config BT_CTLR_ALLOW_SAME_PEER_CONN
	bool "Allow connection requests from same peer"
	depends on BT_MAX_CONN > 1
	help
	  Allow connection requests from the same peer. While the
	  Bluetooth specification does not allow multiple connections
	  with the same peer, allowing such connections is useful
	  while debugging multiple connections.

	  WARNING: This option enables behavior that violates the Bluetooth
	  specification.

endif # BT_CONN

config BT_CTLR_ADV_INDICATION
	bool "Advertisement indications"
	depends on BT_BROADCASTER
	help
	  Generate events indicating on air advertisement events.

config BT_CTLR_SCAN_REQ_NOTIFY
	bool "Scan Request Notifications"
	depends on BT_BROADCASTER
	help
	  Generate events notifying the on air scan requests received.

config BT_CTLR_SCAN_REQ_RSSI
	bool "Measure Scan Request RSSI"
	depends on BT_CTLR_SCAN_REQ_NOTIFY
	help
	  Measure RSSI of the on air scan requests received.

config BT_CTLR_SCAN_INDICATION
	bool "Scanner indications"
	depends on BT_OBSERVER
	help
	  Generate events indicating on air scanner events.

config BT_CTLR_SCAN_UNRESERVED
	bool "Unreserved scan window"
	depends on BT_OBSERVER && !BT_CTLR_LOW_LAT
	default y if BT_MESH
	help
	  Scanner will not use time space reservation for scan window when in
	  continuous scan mode.

config BT_MAYFLY_YIELD_AFTER_CALL
	bool "Yield from mayfly thread after first call"
	default y
	help
	  Only process one mayfly callback per invocation (legacy behavior).
	  If set to 'n', all pending mayflies for callee are executed before
	  yielding

config BT_TICKER_LOW_LAT
	bool "Ticker low latency mode"
	default y if SOC_SERIES_NRF51X
	help
	  This option enables legacy ticker scheduling which defers overlapping
	  ticker node timeouts and thereby prevents ticker interrupts during
	  radio RX/TX. Enabling this option disables the ticker priority- and
	  'must expire' features.

config BT_TICKER_REMAINDER_GET
	bool "Ticker Next Slot Get with Remainder"
	help
	  This option enables ticker interface to iterate through active
	  ticker nodes, returning tick to expire and remainder from a reference
	  tick.

config BT_TICKER_LAZY_GET
	bool "Ticker Next Slot Get with Lazy"
	help
	  This option enables ticker interface to iterate through active
	  ticker nodes, returning tick to expire and lazy count from a reference
	  tick.

config BT_TICKER_NEXT_SLOT_GET_MATCH
	bool "Ticker Next Slot Get with match callback"
	default y if BT_TICKER_SLOT_AGNOSTIC
	help
	  This option enables ticker interface to iterate through active
	  ticker nodes with a callback for every found ticker node. When
	  returning true in the callback, iteration will stop and the normal
	  operation callback invoked.

config BT_TICKER_EXT
	bool "Ticker extensions"
	depends on !BT_TICKER_LOW_LAT && !BT_TICKER_SLOT_AGNOSTIC
	default y
	help
	  This option enables ticker extensions such as re-scheduling of
	  ticker nodes with slot_window set to non-zero. Ticker extensions
	  are invoked by using available '_ext' versions of ticker interface
	  functions.

config BT_TICKER_EXT_SLOT_WINDOW_YIELD
	bool "Tickers with slot window always yields"
	depends on BT_TICKER_EXT
	default y if BT_CTLR_ADV_ISO
	help
	  This options forces tickers with slot window extensions to yield to
	  normal tickers and be placed at the end of their slot window.

config BT_TICKER_PRIORITY_SET
	bool "Tickers with priority based collision resolution"
	depends on BT_TICKER_EXT
	help
	  This option provide tickers with persistent priority value that will
	  be used in resolving collisions.

	  The priority feature if enabled then a custom ULL is needed by vendors
	  to avoid repeated skipping of overlapping events as next_has_priority
	  check uses lazy value that would be always lazy_next > lazy_current as
	  currently skipped event becomes the next event with lazy value
	  incremented by 1. This repeated skip happens when all the time
	  between the event intervals are occupied continuously by overlapping
	  tickers.

config BT_TICKER_SLOT_AGNOSTIC
	bool "Slot agnostic ticker mode"
	help
	  This option enables slot agnostic ticker mode, which ignores slot
	  reservations and collision handling, and operates as a simple
	  multi-instance programmable timer.

config BT_CTLR_JIT_SCHEDULING
	bool "Just-in-Time Scheduling"
	select BT_TICKER_SLOT_AGNOSTIC
	help
	  This option enables the experimental 'Next Generation' scheduling
	  feature, which eliminates priorities and collision resolving in the
	  ticker, and instead relies on just-in-time ("lazy") resolution in
	  the link layer.

config BT_CTLR_USER_EXT
	prompt "Proprietary extensions in Controller"
	bool
	help
	  Catch-all for enabling proprietary event types in Controller behavior.

config BT_CTLR_USER_EVT_RANGE
	int "Range of event constants reserved for proprietary event types"
	depends on BT_CTLR_USER_EXT
	default 5
	range 0 10
	help
	  Number of event types reserved for proprietary use. The range
	  is typically used when BT_CTLR_USER_EXT is in use.

config BT_CTLR_USER_TICKER_ID_RANGE
	int "Range of ticker id constants reserved for proprietary ticker nodes"
	depends on BT_CTLR_USER_EXT
	default 0
	range 0 10
	help
	  Number of ticker ids reserved for proprietary use. The range
	  is typically used when BT_CTLR_USER_EXT is in use.

config BT_RX_USER_PDU_LEN
	int "Maximum supported proprietary PDU buffer length"
	depends on BT_CTLR_USER_EXT
	default 2
	range 2 255
	help
	  Maximum data size for each proprietary PDU. This size includes link layer
	  header and payload. It does not account for HCI event headers as these
	  PDUs are assumed to not go across HCI.

config BT_CTLR_USER_CPR_INTERVAL_MIN
	bool "Proprietary Connection Parameter Request minimum interval"
	depends on BT_CTLR_USER_EXT
	help
	  When enabled, controller will accept Connection Parameter Request
	  intervals down to a proprietary minimum value.

endmenu

comment "BLE Controller debug configuration"

config BT_CTLR_PROFILE_ISR
	bool "Profile radio ISR"
	help
	  Turn on measurement of radio ISR latency, CPU usage and generation of
	  controller event with these profiling data. The controller event
	  contains current, minimum and maximum ISR entry latencies; and
	  current, minimum and maximum ISR CPU use in micro-seconds.

config BT_CTLR_DEBUG_PINS
	bool "Bluetooth Controller Debug Pins"
	depends on BOARD_NRF51DK_NRF51422 || BOARD_NRF52DK_NRF52832 || BOARD_NRF52DK_NRF52810 || BOARD_NRF52840DK_NRF52840 || BOARD_NRF52833DK_NRF52833 || BOARD_NRF5340DK_NRF5340_CPUNET || BOARD_RV32M1_VEGA
	help
	  Turn on debug GPIO toggling for the BLE Controller. This is useful
	  when debugging with a logic analyzer or profiling certain sections of
	  the code.

endif # BT_LL_SW_SPLIT
