Bluetooth: Controller: Add Kconfig for minimal time reservation

Add Kconfig to use minimal time reservation for auxiliary
and sync PDU reception. A peer device could be scheduling
multiple advertising sets in a short duration with small
PDUs hence using the minimal time reservation would avoid
skipping closely scheduled reception of multiple auxiliary
PDUs.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2022-03-11 12:40:57 +05:30 committed by Carles Cufí
commit 1a1f347ad3
4 changed files with 23 additions and 2 deletions

View file

@ -284,6 +284,17 @@ config BT_CTRL_ADV_ADI_IN_SCAN_RSP
help help
Enable ADI field in AUX_SCAN_RSP PDU Enable ADI field in AUX_SCAN_RSP PDU
config BT_CTLR_SCAN_AUX_SYNC_RESERVE_MIN
bool "Use minimal Scan Auxiliary and Periodic Sync PDU time reservation"
depends on (BT_OBSERVER && BT_CTLR_ADV_EXT) || BT_CTLR_SYNC_PERIODIC
default y
help
Use minimal time reservation for Auxiliary and Periodic Sync PDU
reception. A peer device could scheduling multiple advertising sets
in a short duration with small PDUs hence using the minimal time
reservation would avoid skipping closely scheduled reception of
multiple Auxiliary or Periodic Sync PDUs.
config BT_CTLR_SYNC_PERIODIC_SKIP_ON_SCAN_AUX config BT_CTLR_SYNC_PERIODIC_SKIP_ON_SCAN_AUX
bool "Skip Periodic Sync event on overlap with Extended Scan Event" bool "Skip Periodic Sync event on overlap with Extended Scan Event"
depends on BT_CTLR_SYNC_PERIODIC depends on BT_CTLR_SYNC_PERIODIC

View file

@ -41,6 +41,14 @@
/* Advertisement channel maximum payload size */ /* Advertisement channel maximum payload size */
#if defined(CONFIG_BT_CTLR_ADV_EXT) #if defined(CONFIG_BT_CTLR_ADV_EXT)
/* Extended Scan and Periodic Sync Rx PDU time reservation */
#if defined(CONFIG_BT_CTLR_SCAN_AUX_SYNC_RESERVE_MIN)
#define PDU_AC_EXT_PAYLOAD_RX_SIZE 0U
#else /* !CONFIG_BT_CTLR_SCAN_AUX_SYNC_RESERVE_MIN */
#define PDU_AC_EXT_PAYLOAD_RX_SIZE PDU_AC_EXT_PAYLOAD_SIZE_MAX
#endif /* !CONFIG_BT_CTLR_SCAN_AUX_SYNC_RESERVE_MIN */
#define PDU_AC_EXT_HEADER_SIZE_MIN offsetof(struct pdu_adv_com_ext_adv, \ #define PDU_AC_EXT_HEADER_SIZE_MIN offsetof(struct pdu_adv_com_ext_adv, \
ext_hdr_adv_data) ext_hdr_adv_data)
#define PDU_AC_EXT_HEADER_SIZE_MAX 63 #define PDU_AC_EXT_HEADER_SIZE_MAX 63

View file

@ -654,7 +654,8 @@ void ull_scan_aux_setup(memq_link_t *link, struct node_rx_hdr *rx)
aux->ull.ticks_slot = aux->ull.ticks_slot =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US + HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
ready_delay_us + ready_delay_us +
PDU_AC_MAX_US(0U, lll_aux->phy) + PDU_AC_MAX_US(PDU_AC_EXT_PAYLOAD_RX_SIZE,
lll_aux->phy) +
EVENT_OVERHEAD_END_US); EVENT_OVERHEAD_END_US);
ticks_slot_offset = MAX(aux->ull.ticks_active_to_start, ticks_slot_offset = MAX(aux->ull.ticks_active_to_start,

View file

@ -761,7 +761,8 @@ void ull_sync_setup(struct ll_scan_set *scan, struct ll_scan_aux_set *aux,
sync->ull.ticks_slot = sync->ull.ticks_slot =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US + HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
ready_delay_us + ready_delay_us +
PDU_AC_MAX_US(0U, lll->phy) + PDU_AC_MAX_US(PDU_AC_EXT_PAYLOAD_RX_SIZE,
lll->phy) +
EVENT_OVERHEAD_END_US); EVENT_OVERHEAD_END_US);
ticks_slot_offset = MAX(sync->ull.ticks_active_to_start, ticks_slot_offset = MAX(sync->ull.ticks_active_to_start,