silabs: drivers: bluetooth: Move configurations to Kconfig

Several driver setting were as defines in driver file which made hard to
change by application programmers. Fixed by adding
silicon labs specific Kconfig file for bluetooth driver configurations.

Also some cleaning for handling Kconfig conditional to conform
preferred style.

Signed-off-by: Petri Pitkanen <petri.pitkanen@silabs.com>
This commit is contained in:
Petri Pitkanen 2024-12-17 10:47:04 +02:00 committed by Benjamin Cabé
commit 5748738c60
3 changed files with 73 additions and 29 deletions

View file

@ -116,7 +116,7 @@ config BT_STM32WB0
ST STM32WB0 HCI Bluetooth interface
config BT_SILABS_EFR32
bool
bool "Silabs EFR32 HCI driver"
default y
depends on DT_HAS_SILABS_BT_HCI_EFR32_ENABLED
depends on ZEPHYR_HAL_SILABS_MODULE_BLOBS || BUILD_ONLY_NO_BLOBS
@ -136,6 +136,7 @@ config BT_SILABS_EFR32
help
Use Silicon Labs binary Bluetooth library to connect to the
controller.
source "drivers/bluetooth/hci/Kconfig.silabs"
config BT_USERCHAN
bool
@ -297,14 +298,6 @@ config BT_DRV_RX_STACK_SIZE
help
Stack size for the HCI driver's RX thread.
config BT_SILABS_EFR32_BUFFER_MEMORY
int "Silicon Labs Bluetooth Library memory buffer size"
depends on BT_SILABS_EFR32
default 6144
help
Select the size of allocated memory buffer for the Silicon Labs
Bluetooth Library.
config BT_H4_NXP_CTLR
bool "NXP Bluetooth Controller"
select GPIO

View file

@ -0,0 +1,44 @@
# Copyright (c) 2025 Silicon Laboratories Inc.
#
# SPDX-License-Identifier: Apache-2.0
menu "EFR32 Bluetooth Controller Configuration"
depends on BT_SILABS_EFR32
config BT_SILABS_EFR32_BUFFER_MEMORY
int "Memory buffer size"
default 6144
help
Select the size of allocated memory buffer for the Silicon Labs
Bluetooth Library. If set too low the capacity of the link layer may
suffer.
config BT_SILABS_EFR32_USER_ADVERTISERS
int "User advertisement sets"
default 0
help
Amount of advertisement sets reserved for application.
config BT_SILABS_EFR32_ACCEPT_LIST_SIZE
int "Accept list size"
default 1
help
Accept list size.
config BT_SILABS_EFR32_COMPLETED_PACKETS_THRESHOLD
int "Completed packet reporting threshold"
default 1
help
Completed packet reporting threshold value.
config BT_SILABS_EFR32_COMPLETED_PACKETS_TIMEOUT
int "Completed packet report event timeout"
default 3
help
Completed packet report event timeout.
config BT_SILABS_EFR32_ACCEPT_LINK_LAYER_STACK_SIZE
int "Link layer stack size"
default 1024
help
Link layer stack size.
endmenu

View file

@ -21,16 +21,19 @@ struct hci_data {
bt_hci_recv_t recv;
};
#define SL_BT_CONFIG_ACCEPT_LIST_SIZE 1
#define SL_BT_CONFIG_MAX_CONNECTIONS 1
#define SL_BT_CONFIG_USER_ADVERTISERS 1
#define SL_BT_CONTROLLER_BUFFER_MEMORY CONFIG_BT_SILABS_EFR32_BUFFER_MEMORY
#define SL_BT_CONTROLLER_LE_BUFFER_SIZE_MAX CONFIG_BT_BUF_ACL_TX_COUNT
#define SL_BT_CONTROLLER_COMPLETED_PACKETS_THRESHOLD 1
#define SL_BT_CONTROLLER_COMPLETED_PACKETS_EVENTS_TIMEOUT 3
#define SL_BT_SILABS_LL_STACK_SIZE 1024
#if defined(CONFIG_BT_MAX_CONN)
#define MAX_CONN CONFIG_BT_MAX_CONN
#else
#define MAX_CONN 0
#endif
static K_KERNEL_STACK_DEFINE(slz_ll_stack, SL_BT_SILABS_LL_STACK_SIZE);
#if defined(CONFIG_BT_CTLR_RL_SIZE)
#define CTLR_RL_SIZE CONFIG_BT_CTLR_RL_SIZE
#else
#define CTLR_RL_SIZE 0
#endif
static K_KERNEL_STACK_DEFINE(slz_ll_stack, CONFIG_BT_SILABS_EFR32_ACCEPT_LINK_LAYER_STACK_SIZE);
static struct k_thread slz_ll_thread;
/* Semaphore for Link Layer */
@ -172,13 +175,18 @@ static int slz_bt_open(const struct device *dev, bt_hci_recv_t recv)
sl_btctrl_disable_coded_phy();
/* sl_btctrl_init_mem returns the number of memory buffers allocated */
ret = sl_btctrl_init_mem(SL_BT_CONTROLLER_BUFFER_MEMORY);
ret = sl_btctrl_init_mem(CONFIG_BT_SILABS_EFR32_BUFFER_MEMORY);
if (!ret) {
LOG_ERR("Failed to allocate memory %d", ret);
return -ENOMEM;
}
sl_btctrl_configure_le_buffer_size(SL_BT_CONTROLLER_LE_BUFFER_SIZE_MAX);
sl_btctrl_configure_le_buffer_size(CONFIG_BT_BUF_ACL_TX_COUNT);
if (IS_ENABLED(CONFIG_BT_CTLR_PRIVACY)) {
sl_btctrl_allocate_resolving_list_memory(CTLR_RL_SIZE);
sl_btctrl_init_privacy();
}
ret = sl_btctrl_init_ll();
if (ret) {
@ -206,17 +214,18 @@ static int slz_bt_open(const struct device *dev, bt_hci_recv_t recv)
}
}
ret = sl_btctrl_init_basic(SL_BT_CONFIG_MAX_CONNECTIONS,
SL_BT_CONFIG_USER_ADVERTISERS,
SL_BT_CONFIG_ACCEPT_LIST_SIZE);
ret = sl_btctrl_init_basic(MAX_CONN, CONFIG_BT_SILABS_EFR32_USER_ADVERTISERS,
CONFIG_BT_SILABS_EFR32_ACCEPT_LIST_SIZE);
if (ret) {
LOG_ERR("Failed to initialize the controller %d", ret);
goto deinit;
}
sl_btctrl_configure_completed_packets_reporting(
SL_BT_CONTROLLER_COMPLETED_PACKETS_THRESHOLD,
SL_BT_CONTROLLER_COMPLETED_PACKETS_EVENTS_TIMEOUT);
if (IS_ENABLED(CONFIG_BT_CONN)) {
sl_btctrl_configure_completed_packets_reporting(
CONFIG_BT_SILABS_EFR32_COMPLETED_PACKETS_THRESHOLD,
CONFIG_BT_SILABS_EFR32_COMPLETED_PACKETS_TIMEOUT);
}
sl_bthci_init_upper();
sl_btctrl_hci_parser_init_default();
@ -228,8 +237,7 @@ static int slz_bt_open(const struct device *dev, bt_hci_recv_t recv)
}
sl_btctrl_hci_parser_init_phy();
#ifdef CONFIG_PM
{
if (IS_ENABLED(CONFIG_PM)) {
RAIL_ConfigSleep(BTLE_LL_GetRadioHandle(), RAIL_SLEEP_CONFIG_TIMERSYNC_ENABLED);
RAIL_Status_t status = RAIL_InitPowerManager();
@ -240,7 +248,6 @@ static int slz_bt_open(const struct device *dev, bt_hci_recv_t recv)
goto deinit;
}
}
#endif
hci->recv = recv;