Bluetooth: controller: refactor ull_rx_put/sched

Instead of calling both ull_rx_put and ull_rx_sched, combine into one
function

Signed-off-by: Erik Brockhoff <erbr@oticon.com>
This commit is contained in:
Erik Brockhoff 2022-11-15 09:55:33 +01:00 committed by Carles Cufí
commit 1f97652998
16 changed files with 41 additions and 61 deletions

View file

@ -586,6 +586,7 @@ void ull_rx_put(memq_link_t *link, void *rx);
void ull_rx_put_done(memq_link_t *link, void *done); void ull_rx_put_done(memq_link_t *link, void *done);
void ull_rx_sched(void); void ull_rx_sched(void);
void ull_rx_sched_done(void); void ull_rx_sched_done(void);
void ull_rx_put_sched(memq_link_t *link, void *rx);
void ull_iso_rx_put(memq_link_t *link, void *rx); void ull_iso_rx_put(memq_link_t *link, void *rx);
void ull_iso_rx_sched(void); void ull_iso_rx_sched(void);
void *ull_iso_tx_ack_dequeue(void); void *ull_iso_tx_ack_dequeue(void);

View file

@ -723,8 +723,7 @@ int lll_adv_scan_req_report(struct lll_adv *lll, struct pdu_adv *pdu_adv_rx,
node_rx->hdr.rx_ftr.rl_idx = rl_idx; node_rx->hdr.rx_ftr.rl_idx = rl_idx;
#endif #endif
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
return 0; return 0;
} }
@ -1368,8 +1367,7 @@ static void isr_done(void *param)
/* TODO: add other info by defining a payload struct */ /* TODO: add other info by defining a payload struct */
node_rx->type = NODE_RX_TYPE_ADV_INDICATION; node_rx->type = NODE_RX_TYPE_ADV_INDICATION;
ull_rx_put(node_rx->link, node_rx); ull_rx_put_sched(node_rx->link, node_rx);
ull_rx_sched();
} }
#endif /* CONFIG_BT_CTLR_ADV_INDICATION */ #endif /* CONFIG_BT_CTLR_ADV_INDICATION */
@ -1629,8 +1627,7 @@ static inline int isr_rx_pdu(struct lll_adv *lll,
ftr->extra = ull_pdu_rx_alloc(); ftr->extra = ull_pdu_rx_alloc();
} }
ull_rx_put(rx->hdr.link, rx); ull_rx_put_sched(rx->hdr.link, rx);
ull_rx_sched();
return 0; return 0;
#endif /* CONFIG_BT_PERIPHERAL */ #endif /* CONFIG_BT_PERIPHERAL */

View file

@ -817,8 +817,7 @@ static void isr_tx_connect_rsp(void *param)
} }
} }
ull_rx_put(rx->hdr.link, rx); ull_rx_put_sched(rx->hdr.link, rx);
ull_rx_sched();
if (is_done) { if (is_done) {
/* Stop further LLL radio events */ /* Stop further LLL radio events */

View file

@ -714,8 +714,7 @@ static void isr_done_term(void *param)
rx->type = NODE_RX_TYPE_BIG_CHM_COMPLETE; rx->type = NODE_RX_TYPE_BIG_CHM_COMPLETE;
rx->rx_ftr.param = lll; rx->rx_ftr.param = lll;
ull_rx_put(rx->link, rx); ull_rx_put_sched(rx->link, rx);
ull_rx_sched();
} }
/* Use new channel map */ /* Use new channel map */

View file

@ -310,8 +310,7 @@ static void isr_done(void *param)
rx->type = NODE_RX_TYPE_SYNC_CHM_COMPLETE; rx->type = NODE_RX_TYPE_SYNC_CHM_COMPLETE;
rx->rx_ftr.param = lll; rx->rx_ftr.param = lll;
ull_rx_put(rx->link, rx); ull_rx_put_sched(rx->link, rx);
ull_rx_sched();
} }
lll_isr_done(lll); lll_isr_done(lll);

View file

@ -146,8 +146,7 @@ void lll_prof_reserve_send(struct node_rx_pdu *rx)
if (err) { if (err) {
rx->hdr.type = NODE_RX_TYPE_PROFILE; rx->hdr.type = NODE_RX_TYPE_PROFILE;
ull_rx_put(rx->hdr.link, rx); ull_rx_put_sched(rx->hdr.link, rx);
ull_rx_sched();
} }
} }
} }
@ -236,8 +235,7 @@ static int send(struct node_rx_pdu *rx)
p->ull_high = cputime_ull_high; p->ull_high = cputime_ull_high;
p->ull_low = cputime_ull_low; p->ull_low = cputime_ull_low;
ull_rx_put(rx->hdr.link, rx); ull_rx_put_sched(rx->hdr.link, rx);
ull_rx_sched();
return 0; return 0;
} }

View file

@ -1047,8 +1047,7 @@ static void isr_done_cleanup(void *param)
/* TODO: add other info by defining a payload struct */ /* TODO: add other info by defining a payload struct */
node_rx->type = NODE_RX_TYPE_SCAN_INDICATION; node_rx->type = NODE_RX_TYPE_SCAN_INDICATION;
ull_rx_put(node_rx->link, node_rx); ull_rx_put_sched(node_rx->link, node_rx);
ull_rx_sched();
} }
#endif /* CONFIG_BT_CTLR_SCAN_INDICATION */ #endif /* CONFIG_BT_CTLR_SCAN_INDICATION */
@ -1092,8 +1091,7 @@ static void isr_done_cleanup(void *param)
node_rx->hdr.rx_ftr.param = lll; node_rx->hdr.rx_ftr.param = lll;
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
} }
#endif /* CONFIG_BT_CTLR_ADV_EXT */ #endif /* CONFIG_BT_CTLR_ADV_EXT */
@ -1259,8 +1257,7 @@ static inline int isr_rx_pdu(struct lll_scan *lll, struct pdu_adv *pdu_adv_rx,
ftr->extra = ull_pdu_rx_alloc(); ftr->extra = ull_pdu_rx_alloc();
} }
ull_rx_put(rx->hdr.link, rx); ull_rx_put_sched(rx->hdr.link, rx);
ull_rx_sched();
return 0; return 0;
#endif /* CONFIG_BT_CENTRAL */ #endif /* CONFIG_BT_CENTRAL */
@ -1589,8 +1586,7 @@ static int isr_rx_scan_report(struct lll_scan *lll, uint8_t devmatch_ok,
} }
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */ #endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
return err; return err;
} }

View file

@ -678,8 +678,7 @@ static void isr_done(void *param)
node_rx->hdr.rx_ftr.param = lll; node_rx->hdr.rx_ftr.param = lll;
node_rx->hdr.rx_ftr.aux_failed = 1U; node_rx->hdr.rx_ftr.aux_failed = 1U;
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
} else if (!trx_cnt) { } else if (!trx_cnt) {
struct event_done_extra *e; struct event_done_extra *e;
@ -861,8 +860,7 @@ isr_rx_do_close:
*/ */
node_rx->hdr.rx_ftr.param = lll; node_rx->hdr.rx_ftr.param = lll;
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
} }
/* Check if LLL scheduled auxiliary PDU reception by scan /* Check if LLL scheduled auxiliary PDU reception by scan
@ -1210,8 +1208,7 @@ static int isr_rx_pdu(struct lll_scan *lll, struct lll_scan_aux *lll_aux,
ftr->aux_lll_sched = 0U; ftr->aux_lll_sched = 0U;
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
return 0; return 0;
@ -1288,9 +1285,7 @@ static int isr_rx_pdu(struct lll_scan *lll, struct lll_scan_aux *lll_aux,
node_rx->hdr.type = NODE_RX_TYPE_EXT_AUX_REPORT; node_rx->hdr.type = NODE_RX_TYPE_EXT_AUX_REPORT;
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
/* Next aux scan is scheduled from LLL, we already handled radio /* Next aux scan is scheduled from LLL, we already handled radio
* disable so prevent caller from doing it again. * disable so prevent caller from doing it again.
@ -1550,8 +1545,7 @@ static void isr_rx_connect_rsp(void *param)
#endif /* CONFIG_BT_CTLR_PRIVACY */ #endif /* CONFIG_BT_CTLR_PRIVACY */
isr_rx_do_close: isr_rx_do_close:
ull_rx_put(rx->hdr.link, rx); ull_rx_put_sched(rx->hdr.link, rx);
ull_rx_sched();
if (lll->lll_aux) { if (lll->lll_aux) {
struct node_rx_pdu *node_rx; struct node_rx_pdu *node_rx;
@ -1564,8 +1558,7 @@ isr_rx_do_close:
node_rx->hdr.rx_ftr.param = lll->lll_aux; node_rx->hdr.rx_ftr.param = lll->lll_aux;
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
radio_isr_set(lll_scan_isr_resume, lll); radio_isr_set(lll_scan_isr_resume, lll);
} else { } else {

View file

@ -981,8 +981,7 @@ static void isr_rx_adv_sync_estab(void *param)
ftr->param = lll; ftr->param = lll;
ftr->sync_status = SYNC_STAT_TERM; ftr->sync_status = SYNC_STAT_TERM;
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
} }
} }
@ -1231,8 +1230,7 @@ static void isr_done(void *param)
node_rx->hdr.rx_ftr.param = lll; node_rx->hdr.rx_ftr.param = lll;
node_rx->hdr.rx_ftr.aux_failed = 1U; node_rx->hdr.rx_ftr.aux_failed = 1U;
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
} }
isr_rx_done_cleanup(param, ((trx_cnt) ? 1U : 0U), false); isr_rx_done_cleanup(param, ((trx_cnt) ? 1U : 0U), false);

View file

@ -728,8 +728,7 @@ static void isr_done(void *param)
/* TODO: add other info by defining a payload struct */ /* TODO: add other info by defining a payload struct */
node_rx->type = NODE_RX_TYPE_ADV_INDICATION; node_rx->type = NODE_RX_TYPE_ADV_INDICATION;
ull_rx_put(node_rx->link, node_rx); ull_rx_put_sched(node_rx->link, node_rx);
ull_rx_sched();
} }
#else /* !CONFIG_BT_CTLR_ADV_INDICATION */ #else /* !CONFIG_BT_CTLR_ADV_INDICATION */
ARG_UNUSED(node_rx); ARG_UNUSED(node_rx);
@ -940,8 +939,7 @@ static inline int isr_rx_pdu(struct lll_adv *lll,
ftr->extra = ull_pdu_rx_alloc(); ftr->extra = ull_pdu_rx_alloc();
} }
ull_rx_put(rx->hdr.link, rx); ull_rx_put_sched(rx->hdr.link, rx);
ull_rx_sched();
return 0; return 0;
#endif /* CONFIG_BT_PERIPHERAL */ #endif /* CONFIG_BT_PERIPHERAL */
@ -1004,8 +1002,7 @@ static inline int isr_rx_sr_report(struct pdu_adv *pdu_adv_rx,
node_rx->hdr.rx_ftr.rssi = (rssi_ready) ? (radio_rssi_get() & 0x7f) : node_rx->hdr.rx_ftr.rssi = (rssi_ready) ? (radio_rssi_get() & 0x7f) :
0x7f; 0x7f;
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
return 0; return 0;
} }

View file

@ -133,8 +133,7 @@ void lll_prof_send(void)
p->min = cputime_min; p->min = cputime_min;
p->max = cputime_max; p->max = cputime_max;
ull_rx_put(rx->hdr.link, rx); ull_rx_put_sched(rx->hdr.link, rx);
ull_rx_sched();
} }
} }
} }

View file

@ -615,8 +615,7 @@ static void isr_cleanup(void *param)
/* TODO: add other info by defining a payload struct */ /* TODO: add other info by defining a payload struct */
node_rx->type = NODE_RX_TYPE_SCAN_INDICATION; node_rx->type = NODE_RX_TYPE_SCAN_INDICATION;
ull_rx_put(node_rx->link, node_rx); ull_rx_put_sched(node_rx->link, node_rx);
ull_rx_sched();
} }
#else /* !CONFIG_BT_CTLR_SCAN_INDICATION */ #else /* !CONFIG_BT_CTLR_SCAN_INDICATION */
ARG_UNUSED(node_rx); ARG_UNUSED(node_rx);
@ -855,8 +854,7 @@ static inline uint32_t isr_rx_pdu(struct lll_scan *lll, uint8_t devmatch_ok,
ftr->extra = ull_pdu_rx_alloc(); ftr->extra = ull_pdu_rx_alloc();
} }
ull_rx_put(rx->hdr.link, rx); ull_rx_put_sched(rx->hdr.link, rx);
ull_rx_sched();
return 0; return 0;
#endif /* CONFIG_BT_CENTRAL */ #endif /* CONFIG_BT_CENTRAL */
@ -1138,8 +1136,7 @@ static uint32_t isr_rx_scan_report(struct lll_scan *lll, uint8_t rssi_ready,
} }
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */ #endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
ull_rx_put(node_rx->hdr.link, node_rx); ull_rx_put_sched(node_rx->hdr.link, node_rx);
ull_rx_sched();
return 0; return 0;
} }

View file

@ -1987,6 +1987,12 @@ void ull_rx_sched(void)
mayfly_enqueue(TICKER_USER_ID_LLL, TICKER_USER_ID_ULL_HIGH, 1, &mfy); mayfly_enqueue(TICKER_USER_ID_LLL, TICKER_USER_ID_ULL_HIGH, 1, &mfy);
} }
void ull_rx_put_sched(memq_link_t *link, void *rx)
{
ull_rx_put(link, rx);
ull_rx_sched();
}
#if !defined(CONFIG_BT_CTLR_LOW_LAT_ULL) #if !defined(CONFIG_BT_CTLR_LOW_LAT_ULL)
void ull_rx_put_done(memq_link_t *link, void *done) void ull_rx_put_done(memq_link_t *link, void *done)
{ {
@ -2168,8 +2174,7 @@ void *ull_event_done(void *param)
ull_rx_put_done(link, evdone); ull_rx_put_done(link, evdone);
ull_rx_sched_done(); ull_rx_sched_done();
#else #else
ull_rx_put(link, evdone); ull_rx_put_sched(link, evdone);
ull_rx_sched();
#endif /* CONFIG_BT_CTLR_LOW_LAT_ULL */ #endif /* CONFIG_BT_CTLR_LOW_LAT_ULL */
return evdone; return evdone;

View file

@ -1272,6 +1272,5 @@ static void tx_lll_flush(void *param)
rx->hdr.link = NULL; rx->hdr.link = NULL;
/* Enqueue the terminate towards ULL context */ /* Enqueue the terminate towards ULL context */
ull_rx_put(link, rx); ull_rx_put_sched(link, rx);
ull_rx_sched();
} }

View file

@ -2790,8 +2790,7 @@ static void tx_lll_flush(void *param)
rx->hdr.link = NULL; rx->hdr.link = NULL;
/* Enqueue the terminate towards ULL context */ /* Enqueue the terminate towards ULL context */
ull_rx_put(link, rx); ull_rx_put_sched(link, rx);
ull_rx_sched();
} }
#if defined(CONFIG_BT_CTLR_LLID_DATA_START_EMPTY) #if defined(CONFIG_BT_CTLR_LLID_DATA_START_EMPTY)

View file

@ -259,6 +259,10 @@ void ull_rx_sched(void)
{ {
} }
void ull_rx_put_sched(memq_link_t *link, void *rx)
{
}
/* Forward declaration */ /* Forward declaration */
struct node_rx_event_done; struct node_rx_event_done;
void ull_drift_ticks_get(struct node_rx_event_done *done, uint32_t *ticks_drift_plus, void ull_drift_ticks_get(struct node_rx_event_done *done, uint32_t *ticks_drift_plus,