@@ -943,6 +943,7 @@ void ull_conn_done(struct node_rx_event_done *done)
943943 struct lll_conn * lll ;
944944 struct ll_conn * conn ;
945945 uint8_t reason_final ;
946+ uint8_t force_lll ;
946947 uint16_t lazy ;
947948 uint8_t force ;
948949
@@ -1054,7 +1055,7 @@ void ull_conn_done(struct node_rx_event_done *done)
10541055 }
10551056
10561057 /* Reset supervision countdown */
1057- if (done -> extra .crc_valid ) {
1058+ if (done -> extra .crc_valid && ! done -> extra . is_aborted ) {
10581059 conn -> supervision_expire = 0U ;
10591060 }
10601061
@@ -1085,6 +1086,7 @@ void ull_conn_done(struct node_rx_event_done *done)
10851086
10861087 /* check supervision timeout */
10871088 force = 0U ;
1089+ force_lll = 0U ;
10881090 if (conn -> supervision_expire ) {
10891091 if (conn -> supervision_expire > elapsed_event ) {
10901092 conn -> supervision_expire -= elapsed_event ;
@@ -1096,6 +1098,8 @@ void ull_conn_done(struct node_rx_event_done *done)
10961098 * supervision timeout.
10971099 */
10981100 if (conn -> supervision_expire <= 6U ) {
1101+ force_lll = 1U ;
1102+
10991103 force = 1U ;
11001104 }
11011105#if defined(CONFIG_BT_CTLR_CONN_RANDOM_FORCE )
@@ -1123,6 +1127,8 @@ void ull_conn_done(struct node_rx_event_done *done)
11231127 }
11241128 }
11251129
1130+ lll -> forced = force_lll ;
1131+
11261132 /* check procedure timeout */
11271133 uint8_t error_code ;
11281134
@@ -1233,26 +1239,41 @@ void ull_conn_done(struct node_rx_event_done *done)
12331239 uint32_t ready_delay , rx_time , tx_time , ticks_slot , slot_us ;
12341240
12351241 lll -> evt_len_upd = 0 ;
1242+
12361243#if defined(CONFIG_BT_CTLR_PHY )
12371244 ready_delay = (lll -> role ) ?
12381245 lll_radio_rx_ready_delay_get (lll -> phy_rx , PHY_FLAGS_S8 ) :
12391246 lll_radio_tx_ready_delay_get (lll -> phy_tx , lll -> phy_flags );
1247+
1248+ #if defined(CONFIG_BT_CTLR_PERIPHERAL_RESERVE_MAX )
12401249#if defined(CONFIG_BT_CTLR_DATA_LENGTH )
12411250 tx_time = lll -> dle .eff .max_tx_time ;
12421251 rx_time = lll -> dle .eff .max_rx_time ;
1243- #else /* CONFIG_BT_CTLR_DATA_LENGTH */
12441252
1253+ #else /* CONFIG_BT_CTLR_DATA_LENGTH */
12451254 tx_time = MAX (PDU_DC_MAX_US (PDU_DC_PAYLOAD_SIZE_MIN , 0 ),
12461255 PDU_DC_MAX_US (PDU_DC_PAYLOAD_SIZE_MIN , lll -> phy_tx ));
12471256 rx_time = MAX (PDU_DC_MAX_US (PDU_DC_PAYLOAD_SIZE_MIN , 0 ),
12481257 PDU_DC_MAX_US (PDU_DC_PAYLOAD_SIZE_MIN , lll -> phy_rx ));
12491258#endif /* CONFIG_BT_CTLR_DATA_LENGTH */
1259+
1260+ #else /* !CONFIG_BT_CTLR_PERIPHERAL_RESERVE_MAX */
1261+ tx_time = PDU_MAX_US (0U , 0U , lll -> phy_tx );
1262+ rx_time = PDU_MAX_US (0U , 0U , lll -> phy_rx );
1263+ #endif /* !CONFIG_BT_CTLR_PERIPHERAL_RESERVE_MAX */
1264+
12501265#else /* CONFIG_BT_CTLR_PHY */
12511266 ready_delay = (lll -> role ) ?
12521267 lll_radio_rx_ready_delay_get (0 , 0 ) :
12531268 lll_radio_tx_ready_delay_get (0 , 0 );
1269+ #if defined(CONFIG_BT_CTLR_PERIPHERAL_RESERVE_MAX )
12541270 tx_time = PDU_DC_MAX_US (lll -> dle .eff .max_tx_octets , 0 );
12551271 rx_time = PDU_DC_MAX_US (lll -> dle .eff .max_rx_octets , 0 );
1272+
1273+ #else /* !CONFIG_BT_CTLR_PERIPHERAL_RESERVE_MAX */
1274+ tx_time = PDU_MAX_US (0U , 0U , PHY_1M );
1275+ rx_time = PDU_MAX_US (0U , 0U , PHY_1M );
1276+ #endif /* !CONFIG_BT_CTLR_PERIPHERAL_RESERVE_MAX */
12561277#endif /* CONFIG_BT_CTLR_PHY */
12571278
12581279 /* Calculate event time reservation */
0 commit comments