Bluetooth: controller: split: Fix Low Latency Prepare Done
Fix the Low Latency Prepare Done that disables ULL_LOW context executions inside a radio event, so that ticker_job_idle_get is invoked from ULL_LOW instead of LLL context so that its enqueued alongwith others scheduled in ULL_LOW. This is avoid premature disable of ULL_LOW context executions. Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
parent
e9bee3b070
commit
23ef75f6d9
1 changed files with 21 additions and 6 deletions
|
@ -67,6 +67,7 @@ static void preempt_ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
|
|||
static void preempt(void *param);
|
||||
#else /* CONFIG_BT_CTLR_LOW_LAT */
|
||||
#if (CONFIG_BT_CTLR_LLL_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
|
||||
static void mfy_ticker_job_idle_get(void *param);
|
||||
static void ticker_op_job_disable(uint32_t status, void *op_context);
|
||||
#endif
|
||||
#endif /* CONFIG_BT_CTLR_LOW_LAT */
|
||||
|
@ -245,15 +246,17 @@ int lll_prepare_done(void *param)
|
|||
{
|
||||
#if defined(CONFIG_BT_CTLR_LOW_LAT) && \
|
||||
(CONFIG_BT_CTLR_LLL_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
|
||||
static memq_link_t link;
|
||||
static struct mayfly mfy = {0, 0, &link, NULL, mfy_ticker_job_idle_get};
|
||||
uint32_t ret;
|
||||
|
||||
/* Ticker Job Silence */
|
||||
ret = ticker_job_idle_get(TICKER_INSTANCE_ID_CTLR,
|
||||
TICKER_USER_ID_LLL,
|
||||
ticker_op_job_disable, NULL);
|
||||
ret = mayfly_enqueue(TICKER_USER_ID_LLL, TICKER_USER_ID_ULL_LOW,
|
||||
1, &mfy);
|
||||
if (ret) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return ((ret == TICKER_STATUS_SUCCESS) ||
|
||||
(ret == TICKER_STATUS_BUSY)) ? 0 : -EFAULT;
|
||||
return 0;
|
||||
#else
|
||||
return 0;
|
||||
#endif /* CONFIG_BT_CTLR_LOW_LAT */
|
||||
|
@ -731,6 +734,18 @@ preempt_next:
|
|||
#else /* CONFIG_BT_CTLR_LOW_LAT */
|
||||
|
||||
#if (CONFIG_BT_CTLR_LLL_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
|
||||
static void mfy_ticker_job_idle_get(void *param)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
/* Ticker Job Silence */
|
||||
ret = ticker_job_idle_get(TICKER_INSTANCE_ID_CTLR,
|
||||
TICKER_USER_ID_LLL,
|
||||
ticker_op_job_disable, NULL);
|
||||
LL_ASSERT((ret == TICKER_STATUS_SUCCESS) ||
|
||||
(ret == TICKER_STATUS_BUSY));
|
||||
}
|
||||
|
||||
static void ticker_op_job_disable(uint32_t status, void *op_context)
|
||||
{
|
||||
ARG_UNUSED(status);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue