Bluetooth: Controller: Ensure ext header max size reservation
Ensure maximum size of common extended header format be reserved when CONFIG_BT_CTLR_ADV_RESERVE_MAX=n is used so that changes to ACAD, like channel map update does not need frequent update to periodic advertising auxiliary channel PDU time reservations. Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
parent
1164c327d6
commit
1b023e5419
1 changed files with 21 additions and 3 deletions
|
@ -52,6 +52,8 @@ static uint8_t adv_type_check(struct ll_adv_set *adv);
|
||||||
static inline struct ll_adv_sync_set *sync_acquire(void);
|
static inline struct ll_adv_sync_set *sync_acquire(void);
|
||||||
static inline void sync_release(struct ll_adv_sync_set *sync);
|
static inline void sync_release(struct ll_adv_sync_set *sync);
|
||||||
static inline uint16_t sync_handle_get(struct ll_adv_sync_set *sync);
|
static inline uint16_t sync_handle_get(struct ll_adv_sync_set *sync);
|
||||||
|
static uint32_t ull_adv_sync_pdu_time_get(const struct ll_adv_sync_set *sync,
|
||||||
|
const struct pdu_adv *pdu);
|
||||||
static inline uint8_t sync_remove(struct ll_adv_sync_set *sync,
|
static inline uint8_t sync_remove(struct ll_adv_sync_set *sync,
|
||||||
struct ll_adv_set *adv, uint8_t enable);
|
struct ll_adv_set *adv, uint8_t enable);
|
||||||
static uint8_t sync_chm_update(uint8_t handle);
|
static uint8_t sync_chm_update(uint8_t handle);
|
||||||
|
@ -1071,8 +1073,7 @@ uint32_t ull_adv_sync_start(struct ll_adv_set *adv,
|
||||||
lll_sync = &sync->lll;
|
lll_sync = &sync->lll;
|
||||||
ter_pdu = lll_adv_sync_data_peek(lll_sync, NULL);
|
ter_pdu = lll_adv_sync_data_peek(lll_sync, NULL);
|
||||||
|
|
||||||
/* Calculate the PDU Tx Time and hence the radio event length */
|
time_us = ull_adv_sync_pdu_time_get(sync, ter_pdu);
|
||||||
time_us = ull_adv_sync_time_get(sync, ter_pdu->len);
|
|
||||||
|
|
||||||
/* TODO: active_to_start feature port */
|
/* TODO: active_to_start feature port */
|
||||||
sync->ull.ticks_active_to_start = 0U;
|
sync->ull.ticks_active_to_start = 0U;
|
||||||
|
@ -1118,7 +1119,7 @@ uint8_t ull_adv_sync_time_update(struct ll_adv_sync_set *sync,
|
||||||
uint32_t time_us;
|
uint32_t time_us;
|
||||||
uint32_t ret;
|
uint32_t ret;
|
||||||
|
|
||||||
time_us = ull_adv_sync_time_get(sync, pdu->len);
|
time_us = ull_adv_sync_pdu_time_get(sync, pdu);
|
||||||
time_ticks = HAL_TICKER_US_TO_TICKS(time_us);
|
time_ticks = HAL_TICKER_US_TO_TICKS(time_us);
|
||||||
if (sync->ull.ticks_slot > time_ticks) {
|
if (sync->ull.ticks_slot > time_ticks) {
|
||||||
ticks_minus = sync->ull.ticks_slot - time_ticks;
|
ticks_minus = sync->ull.ticks_slot - time_ticks;
|
||||||
|
@ -1888,6 +1889,23 @@ static inline uint16_t sync_handle_get(struct ll_adv_sync_set *sync)
|
||||||
sizeof(struct ll_adv_sync_set));
|
sizeof(struct ll_adv_sync_set));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint32_t ull_adv_sync_pdu_time_get(const struct ll_adv_sync_set *sync,
|
||||||
|
const struct pdu_adv *pdu)
|
||||||
|
{
|
||||||
|
uint8_t len;
|
||||||
|
|
||||||
|
/* Calculate the PDU Tx Time and hence the radio event length,
|
||||||
|
* Always use maximum length for common extended header format so that
|
||||||
|
* ACAD could be update when periodic advertising is active and the
|
||||||
|
* time reservation need not be updated everytime avoiding overlapping
|
||||||
|
* with other active states/roles.
|
||||||
|
*/
|
||||||
|
len = pdu->len - pdu->adv_ext_ind.ext_hdr_len -
|
||||||
|
PDU_AC_EXT_HEADER_SIZE_MIN + PDU_AC_EXT_HEADER_SIZE_MAX;
|
||||||
|
|
||||||
|
return ull_adv_sync_time_get(sync, len);
|
||||||
|
}
|
||||||
|
|
||||||
static uint8_t sync_stop(struct ll_adv_sync_set *sync)
|
static uint8_t sync_stop(struct ll_adv_sync_set *sync)
|
||||||
{
|
{
|
||||||
uint8_t sync_handle;
|
uint8_t sync_handle;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue