@@ -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 )
21922195static 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 )
22262221static 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 )
22582252static 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