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);
|
static void preempt(void *param);
|
||||||
#else /* CONFIG_BT_CTLR_LOW_LAT */
|
#else /* CONFIG_BT_CTLR_LOW_LAT */
|
||||||
#if (CONFIG_BT_CTLR_LLL_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
|
#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);
|
static void ticker_op_job_disable(uint32_t status, void *op_context);
|
||||||
#endif
|
#endif
|
||||||
#endif /* CONFIG_BT_CTLR_LOW_LAT */
|
#endif /* CONFIG_BT_CTLR_LOW_LAT */
|
||||||
|
@ -245,15 +246,17 @@ int lll_prepare_done(void *param)
|
||||||
{
|
{
|
||||||
#if defined(CONFIG_BT_CTLR_LOW_LAT) && \
|
#if defined(CONFIG_BT_CTLR_LOW_LAT) && \
|
||||||
(CONFIG_BT_CTLR_LLL_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
|
(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;
|
uint32_t ret;
|
||||||
|
|
||||||
/* Ticker Job Silence */
|
ret = mayfly_enqueue(TICKER_USER_ID_LLL, TICKER_USER_ID_ULL_LOW,
|
||||||
ret = ticker_job_idle_get(TICKER_INSTANCE_ID_CTLR,
|
1, &mfy);
|
||||||
TICKER_USER_ID_LLL,
|
if (ret) {
|
||||||
ticker_op_job_disable, NULL);
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
return ((ret == TICKER_STATUS_SUCCESS) ||
|
return 0;
|
||||||
(ret == TICKER_STATUS_BUSY)) ? 0 : -EFAULT;
|
|
||||||
#else
|
#else
|
||||||
return 0;
|
return 0;
|
||||||
#endif /* CONFIG_BT_CTLR_LOW_LAT */
|
#endif /* CONFIG_BT_CTLR_LOW_LAT */
|
||||||
|
@ -731,6 +734,18 @@ preempt_next:
|
||||||
#else /* CONFIG_BT_CTLR_LOW_LAT */
|
#else /* CONFIG_BT_CTLR_LOW_LAT */
|
||||||
|
|
||||||
#if (CONFIG_BT_CTLR_LLL_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
|
#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)
|
static void ticker_op_job_disable(uint32_t status, void *op_context)
|
||||||
{
|
{
|
||||||
ARG_UNUSED(status);
|
ARG_UNUSED(status);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue