Commit af41a508 authored by Vinayak Kariappa Chettimada's avatar Vinayak Kariappa Chettimada Committed by Anas Nashif
Browse files

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: default avatarVinayak Kariappa Chettimada <vich@nordicsemi.no>
parent d3bda1dc
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -465,6 +465,14 @@ config BT_CTLR_ADV_DATA_LEN_MAX
	help
	  Maximum Extended Advertising Data Length.

config BT_CTLR_ADV_EXT_RX_PDU_LEN_MAX
	int "Maximum Advertising Extensions Receive PDU Length"
	range 255 255 if BT_HCI_RAW
	range 31 255
	default 255
	help
	  Maximum Advertising Extensions Receive PDU Length.

config BT_CTLR_ADV_PERIODIC
	bool "LE Periodic Advertising in Advertising State" if !BT_LL_SW_SPLIT
	depends on BT_BROADCASTER && BT_CTLR_ADV_PERIODIC_SUPPORT
+2 −0
Original line number Diff line number Diff line
@@ -88,8 +88,10 @@

#if defined(CONFIG_BT_CTLR_ADV_EXT)
#define LL_FEAT_BIT_EXT_ADV BIT64(BT_LE_FEAT_BIT_EXT_ADV)
#define LL_EXT_OCTETS_RX_MAX CONFIG_BT_CTLR_ADV_EXT_RX_PDU_LEN_MAX
#else /* !CONFIG_BT_CTLR_ADV_EXT */
#define LL_FEAT_BIT_EXT_ADV 0
#define LL_EXT_OCTETS_RX_MAX 0
#endif /* !CONFIG_BT_CTLR_ADV_EXT */

#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) || \
+4 −2
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@
#include "lll_prof_internal.h"
#include "lll_scan_internal.h"

#include "ll_feat.h"

#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_HCI_DRIVER)
#define LOG_MODULE_NAME bt_ctlr_lll_scan_aux
#include "common/log.h"
@@ -273,7 +275,7 @@ static int prepare_cb(struct lll_prepare_param *p)
#endif

	radio_phy_set(lll->phy, 1);
	radio_pkt_configure(8, PDU_AC_PAYLOAD_SIZE_MAX, (lll->phy << 1));
	radio_pkt_configure(8, LL_EXT_OCTETS_RX_MAX, (lll->phy << 1));

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

	/* Setup radio for auxiliary PDU scan */
	radio_phy_set(phy_aux, 1);
	radio_pkt_configure(8, PDU_AC_PAYLOAD_SIZE_MAX, (phy_aux << 1));
	radio_pkt_configure(8, LL_EXT_OCTETS_RX_MAX, (phy_aux << 1));
	lll_chan_set(aux_ptr->chan_idx);

	radio_pkt_rx_set(node_rx->pdu);
+3 −1
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@
#include "lll_df.h"
#include "lll_df_internal.h"

#include "ll_feat.h"

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

	radio_phy_set(lll->phy, 1);
	radio_pkt_configure(8, PDU_AC_PAYLOAD_SIZE_MAX, (lll->phy << 1));
	radio_pkt_configure(8, LL_EXT_OCTETS_RX_MAX, (lll->phy << 1));
	radio_aa_set(lll->access_addr);
	radio_crc_configure(((0x5bUL) | ((0x06UL) << 8) | ((0x00UL) << 16)),
			    (((uint32_t)lll->crc_init[2] << 16) |
+8 −11
Original line number Diff line number Diff line
@@ -358,21 +358,18 @@ static MFIFO_DEFINE(pdu_rx_free, sizeof(void *), PDU_RX_CNT);
#define PDU_RX_USER_PDU_OCTETS_MAX 0
#endif

#define NODE_RX_HEADER_SIZE      (offsetof(struct node_rx_pdu, pdu))
#define NODE_RX_STRUCT_OVERHEAD  (NODE_RX_HEADER_SIZE)

#define PDU_ADVERTIZE_SIZE (PDU_AC_LL_SIZE_MAX + PDU_AC_LL_SIZE_EXTRA)
#define PDU_ADV_SIZE  MAX(PDU_AC_LL_SIZE_MAX, \
			  (PDU_AC_LL_HEADER_SIZE + LL_EXT_OCTETS_RX_MAX))

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

#define PDU_RX_NODE_POOL_ELEMENT_SIZE                         \
	MROUND(                                               \
		NODE_RX_STRUCT_OVERHEAD                       \
		+ MAX(MAX(PDU_ADVERTIZE_SIZE,                 \
#define NODE_RX_HEADER_SIZE (offsetof(struct node_rx_pdu, pdu))

#define PDU_RX_NODE_POOL_ELEMENT_SIZE MROUND(NODE_RX_HEADER_SIZE + \
					     MAX(MAX(PDU_ADV_SIZE, \
						     PDU_DATA_SIZE), \
		      PDU_RX_USER_PDU_OCTETS_MAX)              \
	)
						 PDU_RX_USER_PDU_OCTETS_MAX))

#if defined(CONFIG_BT_PER_ADV_SYNC_MAX)
#define BT_CTLR_SCAN_SYNC_SET CONFIG_BT_PER_ADV_SYNC_MAX