Bluetooth: Controller: Use HAL_TICKER_US_TO_TICKS_CEIL for ticks_slot

Use HAL_TICKER_US_TO_TICKS_CEIL for ticks_slot calculations.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2023-06-13 09:07:19 +05:30 committed by Carles Cufí
commit 333ff94e6b
16 changed files with 72 additions and 50 deletions

View file

@ -30,6 +30,17 @@
HAL_TICKER_CNTR_MASK \
)
/* Macro to translate microseconds to tick units.
* NOTE: This returns the ceil value.
*/
#define HAL_TICKER_US_TO_TICKS_CEIL(x) \
( \
((uint32_t)(((((uint64_t) (x) * 1000000000UL) + \
HAL_TICKER_CNTR_CLK_UNIT_FS - 1U)) / \
HAL_TICKER_CNTR_CLK_UNIT_FS)) & \
HAL_TICKER_CNTR_MASK \
)
/* Macro to translate tick units to microseconds. */
#define HAL_TICKER_TICKS_TO_US(x) \
( \

View file

@ -35,6 +35,17 @@
HAL_TICKER_CNTR_MASK \
)
/* Macro to translate microseconds to tick units.
* NOTE: This returns the ceil value.
*/
#define HAL_TICKER_US_TO_TICKS_CEIL(x) \
( \
((uint32_t)(((((uint64_t) (x) * 1000000000UL) + \
HAL_TICKER_CNTR_CLK_UNIT_FS - 1U)) / \
HAL_TICKER_CNTR_CLK_UNIT_FS)) & \
HAL_TICKER_CNTR_MASK \
)
/* Macro to translate tick units to microseconds. */
#define HAL_TICKER_TICKS_TO_US(x) \
( \

View file

@ -1251,7 +1251,7 @@ uint8_t ll_adv_enable(uint8_t enable)
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
adv->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
adv->ull.ticks_slot = HAL_TICKER_US_TO_TICKS(time_us);
adv->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(time_us);
ticks_slot_offset = MAX(adv->ull.ticks_active_to_start,
adv->ull.ticks_prepare_to_start);
@ -2145,7 +2145,7 @@ uint8_t ull_adv_time_update(struct ll_adv_set *adv, struct pdu_adv *pdu,
chan_map = lll->chan_map;
chan_cnt = util_ones_count_get(&chan_map, sizeof(chan_map));
time_us = adv_time_get(pdu, pdu_scan, chan_cnt, phy, phy_flags);
time_ticks = HAL_TICKER_US_TO_TICKS(time_us);
time_ticks = HAL_TICKER_US_TO_TICKS_CEIL(time_us);
#if !defined(CONFIG_BT_CTLR_JIT_SCHEDULING)
uint32_t volatile ret_cb;

View file

@ -2454,7 +2454,7 @@ uint32_t ull_adv_aux_evt_init(struct ll_adv_aux_set *aux,
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
aux->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
aux->ull.ticks_slot = HAL_TICKER_US_TO_TICKS(time_us);
aux->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(time_us);
if (IS_ENABLED(CONFIG_BT_CTLR_LOW_LAT)) {
ticks_slot_overhead = MAX(aux->ull.ticks_active_to_start,
@ -2471,7 +2471,7 @@ uint32_t ull_adv_aux_evt_init(struct ll_adv_aux_set *aux,
#if defined(CONFIG_BT_CTLR_ADV_RESERVE_MAX)
time_us = ull_adv_aux_time_get(aux, PDU_AC_PAYLOAD_SIZE_MAX,
PDU_AC_PAYLOAD_SIZE_MAX);
ticks_slot = HAL_TICKER_US_TO_TICKS(time_us);
ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(time_us);
#else
ticks_slot = aux->ull.ticks_slot;
#endif
@ -2997,7 +2997,7 @@ static uint8_t aux_time_update(struct ll_adv_aux_set *aux, struct pdu_adv *pdu,
uint32_t time_us;
time_us = aux_time_min_get(aux);
time_ticks = HAL_TICKER_US_TO_TICKS(time_us);
time_ticks = HAL_TICKER_US_TO_TICKS_CEIL(time_us);
#if !defined(CONFIG_BT_CTLR_JIT_SCHEDULING)
uint32_t volatile ret_cb;

View file

@ -977,7 +977,7 @@ static uint32_t adv_iso_start(struct ll_adv_iso_set *adv_iso,
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
adv_iso->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
adv_iso->ull.ticks_slot = HAL_TICKER_US_TO_TICKS(slot_us);
adv_iso->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(slot_us);
ticks_slot_offset = MAX(adv_iso->ull.ticks_active_to_start,
adv_iso->ull.ticks_prepare_to_start);

View file

@ -1136,7 +1136,7 @@ uint32_t ull_adv_sync_evt_init(struct ll_adv_set *adv,
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
sync->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
sync->ull.ticks_slot = HAL_TICKER_US_TO_TICKS(time_us);
sync->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(time_us);
ticks_slot_offset = MAX(sync->ull.ticks_active_to_start,
sync->ull.ticks_prepare_to_start);

View file

@ -360,13 +360,10 @@ conn_is_valid:
#endif /* CONFIG_BT_CTLR_ADV_EXT */
#endif /* CONFIG_BT_CTLR_DATA_LENGTH */
conn->ull.ticks_slot =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
EVENT_OVERHEAD_END_US +
ready_delay_us +
max_tx_time +
EVENT_IFS_US +
max_rx_time);
conn->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(
EVENT_OVERHEAD_START_US + EVENT_OVERHEAD_END_US +
ready_delay_us + max_tx_time + EVENT_IFS_US + max_rx_time +
(EVENT_CLOCK_JITTER_US << 1));
#if defined(CONFIG_BT_CTLR_PRIVACY)
ull_filter_scan_update(filter_policy);

View file

@ -559,7 +559,7 @@ uint8_t ll_cig_parameters_commit(uint8_t cig_id, uint16_t *handles)
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
cig->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
cig->ull.ticks_slot = HAL_TICKER_US_TO_TICKS(slot_us);
cig->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(slot_us);
#endif /* !CONFIG_BT_CTLR_JIT_SCHEDULING */
/* Reset params cache */

View file

@ -1257,12 +1257,10 @@ void ull_conn_done(struct node_rx_event_done *done)
tx_time = PDU_DC_MAX_US(lll->dle.eff.max_tx_octets, 0);
rx_time = PDU_DC_MAX_US(lll->dle.eff.max_rx_octets, 0);
#endif /* CONFIG_BT_CTLR_PHY */
ticks_slot = HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
ready_delay +
EVENT_IFS_US +
rx_time +
tx_time +
4);
ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(
EVENT_OVERHEAD_START_US + EVENT_OVERHEAD_END_US +
ready_delay + EVENT_IFS_US + rx_time + tx_time +
(EVENT_CLOCK_JITTER_US << 1));
if (ticks_slot > conn->ull.ticks_slot) {
ticks_slot_plus = ticks_slot - conn->ull.ticks_slot;
} else {

View file

@ -987,7 +987,7 @@ void ull_conn_iso_start(struct ll_conn *conn, uint16_t cis_handle,
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
cig->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
cig->ull.ticks_slot = HAL_TICKER_US_TO_TICKS(slot_us);
cig->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(slot_us);
}
ticks_slot_offset = MAX(cig->ull.ticks_active_to_start,

View file

@ -371,13 +371,10 @@ void ull_periph_setup(struct node_rx_hdr *rx, struct node_rx_ftr *ftr,
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
conn->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
conn->ull.ticks_slot =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
EVENT_OVERHEAD_END_US +
ready_delay_us +
max_rx_time +
EVENT_IFS_US +
max_tx_time);
conn->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(
EVENT_OVERHEAD_START_US + EVENT_OVERHEAD_END_US +
ready_delay_us + max_rx_time + EVENT_IFS_US + max_tx_time +
(EVENT_CLOCK_JITTER_US << 1));
ticks_slot_offset = MAX(conn->ull.ticks_active_to_start,
conn->ull.ticks_prepare_to_start);

View file

@ -666,12 +666,10 @@ void ull_scan_aux_setup(memq_link_t *link, struct node_rx_hdr *rx)
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
aux->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
aux->ull.ticks_slot =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
ready_delay_us +
PDU_AC_MAX_US(PDU_AC_EXT_PAYLOAD_RX_SIZE,
lll_aux->phy) +
EVENT_OVERHEAD_END_US);
aux->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(
EVENT_OVERHEAD_START_US + ready_delay_us +
PDU_AC_MAX_US(PDU_AC_EXT_PAYLOAD_RX_SIZE, lll_aux->phy) +
EVENT_OVERHEAD_END_US);
ticks_slot_offset = MAX(aux->ull.ticks_active_to_start,
aux->ull.ticks_prepare_to_start);

View file

@ -656,7 +656,7 @@ static struct ull_hdr *ull_hdr_get_cb(uint8_t ticker_id, uint32_t *ticks_slot)
time_us = ull_adv_aux_time_get(aux, PDU_AC_PAYLOAD_SIZE_MAX,
PDU_AC_PAYLOAD_SIZE_MAX);
*ticks_slot = HAL_TICKER_US_TO_TICKS(time_us);
*ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(time_us);
} else {
*ticks_slot = aux->ull.ticks_slot;
@ -686,7 +686,7 @@ static struct ull_hdr *ull_hdr_get_cb(uint8_t ticker_id, uint32_t *ticks_slot)
uint32_t time_us;
time_us = ull_adv_sync_time_get(sync, PDU_AC_PAYLOAD_SIZE_MAX);
*ticks_slot = HAL_TICKER_US_TO_TICKS(time_us);
*ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(time_us);
} else {
*ticks_slot = sync->ull.ticks_slot;
}
@ -745,9 +745,11 @@ static struct ull_hdr *ull_hdr_get_cb(uint8_t ticker_id, uint32_t *ticks_slot)
#endif /* !CONFIG_BT_CTLR_PHY_CODED */
time_us = EVENT_OVERHEAD_START_US +
EVENT_OVERHEAD_END_US +
ready_delay_us + max_rx_time +
EVENT_IFS_US + max_tx_time;
*ticks_slot = HAL_TICKER_US_TO_TICKS(time_us);
EVENT_IFS_US + max_tx_time +
(EVENT_CLOCK_JITTER_US << 1);
*ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(time_us);
} else {
*ticks_slot = conn->ull.ticks_slot;
}

View file

@ -826,12 +826,10 @@ void ull_sync_setup(struct ll_scan_set *scan, struct ll_scan_aux_set *aux,
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
sync->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
sync->ull.ticks_slot =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
ready_delay_us +
PDU_AC_MAX_US(PDU_AC_EXT_PAYLOAD_RX_SIZE,
lll->phy) +
EVENT_OVERHEAD_END_US);
sync->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(
EVENT_OVERHEAD_START_US + ready_delay_us +
PDU_AC_MAX_US(PDU_AC_EXT_PAYLOAD_RX_SIZE, lll->phy) +
EVENT_OVERHEAD_END_US);
ticks_slot_offset = MAX(sync->ull.ticks_active_to_start,
sync->ull.ticks_prepare_to_start);

View file

@ -509,11 +509,11 @@ void ull_sync_iso_setup(struct ll_sync_iso_set *sync_iso,
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
sync_iso->ull.ticks_preempt_to_start =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
sync_iso->ull.ticks_slot = HAL_TICKER_US_TO_TICKS(
EVENT_OVERHEAD_START_US + ready_delay_us +
PDU_BIS_MAX_US(PDU_AC_EXT_PAYLOAD_SIZE_MAX, lll->enc,
lll->phy) +
EVENT_OVERHEAD_END_US);
sync_iso->ull.ticks_slot = HAL_TICKER_US_TO_TICKS_CEIL(
EVENT_OVERHEAD_START_US + ready_delay_us +
PDU_BIS_MAX_US(PDU_AC_EXT_PAYLOAD_SIZE_MAX, lll->enc,
lll->phy) +
EVENT_OVERHEAD_END_US);
ticks_slot_offset = MAX(sync_iso->ull.ticks_active_to_start,
sync_iso->ull.ticks_prepare_to_start);

View file

@ -29,6 +29,16 @@
HAL_TICKER_CNTR_MASK \
)
/* Macro to translate microseconds to tick units.
* NOTE: This returns the ceil value.
*/
#define HAL_TICKER_US_TO_TICKS_CEIL(x) \
( \
((uint32_t)(((((uint64_t) (x) * 1000000000UL) + \
HAL_TICKER_CNTR_CLK_UNIT_FS - 1U)) / \
HAL_TICKER_CNTR_CLK_UNIT_FS)) & \
HAL_TICKER_CNTR_MASK \
)
/* Macro to translate tick units to microseconds. */
#define HAL_TICKER_TICKS_TO_US(x) \