1# Bluetooth drivers configuration options
2
3# Copyright (c) 2016 Intel Corporation
4# SPDX-License-Identifier: Apache-2.0
5
6comment "Bluetooth HCI Driver Options"
7
8config BT_UART
9	bool
10	select SERIAL
11	select UART_INTERRUPT_DRIVEN
12
13config BT_H4
14	bool "H:4 UART"
15	select BT_UART
16	default y
17	depends on DT_HAS_ZEPHYR_BT_HCI_UART_ENABLED
18	help
19	  Bluetooth H:4 UART driver. Requires hardware flow control
20	  lines to be available.
21
22config BT_H5
23	bool "H:5 UART [EXPERIMENTAL]"
24	select BT_UART
25	select EXPERIMENTAL
26	default y
27	depends on DT_HAS_ZEPHYR_BT_HCI_3WIRE_UART_ENABLED
28	help
29	  Bluetooth three-wire (H:5) UART driver. Implementation of HCI
30	  Three-Wire UART Transport Layer.
31
32config BT_HCI_IPC
33	bool
34	default y
35	depends on DT_HAS_ZEPHYR_BT_HCI_IPC_ENABLED
36	select BT_HAS_HCI_VS
37	select IPC_SERVICE
38	select MBOX
39	help
40	  Bluetooth HCI driver for communication with another CPU
41	  using the IPC subsystem.
42
43config BT_HCI_IPC_SEND_RETRY_COUNT
44	int "HCI IPC send retry count"
45	depends on BT_HCI_IPC
46	default 3
47	help
48	  Number of times to retry sending a message via IPC.
49	  The retries occur in case of a failure to send a message
50	  through IPC (-ENOMEM returned by ipc_service_send).
51
52config BT_HCI_IPC_SEND_RETRY_DELAY_US
53	int "HCI IPC send retry delay (us)"
54	depends on BT_HCI_IPC
55	default 75
56	help
57	  Delay in microseconds between retries when sending a message via IPC.
58	  When a single tick (CONFIG_SYS_CLOCK_TICKS_PER_SEC) is bigger then
59	  the retry delay the k_busy_wait function is used. Set with care.
60
61config BT_HCI_IPC_ENDPOINT_BOUND_TIMEOUT_MS
62	int "HCI IPC binding timeout value in milliseconds"
63	depends on BT_HCI_IPC
64	default 2000
65	help
66	  Timeout value that HCI will wait for an IPC endpoint to be bound,
67	  in milliseconds.
68
69config BT_SPI
70	bool
71	select SPI
72	help
73	  Supports Bluetooth ICs using SPI as the communication protocol.
74	  HCI packets are sent and received as single Byte transfers,
75	  prepended after a known header. Headers may vary per device, so
76	  additional platform specific knowledge may need to be added as
77	  devices are.
78
79config BT_SPI_INIT_PRIORITY
80	int "BT SPI init priority"
81	depends on BT_SPI
82	default 75
83
84config BT_SPI_ZEPHYR
85	bool
86	default y
87	depends on DT_HAS_ZEPHYR_BT_HCI_SPI_ENABLED
88	select BT_SPI
89	help
90	  Bluetooth HCI over SPI driver for communication with Bluetooth
91	  controllers running Zephyr.
92
93config BT_SPI_BLUENRG
94	bool
95	default y
96	depends on DT_HAS_ST_HCI_SPI_V1_ENABLED || DT_HAS_ST_HCI_SPI_V2_ENABLED
97	select BT_SPI
98	help
99	  Bluetooth HCI over SPI driver for communication with
100	  STMicroelectronics BlueNRG devices.
101
102config BT_BLUENRG_ACI
103	bool "ACI message with BlueNRG-based devices"
104	depends on BT_SPI_BLUENRG
105	select BT_HCI_SET_PUBLIC_ADDR
106	help
107	  Enable support for devices compatible with the BlueNRG Bluetooth
108	  Stack. Current driver supports: ST BLUENRG-MS.
109
110config BT_STM32_IPM
111	bool
112	default y
113	depends on DT_HAS_ST_STM32WB_RF_ENABLED
114	select USE_STM32_HAL_CORTEX
115	select HAS_STM32LIB
116	select BT_HCI_SETUP
117	help
118	  TODO
119
120config BT_STM32WBA
121	bool
122	default y
123	depends on DT_HAS_ST_HCI_STM32WBA_ENABLED
124	depends on ZEPHYR_HAL_STM32_MODULE_BLOBS
125	select HAS_STM32LIB
126	select BT_HCI_SET_PUBLIC_ADDR if !BT_HCI_RAW
127	help
128	  ST STM32WBA HCI Bluetooth interface
129
130config BT_STM32WB0
131	bool "STM32WB0 HCI driver"
132	default y
133	depends on DT_HAS_ST_HCI_STM32WB0_ENABLED
134	depends on ZEPHYR_HAL_STM32_MODULE_BLOBS
135	select HAS_STM32LIB
136	select USE_STM32_HAL_PKA
137	select USE_STM32_HAL_CORTEX
138	select USE_STM32_HAL_GPIO
139	select USE_STM32_HAL_RADIO
140	select USE_STM32_HAL_RADIO_TIMER
141	help
142	  ST STM32WB0 HCI Bluetooth interface
143
144config BT_SILABS_EFR32
145	bool "Silabs EFR32 HCI driver"
146	default y
147	depends on DT_HAS_SILABS_BT_HCI_EFR32_ENABLED
148	depends on ZEPHYR_HAL_SILABS_MODULE_BLOBS || BUILD_ONLY_NO_BLOBS
149	depends on !PM || SOC_GECKO_PM_BACKEND_PMGR
150	select SOC_GECKO_USE_RAIL
151	select MBEDTLS
152	select MBEDTLS_PSA_CRYPTO_C
153	select MBEDTLS_ENTROPY_C
154	select HAS_BT_CTLR
155	select BT_CTLR_PHY_UPDATE_SUPPORT
156	select BT_CTLR_PER_INIT_FEAT_XCHG_SUPPORT
157	select BT_CTLR_DATA_LEN_UPDATE_SUPPORT
158	select BT_CTLR_EXT_REJ_IND_SUPPORT
159	select BT_CTLR_CHAN_SEL_2_SUPPORT
160	select BT_CTLR_CONN_RSSI_SUPPORT
161	select BT_CTLR_ADV_EXT_SUPPORT
162	help
163	  Use Silicon Labs binary Bluetooth library to connect to the
164	  controller.
165
166source "drivers/bluetooth/hci/Kconfig.silabs"
167
168config BT_SILABS_SIWX91X
169	bool "Silabs SiWx91x Bluetooth interface"
170	default y
171	depends on DT_HAS_SILABS_SIWX91X_BT_HCI_ENABLED
172	select WISECONNECT_NETWORK_STACK
173	select ENTROPY_GENERATOR
174	help
175	  Use Silicon Labs Wiseconnect 3.x Bluetooth library to connect to the controller.
176
177	# SiWx917 BLE controller currently does not support HCI Command: Host Number of Completed Packets
178	configdefault BT_HCI_ACL_FLOW_CONTROL
179		default n if BT_SILABS_SIWX91X
180
181config BT_USERCHAN
182	bool
183	depends on BOARD_NATIVE_SIM
184	default y
185	depends on DT_HAS_ZEPHYR_BT_HCI_USERCHAN_ENABLED
186	select NATIVE_USE_NSI_ERRNO
187	help
188	  This driver provides access to the local Linux host's Bluetooth
189	  adapter using a User Channel HCI socket to the Linux kernel. It
190	  is only intended to be used with the native_sim[//64] build of Zephyr.
191	  The Bluetooth adapter must be powered off in order for Zephyr to
192	  be able to use it.
193
194config BT_ESP32
195	bool
196	default y
197	depends on DT_HAS_ESPRESSIF_ESP32_BT_HCI_ENABLED
198	depends on ZEPHYR_HAL_ESPRESSIF_MODULE_BLOBS || BUILD_ONLY_NO_BLOBS
199	select HAS_BT_CTLR
200	select BT_CTLR_ADV_EXT_SUPPORT if SOC_SERIES_ESP32S3 || SOC_SERIES_ESP32C3
201	help
202	  Espressif HCI bluetooth interface
203
204config BT_PSOC6_BLESS
205	bool
206	default y
207	depends on DT_HAS_INFINEON_CAT1_BLESS_HCI_ENABLED
208	depends on ZEPHYR_HAL_INFINEON_MODULE_BLOBS
209	select BT_HCI_SETUP
210	help
211	  PSOC 6 BLESS driver with BLE Controller which operates in
212	  Single CPU mode.
213
214config BT_DA1453X
215	bool "DA1453x HCI driver"
216	default y
217	depends on DT_HAS_RENESAS_BT_HCI_DA1453X_ENABLED
218	select GPIO
219	help
220	  Bluetooth HCI driver for communication with controller
221	  running on DA1453x MCU.
222
223config BT_DA1469X
224	bool
225	default y
226	depends on DT_HAS_RENESAS_BT_HCI_DA1469X_ENABLED
227	help
228	  Bluetooth HCI driver for communication with CMAC core
229	  on DA1469x MCU.
230
231config BT_NXP
232	bool
233	default y
234	depends on DT_HAS_NXP_HCI_BLE_ENABLED
235	select BT_HCI_SETUP
236	help
237	  NXP HCI bluetooth interface
238
239config BT_CYW208XX
240	bool
241	default y
242	depends on DT_HAS_INFINEON_CYW208XX_HCI_ENABLED
243	select BT_HCI_SET_PUBLIC_ADDR
244	help
245	  Infineon CYW208XX HCI bluetooth interface
246
247config BT_AMBIQ_HCI
248	bool
249	default y
250	depends on DT_HAS_AMBIQ_BT_HCI_SPI_ENABLED
251	select SPI
252	select GPIO if SOC_SERIES_APOLLO4X
253	select CLOCK_CONTROL if SOC_SERIES_APOLLO4X
254	select BT_HCI_SETUP
255	select AMBIQ_COMPONENT_USE_BT
256	help
257	  Supports Ambiq Bluetooth SoC using SPI as the communication protocol.
258	  HCI packets are sent and received as single Byte transfers.
259
260config BT_HCI_INIT_PRIORITY
261	int "BT HCI init priority"
262	default 75 if BT_AMBIQ_HCI
263	default KERNEL_INIT_PRIORITY_DEVICE
264	help
265	  The priority of BT HCI driver initialization.
266
267config BT_STM32_IPM_RX_STACK_SIZE
268	int "STM32 IPM stack size for RX thread"
269	depends on BT_STM32_IPM
270	default 512
271
272config BT_AIROC
273	bool "AIROC BT connectivity"
274	default y
275	select GPIO                          if BT_H4
276	select UART                          if BT_H4
277	select UART_USE_RUNTIME_CONFIGURE    if BT_H4
278	select BT_HCI_SETUP
279	select USE_INFINEON_ABSTRACTION_RTOS if BT_CYW208XX
280	select EVENTS                        if BT_CYW208XX
281	depends on DT_HAS_INFINEON_CYW43XXX_BT_HCI_ENABLED || DT_HAS_INFINEON_CYW208XX_HCI_ENABLED
282	help
283	  Infineon's AIROC™ Wi-Fi & combos portfolio integrates
284	  IEEE 802.11a/b/g/n/ac/ax Wi-Fi and Bluetooth® 5.2 in a single-chip
285	  solution to enable small-form-factor IoT designs.
286source "drivers/bluetooth/hci/Kconfig.esp32"
287source "drivers/bluetooth/hci/Kconfig.infineon"
288source "drivers/bluetooth/hci/Kconfig.nxp"
289
290config BT_DRIVER_QUIRK_NO_AUTO_DLE
291	bool "Host auto-initiated Data Length Update quirk"
292	depends on BT_AUTO_DATA_LEN_UPDATE
293	default y if BT_HCI_IPC || BT_ESP32
294	help
295	  Enable the quirk wherein BT Host stack will auto-initiate Data Length
296	  Update procedure for new connections for controllers that do not
297	  auto-initiate the procedure if the default data length parameters are
298	  not equal to the initial parameters.
299
300	  This has to be enabled when the BLE controller connected is Zephyr
301	  open source controller.
302
303config BT_HCI_SET_PUBLIC_ADDR
304	bool
305	select BT_HCI_SETUP
306	help
307	  Pass the controller's public address to the HCI driver in setup()
308
309	  This option should be enabled by drivers for controllers that support setting the
310	  public identity through vendor-specific commands. They can then implement the
311	  setup() HCI driver API function and get the address to set from the public_addr field.
312
313	  From the application side, the public address is set using the first call to
314	  bt_id_create(), before calling bt_enable().
315
316config BT_HCI_SETUP
317	bool
318	help
319	  Enable the HCI vendor-specific Setup function.
320
321	  This option has to be enabled when the BT Controller requires execution
322	  of the vendor-specific commands sequence to initialize the BT Controller
323	  before the BT Host executes a Reset sequence.
324
325	  The user should generally avoid changing it via menuconfig or in
326	  configuration files. This option are enabled by the vendor-specific
327	  HCI extension, where the Setup function is implemented.
328
329config BT_DRV_TX_STACK_SIZE
330	int
331	default 256
332	help
333	  Stack size for the HCI driver's TX thread.
334
335config BT_DRV_RX_STACK_SIZE
336	int
337	default 640 if (BT_SPI || BT_AMBIQ_HCI)
338	default BT_RX_STACK_SIZE if (BT_H4 || BT_HCI_RAW_H4)
339	default BT_STM32_IPM_RX_STACK_SIZE if BT_STM32_IPM
340	default HCI_NXP_RX_STACK_SIZE if HCI_NXP_RX_THREAD
341	default 512
342	help
343	  Stack size for the HCI driver's RX thread.
344
345config BT_H4_NXP_CTLR
346	bool "NXP Bluetooth Controller"
347	select GPIO
348	depends on BT_H4
349	select CRC
350	select BT_HCI_SETUP
351	default y
352	depends on DT_HAS_NXP_BT_HCI_UART_ENABLED
353	help
354	  Enables support for NXP Bluetooth Controller.
355	  More inforamtion about NXP Bluetooth profuct could be found on
356	  https://www.nxp.com/products/wireless-connectivity/wi-fi-plus-bluetooth-plus-802-15-4:WIFI-BLUETOOTH
357
358if BT_H4_NXP_CTLR
359
360config BT_H4_NXP_CTLR_WAIT_HDR_SIG_TIMEOUT
361	int "Timeout for waiting HDR Signure"
362	range 1000 60000
363	default 2500
364	help
365	  Timeout for waiting HDR Signure. Unit is millisecond.
366
367config BT_H4_NXP_CTLR_WAIT_TIME_AFTER_UPLOAD
368	int "Waiting time after firmware is uploaded"
369	range 1000 5000
370	default 1000
371	help
372	  Waiting time after firmware is uploaded. Unit is millisecond.
373
374config BT_H4_NXP_CTLR_WAIT_TIME_AFTER_BAUDRATE_UPDATE
375	int "Waiting time after controller baudrate is updated"
376	range 500 5000
377	default 500
378	help
379	  Waiting time after controller baudrate is updated. Unit is millisecond.
380
381endif #BT_H4_NXP_CTLR
382