Skip to content

Commit ca2701d

Browse files
cvinayakmbolivar-nordic
authored andcommitted
Bluetooth: Controller: Rework instant based procedure complete event
Rework instant based procedure complete event generation to be held until after the on-air instant has elapsed, to have conditional compilation around the code where the event generation be held or immediately dispatched so that it improves readability. Signed-off-by: Vinayak Kariappa Chettimada <[email protected]>
1 parent 4c674aa commit ca2701d

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

subsys/bluetooth/controller/ll_sw/ull_conn.c

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,6 +1394,9 @@ void ull_conn_done(struct node_rx_event_done *done)
13941394
rx_hold_flush(conn);
13951395

13961396
#if !defined(CONFIG_BT_CTLR_LOW_LAT_ULL)
1397+
/* if done events have separate mayfly, explicit trigger of
1398+
* rx_demux mayfly is necessary.
1399+
*/
13971400
ll_rx_sched();
13981401
#endif /* !CONFIG_BT_CTLR_LOW_LAT_ULL */
13991402
}
@@ -2188,11 +2191,10 @@ static int init_reset(void)
21882191
return 0;
21892192
}
21902193

2191-
#if defined(CONFIG_BT_LL_SW_LLCP_LEGACY)
2194+
#if defined(CONFIG_BT_CTLR_RX_ENQUEUE_HOLD)
21922195
static void rx_hold_put(struct ll_conn *conn, memq_link_t *link,
21932196
struct node_rx_pdu *rx)
21942197
{
2195-
#if defined(CONFIG_BT_CTLR_RX_ENQUEUE_HOLD)
21962198
struct node_rx_pdu *rx_last;
21972199
struct lll_conn *lll;
21982200

@@ -2214,15 +2216,8 @@ static void rx_hold_put(struct ll_conn *conn, memq_link_t *link,
22142216
if (lll->rx_hold_req == lll->rx_hold_ack) {
22152217
lll->rx_hold_req++;
22162218
}
2217-
2218-
#else /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
2219-
ARG_UNUSED(conn);
2220-
2221-
ll_rx_put(link, rx);
2222-
#endif /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
22232219
}
22242220

2225-
#if defined(CONFIG_BT_CTLR_RX_ENQUEUE_HOLD)
22262221
static bool rx_hold_is_done(struct ll_conn *conn)
22272222
{
22282223
return ((conn->lll.rx_hold_req -
@@ -2252,7 +2247,6 @@ static void rx_hold_flush(struct ll_conn *conn)
22522247
lll->rx_hold_ack = 0U;
22532248
}
22542249
#endif /* CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
2255-
#endif /* CONFIG_BT_LL_SW_LLCP_LEGACY */
22562250

22572251
#if !defined(CONFIG_BT_CTLR_LOW_LAT_ULL)
22582252
static void tx_demux_sched(struct ll_conn *conn)
@@ -3222,12 +3216,15 @@ static inline int event_conn_upd_prep(struct ll_conn *conn, uint16_t lazy,
32223216
cu->latency = conn->llcp_cu.latency;
32233217
cu->timeout = conn->llcp_cu.timeout;
32243218

3219+
#if defined(CONFIG_BT_CTLR_RX_ENQUEUE_HOLD)
32253220
/* hold node rx until the instant's anchor point sync */
32263221
rx_hold_put(conn, rx->hdr.link, rx);
3222+
#else /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
3223+
/* enqueue rx node towards Thread */
3224+
ll_rx_put(rx->hdr.link, rx);
3225+
ll_rx_sched();
3226+
#endif /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
32273227

3228-
if (!IS_ENABLED(CONFIG_BT_CTLR_RX_ENQUEUE_HOLD)) {
3229-
ll_rx_sched();
3230-
}
32313228
} else {
32323229
/* Mark for buffer for release */
32333230
rx->hdr.type = NODE_RX_TYPE_RELEASE;
@@ -4779,8 +4776,13 @@ static inline void event_phy_upd_ind_prep(struct ll_conn *conn,
47794776
upd->tx = lll->phy_tx;
47804777
upd->rx = lll->phy_rx;
47814778

4779+
#if defined(CONFIG_BT_CTLR_RX_ENQUEUE_HOLD)
47824780
/* hold node rx until the instant's anchor point sync */
47834781
rx_hold_put(conn, rx->hdr.link, rx);
4782+
#else /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
4783+
/* enqueue rx node towards Thread */
4784+
ll_rx_put(rx->hdr.link, rx);
4785+
#endif /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
47844786

47854787
#if defined(CONFIG_BT_CTLR_DATA_LENGTH)
47864788
/* get a rx node for ULL->LL */
@@ -4823,11 +4825,19 @@ static inline void event_phy_upd_ind_prep(struct ll_conn *conn,
48234825
lr->max_rx_time = sys_cpu_to_le16(lll->max_rx_time);
48244826
lr->max_tx_time = sys_cpu_to_le16(lll->max_tx_time);
48254827

4828+
#if defined(CONFIG_BT_CTLR_RX_ENQUEUE_HOLD)
48264829
/* hold node rx until the instant's anchor point sync */
48274830
rx_hold_put(conn, rx->hdr.link, rx);
4831+
#else /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
4832+
/* enqueue rx node towards Thread */
4833+
ll_rx_put(rx->hdr.link, rx);
4834+
#endif /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
48284835
#endif /* CONFIG_BT_CTLR_DATA_LENGTH */
48294836

48304837
if (!IS_ENABLED(CONFIG_BT_CTLR_RX_ENQUEUE_HOLD)) {
4838+
/* Only trigger the rx_demux mayfly when PHY and/or DLE
4839+
* node rx are not held back until the anchor point sync
4840+
*/
48314841
ll_rx_sched();
48324842
}
48334843
}

0 commit comments

Comments
 (0)