Skip to content

Commit

Permalink
nimble/ll: Add option to discard excessive ISO SDUs
Browse files Browse the repository at this point in the history
See syscfg description for details.
  • Loading branch information
andrzej-kaczmarek committed Oct 16, 2023
1 parent 8b4fd16 commit 34fbc59
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
16 changes: 15 additions & 1 deletion nimble/controller/src/ble_ll_isoal.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,24 @@ ble_ll_isoal_mux_event_done(struct ble_ll_isoal_mux *mux)
mux->last_tx_packet_seq_num = blehdr->txiso.packet_seq_num;
}

#if MYNEWT_VAL(BLE_LL_ISO_HCI_DISCARD_THRESHOLD)
/* Drop queued SDUs if number of queued SDUs exceeds defined threshold.
* Threshold is defined as number of ISO events. If number of queued SDUs
* exceeds number of SDUs required for single event (i.e. including pt)
* and number of subsequent ISO events defined by threshold value, we'll
* drop any excessive SDUs and notify host as if they were sent.
*/
uint32_t thr = MYNEWT_VAL(BLE_LL_ISO_HCI_DISCARD_THRESHOLD);
if (mux->sdu_q_len > mux->sdu_per_event + thr * mux->sdu_per_interval) {
num_sdu = mux->sdu_q_len - mux->sdu_per_event -
thr * mux->sdu_per_interval;
}
#endif

while (pkthdr && num_sdu--) {
OS_ENTER_CRITICAL(sr);
STAILQ_REMOVE_HEAD(&mux->sdu_q, omp_next);
assert(mux->sdu_q_len > 0);
BLE_LL_ASSERT(mux->sdu_q_len > 0);
mux->sdu_q_len--;
OS_EXIT_CRITICAL(sr);

Expand Down
12 changes: 12 additions & 0 deletions nimble/controller/syscfg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -505,6 +505,18 @@ syscfg.defs:
experimental: 1
restrictions:
- BLE_LL_HCI_VS || BLE_LL_ISO_HCI_FEEDBACK_INTERVAL_MS == 0
BLE_LL_ISO_HCI_DISCARD_THRESHOLD:
description: >
Enables automatic discarding of excessive ISO SDUs to avoid exhaustion
of HCI ISO buffers in case host sends too many SDUs.
Threshold is defined as number of ISO events. If number of queued
SDUs exceeds number of SDUs required for single event (i.e. including
pre-transmissions) and number of subsequent ISO events defined by
threshold value, the controller will drop any excessive SDUs and
notify to host as if they were already sent.
Set to 0 to disable.
value: 0
experimental: 1

BLE_LL_SYSINIT_STAGE:
description: >
Expand Down

0 comments on commit 34fbc59

Please sign in to comment.