Bluetooth: Controller: BT_CTLR_ISO_TX_BUFFER_SIZE from BT_ISO_TX_MTU

Derive BT_CTLR_ISO_TX_BUFFER_SIZE from BT_ISO_TX_MTU to have
optimal Controller memory allocations.
BT_CTLR_ISO_TX_BUFFER_SIZE can be set lower than
BT_ISO_TX_MTU in which case upper layer can send fragmented
SDU to the Controller.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2024-05-06 12:54:28 +02:00 committed by Carles Cufí
commit 2c6306d099
31 changed files with 138 additions and 88 deletions

View file

@ -14,11 +14,7 @@ CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=155
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
CONFIG_BT_CTLR_ISOAL_SOURCES=2
# FIXME: Host needs CONFIG_BT_ISO_TX_MTU + 4 bytes for sequence number, and optionally
# additional + 4 bytes for timestamp when not using BT_ISO_TIMESTAMP_NONE in bt_iso_chan_send(),
# otherwise Host tries to fragment ISO data.
# When Host is fixed, CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE can inherit the
# CONFIG_BT_ISO_TX_MTU value.
#
# Supports the highest SDU size required by any BAP LC3 presets (155)
# Support the highest SDU size required by any BAP LC3 presets (155) + 8 bytes of HCI ISO Data
# packet overhead (the Packet_Sequence_Number, ISO_SDU_Length, Packet_Status_Flag fields; and
# the optional Time_Stamp field, if supplied)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=163

View file

@ -0,0 +1,33 @@
# Zephyr Bluetooth Controller
CONFIG_BT_LL_SW_SPLIT=y
# Zephyr Bluetooth LE Controller needs 16 event buffers to generate Extended
# Advertising Report for receiving the complete 1650 bytes of data
CONFIG_BT_BUF_EVT_RX_COUNT=16
# Set maximum scan data length for Extended Scanning in Bluetooth LE Controller
CONFIG_BT_CTLR_SCAN_DATA_LEN_MAX=1650
# Increase Zephyr Bluetooth LE Controller Rx buffer to receive complete chain
# of PDUs
CONFIG_BT_CTLR_RX_BUFFERS=9
# Sufficient ISO SDU and PDU length for this sample with ISO_TX_MTU of 247
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251
# Number of supported streami sources and sinks
CONFIG_BT_CTLR_ISOAL_SOURCES=2
CONFIG_BT_CTLR_ISOAL_SINKS=1
# Support the highest SDU size required by this sample 247 + 8 bytes of HCI ISO Data
# packet overhead (timestamp and HCI ISO Data packet header)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISO_TX_BUFFERS=4
# Use Low Latency Connected ISO policy
CONFIG_BT_CTLR_ADVANCED_FEATURES=y
CONFIG_BT_CTLR_CONN_ISO_LOW_LATENCY_POLICY=y
# Use the below if the sample is sending stale packet sequence number
# CONFIG_BT_CTLR_ISOAL_SN_STRICT=n

View file

@ -8,3 +8,14 @@ tests:
integration_platforms:
- qemu_x86
tags: bluetooth
sample.bluetooth.central_iso.bt_ll_sw_split:
harness: bluetooth
platform_allow:
- qemu_cortex_m3
- qemu_x86
- nrf52_bsim
- nrf52833dk/nrf52833
integration_platforms:
- nrf52833dk/nrf52833
extra_args: OVERLAY_CONFIG=overlay-bt_ll_sw_split.conf
tags: bluetooth

View file

@ -77,7 +77,7 @@ CONFIG_BT_CTLR_LLCP_LOCAL_PROC_CTX_BUF_NUM=6
CONFIG_BT_CTLR_ADV_EXT=y
CONFIG_BT_CTLR_ADV_PERIODIC=y
CONFIG_BT_CTLR_ADV_ISO=y
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=251
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=247
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
# ISO Receive Controller
@ -89,7 +89,7 @@ CONFIG_BT_CTLR_SYNC_ISO_STREAM_MAX=2
# ISO Transmissions
CONFIG_BT_CTLR_ISO_TX_BUFFERS=8
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=251
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISOAL_SOURCES=2
# ISO Receptions

View file

@ -77,12 +77,12 @@ CONFIG_BT_CTLR_LLCP_LOCAL_PROC_CTX_BUF_NUM=6
# ISO Connection Oriented
CONFIG_BT_CTLR_CENTRAL_ISO=y
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=251
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251
# ISO Transmissions
CONFIG_BT_CTLR_ISO_TX_BUFFERS=8
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=251
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISOAL_SOURCES=2
# ISO Receptions

View file

@ -82,7 +82,7 @@ CONFIG_BT_CTLR_LLCP_LOCAL_PROC_CTX_BUF_NUM=6
CONFIG_BT_CTLR_ADV_EXT=y
CONFIG_BT_CTLR_ADV_PERIODIC=y
CONFIG_BT_CTLR_ADV_ISO=y
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=251
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=247
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
# ISO Receive Controller
@ -95,12 +95,12 @@ CONFIG_BT_CTLR_SYNC_ISO_STREAM_MAX=2
# ISO Connection Oriented
CONFIG_BT_CTLR_CENTRAL_ISO=y
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=251
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251
# ISO Transmissions
CONFIG_BT_CTLR_ISO_TX_BUFFERS=8
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=251
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISOAL_SOURCES=2
# ISO Receptions

View file

@ -31,8 +31,8 @@ CONFIG_BT_CTLR_ADV_PERIODIC=y
CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=191
CONFIG_BT_CTLR_ADV_ISO=y
CONFIG_BT_CTLR_ISO_TX_BUFFERS=16
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=251
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=251
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=247
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
CONFIG_BT_CTLR_ISOAL_SOURCES=2

View file

@ -44,12 +44,12 @@ CONFIG_BT_CTLR_SCAN_DATA_LEN_MAX=191
# ISO Connection Oriented
CONFIG_BT_CTLR_CENTRAL_ISO=y
CONFIG_BT_CTLR_PERIPHERAL_ISO=n
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=251
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251
# ISO Transmissions
CONFIG_BT_CTLR_ISO_TX_BUFFERS=16
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=251
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISOAL_SOURCES=2
# ISO Receptions

View file

@ -44,12 +44,12 @@ CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=191
# ISO Connection Oriented
CONFIG_BT_CTLR_CENTRAL_ISO=n
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=251
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251
# ISO Transmissions
CONFIG_BT_CTLR_ISO_TX_BUFFERS=16
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=251
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISOAL_SOURCES=2
# ISO Receptions

View file

@ -80,7 +80,7 @@ CONFIG_BT_CTLR_DF_CONN_CTE_REQ=y
CONFIG_BT_CTLR_ADV_EXT=y
CONFIG_BT_CTLR_ADV_PERIODIC=y
CONFIG_BT_CTLR_ADV_ISO=y
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=251
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=247
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
# ISO Receive Controller
@ -93,12 +93,12 @@ CONFIG_BT_CTLR_SYNC_ISO_STREAM_MAX=2
# ISO Connection Oriented
CONFIG_BT_CTLR_CENTRAL_ISO=y
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=251
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251
# ISO Transmissions
CONFIG_BT_CTLR_ISO_TX_BUFFERS=8
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=251
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISOAL_SOURCES=2
# ISO Receptions

View file

@ -1,13 +1,20 @@
CONFIG_BT_CTLR_ADV_ISO=y
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=4
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
# Zephyr Bluetooth Controller
CONFIG_BT_LL_SW_SPLIT=y
# Zephyr Controller tested maximum advertising data that can be set in a single HCI command
CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=191
# Enable support for Broadcast ISO in Zephyr Bluetooth Controller
CONFIG_BT_CTLR_ADV_ISO=y
# Sufficient ISO PDU length for this sample
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=4
# Number of supported streams
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
CONFIG_BT_CTLR_ISOAL_SOURCES=2
# FIXME: Host needs CONFIG_BT_ISO_TX_MTU + 4 bytes for sequence number, and
# optionally additional + 4 bytes for timestamp when not using
# BT_ISO_TIMESTAMP_NONE in bt_iso_chan_send(), otherwise Host tries to fragment
# ISO data.
# When Host is fixed, CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE can inherit the
# CONFIG_BT_ISO_TX_MTU value.
# Support the highest SDU size required by any BAP LC3 presets (155) + 8 bytes of HCI ISO Data
# packet overhead (the Packet_Sequence_Number, ISO_SDU_Length, Packet_Status_Flag fields; and
# the optional Time_Stamp field, if supplied)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=12

View file

@ -17,8 +17,8 @@ tests:
- qemu_cortex_m3
- qemu_x86
- nrf52_bsim
- nrf52dk/nrf52832
- nrf52833dk/nrf52833
integration_platforms:
- nrf52dk/nrf52832
- nrf52833dk/nrf52833
extra_args: OVERLAY_CONFIG=overlay-bt_ll_sw_split.conf
tags: bluetooth

View file

@ -14,11 +14,7 @@ CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=155
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
CONFIG_BT_CTLR_ISOAL_SOURCES=2
# FIXME: Host needs CONFIG_BT_ISO_TX_MTU + 4 bytes for sequence number, and optionally
# additional + 4 bytes for timestamp when not using BT_ISO_TIMESTAMP_NONE in bt_iso_chan_send(),
# otherwise Host tries to fragment ISO data.
# When Host is fixed, CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE can inherit the
# CONFIG_BT_ISO_TX_MTU value.
#
# Supports the highest SDU size required by any BAP LC3 presets (155)
# Support the highest SDU size required by any BAP LC3 presets (155) + 8 bytes of HCI ISO Data
# packet overhead (the Packet_Sequence_Number, ISO_SDU_Length, Packet_Status_Flag fields; and
# the optional Time_Stamp field, if supplied)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=163

View file

@ -1,4 +0,0 @@
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
# Supports the highest SDU size required by any BAP LC3 presets (155)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=155

View file

@ -1,4 +0,0 @@
CONFIG_BT_CTLR_CENTRAL_ISO=y
# Supports the highest SDU size required by any BAP LC3 presets (155)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=155

View file

@ -1,4 +0,0 @@
CONFIG_BT_CTLR_CENTRAL_ISO=y
# Supports the highest SDU size required by any BAP LC3 presets (155)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=155

View file

@ -1,4 +0,0 @@
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
# Supports the highest SDU size required by any BAP LC3 presets (155)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=155

View file

@ -1,4 +0,0 @@
CONFIG_BT_CTLR_CENTRAL_ISO=y
# Supports the highest SDU size required by any BAP LC3 presets (155)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=155

View file

@ -1,9 +1,14 @@
CONFIG_BT_LL_SW_SPLIT=y
CONFIG_BT_CTLR_SCAN_DATA_LEN_MAX=1650
CONFIG_BT_CTLR_ISO_TX_BUFFERS=4
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=155
CONFIG_BT_CTLR_ISOAL_SOURCES=2
CONFIG_BT_CTLR_ISOAL_SINKS=1
# Support the highest SDU size required by any BAP LC3 presets (155) + 8 bytes of HCI ISO Data
# packet overhead (the Packet_Sequence_Number, ISO_SDU_Length, Packet_Status_Flag fields; and
# the optional Time_Stamp field, if supplied)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=163
CONFIG_BT_CTLR_ADVANCED_FEATURES=y
CONFIG_BT_CTLR_CONN_ISO_LOW_LATENCY_POLICY=y

View file

@ -1,4 +0,0 @@
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
# Supports the highest SDU size required by any BAP LC3 presets (155)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=155

View file

@ -1,10 +1,14 @@
CONFIG_BT_LL_SW_SPLIT=y
CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=191
CONFIG_BT_CTLR_ISO_TX_BUFFERS=2
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=155
CONFIG_BT_CTLR_ISOAL_SOURCES=1
CONFIG_BT_CTLR_ISOAL_SINKS=2
# Support the highest SDU size required by any BAP LC3 presets (155) + 8 bytes of HCI ISO Data
# packet overhead (the Packet_Sequence_Number, ISO_SDU_Length, Packet_Status_Flag fields; and
# the optional Time_Stamp field, if supplied)
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=163
# Use the below if the sample is sending stale packet sequence number
# CONFIG_BT_CTLR_ADVANCED_FEATURES=y
# CONFIG_BT_CTLR_ISOAL_SN_STRICT=n