Skip to content

Commit af41a50

Browse files
cvinayaknashif
authored andcommitted
Bluetooth: Controller: Fix radio packet size for Extended Scanning
Fix maximum radio packet size configuration to use 255 bytes for Extended Scanning and Periodic Synchronization. Add a Kconfig option so that application can reduce RAM usage if a specific user scenario can live with smaller PDU receptions. Signed-off-by: Vinayak Kariappa Chettimada <[email protected]>
1 parent d3bda1d commit af41a50

File tree

5 files changed

+25
-14
lines changed

5 files changed

+25
-14
lines changed

subsys/bluetooth/controller/Kconfig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,14 @@ config BT_CTLR_ADV_DATA_LEN_MAX
465465
help
466466
Maximum Extended Advertising Data Length.
467467

468+
config BT_CTLR_ADV_EXT_RX_PDU_LEN_MAX
469+
int "Maximum Advertising Extensions Receive PDU Length"
470+
range 255 255 if BT_HCI_RAW
471+
range 31 255
472+
default 255
473+
help
474+
Maximum Advertising Extensions Receive PDU Length.
475+
468476
config BT_CTLR_ADV_PERIODIC
469477
bool "LE Periodic Advertising in Advertising State" if !BT_LL_SW_SPLIT
470478
depends on BT_BROADCASTER && BT_CTLR_ADV_PERIODIC_SUPPORT

subsys/bluetooth/controller/include/ll_feat.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,10 @@
8888

8989
#if defined(CONFIG_BT_CTLR_ADV_EXT)
9090
#define LL_FEAT_BIT_EXT_ADV BIT64(BT_LE_FEAT_BIT_EXT_ADV)
91+
#define LL_EXT_OCTETS_RX_MAX CONFIG_BT_CTLR_ADV_EXT_RX_PDU_LEN_MAX
9192
#else /* !CONFIG_BT_CTLR_ADV_EXT */
9293
#define LL_FEAT_BIT_EXT_ADV 0
94+
#define LL_EXT_OCTETS_RX_MAX 0
9395
#endif /* !CONFIG_BT_CTLR_ADV_EXT */
9496

9597
#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) || \

subsys/bluetooth/controller/ll_sw/nordic/lll/lll_scan_aux.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
#include "lll_prof_internal.h"
3535
#include "lll_scan_internal.h"
3636

37+
#include "ll_feat.h"
38+
3739
#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_HCI_DRIVER)
3840
#define LOG_MODULE_NAME bt_ctlr_lll_scan_aux
3941
#include "common/log.h"
@@ -273,7 +275,7 @@ static int prepare_cb(struct lll_prepare_param *p)
273275
#endif
274276

275277
radio_phy_set(lll->phy, 1);
276-
radio_pkt_configure(8, PDU_AC_PAYLOAD_SIZE_MAX, (lll->phy << 1));
278+
radio_pkt_configure(8, LL_EXT_OCTETS_RX_MAX, (lll->phy << 1));
277279

278280
node_rx = ull_pdu_rx_alloc_peek(1);
279281
LL_ASSERT(node_rx);
@@ -481,7 +483,7 @@ static void isr_scan_aux_setup(void *param)
481483

482484
/* Setup radio for auxiliary PDU scan */
483485
radio_phy_set(phy_aux, 1);
484-
radio_pkt_configure(8, PDU_AC_PAYLOAD_SIZE_MAX, (phy_aux << 1));
486+
radio_pkt_configure(8, LL_EXT_OCTETS_RX_MAX, (phy_aux << 1));
485487
lll_chan_set(aux_ptr->chan_idx);
486488

487489
radio_pkt_rx_set(node_rx->pdu);

subsys/bluetooth/controller/ll_sw/nordic/lll/lll_sync.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
#include "lll_df.h"
3333
#include "lll_df_internal.h"
3434

35+
#include "ll_feat.h"
36+
3537
#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_HCI_DRIVER)
3638
#define LOG_MODULE_NAME bt_ctlr_lll_sync
3739
#include "common/log.h"
@@ -154,7 +156,7 @@ static int prepare_cb(struct lll_prepare_param *p)
154156
#endif /* CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL */
155157

156158
radio_phy_set(lll->phy, 1);
157-
radio_pkt_configure(8, PDU_AC_PAYLOAD_SIZE_MAX, (lll->phy << 1));
159+
radio_pkt_configure(8, LL_EXT_OCTETS_RX_MAX, (lll->phy << 1));
158160
radio_aa_set(lll->access_addr);
159161
radio_crc_configure(((0x5bUL) | ((0x06UL) << 8) | ((0x00UL) << 16)),
160162
(((uint32_t)lll->crc_init[2] << 16) |

subsys/bluetooth/controller/ll_sw/ull.c

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -358,21 +358,18 @@ static MFIFO_DEFINE(pdu_rx_free, sizeof(void *), PDU_RX_CNT);
358358
#define PDU_RX_USER_PDU_OCTETS_MAX 0
359359
#endif
360360

361-
#define NODE_RX_HEADER_SIZE (offsetof(struct node_rx_pdu, pdu))
362-
#define NODE_RX_STRUCT_OVERHEAD (NODE_RX_HEADER_SIZE)
363-
364-
#define PDU_ADVERTIZE_SIZE (PDU_AC_LL_SIZE_MAX + PDU_AC_LL_SIZE_EXTRA)
361+
#define PDU_ADV_SIZE MAX(PDU_AC_LL_SIZE_MAX, \
362+
(PDU_AC_LL_HEADER_SIZE + LL_EXT_OCTETS_RX_MAX))
365363

366364
#define PDU_DATA_SIZE MAX((PDU_DC_LL_HEADER_SIZE + LL_LENGTH_OCTETS_RX_MAX), \
367365
(PDU_BIS_LL_HEADER_SIZE + LL_BIS_OCTETS_RX_MAX))
368366

369-
#define PDU_RX_NODE_POOL_ELEMENT_SIZE \
370-
MROUND( \
371-
NODE_RX_STRUCT_OVERHEAD \
372-
+ MAX(MAX(PDU_ADVERTIZE_SIZE, \
373-
PDU_DATA_SIZE), \
374-
PDU_RX_USER_PDU_OCTETS_MAX) \
375-
)
367+
#define NODE_RX_HEADER_SIZE (offsetof(struct node_rx_pdu, pdu))
368+
369+
#define PDU_RX_NODE_POOL_ELEMENT_SIZE MROUND(NODE_RX_HEADER_SIZE + \
370+
MAX(MAX(PDU_ADV_SIZE, \
371+
PDU_DATA_SIZE), \
372+
PDU_RX_USER_PDU_OCTETS_MAX))
376373

377374
#if defined(CONFIG_BT_PER_ADV_SYNC_MAX)
378375
#define BT_CTLR_SCAN_SYNC_SET CONFIG_BT_PER_ADV_SYNC_MAX

0 commit comments

Comments
 (0)