Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions subsys/bluetooth/controller/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions subsys/bluetooth/controller/include/ll_feat.h
Original file line number Diff line number Diff line change
Expand Up @@ -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) || \
Expand Down
6 changes: 4 additions & 2 deletions subsys/bluetooth/controller/ll_sw/nordic/lll/lll_scan_aux.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
15 changes: 8 additions & 7 deletions subsys/bluetooth/controller/ll_sw/nordic/lll/lll_sync.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -154,13 +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));

node_rx = ull_pdu_rx_alloc_peek(1);
LL_ASSERT(node_rx);

radio_pkt_rx_set(node_rx->pdu);

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) |
Expand All @@ -169,6 +165,11 @@ static int prepare_cb(struct lll_prepare_param *p)

lll_chan_set(data_chan_use);

node_rx = ull_pdu_rx_alloc_peek(1);
LL_ASSERT(node_rx);

radio_pkt_rx_set(node_rx->pdu);

#if defined(CONFIG_BT_CTLR_DF_SCAN_CTE_RX)
struct lll_df_sync_cfg *cfg;

Expand Down
25 changes: 0 additions & 25 deletions subsys/bluetooth/controller/ll_sw/pdu.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,31 +190,6 @@

#define PKT_BIS_US(octets, mic, phy) PDU_MAX_US((octets), (mic), (phy))

/* Extra bytes for enqueued node_rx metadata: rssi (always), resolving
* index, directed adv report, and mesh channel and instant.
*/
#define PDU_AC_SIZE_RSSI 1
#if defined(CONFIG_BT_CTLR_PRIVACY)
#define PDU_AC_SIZE_PRIV 1
#else
#define PDU_AC_SIZE_PRIV 0
#endif /* CONFIG_BT_CTLR_PRIVACY */
#if defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
#define PDU_AC_SIZE_SCFP 1
#else
#define PDU_AC_SIZE_SCFP 0
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
#if defined(CONFIG_BT_HCI_MESH_EXT)
#define PDU_AC_SIZE_MESH 5
#else
#define PDU_AC_SIZE_MESH 0
#endif /* CONFIG_BT_HCI_MESH_EXT */

#define PDU_AC_LL_SIZE_EXTRA (PDU_AC_SIZE_RSSI + \
PDU_AC_SIZE_PRIV + \
PDU_AC_SIZE_SCFP + \
PDU_AC_SIZE_MESH)

struct pdu_adv_adv_ind {
uint8_t addr[BDADDR_SIZE];
uint8_t data[PDU_AC_DATA_SIZE_MAX];
Expand Down
19 changes: 8 additions & 11 deletions subsys/bluetooth/controller/ll_sw/ull.c
Original file line number Diff line number Diff line change
Expand Up @@ -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, \
PDU_DATA_SIZE), \
PDU_RX_USER_PDU_OCTETS_MAX) \
)
#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))

#if defined(CONFIG_BT_PER_ADV_SYNC_MAX)
#define BT_CTLR_SCAN_SYNC_SET CONFIG_BT_PER_ADV_SYNC_MAX
Expand Down