Skip to content

Commit 19fe102

Browse files
cvinayakcarlescufi
authored andcommitted
Bluetooth: Controller: Propagate ticks_drift in the ticker callback
The ticker `ticks_drift` is propagated via the ticker elapsed callback, in order to provide necessary information to correctly calculate total elapsed durations by states and roles that use ticker extensions to mitigate scheduling collisions by drifting within a permitted window. Signed-off-by: Vinayak Kariappa Chettimada <[email protected]>
1 parent b01b5f6 commit 19fe102

21 files changed

+121
-71
lines changed

drivers/flash/soc_flash_nrf_ticker.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ static inline int _ticker_stop(uint8_t inst_idx, uint8_t u_id, uint8_t tic_id)
5252
}
5353

5454
static void time_slot_callback_work(uint32_t ticks_at_expire,
55+
uint32_t ticks_drift,
5556
uint32_t remainder,
5657
uint16_t lazy, uint8_t force,
5758
void *context)
@@ -120,6 +121,7 @@ static void time_slot_delay(uint32_t ticks_at_expire, uint32_t ticks_delay,
120121
}
121122

122123
static void time_slot_callback_abort(uint32_t ticks_at_expire,
124+
uint32_t ticks_drift,
123125
uint32_t remainder,
124126
uint16_t lazy, uint8_t force,
125127
void *context)
@@ -132,13 +134,14 @@ static void time_slot_callback_abort(uint32_t ticks_at_expire,
132134
}
133135

134136
static void time_slot_callback_prepare(uint32_t ticks_at_expire,
137+
uint32_t ticks_drift,
135138
uint32_t remainder,
136139
uint16_t lazy, uint8_t force,
137140
void *context)
138141
{
139142
#if defined(CONFIG_BT_CTLR_LOW_LAT)
140-
time_slot_callback_abort(ticks_at_expire, remainder, lazy, force,
141-
context);
143+
time_slot_callback_abort(ticks_at_expire, ticks_drift, remainder, lazy,
144+
force, context);
142145
#else /* !CONFIG_BT_CTLR_LOW_LAT */
143146
time_slot_delay(ticks_at_expire,
144147
HAL_TICKER_US_TO_TICKS(FLASH_RADIO_ABORT_DELAY_US),

subsys/bluetooth/controller/ll_sw/nordic/lll/lll.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,9 @@ static void isr_race(void *param);
7272
static uint32_t preempt_ticker_start(struct lll_event *prev,
7373
struct lll_event *next);
7474
static uint32_t preempt_ticker_stop(void);
75-
static void preempt_ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
76-
uint16_t lazy, uint8_t force, void *param);
75+
static void preempt_ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
76+
uint32_t remainder, uint16_t lazy, uint8_t force,
77+
void *param);
7778
static void preempt(void *param);
7879
#else /* CONFIG_BT_CTLR_LOW_LAT */
7980
#if (CONFIG_BT_CTLR_LLL_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
@@ -857,8 +858,9 @@ static uint32_t preempt_ticker_stop(void)
857858
return ret;
858859
}
859860

860-
static void preempt_ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
861-
uint16_t lazy, uint8_t force, void *param)
861+
static void preempt_ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
862+
uint32_t remainder, uint16_t lazy, uint8_t force,
863+
void *param)
862864
{
863865
static memq_link_t link;
864866
static struct mayfly mfy = {0, 0, &link, NULL, preempt};

subsys/bluetooth/controller/ll_sw/nordic/lll/lll_scan.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ static int common_prepare_cb(struct lll_prepare_param *p, bool is_resume);
5454
static int is_abort_cb(void *next, void *curr,
5555
lll_prepare_cb_t *resume_cb);
5656
static void abort_cb(struct lll_prepare_param *prepare_param, void *param);
57-
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t remainder, uint16_t lazy,
58-
uint8_t force, void *param);
57+
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
58+
uint32_t remainder, uint16_t lazy, uint8_t force,
59+
void *param);
5960
static void ticker_op_start_cb(uint32_t status, void *param);
6061
static void isr_rx(void *param);
6162
static void isr_tx(void *param);
@@ -593,8 +594,8 @@ static void abort_cb(struct lll_prepare_param *prepare_param, void *param)
593594
lll_done(param);
594595
}
595596

596-
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t remainder, uint16_t lazy,
597-
uint8_t force, void *param)
597+
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
598+
uint32_t remainder, uint16_t lazy, uint8_t force, void *param)
598599
{
599600
radio_isr_set(isr_done_cleanup, param);
600601
radio_disable();

subsys/bluetooth/controller/ll_sw/openisa/lll/lll.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,9 @@ static void ticker_start_op_cb(uint32_t status, void *param);
6666
static void ticker_start_next_op_cb(uint32_t status, void *param);
6767
static uint32_t preempt_ticker_start(struct lll_event *event,
6868
ticker_op_func op_cb);
69-
static void preempt_ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
70-
uint16_t lazy, uint8_t force, void *param);
69+
static void preempt_ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
70+
uint32_t remainder, uint16_t lazy, uint8_t force,
71+
void *param);
7172
static void preempt(void *param);
7273
#else /* CONFIG_BT_CTLR_LOW_LAT */
7374
#if (CONFIG_BT_CTLR_LLL_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
@@ -670,8 +671,9 @@ static uint32_t preempt_ticker_start(struct lll_event *event,
670671
return ret;
671672
}
672673

673-
static void preempt_ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
674-
uint16_t lazy, uint8_t force, void *param)
674+
static void preempt_ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
675+
uint32_t remainder, uint16_t lazy, uint8_t force,
676+
void *param)
675677
{
676678
static memq_link_t link;
677679
static struct mayfly mfy = {0, 0, &link, NULL, preempt};

subsys/bluetooth/controller/ll_sw/openisa/lll/lll_scan.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ static int init_reset(void);
4343
static int prepare_cb(struct lll_prepare_param *prepare_param);
4444
static int is_abort_cb(void *next, void *curr, lll_prepare_cb_t *resume_cb);
4545
static void abort_cb(struct lll_prepare_param *prepare_param, void *param);
46-
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t remainder, uint16_t lazy,
47-
uint8_t force, void *param);
46+
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
47+
uint32_t remainder, uint16_t lazy, uint8_t force,
48+
void *param);
4849
static void ticker_op_start_cb(uint32_t status, void *param);
4950
static void isr_rx(void *param);
5051
static void isr_tx(void *param);
@@ -329,8 +330,9 @@ static void abort_cb(struct lll_prepare_param *prepare_param, void *param)
329330
lll_done(param);
330331
}
331332

332-
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t remainder, uint16_t lazy,
333-
uint8_t force, void *param)
333+
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
334+
uint32_t remainder, uint16_t lazy, uint8_t force,
335+
void *param)
334336
{
335337
radio_isr_set(isr_cleanup, param);
336338
radio_disable();

subsys/bluetooth/controller/ll_sw/ull_adv.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,15 @@ static uint16_t adv_time_get(struct pdu_adv *pdu, struct pdu_adv *pdu_scan,
6666
uint8_t adv_chn_cnt, uint8_t phy,
6767
uint8_t phy_flags);
6868

69-
static void ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
70-
uint16_t lazy, uint8_t force, void *param);
69+
static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
70+
uint32_t remainder, uint16_t lazy, uint8_t force,
71+
void *param);
7172
static void ticker_update_op_cb(uint32_t status, void *param);
7273

7374
#if defined(CONFIG_BT_PERIPHERAL)
74-
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t remainder,
75-
uint16_t lazy, uint8_t force, void *param);
75+
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
76+
uint32_t remainder, uint16_t lazy, uint8_t force,
77+
void *param);
7678
static void ticker_stop_op_cb(uint32_t status, void *param);
7779
static void adv_disable(void *param);
7880
static void disabled_cb(void *param);
@@ -2093,8 +2095,9 @@ static uint16_t adv_time_get(struct pdu_adv *pdu, struct pdu_adv *pdu_scan,
20932095
return time_us;
20942096
}
20952097

2096-
static void ticker_cb(uint32_t ticks_at_expire, uint32_t remainder, uint16_t lazy,
2097-
uint8_t force, void *param)
2098+
static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
2099+
uint32_t remainder, uint16_t lazy, uint8_t force,
2100+
void *param)
20982101
{
20992102
static memq_link_t link;
21002103
static struct mayfly mfy = {0, 0, &link, NULL, lll_adv_prepare};
@@ -2180,8 +2183,9 @@ static void ticker_update_op_cb(uint32_t status, void *param)
21802183
}
21812184

21822185
#if defined(CONFIG_BT_PERIPHERAL)
2183-
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t remainder,
2184-
uint16_t lazy, uint8_t force, void *param)
2186+
static void ticker_stop_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
2187+
uint32_t remainder, uint16_t lazy, uint8_t force,
2188+
void *param)
21852189
{
21862190
struct ll_adv_set *adv = param;
21872191
uint8_t handle;

subsys/bluetooth/controller/ll_sw/ull_adv_aux.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ static uint16_t aux_time_get(struct ll_adv_aux_set *aux, struct pdu_adv *pdu,
5151
static uint8_t aux_time_update(struct ll_adv_aux_set *aux, struct pdu_adv *pdu,
5252
struct pdu_adv *pdu_scan);
5353
static void mfy_aux_offset_get(void *param);
54-
static void ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
55-
uint16_t lazy, uint8_t force, void *param);
54+
static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
55+
uint32_t remainder, uint16_t lazy, uint8_t force,
56+
void *param);
5657
static void ticker_op_cb(uint32_t status, void *param);
5758

5859
static struct ll_adv_aux_set ll_adv_aux_pool[CONFIG_BT_CTLR_ADV_AUX_SET];
@@ -1269,8 +1270,9 @@ static void mfy_aux_offset_get(void *param)
12691270
ull_adv_aux_lll_offset_fill(ticks_to_expire, 0, pdu);
12701271
}
12711272

1272-
static void ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
1273-
uint16_t lazy, uint8_t force, void *param)
1273+
static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
1274+
uint32_t remainder, uint16_t lazy, uint8_t force,
1275+
void *param)
12741276
{
12751277
static memq_link_t link;
12761278
static struct mayfly mfy = {0, 0, &link, NULL, lll_adv_aux_prepare};

subsys/bluetooth/controller/ll_sw/ull_adv_iso.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ static uint32_t ull_adv_iso_start(struct ll_adv_iso *adv_iso,
4747
uint32_t ticks_anchor);
4848
static inline struct ll_adv_iso *ull_adv_iso_get(uint8_t handle);
4949
static int init_reset(void);
50-
static void ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
51-
uint16_t lazy, uint8_t force, void *param);
50+
static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
51+
uint32_t remainder, uint16_t lazy, uint8_t force,
52+
void *param);
5253
static void tx_lll_flush(void *param);
5354
static void ticker_op_stop_cb(uint32_t status, void *param);
5455

@@ -424,8 +425,9 @@ static int init_reset(void)
424425
}
425426

426427

427-
static void ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
428-
uint16_t lazy, uint8_t force, void *param)
428+
static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
429+
uint32_t remainder, uint16_t lazy, uint8_t force,
430+
void *param)
429431
{
430432
/* TODO: LLL support for ADV ISO */
431433
#if 0

subsys/bluetooth/controller/ll_sw/ull_adv_sync.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ static inline struct pdu_adv_sync_info *sync_info_get(struct pdu_adv *pdu);
5959
static inline void sync_info_offset_fill(struct pdu_adv_sync_info *si,
6060
uint32_t ticks_offset,
6161
uint32_t start_us);
62-
static void ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
63-
uint16_t lazy, uint8_t force, void *param);
62+
static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
63+
uint32_t remainder, uint16_t lazy, uint8_t force,
64+
void *param);
6465
static void ticker_op_cb(uint32_t status, void *param);
6566

6667
static struct ll_adv_sync_set ll_adv_sync_pool[CONFIG_BT_CTLR_ADV_SYNC_SET];
@@ -1616,8 +1617,9 @@ static inline void sync_info_offset_fill(struct pdu_adv_sync_info *si,
16161617
}
16171618
}
16181619

1619-
static void ticker_cb(uint32_t ticks_at_expire, uint32_t remainder,
1620-
uint16_t lazy, uint8_t force, void *param)
1620+
static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
1621+
uint32_t remainder, uint16_t lazy, uint8_t force,
1622+
void *param)
16211623
{
16221624
static memq_link_t link;
16231625
static struct mayfly mfy = {0, 0, &link, NULL, lll_adv_sync_prepare};

subsys/bluetooth/controller/ll_sw/ull_conn_iso.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,9 @@ static void ticker_resume_op_cb(uint32_t status, void *param)
311311
LL_ASSERT(status == TICKER_STATUS_SUCCESS);
312312
}
313313

314-
static void ticker_resume_cb(uint32_t ticks_at_expire, uint32_t remainder,
315-
uint16_t lazy, uint8_t force, void *param)
314+
static void ticker_resume_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
315+
uint32_t remainder, uint16_t lazy, uint8_t force,
316+
void *param)
316317
{
317318
static memq_link_t link;
318319
static struct mayfly mfy = {0, 0, &link, NULL, lll_resume};

0 commit comments

Comments
 (0)