Lines Matching refs:chain

90 static inline void aux_chain_release(struct ll_scan_aux_chain *chain);
91 struct ll_scan_aux_chain *scan_aux_chain_is_valid_get(struct ll_scan_aux_chain *chain);
94 static void aux_sync_incomplete(struct ll_scan_aux_chain *chain);
96 static void flush(struct ll_scan_aux_chain *chain);
97 static void chain_start_ticker(struct ll_scan_aux_chain *chain, bool replace);
98 static bool chain_insert_in_sched_list(struct ll_scan_aux_chain *chain);
100 struct ll_scan_aux_chain *chain);
101 static void chain_append_to_list(struct ll_scan_aux_chain **head, struct ll_scan_aux_chain *chain);
102 static bool chain_is_in_list(struct ll_scan_aux_chain *head, struct ll_scan_aux_chain *chain);
1595 struct ll_scan_aux_chain *chain; in ull_scan_aux_setup() local
1628 chain = NULL; in ull_scan_aux_setup()
1644 chain = NULL; in ull_scan_aux_setup()
1668 chain = CONTAINER_OF(lll_aux, struct ll_scan_aux_chain, lll); in ull_scan_aux_setup()
1671 lll = chain->parent; in ull_scan_aux_setup()
1688 chain = CONTAINER_OF(lll_aux, struct ll_scan_aux_chain, lll); in ull_scan_aux_setup()
1689 LL_ASSERT(lll == chain->parent); in ull_scan_aux_setup()
1701 chain = CONTAINER_OF(lll_aux, struct ll_scan_aux_chain, lll); in ull_scan_aux_setup()
1702 LL_ASSERT(sync_lll == chain->parent); in ull_scan_aux_setup()
1785 chain = NULL; in ull_scan_aux_setup()
1808 if (chain) { in ull_scan_aux_setup()
1809 chain->aux_sched = 0U; in ull_scan_aux_setup()
1813 chain_remove_from_list(&scan_aux_set.active_chains, chain); in ull_scan_aux_setup()
1816 chain->is_lll_sched = 0U; in ull_scan_aux_setup()
1829 if (chain) { in ull_scan_aux_setup()
1830 chain->data_len += data_len; in ull_scan_aux_setup()
1831 ftr->aux_data_len = chain->data_len; in ull_scan_aux_setup()
1916 if (sync && chain && (is_aux_addr_match || (scan->periodic.param == chain)) && in ull_scan_aux_setup()
1918 ull_sync_setup(scan, chain->lll.phy, rx, si); in ull_scan_aux_setup()
1945 if (chain) { in ull_scan_aux_setup()
1946 chain->data_len += data_len; in ull_scan_aux_setup()
1947 ftr->aux_data_len = chain->data_len; in ull_scan_aux_setup()
1995 LL_ASSERT(chain && chain->rx_last); in ull_scan_aux_setup()
1997 chain->rx_last->rx_ftr.extra = rx; in ull_scan_aux_setup()
1998 chain->rx_last = rx; in ull_scan_aux_setup()
2074 if (!chain) { in ull_scan_aux_setup()
2075 chain = aux_chain_acquire(); in ull_scan_aux_setup()
2076 if (!chain) { in ull_scan_aux_setup()
2091 chain->rx_head = chain->rx_last = NULL; in ull_scan_aux_setup()
2092 chain->data_len = data_len; in ull_scan_aux_setup()
2093 chain->is_lll_sched = ftr->aux_lll_sched; in ull_scan_aux_setup()
2094 lll_aux = &chain->lll; in ull_scan_aux_setup()
2099 chain->parent = lll ? (void *)lll : (void *)sync_lll; in ull_scan_aux_setup()
2111 scan->periodic.param = chain; in ull_scan_aux_setup()
2139 } else if (chain->data_len >= CONFIG_BT_CTLR_SCAN_DATA_LEN_MAX) { in ull_scan_aux_setup()
2162 if (chain->rx_last) { in ull_scan_aux_setup()
2163 chain->rx_last->rx_ftr.extra = rx; in ull_scan_aux_setup()
2165 chain->rx_head = rx; in ull_scan_aux_setup()
2167 chain->rx_last = rx; in ull_scan_aux_setup()
2178 chain->aux_sched = 1U; in ull_scan_aux_setup()
2180 chain->next = scan_aux_set.active_chains; in ull_scan_aux_setup()
2181 scan_aux_set.active_chains = chain; in ull_scan_aux_setup()
2203 if (lll->lll_aux == &chain->lll) { in ull_scan_aux_setup()
2233 chain->ticker_ticks = (ftr->ticks_anchor + ticks_aux_offset) & HAL_TICKER_CNTR_MASK; in ull_scan_aux_setup()
2235 if (!chain_insert_in_sched_list(chain)) { in ull_scan_aux_setup()
2244 chain->aux_sched = 1U; in ull_scan_aux_setup()
2259 if (chain) { in ull_scan_aux_setup()
2263 if (!IS_ENABLED(CONFIG_BT_CTLR_SYNC_PERIODIC) || chain->rx_last) { in ull_scan_aux_setup()
2272 if (chain->rx_last != rx) { in ull_scan_aux_setup()
2273 chain->rx_last->rx_ftr.extra = rx; in ull_scan_aux_setup()
2274 chain->rx_last = rx; in ull_scan_aux_setup()
2282 LL_ASSERT(chain->parent); in ull_scan_aux_setup()
2284 flush_safe(chain); in ull_scan_aux_setup()
2300 struct ll_scan_aux_chain *chain; in ull_scan_aux_done() local
2303 chain = CONTAINER_OF(done->extra.lll, struct ll_scan_aux_chain, lll); in ull_scan_aux_done()
2304 LL_ASSERT(scan_aux_chain_is_valid_get(chain)); in ull_scan_aux_done()
2307 chain_remove_from_list(&scan_aux_set.active_chains, chain); in ull_scan_aux_done()
2309 flush(chain); in ull_scan_aux_done()
2320 struct ll_scan_aux_chain *chain; in ull_scan_aux_lll_parent_get() local
2322 chain = CONTAINER_OF(lll, struct ll_scan_aux_chain, lll); in ull_scan_aux_lll_parent_get()
2328 lllscan = chain->parent; in ull_scan_aux_lll_parent_get()
2335 return chain->parent; in ull_scan_aux_lll_parent_get()
2338 struct ll_scan_aux_chain *scan_aux_chain_is_valid_get(struct ll_scan_aux_chain *chain) in scan_aux_chain_is_valid_get() argument
2340 if (((uint8_t *)chain < (uint8_t *)ll_scan_aux_pool) || in scan_aux_chain_is_valid_get()
2341 ((uint8_t *)chain > ((uint8_t *)ll_scan_aux_pool + in scan_aux_chain_is_valid_get()
2347 return chain; in scan_aux_chain_is_valid_get()
2352 struct ll_scan_aux_chain *chain; in ull_scan_aux_lll_is_valid_get() local
2354 chain = CONTAINER_OF(lll, struct ll_scan_aux_chain, lll); in ull_scan_aux_lll_is_valid_get()
2355 chain = scan_aux_chain_is_valid_get(chain); in ull_scan_aux_lll_is_valid_get()
2356 if (chain) { in ull_scan_aux_lll_is_valid_get()
2357 return &chain->lll; in ull_scan_aux_lll_is_valid_get()
2410 struct ll_scan_aux_chain *chain; in ull_scan_aux_release() local
2415 chain = CONTAINER_OF(lll_aux, struct ll_scan_aux_chain, lll); in ull_scan_aux_release()
2416 lll = chain->parent; in ull_scan_aux_release()
2433 LL_ASSERT(chain->parent); in ull_scan_aux_release()
2436 chain_remove_from_list(&scan_aux_set.active_chains, chain); in ull_scan_aux_release()
2437 flush(chain); in ull_scan_aux_release()
2492 struct ll_scan_aux_chain *chain = curr; in scan_aux_stop_all_chains_for_parent() local
2503 if (chain->is_lll_sched || ull_ref_get(&scan_aux_set.ull) == 0) { in scan_aux_stop_all_chains_for_parent()
2505 flush(chain); in scan_aux_stop_all_chains_for_parent()
2508 chain->next = scan_aux_set.flushing_chains; in scan_aux_stop_all_chains_for_parent()
2509 scan_aux_set.flushing_chains = chain; in scan_aux_stop_all_chains_for_parent()
2568 static inline void aux_chain_release(struct ll_scan_aux_chain *chain) in aux_chain_release() argument
2573 LL_ASSERT(chain->parent); in aux_chain_release()
2574 chain->parent = NULL; in aux_chain_release()
2576 mem_release(chain, &scan_aux_free); in aux_chain_release()
2597 struct ll_scan_aux_chain *chain; in flush_safe() local
2599 chain = param; in flush_safe()
2600 LL_ASSERT(chain->parent); in flush_safe()
2602 if (chain_is_in_list(scan_aux_set.flushing_chains, chain)) { in flush_safe()
2608 if (chain_is_in_list(scan_aux_set.active_chains, chain) && in flush_safe()
2611 chain->next = scan_aux_set.flushing_chains; in flush_safe()
2612 scan_aux_set.flushing_chains = chain; in flush_safe()
2615 flush(chain); in flush_safe()
2619 static void flush(struct ll_scan_aux_chain *chain) in flush() argument
2629 LL_ASSERT(chain->parent); in flush()
2632 chain_remove_from_list(&scan_aux_set.flushing_chains, chain); in flush()
2634 lll = chain->parent; in flush()
2639 if (!scan && chain->aux_sched) { in flush()
2641 aux_sync_incomplete(chain); in flush()
2645 rx = chain->rx_head; in flush()
2647 chain->rx_head = NULL; in flush()
2672 if (lll->lll_aux == &chain->lll) { in flush()
2676 lll->scan_aux_score = chain->lll.hdr.score; in flush()
2682 sync_lll = chain->parent; in flush()
2689 aux_chain_release(chain); in flush()
2693 static void aux_sync_incomplete(struct ll_scan_aux_chain *chain) in aux_sync_incomplete() argument
2699 LL_ASSERT(chain->parent); in aux_sync_incomplete()
2702 lll = chain->parent; in aux_sync_incomplete()
2725 chain->rx_head = rx; in aux_sync_incomplete()
2729 static void chain_start_ticker(struct ll_scan_aux_chain *chain, bool replace) in chain_start_ticker() argument
2740 if (ull_scan_is_valid_get(HDR_LLL2ULL(chain->parent))) { in chain_start_ticker()
2741 if (chain->rx_head == chain->rx_last) { in chain_start_ticker()
2742 struct ll_scan_set *scan = HDR_LLL2ULL(chain->parent); in chain_start_ticker()
2752 struct ll_sync_set *ull_sync = HDR_LLL2ULL(chain->parent); in chain_start_ticker()
2760 ready_delay_us = lll_radio_rx_ready_delay_get(chain->lll.phy, PHY_FLAGS_S8); in chain_start_ticker()
2764 PDU_AC_MAX_US(PDU_AC_EXT_PAYLOAD_RX_SIZE, chain->lll.phy) + in chain_start_ticker()
2790 (chain->ticker_ticks - in chain_start_ticker()
2808 chain->ticker_ticks - ticks_slot_offset, in chain_start_ticker()
2815 ticker_cb, chain, ticker_op_cb, chain); in chain_start_ticker()
2840 struct ll_scan_aux_chain *chain = param; in ticker_cb() local
2852 LL_ASSERT(scan_aux_set.sched_chains == chain); in ticker_cb()
2855 chain_remove_from_list(&scan_aux_set.sched_chains, chain); in ticker_cb()
2856 chain_append_to_list(&scan_aux_set.active_chains, chain); in ticker_cb()
2863 p.param = &chain->lll; in ticker_cb()
2882 struct ll_scan_aux_chain *chain; in ticker_start_failed() local
2885 chain = param; in ticker_start_failed()
2886 chain_remove_from_list(&scan_aux_set.sched_chains, chain); in ticker_start_failed()
2888 flush(chain); in ticker_start_failed()
2931 static bool chain_insert_in_sched_list(struct ll_scan_aux_chain *chain) in chain_insert_in_sched_list() argument
2938 chain->next = NULL; in chain_insert_in_sched_list()
2939 scan_aux_set.sched_chains = chain; in chain_insert_in_sched_list()
2940 chain_start_ticker(chain, false); in chain_insert_in_sched_list()
2945 while (curr && chain_ticker_ticks_diff(chain->ticker_ticks, curr->ticker_ticks) > 0) { in chain_insert_in_sched_list()
2953 ticker_ticks_diff_get(chain->ticker_ticks, prev->ticker_ticks) < ticks_min_delta) || in chain_insert_in_sched_list()
2955 ticker_ticks_diff_get(curr->ticker_ticks, chain->ticker_ticks) < ticks_min_delta)) { in chain_insert_in_sched_list()
2960 chain->next = prev->next; in chain_insert_in_sched_list()
2961 prev->next = chain; in chain_insert_in_sched_list()
2963 chain->next = scan_aux_set.sched_chains; in chain_insert_in_sched_list()
2964 scan_aux_set.sched_chains = chain; in chain_insert_in_sched_list()
2965 chain_start_ticker(chain, true); in chain_insert_in_sched_list()
2971 static void chain_remove_from_list(struct ll_scan_aux_chain **head, struct ll_scan_aux_chain *chain) in chain_remove_from_list() argument
2976 while (curr && curr != chain) { in chain_remove_from_list()
2989 chain->next = NULL; in chain_remove_from_list()
2992 static void chain_append_to_list(struct ll_scan_aux_chain **head, struct ll_scan_aux_chain *chain) in chain_append_to_list() argument
2997 chain->next = NULL; in chain_append_to_list()
2998 *head = chain; in chain_append_to_list()
3006 prev->next = chain; in chain_append_to_list()
3009 static bool chain_is_in_list(struct ll_scan_aux_chain *head, struct ll_scan_aux_chain *chain) in chain_is_in_list() argument
3012 if (head == chain) { in chain_is_in_list()