Bluetooth: controller: split: Refactor node_rx_ftr

Remove us_radio_rdy field in the footer structure as its always
a constant value which can be obtained using a functional
interface to HAL.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2020-04-21 11:21:07 +05:30 committed by Carles Cufí
commit 5d6c4a6cb5
9 changed files with 40 additions and 24 deletions

View file

@ -200,8 +200,7 @@ struct node_rx_ftr {
void *param;
void *extra;
uint32_t ticks_anchor;
uint32_t us_radio_end;
uint32_t us_radio_rdy;
uint32_t radio_end_us;
uint8_t rssi;
#if defined(CONFIG_BT_CTLR_PRIVACY)
uint8_t lrpa_used:1;
@ -304,6 +303,8 @@ int lll_reset(void);
void lll_resume(void *param);
void lll_disable(void *param);
uint32_t lll_radio_is_idle(void);
uint32_t lll_radio_tx_ready_delay_get(uint8_t phy, uint8_t flags);
uint32_t lll_radio_rx_ready_delay_get(uint8_t phy, uint8_t flags);
int8_t lll_radio_tx_pwr_min_get(void);
int8_t lll_radio_tx_pwr_max_get(void);
int8_t lll_radio_tx_pwr_floor(int8_t tx_pwr_lvl);

View file

@ -383,6 +383,16 @@ uint32_t lll_radio_is_idle(void)
return radio_is_idle();
}
uint32_t lll_radio_tx_ready_delay_get(uint8_t phy, uint8_t flags)
{
return radio_tx_ready_delay_get(phy, flags);
}
uint32_t lll_radio_rx_ready_delay_get(uint8_t phy, uint8_t flags)
{
return radio_rx_ready_delay_get(phy, flags);
}
int8_t lll_radio_tx_pwr_min_get(void)
{
return radio_tx_power_min_get();

View file

@ -730,9 +730,8 @@ static inline int isr_rx_pdu(struct lll_adv *lll,
ftr = &(rx->hdr.rx_ftr);
ftr->param = lll;
ftr->ticks_anchor = radio_tmr_start_get();
ftr->us_radio_end = radio_tmr_end_get() -
ftr->radio_end_us = radio_tmr_end_get() -
radio_tx_chain_delay_get(0, 0);
ftr->us_radio_rdy = radio_rx_ready_delay_get(0, 0);
#if defined(CONFIG_BT_CTLR_PRIVACY)
ftr->rl_idx = irkmatch_ok ? rl_idx : FILTER_IDX_NONE;

View file

@ -836,9 +836,8 @@ static inline uint32_t isr_rx_pdu(struct lll_scan *lll, uint8_t devmatch_ok,
ftr->param = lll;
ftr->ticks_anchor = radio_tmr_start_get();
ftr->us_radio_end = conn_space_us -
ftr->radio_end_us = conn_space_us -
radio_tx_chain_delay_get(0, 0);
ftr->us_radio_rdy = radio_tx_ready_delay_get(0, 0);
#if defined(CONFIG_BT_CTLR_PRIVACY)
ftr->rl_idx = irkmatch_ok ? rl_idx : FILTER_IDX_NONE;

View file

@ -17,10 +17,6 @@
#include "hal/ccm.h"
#include "hal/ticker.h"
#if defined(CONFIG_SOC_FAMILY_NRF)
#include "hal/radio.h"
#endif /* CONFIG_SOC_FAMILY_NRF */
#include "util/util.h"
#include "util/mem.h"
#include "util/mfifo.h"

View file

@ -12,7 +12,6 @@
#include "hal/ccm.h"
#include "hal/ticker.h"
#include "hal/radio.h"
#include "util/util.h"
#include "util/mem.h"

View file

@ -14,7 +14,6 @@
#include "hal/ticker.h"
#include "hal/ccm.h"
#include "hal/radio.h"
#include "ticker/ticker.h"
@ -529,11 +528,12 @@ void ull_master_setup(memq_link_t *link, struct node_rx_hdr *rx,
uint8_t ticker_id_scan, ticker_id_conn;
uint8_t peer_addr[BDADDR_SIZE];
uint32_t ticks_slot_overhead;
uint32_t ticks_slot_offset;
struct ll_scan_set *scan;
uint32_t ticks_slot_offset;
struct pdu_adv *pdu_tx;
struct node_rx_cc *cc;
struct ll_conn *conn;
struct pdu_adv *pdu_tx;
uint32_t ready_delay_us;
uint8_t peer_addr_type;
uint32_t ticker_status;
uint8_t chan_sel;
@ -635,6 +635,13 @@ void ull_master_setup(memq_link_t *link, struct node_rx_hdr *rx,
ll_rx_put(link, rx);
ll_rx_sched();
#if defined(CONFIG_BT_CTLR_PHY)
ready_delay_us = lll_radio_tx_ready_delay_get(lll->phy_tx,
lll->phy_flags);
#else
ready_delay_us = lll_radio_tx_ready_delay_get(0, 0);
#endif
/* TODO: active_to_start feature port */
conn->evt.ticks_active_to_start = 0U;
conn->evt.ticks_xtal_to_start =
@ -643,8 +650,8 @@ void ull_master_setup(memq_link_t *link, struct node_rx_hdr *rx,
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
conn->evt.ticks_slot =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
ftr->us_radio_rdy + 328 + EVENT_IFS_US +
328);
ready_delay_us +
328 + EVENT_IFS_US + 328);
ticks_slot_offset = MAX(conn->evt.ticks_active_to_start,
conn->evt.ticks_xtal_to_start);
@ -656,10 +663,10 @@ void ull_master_setup(memq_link_t *link, struct node_rx_hdr *rx,
}
conn_interval_us = lll->interval * 1250;
conn_offset_us = ftr->us_radio_end;
conn_offset_us = ftr->radio_end_us;
conn_offset_us += HAL_TICKER_TICKS_TO_US(1);
conn_offset_us -= EVENT_OVERHEAD_START_US;
conn_offset_us -= ftr->us_radio_rdy;
conn_offset_us -= ready_delay_us;
#if (CONFIG_BT_CTLR_ULL_HIGH_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
/* disable ticker job, in order to chain stop and start to avoid RTC

View file

@ -10,7 +10,6 @@
#include "hal/ccm.h"
#include "hal/ticker.h"
#include "hal/radio.h"
#include "util/util.h"
#include "util/mem.h"

View file

@ -14,7 +14,6 @@
#include "hal/ticker.h"
#include "hal/ccm.h"
#include "hal/radio.h"
#include "ticker/ticker.h"
@ -59,6 +58,7 @@ void ull_slave_setup(memq_link_t *link, struct node_rx_hdr *rx,
struct ll_adv_set *adv;
struct node_rx_cc *cc;
struct ll_conn *conn;
uint32_t ready_delay_us;
uint32_t ticker_status;
uint8_t peer_addr_type;
uint16_t win_offset;
@ -216,6 +216,12 @@ void ull_slave_setup(memq_link_t *link, struct node_rx_hdr *rx,
ll_rx_put(link, rx);
ll_rx_sched();
#if defined(CONFIG_BT_CTLR_PHY)
ready_delay_us = lll_radio_rx_ready_delay_get(lll->phy_rx, 1);
#else
ready_delay_us = lll_radio_rx_ready_delay_get(0, 0);
#endif
/* TODO: active_to_start feature port */
conn->evt.ticks_active_to_start = 0U;
conn->evt.ticks_xtal_to_start =
@ -224,8 +230,8 @@ void ull_slave_setup(memq_link_t *link, struct node_rx_hdr *rx,
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
conn->evt.ticks_slot =
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
ftr->us_radio_rdy + 328 + EVENT_IFS_US +
328);
ready_delay_us +
328 + EVENT_IFS_US + 328);
ticks_slot_offset = MAX(conn->evt.ticks_active_to_start,
conn->evt.ticks_xtal_to_start);
@ -238,12 +244,12 @@ void ull_slave_setup(memq_link_t *link, struct node_rx_hdr *rx,
conn_interval_us -= lll->slave.window_widening_periodic_us;
conn_offset_us = ftr->us_radio_end;
conn_offset_us = ftr->radio_end_us;
conn_offset_us += ((uint64_t)win_offset + 1) * 1250U;
conn_offset_us -= EVENT_OVERHEAD_START_US;
conn_offset_us -= EVENT_TICKER_RES_MARGIN_US;
conn_offset_us -= EVENT_JITTER_US;
conn_offset_us -= ftr->us_radio_rdy;
conn_offset_us -= ready_delay_us;
#if (CONFIG_BT_CTLR_ULL_HIGH_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
/* disable ticker job, in order to chain stop and start to avoid RTC