1# Zephyr Bluetooth Controller configuration options
2
3# Copyright (c) 2016-2017 Nordic Semiconductor ASA
4# SPDX-License-Identifier: Apache-2.0
5
6if BT_LL_SW_SPLIT
7
8config BT_LLL_VENDOR_NORDIC
9	bool "Use Nordic LLL"
10	depends on SOC_COMPATIBLE_NRF
11	depends on !$(dt_nodelabel_enabled,timer0)
12	depends on !$(dt_nodelabel_enabled,rtc0)
13
14	select BT_CTLR_ENTROPY_SUPPORT if !SOC_COMPATIBLE_NRF54LX || BOARD_NRF54L15BSIM
15	select FAKE_ENTROPY_NATIVE_POSIX if BT_CTLR_ENTROPY && BOARD_NRF54L15BSIM
16	select ENTROPY_NRF5_RNG if BT_CTLR_ENTROPY && !SOC_COMPATIBLE_NRF54LX
17	select ENTROPY_NRF5_BIAS_CORRECTION if ENTROPY_NRF5_RNG
18	select EXPERIMENTAL if !ENTROPY_HAS_DRIVER || FAKE_ENTROPY_NATIVE_POSIX
19
20	select BT_HAS_HCI_VS
21	select BT_CTLR_CRYPTO_SUPPORT
22	select BT_CTLR_LE_ENC_SUPPORT if BT_CTLR_CRYPTO_SUPPORT && \
23					 !BT_CTLR_DATA_LENGTH_CLEAR && \
24					 !BT_CTLR_PHY_2M_NRF && \
25					 !SOC_COMPATIBLE_NRF54LX
26	select BT_CTLR_PRIVACY_SUPPORT if BT_CTLR_CRYPTO_SUPPORT && \
27					  !SOC_SERIES_NRF51X && \
28					  !SOC_COMPATIBLE_NRF54LX
29	select BT_CTLR_CONN_PARAM_REQ_SUPPORT
30	select BT_CTLR_EXT_REJ_IND_SUPPORT
31	select BT_CTLR_PER_INIT_FEAT_XCHG_SUPPORT
32	select BT_CTLR_DATA_LEN_UPDATE_SUPPORT if !BT_CTLR_LE_ENC_SUPPORT || \
33						  HAS_HW_NRF_CCM_LFLEN_8BIT || \
34						  BT_CTLR_DATA_LENGTH_CLEAR
35	select BT_CTLR_EXT_SCAN_FP_SUPPORT
36	select BT_CTLR_PHY_2M_SUPPORT if HAS_HW_NRF_RADIO_BLE_2M || \
37					 BT_CTLR_PHY_2M_NRF
38	select BT_CTLR_PHY_CODED_SUPPORT if HAS_HW_NRF_RADIO_BLE_CODED
39	select BT_CTLR_PHY_UPDATE_SUPPORT if BT_CTLR_PHY_2M_SUPPORT || \
40					     BT_CTLR_PHY_CODED_SUPPORT
41	select BT_CTLR_ADV_EXT_SUPPORT
42	select BT_CTLR_ADV_PERIODIC_SUPPORT
43	select BT_CTLR_SYNC_PERIODIC_SUPPORT
44	select BT_CTLR_ADV_ISO_SUPPORT
45	select BT_CTLR_SYNC_ISO_SUPPORT
46	select BT_CTLR_BROADCAST_ISO_ENC_SUPPORT if !SOC_COMPATIBLE_NRF54LX
47	select BT_CTLR_CENTRAL_ISO_SUPPORT
48	select BT_CTLR_PERIPHERAL_ISO_SUPPORT
49	select BT_CTLR_DF_SUPPORT if HAS_HW_NRF_RADIO_DFE
50	select BT_CTLR_CTEINLINE_SUPPORT if HAS_HW_NRF_RADIO_DFE
51	select BT_CTLR_CHAN_SEL_2_SUPPORT
52	select BT_CTLR_MIN_USED_CHAN_SUPPORT
53	select BT_CTLR_SCA_UPDATE_SUPPORT
54	select BT_CTLR_SYNC_TRANSFER_RECEIVER_SUPPORT
55	select BT_CTLR_SYNC_TRANSFER_SENDER_SUPPORT
56	select BT_CTLR_DTM_HCI_SUPPORT
57	select BT_CTLR_CONN_RSSI_SUPPORT
58
59	select BT_CTLR_XTAL_ADVANCED_SUPPORT
60	select BT_CTLR_SCHED_ADVANCED_SUPPORT
61	select BT_CTLR_TIFS_HW_SUPPORT
62	select BT_CTLR_ULL_LLL_PRIO_SUPPORT
63
64	select BT_TICKER_REMAINDER_SUPPORT
65	select BT_TICKER_UPDATE if BT_BROADCASTER || BT_CONN || \
66				   (BT_OBSERVER && BT_CTLR_ADV_EXT)
67	select BT_TICKER_START_REMAINDER if BT_CTLR_CENTRAL_ISO
68	select BT_TICKER_REMAINDER_GET if BT_BROADCASTER && BT_CTLR_ADV_EXT
69	select BT_TICKER_LAZY_GET if BT_CTLR_ADV_PERIODIC || BT_CTLR_CENTRAL_ISO || BT_CTLR_SYNC_TRANSFER_SENDER
70
71	select BT_TICKER_PREFER_START_BEFORE_STOP if BT_TICKER_SLOT_AGNOSTIC
72
73	default y
74	help
75	  Use Nordic Lower Link Layer implementation.
76
77config BT_LLL_VENDOR_OPENISA
78	bool "Use OpenISA LLL"
79	depends on SOC_OPENISA_RV32M1
80
81	select BT_HAS_HCI_VS
82	select BT_CTLR_ENTROPY_SUPPORT
83	select BT_CTLR_CRYPTO_SUPPORT
84	select BT_CTLR_LE_ENC_SUPPORT if BT_CTLR_CRYPTO_SUPPORT && \
85					 !BT_CTLR_DATA_LENGTH_CLEAR
86	select BT_CTLR_PRIVACY_SUPPORT if BT_CTLR_CRYPTO_SUPPORT
87	select BT_CTLR_PHY_UPDATE_SUPPORT
88	select BT_CTLR_EXT_REJ_IND_SUPPORT
89
90	select BT_TICKER_REMAINDER_SUPPORT
91	select BT_TICKER_UPDATE if BT_BROADCASTER || BT_CONN
92
93	default y
94	help
95	  Use OpenISA Lower Link Layer implementation.
96
97# BT_CTLR_DF_SUPPORT is a wrapper for all DF features. Here we select features that are supported by
98# Zephyr's BLE Controller.
99config BT_CTLR_DF_SUPPORT
100	depends on BT_LL_SW_SPLIT && !BT_CTLR_TIFS_HW
101	select BT_CTLR_DF_CTE_TX_SUPPORT
102	select BT_CTLR_DF_ANT_SWITCH_2US_SUPPORT
103	select BT_CTLR_DF_ANT_SWITCH_1US_SUPPORT
104	select BT_CTLR_DF_CTE_RX_SUPPORT
105	select BT_CTLR_DF_CTE_RX_SAMPLE_1US_SUPPORT
106
107config BT_CTLR_XTAL_ADVANCED_SUPPORT
108	bool
109
110config BT_CTLR_SCHED_ADVANCED_SUPPORT
111	bool
112
113config BT_CTLR_TIFS_HW_SUPPORT
114	bool
115
116config BT_CTLR_ULL_LLL_PRIO_SUPPORT
117	bool
118
119config BT_CTLR_RX_PRIO_STACK_SIZE
120	# Hidden, Controller's Co-Operative high priority Rx thread stack size.
121	int
122	default 448
123
124config BT_CTLR_RX_STACK_SIZE
125	# Hidden, Controller's Co-Operative Rx thread stack size.
126	int
127	default 896
128
129config BT_CTLR_SETTINGS
130	bool "Settings System"
131	depends on SETTINGS
132	help
133	  Enable use of settings system in controller.
134
135config BT_CTLR_VERSION_SETTINGS
136	bool "Version Settings"
137	depends on BT_CTLR_SETTINGS
138	help
139	  Make the controller's Company Id and Subversion Number configurable
140	  through settings system.
141
142config BT_CTLR_COMPANY_ID
143	hex "Controller Company Id"
144	default BT_COMPANY_ID
145	range 0x0000 0xFFFF
146	help
147	  Set the Bluetooth Company Identifier that will be used in
148	  the VERSION_IND PDU. Uses BT_COMPANY_ID by default, although
149	  silicon vendors and hardware manufacturers can set their own
150	  Company Identifier for the controller. The full list of Bluetooth
151	  Company Identifiers can be found here:
152	  https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers
153
154config BT_CTLR_SUBVERSION_NUMBER
155	hex "Subversion Number"
156	default 0xFFFF
157	range 0x0000 0xFFFF
158	help
159	  Set the Subversion Number that will be used in VERSION_IND PDU.
160
161config BT_CTLR_AD_DATA_BACKUP
162	bool "Legacy AD Data backup"
163	depends on BT_PERIPHERAL || BT_CTLR_ADV_EXT
164	default y
165	help
166	  Backup Legacy Advertising Data when switching to Legacy Directed or
167	  to Extended Advertising mode, and restore it when switching back to
168	  Legacy Non-Directed Advertising mode.
169	  Application can disable this feature if not using Directed
170	  Advertising or switch between Legacy and Extended Advertising.
171
172config BT_CTLR_HCI_ADV_HANDLE_MAPPING
173	bool "Advertising set handle mapping between HCI and LL"
174	depends on BT_CTLR_ADV_EXT
175	default y if BT_HCI_RAW
176	help
177	  Enable mapping of advertising set handles between HCI and LL when
178	  using external host since it can use arbitrary numbers as set handles
179	  (as defined by Core specification) as opposed to LL which always uses
180	  zero-based numbering. When using with Zephyr host this option can be
181	  disabled to remove extra mapping logic.
182
183config BT_CTLR_MESH_SCAN_FILTERS
184	int "Number of Mesh scan filters"
185	depends on BT_HCI_MESH_EXT
186	default 1
187	range 1 15
188	help
189	  Set the number of unique Mesh Scan Filters available as part of
190	  the Intel Mesh Vendor Specific Extensions.
191
192config BT_CTLR_MESH_SF_PATTERNS
193	int "Number of Mesh scan filter patterns"
194	depends on BT_HCI_MESH_EXT
195	default 15
196	range 1 15
197	help
198	  Set the number of unique Mesh Scan Filter patterns available per
199	  Scan Filter as part of the Intel Mesh Vendor Specific Extensions.
200
201config BT_CTLR_CHECK_SAME_PEER_CONN
202	bool
203	depends on BT_CONN
204	default BT_MAX_CONN > 1 && !BT_CTLR_ALLOW_SAME_PEER_CONN
205
206if BT_CTLR_ADV_EXT
207
208config BT_CTLR_ADV_EXT_RX_PDU_LEN_MAX
209	int "Maximum Advertising Extensions Receive PDU Length"
210	depends on BT_OBSERVER
211	range $(UINT8_MAX) $(UINT8_MAX) if BT_HCI_RAW
212	range 31 $(UINT8_MAX)
213	default $(UINT8_MAX)
214	help
215	  Maximum Advertising Extensions Receive PDU Length.
216
217config BT_CTLR_SCAN_DATA_LEN_MAX
218	int "Maximum Extended Scanning Data Length"
219	depends on BT_OBSERVER
220	range 31 1650
221	help
222	  Maximum Extended Scanning Data Length.
223
224config BT_CTLR_CHECK_SAME_PEER_SYNC
225	# Hidden Kconfig to add same peer synchronization check
226	bool
227	depends on BT_CTLR_SYNC_PERIODIC
228	default BT_PER_ADV_SYNC_MAX > 1
229
230endif # BT_CTLR_ADV_EXT
231
232module = BT_CTLR_ISOAL
233module-str = "Bluetooth Controller ISO-AL"
234source "subsys/logging/Kconfig.template.log_config_inherit"
235
236config BT_CTLR_ISOAL_LOG_DBG_VERBOSE
237	bool "ISO-AL verbose debug logging"
238	depends on BT_CTLR_ISOAL_LOG_LEVEL = 4
239	default n
240	help
241	  Use this option to enable ISO-AL verbose debug logging.
242
243config BT_CTLR_ISO_TX_SEG_PLAYLOAD_MIN
244	int "Minimum number of playload data bytes in a new segment"
245	depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
246	default 1
247	range 1 64
248	help
249	  Minimum number of payload bytes that would make inserting a new
250	  segment into a PDU worthwhile.
251
252config BT_CTLR_CONN_ISO_HCI_DATAPATH_SKIP_INVALID_DATA
253	bool "Do not pass invalid SDUs on HCI datapath"
254	depends on BT_CTLR_CONN_ISO
255	help
256	  This allows for applications to decide whether to
257	  forward invalid SDUs through HCI upwards.
258
259config BT_CTLR_CONN_ISO_AVOID_SEGMENTATION
260	bool "Avoid SDU fragmentation for framed mode"
261	depends on BT_CTLR_CENTRAL_ISO
262	help
263	  When creating a CIG, the Max_PDU size is calculated according to BT
264	  Core 5.4 Vol 6, Part G, Section 2.2. However, HAP specifies a need for
265	  avoiding segmentation by forcing the Max_PDU to the appropriate value.
266	  Since there is no way to control the Max_PDU using the non-test
267	  interface, the config provides a way to force the Max_PDU to Max_SDU +
268	  5 (header + offset).
269
270choice
271	prompt "CIS Creation Policy Selection"
272	default BT_CTLR_CONN_ISO_RELIABILITY_POLICY
273
274config BT_CTLR_CONN_ISO_RELIABILITY_POLICY
275	bool "CIS creation policy for reliability"
276	depends on BT_CTLR_CENTRAL_ISO
277	help
278	  Select this option to use reliability policy for CIS creation. This
279	  favors a CIS layout/configuration which utilizes the full range of the
280	  Max_Transmission_Latency for maximum retransmission and payload
281	  recovery.
282
283config BT_CTLR_CONN_ISO_LOW_LATENCY_POLICY
284	bool "CIS creation policy for low latency"
285	depends on BT_CTLR_CENTRAL_ISO
286	help
287	  Select this option to use low latency policy for CIS creation. This
288	  favors a CIS layout/configuration which compacts payload transmission
289	  for lowest possible latency.
290endchoice
291
292config BT_CTLR_TEST
293	bool "Run in-system unit tests"
294	help
295	  Run in-system unit tests
296
297config BT_CTLR_ADVANCED_FEATURES
298	bool "Show advanced features"
299	help
300	  Makes advanced features visible to controller developers.
301
302menu "Advanced features"
303	visible if BT_CTLR_ADVANCED_FEATURES
304
305config BT_CTLR_SW_DEFERRED_PRIVACY
306	bool "LE Controller-based Software Privacy"
307	depends on BT_CTLR_PRIVACY
308	help
309	  Enable support for software based deferred privacy calculations.
310
311config BT_CTLR_RPA_CACHE_SIZE
312	int "LE Controller-based Software Privacy Resolving List size"
313	depends on BT_CTLR_SW_DEFERRED_PRIVACY
314	default 8
315	range 1 64
316	help
317	  Set the size of the Known Unknown Resolving List for LE
318	  Controller-based Software deferred Privacy.
319
320config BT_CTLR_TRPA_CACHE_SIZE
321	int "LE Controller-based Software Privacy target RPA cache size"
322	depends on BT_CTLR_SW_DEFERRED_PRIVACY
323	default 4
324	range 1 64
325	help
326	  Set the size of the Known Unknown Target RPA Resolving List for LE
327	  Controller-based Software deferred Privacy.
328
329config BT_CTLR_DATA_LENGTH_CLEAR
330	bool "Data Length Support (Cleartext only)"
331	depends on SOC_SERIES_NRF51X
332	help
333	  Enable support for Bluetooth v4.2 LE Data Length Update procedure, up to
334	  251 byte cleartext payloads in the Controller. Encrypted connections
335	  are not supported.
336
337
338config BT_CTLR_PHY_2M_NRF
339	bool "2Mbps Nordic Semiconductor PHY Support (Cleartext only)"
340	depends on SOC_SERIES_NRF51X
341	select BT_CTLR_PHY_2M
342	help
343	  Enable support for Nordic Semiconductor proprietary 2Mbps PHY in the
344	  Controller. Encrypted connections are not supported.
345
346config BT_CTLR_ADV_AUX_SET
347	int "LE Extended Advertising Auxiliary Sets"
348	depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
349	range 0 BT_CTLR_ADV_SET
350	default BT_CTLR_ADV_SET
351	help
352	  Maximum supported advertising auxiliary channel sets.
353
354config BT_CTLR_ADV_SYNC_SET
355	int "LE Periodic Advertising Sets"
356	depends on BT_CTLR_ADV_PERIODIC
357	range 1 BT_CTLR_ADV_AUX_SET
358	default 1
359	help
360	  Maximum supported periodic advertising sets.
361
362config BT_CTLR_ADV_DATA_CHAIN
363	bool "Advertising Data chaining [EXPERIMENTAL]"
364	select EXPERIMENTAL
365	help
366	  Enable support for Advertising Data chaining in Extended
367	  (non-connectable) and Periodic Advertising. This will allow to have
368	  Advertising Data Length up to 1650 bytes.
369
370	  This is experimental and work in progress, does not implement
371	  recombining the AD Data and could return BT_HCI_ERR_PACKET_TOO_LONG
372	  when a chain PDU needs its AD data overflow into a new chain PDU.
373	  I.e. AD data in the last PDU could overflow due to the need to add
374	  Aux Pointer field, and if this overflow bytes plus the next AD data
375	  fragment length could be over 255 bytes needing additional chain PDU.
376	  This is not implemented.
377
378config BT_CTLR_ADV_PDU_LINK
379	# Enables extra space in each advertising PDU to allow linking PDUs.
380	# This is required to enable advertising data trains (i.e. transmission
381	# of AUX_CHAIN_IND).
382	bool
383
384config BT_CTLR_ADV_AUX_PDU_LINK
385	# Enable chaining in Extended Advertising
386	bool
387	select BT_CTLR_ADV_PDU_LINK
388
389config BT_CTLR_ADV_AUX_PDU_BACK2BACK
390	bool "Back-to-back transmission of extended advertising trains"
391	depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
392	select BT_CTLR_ADV_AUX_PDU_LINK
393	default y if BT_CTLR_ADV_DATA_LEN_MAX > 191
394	help
395	  Enables transmission of AUX_CHAIN_IND in extended advertising train by
396	  sending each AUX_CHAIN_IND one after another back-to-back.
397
398config BT_CTLR_ADV_AUX_PDU_BACK2BACK_AFS
399	int "AUX Frame Space for back-to-back transmission of extended advertising trains"
400	depends on BT_CTLR_ADV_AUX_PDU_BACK2BACK
401	range 300 1000
402	default 300
403	help
404	  Specific AUX Frame Space to be used for back-to-back transmission of
405	  extended advertising trains. Time specified in microseconds.
406
407config BT_CTLR_ADV_SYNC_PDU_LINK
408	bool
409	depends on BT_CTLR_ADV_PERIODIC
410	select BT_CTLR_ADV_PDU_LINK
411
412config BT_CTLR_ADV_SYNC_PDU_BACK2BACK
413	bool "Back-to-back transmission of periodic advertising trains"
414	depends on BT_CTLR_ADV_PERIODIC
415	select BT_CTLR_ADV_SYNC_PDU_LINK
416	help
417	  Enables transmission of AUX_CHAIN_IND in periodic advertising train by
418	  sending each AUX_CHAIN_IND one after another back-to-back.
419	  Note, consecutive AUX_CHAIN_IND packets are not scheduled but sent at
420	  a constant offset on a best effort basis. This means advertising train can
421	  be preempted by other event at any time.
422
423config BT_CTLR_ADV_SYNC_PDU_BACK2BACK_AFS
424	int "AUX Frame Space for back-to-back transmission of periodic advertising trains"
425	depends on BT_CTLR_ADV_SYNC_PDU_BACK2BACK
426	range 300 1000
427	default 300
428	help
429	  Specific AUX Frame Space to be used for back-to-back transmission of
430	  periodic advertising trains. Time specified in microseconds.
431
432config BT_CTLR_ADV_RESERVE_MAX
433	bool "Use maximum Advertising PDU size time reservation"
434	depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
435	default y
436	help
437	  Use the maximum advertising PDU size time reservation considering the
438	  Advertising Data could be updated from zero to maximum support size.
439	  If maximum time reservation is disabled then time reservation
440	  corresponding to the Advertising Data present at the time of the
441	  start/enable of Advertising is used.
442
443config BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT
444	bool "Drift Extended Advertising Auxiliary PDUs within a slot window"
445	depends on BT_TICKER_EXT && \
446		   BT_BROADCASTER && \
447		   BT_CTLR_ADV_EXT
448	default y if BT_CTLR_SYNC_ISO || BT_CTLR_CONN_ISO
449	help
450	  Drift Extended Advertising Auxiliary PDUs within a slot window to
451	  avoid overlapping with other periodically scheduled states/roles; and
452	  be placed before or after such overlapping states/roles.
453
454config BT_CTLR_ADV_ISO_RESERVE_MAX
455	bool "Use maximum Broadcast ISO event time reservation"
456	depends on BT_CTLR_ADV_ISO
457	default y
458	help
459	  Use maximum Broadcast ISO event time reservation. If disabled, then
460	  time reservation does not include the pre-transmissions of the last
461	  BIS and any Control subevents. This will allow extended or periodic
462	  advertising events to preempt the BIG events but allow higher radio
463	  utilizations by allowing larger BIG events when not overlapping with
464	  extended or periodic advertising.
465
466config BT_CTLR_ADV_AUX_SYNC_OFFSET
467	int "Pre-defined offset between AUX_ADV_IND and AUX_SYNC_IND"
468	depends on BT_CTLR_ADV_PERIODIC
469	range 0 4000000
470	default 0
471	help
472	  Define an offset between AUX_ADV_IND and AUX_SYNC_IND when using
473	  Advertising Interval for the Extended Advertising and Periodic
474	  Advertising that are same or multiple of each other, respectively.
475	  Note, to get advertising intervals that are same or multiple,
476	  the Periodic Advertising Interval shall be 10 millisecond more than
477	  the Extended Advertising Interval; this is because the AUX_ADV_IND
478	  PDUs are scheduled as periodic events of Extended Advertising
479	  Interval plus 10 milliseconds (Advertising Random Delay) as the
480	  periodic interval.
481	  The offset is in microseconds, limited to an experimental maximum
482	  value of 4 seconds.
483
484config BT_CTLR_ADV_DATA_BUF_MAX
485	int "Advertising Data Maximum Buffers"
486	depends on BT_BROADCASTER
487	range 1 64 if BT_CTLR_ADV_EXT
488	range 1 1 if !BT_CTLR_ADV_EXT
489	default 2 if BT_CTLR_ADV_PERIODIC
490	default 1
491	help
492	  Maximum number of buffered Advertising Data payload across enabled
493	  advertising sets.
494
495config BT_CTLR_ADV_EXT_PDU_EXTRA_DATA_MEMORY
496	bool
497	depends on BT_CTLR_ADV_EXT
498	help
499	  Add additional memory to advertising PDU storage. The memory is a
500	  general purpose storage for data that should be send from ULL to LLL.
501	  The data stored in the memory are in synchronization with content
502	  of PDU memory.
503
504	  For example, the extra data memory is used for storage for parameters
505	  to configure Radio peripheral to transmit CTE. The configuration data
506	  must be synchronized with CTEInfo field in extended advertising header
507	  that is part of PDU data.
508
509config BT_CTRL_ADV_ADI_IN_SCAN_RSP
510	bool "Include ADI in AUX_SCAN_RSP PDU"
511	depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
512	help
513	  Enable ADI field in AUX_SCAN_RSP PDU
514
515config BT_CTLR_SCAN_AUX_USE_CHAINS
516	bool "Use new chains based implementation for following advertising chains"
517	depends on BT_OBSERVER && BT_CTLR_ADV_EXT
518	help
519	  Use the new chains based implementation of following advertising chains
520	  instead of the old sets based one. The new implementation has a much lighter
521	  footprint, since it limits allocations per advertising chain to the bare
522	  minimum and only uses one ticker
523
524config BT_CTLR_SCAN_AUX_SET
525	int "LE Extended Scanning Auxiliary Sets"
526	depends on BT_OBSERVER && BT_CTLR_ADV_EXT && !BT_CTLR_SCAN_AUX_USE_CHAINS
527	range 1 64
528	default 1
529	help
530	  Maximum supported auxiliary channel scan sets.
531
532config BT_CTLR_SCAN_AUX_CHAIN_COUNT
533	int "LE Extended Scanning Auxiliary Chains"
534	depends on BT_OBSERVER && BT_CTLR_ADV_EXT && BT_CTLR_SCAN_AUX_USE_CHAINS
535	range 1 64
536	default 3
537	help
538	  Maximum number of extended/periodic advertising chains that can be
539	  followed simultaneously
540
541config BT_CTLR_SCAN_AUX_SYNC_RESERVE_MIN
542	bool "Use minimal Scan Auxiliary and Periodic Sync PDU time reservation"
543	depends on (BT_OBSERVER && BT_CTLR_ADV_EXT) || BT_CTLR_SYNC_PERIODIC
544	default y
545	help
546	  Use minimal time reservation for Auxiliary and Periodic Sync PDU
547	  reception. A peer device could scheduling multiple advertising sets
548	  in a short duration with small PDUs hence using the minimal time
549	  reservation would avoid skipping closely scheduled reception of
550	  multiple Auxiliary or Periodic Sync PDUs.
551
552config BT_CTLR_SYNC_PERIODIC_SKIP_ON_SCAN_AUX
553	bool "Skip Periodic Sync event on overlap with Extended Scan Event"
554	depends on BT_CTLR_SYNC_PERIODIC
555	help
556	  When AUX_ADV_IND or AUX_CHAIN_IND auxiliary channel PDU scan radio
557	  event overlaps Periodic Sync radio event in unreserved time space,
558	  let the Periodic Sync radio event be aborted so that the auxiliary
559	  channel PDU can be received to generate Extended Advertising Reports.
560
561	  By default we want Periodic Advertising Sync Events to take priority
562	  over any overlapping Extended Advertising Primary and Auxiliary
563	  channel PDU reception in order to not skip Periodic Advertising Report
564	  generation.
565
566	  But under simultaneous multiple Periodic Advertising Sync support with
567	  small Periodic Advertising Intervals where there will be a lot of
568	  overlapping Periodic Advertising Sync events, it is desirable to
569	  permit Extended Advertising auxiliary PDU reception be allowed in a
570	  round robin scheduling to skip the overlapping Periodic Advertising
571	  Sync event. This permits new Periodic Advertising peers be discovered.
572
573config BT_CTLR_SYNC_ISO_RESERVE_MAX
574	bool "Use maximum ISO Synchronized Receiver event time reservation"
575	depends on BT_CTLR_SYNC_ISO
576	default y
577	help
578	  Use maximum ISO Synchronized Receiver event time reservation. If
579	  disabled, then time reservation does not include the pre-transmissions
580	  and any Control subevents.
581
582config BT_CTLR_ADV_ENABLE_STRICT
583	bool "Enforce Strict Advertising Enable/Disable"
584	depends on BT_BROADCASTER
585	help
586	  Enforce returning HCI Error Command Disallowed on enabling/disabling
587	  already enabled/disabled advertising.
588
589config BT_CTLR_SCAN_ENABLE_STRICT
590	bool "Enforce Strict Scan Enable/Disable"
591	depends on BT_OBSERVER
592	help
593	  Enforce returning HCI Error Command Disallowed on enabling/disabling
594	  already enabled/disabled scanning.
595
596config BT_CTLR_CIS_ACCEPT_MIN_OFFSET_STRICT
597	bool "Enforce Strict CIS Minimum Offset Check"
598	depends on BT_CTLR_PERIPHERAL_ISO
599	help
600	  Enforce strict check of CIS minimum offset accepted by the peripheral
601	  considering that there will be no overlap of ACL connection with the
602	  CIG events. Radio and CPU overheads for an ACL connection event is
603	  considered and checks the CIS minimum offset is greater than the time
604	  reservation for the ACL connection.
605
606config BT_CTLR_ISOAL_SN_STRICT
607	bool "Enforce Strict Tx ISO Data Sequence Number use"
608	depends on !BT_CTLR_ISOAL_PSN_IGNORE && (BT_CTLR_ADV_ISO || \
609						 BT_CTLR_CONN_ISO)
610	default y
611	help
612	  Enforce strict sequencing of released payloads based on the TX SDU's
613	  packet sequence number. This will be effective when fragmenting an
614	  SDU into unframed PDUs.
615
616	  When enabled, this could result in an SDU being fragmented into
617	  payload numbers that are expired (will be dropped), if the TX SDU
618	  packet sequence numbers do not increment according to the SDU interval
619	  and delivery of SDUs to the ISO-AL do not strictly follow the SDU
620	  interval.
621
622	  When disabled, TX SDUs could be shifted from their stream aligned
623	  position and fragmented into payloads that are less likely to be
624	  dropped. This will result in better delivery of data to the receiver
625	  but at the cost of creating skews in the received stream of SDUs.
626
627config BT_CTLR_ISOAL_PSN_IGNORE
628	bool "Ignore Tx ISO Data Packet Sequence Number use"
629	depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
630	help
631	  Ignore the use of Tx ISO Data Packet Sequence Number.
632
633config BT_CTLR_ISOAL_FRAMED_BIS_OFFSET_MARGIN
634	int "Margin (in microseconds) to be used in framed time offset for BIS"
635	depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
636	default 2000
637	range 0 10000
638	help
639	  Needed margin for reliable delivery of payloads will vary, but should
640	  generally be EVENT_OVERHEAD_START_US + a small margin to cover ISOAL
641	  processing overhead
642
643config BT_CTLR_ISOAL_FRAMED_CIS_OFFSET_MARGIN
644	int "Margin (in microseconds) to be used in framed time offset for CIS"
645	depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
646	default 0
647	range 0 10000
648	help
649	  Note: Usually no margin is needed for CIS as null PDUs can be used if a payload
650	  is too late for the first subevent
651
652config BT_CTLR_ZLI
653	bool "Use Zero Latency IRQs"
654	depends on ZERO_LATENCY_IRQS
655	default y
656	help
657	  Enable support for use of Zero Latency IRQ feature. Note, applications
658	  shall not use Zero Latency IRQ themselves when this option is selected,
659	  else will impact controller stability.
660
661config BT_CTLR_DYNAMIC_INTERRUPTS
662	bool "Use Dynamic Interrupts allocation only"
663	depends on DYNAMIC_INTERRUPTS
664	help
665	  Allocate all Controller required interrupts dynamically. This makes
666	  sure that interrupts are properly connected when the Controller is
667	  initialized and not only during the system startup. Thanks to that
668	  application is able to enable Controller and its ISR at runtime, and
669	  permit use of SoC's peripheral for custom use when Bluetooth is not
670	  enabled.
671
672choice BT_CTLR_OPTIMIZE
673	prompt "Optimization options"
674	depends on !LTO
675	default BT_CTLR_OPTIMIZE_FOR_SPEED
676
677config BT_CTLR_OPTIMIZE_FOR_APP_DEFAULT
678	bool "Optimize for application defaults"
679	help
680	  Optimize compilation of Controller for application's default.
681
682config BT_CTLR_OPTIMIZE_FOR_SIZE
683	bool "Optimize for space"
684	help
685	  Optimize compilation of Controller for code size.
686
687	  This is the Zephyr project default, but is overridden to use optimize
688	  for speed when compiling the Controller to reduce application's ISR
689	  and thread latencies.
690
691config BT_CTLR_OPTIMIZE_FOR_SPEED
692	bool "Optimize for Speed"
693	help
694	  Optimize compilation of Controller for execution speed. As the
695	  Controller's Upper Link Layer and Lower Link Layer execute in ISRs,
696	  use of speed optimizations reduces application's ISR and thread
697	  latencies.
698
699endchoice
700
701config BT_CTLR_XTAL_ADVANCED
702	bool "Advanced event preparation"
703	depends on BT_CTLR_XTAL_ADVANCED_SUPPORT
704	default y
705	help
706	  Enables advanced event preparation offset ahead of radio tx/rx, taking
707	  into account predictive processing time requirements in preparation to
708	  the event, like control procedure handling and CPU execution speeds.
709	  Crystal oscillator is retained between closely spaced consecutive
710	  radio events to reduce the overall number of crystal settling current
711	  consumptions.
712
713	  This feature maximizes radio utilization in an average role event
714	  timeslice when they are closely spaced by using a reduced offset
715	  between preparation and radio event.
716
717	  By disabling this feature, the controller will use a constant offset
718	  between the preparation and radio event. The controller will toggle
719	  crystal oscillator between two closely spaced radio events leading to
720	  higher average current due to increased number of crystal settling
721	  current consumptions.
722
723config BT_CTLR_XTAL_THRESHOLD
724	int "Crystal shutdown threshold in uS"
725	depends on BT_CTLR_XTAL_ADVANCED
726	default 1500
727	help
728	  Configure the optimal delta in micro seconds between two consecutive
729	  radio events, event done to next preparation, below which (active
730	  clock) crystal will be retained. This value is board dependent.
731
732config BT_CTLR_SCHED_ADVANCED
733	bool "Advanced scheduling"
734	depends on BT_CTLR_SCHED_ADVANCED_SUPPORT && \
735		   (BT_CONN || \
736		    (BT_CTLR_ADV_EXT && (BT_CTLR_ADV_AUX_SET > 0)) || \
737		    BT_CTLR_ADV_ISO)
738	select BT_TICKER_NEXT_SLOT_GET
739	default y if BT_CENTRAL || (BT_BROADCASTER && BT_CTLR_ADV_EXT) || BT_CTLR_ADV_ISO
740	help
741	  Enable non-overlapping placement of observer, initiator and central
742	  roles in timespace. Uses window offset in connection updates and uses
743	  connection parameter request in peripheral role to negotiate
744	  non-overlapping placement with active central roles to avoid peripheral
745	  roles drifting into active central roles in the local controller.
746
747	  This feature maximizes the average data transmission amongst active
748	  concurrent central and peripheral connections while other observer,
749	  initiator, central or peripheral roles are active in the local controller.
750
751	  Disabling this feature will lead to overlapping role in timespace
752	  leading to skipped events amongst active roles.
753
754config BT_CTLR_ASSERT_OVERHEAD_START
755	bool "Assert on Prepare Latency"
756	default y
757	help
758	  Assert on increased Radio Event Prepare callback latencies due to
759	  CPU usage overheads in the Controller implementation.
760
761	  Disabling this option permits the Controller to gracefully skip radio
762	  events that are delayed due to CPU usage latencies; as long as the
763	  radio event skips are not for every consecutive radio event interval,
764	  otherwise leading to remote supervision timeout and possible missing
765	  local disconnect events.
766
767config BT_CTLR_ASSERT_VENDOR
768	bool "Vendor Defined Assertion Information Handler"
769	help
770	  This option enables a vendor specific sink for the controller assertion
771	  mechanism, where parameter information is provided. This must be defined in
772	  vendor debug HAL interface as \"BT_ASSERT_VND(cond, param1, param2)\", and
773	  will be invoked whenever the controller code encounters an unrecoverable error
774	  with parameter information. Implementation shall include the equivalent of
775	  BT_ASSERT_DIE for halting the kernel.
776
777config BT_CTLR_CENTRAL_SPACING
778	int "Central Connection Spacing"
779	depends on BT_CTLR_SCHED_ADVANCED
780	default 0
781	range 0 $(UINT16_MAX)
782	help
783	  The preferred connection spacing between multiple simultaneous central
784	  roles in microseconds. The Controller will calculate the required time
785	  reservation using the data length and PHY currently in use. The
786	  greater of the preferred spacing and the calculated time reservation
787	  will be used.
788	  The precision is determined by the resolution of the platform
789	  dependent ticker clock.
790	  The upper range is a ceil value permitting any tuning of Controller's
791	  radio handling overheads and to allow Coded PHY S8 coding scheme PDU
792	  time, i.e. radio event overheads + 17040 (PDU Tx) + 150 (tIFS) + 4
793	  (active clock jitter) + 17040 (PDU rx) = (radio event overheads +
794	  34234) microseconds.
795
796config BT_CTLR_CENTRAL_RESERVE_MAX
797	bool "Use maximum data PDU size time reservation for Central"
798	depends on BT_CENTRAL
799	default y
800	help
801	  Use the maximum data PDU size time reservation considering the Data
802	  length could be updated from default 27 bytes to maximum support size.
803	  If maximum time reservation is disabled then time reservation
804	  corresponding to the default data length at the time of the
805	  start/enable of Central role is used.
806
807	  Note, currently this value is only used to space multiple central
808	  connections and not for actual ticker time reservations.
809
810config BT_CTLR_PERIPHERAL_RESERVE_MAX
811	bool "Use maximum data PDU size time reservation for Peripheral"
812	depends on BT_PERIPHERAL
813	default y
814	help
815	  Use the maximum data PDU size time reservation considering the Data
816	  length could be updated from default 27 bytes to maximum support size.
817
818	  If maximum time reservation is disabled then time reservation required
819	  for empty PDU transmission is used. Overlapping radio events will use
820	  the is_abort_cb mechanism to decide on continuation of the connection
821	  event.
822
823config BT_CTLR_PERIPHERAL_ISO_RESERVE_MAX
824	bool "Use maximum data PDU size time reservation for Peripheral"
825	depends on BT_CTLR_PERIPHERAL_ISO
826	default y
827	help
828	  Use the maximum Peripheral CIG event time reservation.
829
830	  If maximum Peripheral CIG event time reservation is not enabled, then
831	  only time required to transmit or receive the burst number of CIS PDUs
832	  is reserved.
833
834config BT_CTLR_EVENT_OVERHEAD_RESERVE_MAX
835	bool "Reserve maximum event overhead in time reservations"
836	default y
837	help
838	  Use radio event scheduling CPU time overhead in calculations of event
839	  time reservations.
840
841	  If this option is disabled, then Peripheral ACL and Peripheral ISO
842	  role will not include CPU time overhead. Other role will continue to
843	  use CPU overheads in their event time reservations.
844
845config BT_CTLR_SLOT_RESERVATION_UPDATE
846	bool "Update event length reservation after PHY or DLE update"
847	depends on (BT_CTLR_DATA_LENGTH || BT_CTLR_PHY)
848	default y
849	help
850	  Updates the event length reservation after a completed Data Length Update
851	  and/or PHY Update procedure to avoid overlap of radio events
852
853config BT_CTLR_LLL_PRIO
854	int "Lower Link Layer (Radio) IRQ priority" if (BT_CTLR_ULL_LLL_PRIO_SUPPORT && !BT_CTLR_ZLI)
855	range 0 3 if SOC_SERIES_NRF51X
856	range 0 6 if (SOC_COMPATIBLE_NRF52X || SOC_COMPATIBLE_NRF53X)
857	default 0
858	help
859	  The interrupt priority for event preparation and radio IRQ.
860
861config BT_CTLR_ULL_HIGH_PRIO
862	int "Upper Link Layer High IRQ priority" if BT_CTLR_ULL_LLL_PRIO_SUPPORT
863	range BT_CTLR_LLL_PRIO 3 if SOC_SERIES_NRF51X
864	range BT_CTLR_LLL_PRIO 6 if (SOC_COMPATIBLE_NRF52X || SOC_COMPATIBLE_NRF53X)
865	default BT_CTLR_LLL_PRIO if (!BT_CTLR_ULL_LLL_PRIO_SUPPORT || BT_CTLR_ZLI || BT_CTLR_LOW_LAT)
866	default 1
867	help
868	  The interrupt priority for Ticker's Worker IRQ and Upper Link Layer
869	  higher priority functions.
870
871config BT_CTLR_ULL_LOW_PRIO
872	int "Upper Link Layer Low IRQ priority" if BT_CTLR_ULL_LLL_PRIO_SUPPORT
873	range BT_CTLR_ULL_HIGH_PRIO 3 if SOC_SERIES_NRF51X
874	range BT_CTLR_ULL_HIGH_PRIO 6 if (SOC_COMPATIBLE_NRF52X || SOC_COMPATIBLE_NRF53X)
875	default BT_CTLR_ULL_HIGH_PRIO
876	help
877	  The interrupt priority for Ticker's Job IRQ and Upper Link Layer
878	  lower priority functions.
879
880config BT_CTLR_LOW_LAT
881	bool "Low latency non-negotiating event preemption"
882	select BT_CTLR_LOW_LAT_ULL_DONE
883	default y if SOC_SERIES_NRF51X
884	help
885	  Use low latency non-negotiating event preemption. This reduces
886	  Radio ISR latencies by the controller event scheduling framework.
887	  Consequently, this reduces on-air radio utilization due to redundant
888	  radio state switches.
889
890config BT_CTLR_LOW_LAT_ULL
891	prompt "Low latency ULL"
892	bool
893	depends on BT_CTLR_LOW_LAT
894	default y
895	help
896	  Low latency ULL implementation that uses tailchaining instead of while
897	  loop to demux rx messages from LLL.
898
899config BT_CTLR_LOW_LAT_ULL_DONE
900	prompt "Low latency ULL prepare dequeue"
901	bool
902	help
903	  Done events be processed and dequeued in ULL context.
904
905config BT_CTLR_CONN_META
906	prompt "Connection meta data extension"
907	bool
908	help
909	  Enables vendor specific per-connection meta data as part of the
910	  LLL connection object.
911
912config BT_CTLR_RX_PDU_META
913	prompt "RX pdu meta data"
914	bool
915
916config BT_CTLR_NRF_GRTC
917	bool "Use nRF GRTC peripheral"
918	depends on SOC_COMPATIBLE_NRF54LX
919	select BT_TICKER_CNTR_FREE_RUNNING
920	default y
921	help
922	  Enable use of nRF54Lx NRF_GRTC peripheral.
923
924config BT_CTLR_NRF_GRTC_START
925	bool "Start nRF GRTC peripheral"
926	depends on BT_CTLR_NRF_GRTC
927	help
928	  Enable explicit start of nRF54Lx NRF_GRTC peripheral.
929
930config BT_CTLR_NRF_GRTC_KEEPRUNNING
931	bool "Keep running nRF GRTC peripheral"
932	depends on BT_CTLR_NRF_GRTC_START
933	help
934	  Keep running nRF GRTC peripheral.
935
936config BT_CTLR_NRF_GRTC_AUTOEN_CPUACTIVE
937	bool "Auto enable nRF GRTC on CPU active"
938	depends on BT_CTLR_NRF_GRTC_START
939	help
940	  Auto enable nRF GRTC on CPU active.
941
942config BT_CTLR_NRF_GRTC_AUTOEN_DEFAULT
943	bool "Auto enable nRF GRTC by default"
944	depends on BT_CTLR_NRF_GRTC_START
945	help
946	  Auto enable nRF GRTC by default.
947
948config BT_CTLR_RADIO_ENABLE_FAST
949	bool "Use tTXEN/RXEN,FAST ramp-up"
950	depends on SOC_COMPATIBLE_NRF52X || SOC_COMPATIBLE_NRF53X || SOC_COMPATIBLE_NRF54LX
951	select BT_CTLR_SW_SWITCH_SINGLE_TIMER if SOC_COMPATIBLE_NRF54LX
952	default y
953	help
954	  Enable use of fast radio ramp-up mode.
955
956config BT_CTLR_RADIO_TIMER_ISR
957	# Hidden, enables use of timer ISR callback
958	bool
959	depends on SOC_COMPATIBLE_NRF52X || SOC_COMPATIBLE_NRF53X
960	help
961	  Enables use of timer ISR callback.
962
963config BT_CTLR_TIFS_HW
964	bool "H/w Accelerated tIFS Trx switching"
965	depends on !BT_CTLR_RADIO_ENABLE_FAST && BT_CTLR_TIFS_HW_SUPPORT
966	default y
967	help
968	  Enable use of hardware accelerated tIFS Trx switching.
969
970config BT_CTLR_SW_SWITCH_SINGLE_TIMER
971	bool "Single TIMER tIFS Trx SW switching"
972	depends on (!BT_CTLR_TIFS_HW) && (SOC_COMPATIBLE_NRF52X || SOC_COMPATIBLE_NRF53X || \
973					  SOC_COMPATIBLE_NRF54LX)
974	help
975	  Implement the tIFS Trx SW switch with the same TIMER
976	  instance, as the one used for BLE event timing. Requires
977	  SW switching be enabled. Using a single TIMER:
978	  (+) frees up one TIMER instance
979	  (+) removes jitter for HCTO implementation
980	  (-) introduces drifting to the absolute time inside BLE
981	  events, that increases linearly with the number of
982	  packets exchanged in the event
983	  (-) makes it impossible to use most of the pre-programmed
984	  PPI channels for the controller, resulting in 4 channels
985	  less left for other uses
986
987config BT_CTLR_PARAM_CHECK
988	bool "HCI Command Parameter checking"
989	default y if BT_HCI_RAW
990	help
991	  Enable code checking HCI Command Parameters. This is not needed in
992	  combined host plus controller builds, saving some code space.
993
994if BT_CONN
995
996config BT_CTLR_LLCP_CONN
997	int "Number of connections with worst-case overlapping procedures"
998	default BT_MAX_CONN
999	range 1 BT_MAX_CONN
1000	help
1001	  Set the number connections for which worst-case buffer requirements
1002	  for LLCP procedures must be met. Executing LLCP procedures on
1003	  more than this number of connections simultaneously may cause
1004	  instabilities.
1005
1006config BT_CTLR_LLCP_TX_PER_CONN_TX_CTRL_BUF_NUM_MAX
1007	int
1008	default 4
1009	help
1010	  The theoretical maximum number of tx ctrl buffers needed for any connection, is 4.
1011	  two for active encryption procedure plus one for rejecting a remote request
1012	  and one for a local terminate
1013
1014config BT_CTLR_LLCP_PER_CONN_TX_CTRL_BUF_NUM
1015	int "Number of tx control buffers to be reserved per connection"
1016	default BT_CTLR_LLCP_TX_PER_CONN_TX_CTRL_BUF_NUM_MAX
1017	range 0 BT_CTLR_LLCP_TX_PER_CONN_TX_CTRL_BUF_NUM_MAX
1018	help
1019	  Set the number control buffers that is to be pre allocated per connection
1020	  This defines the minimum number of buffers available for any connection
1021	  Setting this to non zero will ensure a connection will always have access
1022	  to buffer(s) for control procedure TX
1023
1024config BT_CTLR_LLCP_COMMON_TX_CTRL_BUF_NUM
1025	int "Number of tx control buffers to be available across all connections"
1026	default 0
1027	range 0 $(UINT8_MAX)
1028	help
1029	  Set the number control buffers that is to be available for tx.
1030	  This defines the size of the pool of tx buffers available
1031	  for control procedure tx. This pool is shared across all
1032	  procedures/connections with allocation through a fifo queue.
1033	  Configure between 0 and (4 - BT_CTLR_LLCP_PER_CONN_TX_CTRL_BUF_NUM) * BT_CTLR_LLCP_CONN
1034
1035config BT_CTLR_LLCP_LOCAL_PROC_CTX_BUF_NUM
1036	int "Number of local control procedure contexts to be available across all connections"
1037	default 6 if (BT_AUTO_PHY_UPDATE=y || BT_AUTO_DATA_LEN_UPDATE=y) && BT_CTLR_LLCP_CONN < 4
1038	default 2 if BT_CTLR_LLCP_CONN = 1
1039	default BT_CTLR_LLCP_CONN if BT_CTLR_LLCP_CONN > 1
1040	range 2 $(UINT8_MAX)
1041	help
1042	  Set the number control procedure contexts that is to be available.
1043	  This defines the size of the pool of control procedure contexts available
1044	  for handling local initiated control procedures.
1045	  This pool is shared across all connections, with allocation through a queue.
1046
1047config BT_CTLR_LLCP_REMOTE_PROC_CTX_BUF_NUM
1048	int "Number of remote control procedure contexts to be available across all connections"
1049	default BT_CTLR_LLCP_CONN
1050	range 1 $(UINT8_MAX)
1051	help
1052	  Set the number control procedure contexts that is to be available.
1053	  This defines the size of the pool of control procedure contexts available
1054	  for handling remote initiated control procedures.
1055	  This pool is shared across all connections, with allocation through a queue.
1056
1057config BT_CTLR_LLID_DATA_START_EMPTY
1058	bool "Handle zero length L2CAP start frame"
1059	default y if BT_HCI_RAW
1060	help
1061	  Handle zero length L2CAP start frame.
1062
1063config BT_CTLR_TX_RETRY_DISABLE
1064	bool "Disable Tx Retry"
1065	help
1066	  Avoid retransmission of a PDU if peer device Nack-ed a transmission
1067	  in the current connection event, close the connection event so as to
1068	  save current consumption on retries (in case peer has no buffers to
1069	  receive new PDUs).
1070
1071	  Enabling this will lower power consumption, but increase transmission
1072	  latencies by one connection interval as the next attempt to send a PDU
1073	  would happen in the next connection event instead of repeated retries
1074	  in the current connection event.
1075
1076config BT_CTLR_TX_DEFER
1077	bool "Deferred ACL Tx packet transmission setup"
1078	select BT_CTLR_RADIO_TIMER_ISR
1079	help
1080	  Enable deferred ACL Tx packet transmission setup by radio, so that an
1081	  enqueued ACL Data packet by the upper layer can be transmitted with
1082	  the shortest latency.
1083
1084config BT_CTLR_THROUGHPUT
1085	bool "Measure incoming Tx throughput"
1086	help
1087	  Measure incoming Tx throughput and log the results.
1088
1089config BT_CTLR_FORCE_MD_COUNT
1090	int "Forced MD bit count" if !BT_CTLR_FORCE_MD_AUTO
1091	depends on !BT_CTLR_LOW_LAT_ULL
1092	range 0 $(UINT8_MAX)
1093	default 1 if BT_CTLR_FORCE_MD_AUTO
1094	default 0
1095	help
1096	  No. of times to force MD bit to be set in Tx PDU after a successful
1097	  transmission of non-empty PDU.
1098
1099	  This will prolong the connection event to from being closed in cases
1100	  where applications want to send data in same connection event but are
1101	  slow in providing new Tx data.
1102
1103config BT_CTLR_FORCE_MD_AUTO
1104	bool "Forced MD bit automatic calculation"
1105	depends on !BT_CTLR_LOW_LAT_ULL
1106	select BT_CTLR_THROUGHPUT
1107	default y if BT_HCI_RAW
1108	help
1109	  Force MD bit in transmitted PDU based on runtime incoming transmit
1110	  data throughput.
1111
1112config BT_CTLR_CONN_RANDOM_FORCE
1113	bool "Random forced scheduling for peripheral on missed anchor point"
1114	depends on BT_PERIPHERAL
1115	default y
1116	help
1117	  When enabled, controller will have legacy behavior and randomly force
1118	  priority at next ticker scheduling for peripheral role, if anchor point is
1119	  missed.
1120	  Two or more connections with similar interval on a device connected
1121	  to a peer device having two or more connections at its end with same
1122	  interval could lock to a round robin pattern where in neither of the central
1123	  nor peripheral event would be in sync at either end. Randomness allows
1124	  to break this locked round robin pattern permitting an anchor point sync.
1125
1126config BT_CTLR_CONN_RSSI_EVENT
1127	bool "Connection RSSI event"
1128	depends on BT_CTLR_CONN_RSSI
1129	help
1130	  Generate events for connection RSSI measurement.
1131
1132config BT_CTLR_ALLOW_SAME_PEER_CONN
1133	bool "Allow connection requests from same peer"
1134	depends on BT_MAX_CONN > 1
1135	help
1136	  Allow connection requests from the same peer. While the
1137	  Bluetooth specification does not allow multiple connections
1138	  with the same peer, allowing such connections is useful
1139	  while debugging multiple connections.
1140
1141	  WARNING: This option enables behavior that violates the Bluetooth
1142	  specification.
1143
1144config BT_CTLR_CONN_INTERVAL_LOW_LATENCY
1145	bool "Allow low latency connection intervals"
1146	help
1147	  Allow low latency connection intervals.
1148
1149config BT_CTLR_EVENT_IFS_LOW_LAT_US
1150	prompt "Low latency tIFS value in microseconds" if BT_CTLR_CONN_INTERVAL_LOW_LATENCY
1151	int
1152	default 52 if BT_CTLR_CONN_INTERVAL_LOW_LATENCY
1153	default 150
1154	help
1155	  Set low latency tIFS value.
1156
1157endif # BT_CONN
1158
1159config BT_CTLR_ADV_INDICATION
1160	bool "Advertisement indications"
1161	depends on BT_BROADCASTER
1162	help
1163	  Generate events indicating on air advertisement events.
1164
1165config BT_CTLR_SCAN_REQ_NOTIFY
1166	bool "Scan Request Notifications"
1167	depends on BT_BROADCASTER
1168	help
1169	  Generate events notifying the on air scan requests received.
1170
1171config BT_CTLR_SCAN_REQ_RSSI
1172	bool "Measure Scan Request RSSI"
1173	depends on BT_CTLR_SCAN_REQ_NOTIFY
1174	help
1175	  Measure RSSI of the on air scan requests received.
1176
1177config BT_CTLR_SCAN_INDICATION
1178	bool "Scanner indications"
1179	depends on BT_OBSERVER
1180	help
1181	  Generate events indicating on air scanner events.
1182
1183config BT_CTLR_SCAN_UNRESERVED
1184	bool "Unreserved scan window"
1185	depends on BT_OBSERVER && !BT_CTLR_LOW_LAT
1186	default y if BT_MESH
1187	help
1188	  Scanner will not use time space reservation for scan window when in
1189	  continuous scan mode.
1190
1191config BT_MAYFLY_YIELD_AFTER_CALL
1192	bool "Yield from mayfly thread after first call"
1193	default y
1194	help
1195	  Only process one mayfly callback per invocation (legacy behavior).
1196	  If set to 'n', all pending mayflies for callee are executed before
1197	  yielding
1198
1199config BT_TICKER_CNTR_FREE_RUNNING
1200	# Hidden options to use free running counter in ticker implementation
1201	bool
1202
1203config BT_TICKER_LOW_LAT
1204	bool "Ticker low latency mode"
1205	default y if SOC_SERIES_NRF51X
1206	help
1207	  This option enables legacy ticker scheduling which defers overlapping
1208	  ticker node timeouts and thereby prevents ticker interrupts during
1209	  radio RX/TX. Enabling this option disables the ticker priority- and
1210	  'must expire' features.
1211
1212config BT_TICKER_UPDATE
1213	bool "Ticker Update"
1214	help
1215	  This option enables Ticker Update interface.
1216
1217config BT_TICKER_REMAINDER_SUPPORT
1218	bool
1219
1220config BT_TICKER_START_REMAINDER
1221	bool "Ticker Start Remainder Parameter"
1222	depends on BT_TICKER_REMAINDER_SUPPORT
1223	help
1224	  This option enables Ticker Start interface remainder parameter for
1225	  first expire timeout.
1226
1227config BT_TICKER_JOB_IDLE_GET
1228	bool "Ticker Job Idle Get"
1229	default y if BT_TICKER_LOW_LAT
1230	help
1231	  This option enables the ticker interface to query the idle state of
1232	  the Ticker Job execution context. This interface is used to disable
1233	  Ticker Job execution once in idle state, no operations pending for the
1234	  Ticker Job to process.
1235
1236config BT_TICKER_NEXT_SLOT_GET
1237	bool "Ticker Next Slot Get"
1238	help
1239	  This option enables ticker interface to iterate through active
1240	  ticker nodes, returning tick to expire.
1241
1242config BT_TICKER_REMAINDER_GET
1243	bool "Ticker Next Slot Get with Remainder"
1244	depends on BT_TICKER_REMAINDER_SUPPORT
1245	select BT_TICKER_NEXT_SLOT_GET
1246	select BT_TICKER_NEXT_SLOT_GET_MATCH
1247	default y
1248	help
1249	  This option enables ticker interface to iterate through active
1250	  ticker nodes, returning tick to expire and remainder from a reference
1251	  tick.
1252
1253config BT_TICKER_LAZY_GET
1254	bool "Ticker Next Slot Get with Lazy"
1255	select BT_TICKER_NEXT_SLOT_GET
1256	select BT_TICKER_NEXT_SLOT_GET_MATCH
1257	help
1258	  This option enables ticker interface to iterate through active
1259	  ticker nodes, returning tick to expire and lazy count from a reference
1260	  tick.
1261
1262config BT_TICKER_NEXT_SLOT_GET_MATCH
1263	bool "Ticker Next Slot Get with match callback"
1264	depends on BT_TICKER_NEXT_SLOT_GET
1265	default y if BT_TICKER_SLOT_AGNOSTIC
1266	help
1267	  This option enables ticker interface to iterate through active
1268	  ticker nodes with a callback for every found ticker node. When
1269	  returning true in the callback, iteration will stop and the normal
1270	  operation callback invoked.
1271
1272config BT_TICKER_EXT
1273	bool "Ticker extensions"
1274	depends on !BT_TICKER_LOW_LAT
1275	default y if BT_BROADCASTER
1276	help
1277	  This option enables ticker extensions such as re-scheduling of
1278	  ticker nodes with slot_window set to non-zero. Ticker extensions
1279	  are invoked by using available '_ext' versions of ticker interface
1280	  functions.
1281
1282config BT_TICKER_EXT_SLOT_WINDOW_YIELD
1283	bool "Tickers with slot window always yields"
1284	depends on BT_TICKER_EXT
1285	default y if BT_MESH || BT_CTLR_ADV_ISO
1286	help
1287	  This options forces tickers with slot window extensions to yield to
1288	  normal tickers and be placed at the end of their slot window.
1289
1290config BT_TICKER_EXT_EXPIRE_INFO
1291	bool "Ticker timeout with other ticker's expire information"
1292	select BT_TICKER_EXT
1293	help
1294	  This option enables ticker to return expiration info. The extended
1295	  ticker interface) is used to ask for expiration information for
1296	  another ticker id to be returned in the ticker callback. This utilises
1297	  the extended ticker interface and a callback function with a different
1298	  context to keep the current ticker interface as unchanged as possible.
1299
1300config BT_TICKER_PRIORITY_SET
1301	bool "Tickers with priority based collision resolution"
1302	depends on BT_TICKER_EXT
1303	help
1304	  This option provide tickers with persistent priority value that will
1305	  be used in resolving collisions.
1306
1307	  The priority feature if enabled then a custom ULL is needed by vendors
1308	  to avoid repeated skipping of overlapping events as next_has_priority
1309	  check uses lazy value that would be always lazy_next > lazy_current as
1310	  currently skipped event becomes the next event with lazy value
1311	  incremented by 1. This repeated skip happens when all the time
1312	  between the event intervals are occupied continuously by overlapping
1313	  tickers.
1314
1315config BT_TICKER_SLOT_AGNOSTIC
1316	bool "Slot agnostic ticker mode"
1317	help
1318	  This option enables slot agnostic ticker mode, which ignores slot
1319	  reservations and collision handling, and operates as a simple
1320	  multi-instance programmable timer.
1321
1322config BT_TICKER_PREFER_START_BEFORE_STOP
1323	bool "Ticker prefer start before stop request"
1324	help
1325	  Under race conditions wherein for a given ticker node if a number of
1326	  start and stop operations are enqueued towards ticker_job by a said
1327	  user execution context, then start operations is preferred to be
1328	  processed before stop operations.
1329
1330	  Without this option, the default behavior is to defer all start
1331	  requests after all stop requests enqueued by all user context having
1332	  been processed. The rationale for default behavior being that under
1333	  race conditions, start followed by stop requests, or start before stop
1334	  requests, the said ticker node is always scheduled and at timeout the
1335	  execution context can take decision based on its execution state.
1336
1337config BT_CTLR_JIT_SCHEDULING
1338	bool "Just-in-Time Scheduling"
1339	select BT_TICKER_SLOT_AGNOSTIC
1340	help
1341	  This option enables the experimental 'Next Generation' scheduling
1342	  feature, which eliminates priorities and collision resolving in the
1343	  ticker, and instead relies on just-in-time ("lazy") resolution in
1344	  the link layer.
1345
1346config BT_CTLR_PERIPHERAL_ISO_EARLY_CIG_START
1347	bool "Early start of peripheral CIG event"
1348	depends on BT_CTLR_PERIPHERAL_ISO
1349	help
1350	  Start scheduling the Peripheral ISO CIG events one event in advance
1351	  and hence adjust CIG offset and reference point ahead one interval.
1352
1353config BT_CTLR_USER_EXT
1354	prompt "Proprietary extensions in Controller"
1355	bool
1356	help
1357	  Catch-all for enabling proprietary event types in Controller behavior.
1358
1359config BT_CTLR_USER_EVT_RANGE
1360	int "Range of event constants reserved for proprietary event types"
1361	depends on BT_CTLR_USER_EXT
1362	default 5
1363	range 0 10
1364	help
1365	  Number of event types reserved for proprietary use. The range
1366	  is typically used when BT_CTLR_USER_EXT is in use.
1367
1368config BT_CTLR_USER_TICKER_ID_RANGE
1369	int "Range of ticker id constants reserved for proprietary ticker nodes"
1370	depends on BT_CTLR_USER_EXT
1371	default 0
1372	range 0 10
1373	help
1374	  Number of ticker ids reserved for proprietary use. The range
1375	  is typically used when BT_CTLR_USER_EXT is in use.
1376
1377config BT_RX_USER_PDU_LEN
1378	int "Maximum supported proprietary PDU buffer length"
1379	depends on BT_CTLR_USER_EXT
1380	default 2
1381	range 2 $(UINT8_MAX)
1382	help
1383	  Maximum data size for each proprietary PDU. This size includes link layer
1384	  header and payload. It does not account for HCI event headers as these
1385	  PDUs are assumed to not go across HCI.
1386
1387config BT_CTLR_USER_CPR_INTERVAL_MIN
1388	bool "Proprietary Connection Parameter Request minimum interval"
1389	depends on BT_CTLR_USER_EXT
1390	help
1391	  When enabled, controller will accept Connection Parameter Request
1392	  intervals down to a proprietary minimum value.
1393
1394config BT_CTLR_USER_CPR_ANCHOR_POINT_MOVE
1395	bool "Proprietary handling of anchor point movement"
1396	depends on BT_CTLR_USER_EXT && BT_CTLR_CONN_PARAM_REQ && BT_PERIPHERAL
1397	help
1398	  When enabled, defer accept/reject of Connection Parameter Request with only
1399	  anchor point movement to proprietary logic.
1400	  Only applicable for peripheral.
1401
1402endmenu
1403
1404# Workaround to be able to have default for "choice" in hidden "menu" above
1405choice BT_CTLR_OPTIMIZE
1406	prompt "Optimization options"
1407	depends on !LTO
1408
1409config BT_CTLR_OPTIMIZE_FOR_SPEED
1410	bool "Optimize for Speed"
1411
1412endchoice
1413
1414source "subsys/bluetooth/controller/coex/Kconfig"
1415
1416comment "BLE Controller debug configuration"
1417
1418config BT_CTLR_PROFILE_ISR
1419	bool "Profile radio ISR"
1420	help
1421	  Turn on measurement of radio ISR latency, CPU usage and generation of
1422	  controller event with these profiling data. The controller event
1423	  contains current, minimum and maximum ISR entry latencies; and
1424	  current, minimum and maximum ISR CPU use in micro-seconds.
1425
1426config BT_CTLR_DEBUG_PINS
1427	bool "Bluetooth Controller Debug Pins"
1428	depends on BOARD_NRF51DK_NRF51822 || BOARD_NRF52DK_NRF52832 || BOARD_NRF52DK_NRF52810 || BOARD_NRF52840DK_NRF52840 || BOARD_NRF52833DK_NRF52833 || BOARD_NRF5340DK_NRF5340_CPUNET || BOARD_RV32M1_VEGA
1429	help
1430	  Turn on debug GPIO toggling for the BLE Controller. This is useful
1431	  when debugging with a logic analyzer or profiling certain sections of
1432	  the code.
1433
1434endif # BT_LL_SW_SPLIT
1435