Bluetooth: Controller: Fix ISO Sync Receiver is_abort_cb

Fix ISO Sync Receiver implementation to correctly prevent
subevent from pre-empted in the unreserve time space.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2024-11-03 04:51:26 +01:00 committed by Benjamin Cabé
commit 7e74a046a1

View file

@ -46,6 +46,7 @@ static void prepare_bh(void *param);
static int create_prepare_cb(struct lll_prepare_param *p);
static int prepare_cb(struct lll_prepare_param *p);
static int prepare_cb_common(struct lll_prepare_param *p);
static int is_abort_cb(void *next, void *curr, lll_prepare_cb_t *resume_cb);
static void abort_cb(struct lll_prepare_param *prepare_param, void *param);
static void isr_rx_estab(void *param);
static void isr_rx(void *param);
@ -147,7 +148,7 @@ static void create_prepare_bh(void *param)
int err;
/* Invoke common pipeline handling of prepare */
err = lll_prepare(lll_is_abort_cb, abort_cb, create_prepare_cb, 0U,
err = lll_prepare(is_abort_cb, abort_cb, create_prepare_cb, 0U,
param);
LL_ASSERT(!err || err == -EINPROGRESS);
}
@ -157,7 +158,7 @@ static void prepare_bh(void *param)
int err;
/* Invoke common pipeline handling of prepare */
err = lll_prepare(lll_is_abort_cb, abort_cb, prepare_cb, 0U, param);
err = lll_prepare(is_abort_cb, abort_cb, prepare_cb, 0U, param);
LL_ASSERT(!err || err == -EINPROGRESS);
}
@ -405,6 +406,20 @@ static int prepare_cb_common(struct lll_prepare_param *p)
return 0;
}
static int is_abort_cb(void *next, void *curr, lll_prepare_cb_t *resume_cb)
{
if (next != curr) {
struct lll_sync_iso *lll;
lll = curr;
if (lll->bn_curr <= lll->bn) {
return 0;
}
}
return -ECANCELED;
}
static void abort_cb(struct lll_prepare_param *prepare_param, void *param)
{
struct event_done_extra *e;