1 /* 2 * Copyright (c) 2020-2021 Nordic Semiconductor ASA 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 struct lll_sync_iso_stream { 8 uint8_t big_handle; 9 uint8_t bis_index; 10 struct ll_iso_rx_test_mode *test_mode; 11 struct ll_iso_datapath *dp; 12 }; 13 14 struct lll_sync_iso_data_chan { 15 uint16_t prn_s; 16 uint16_t remap_idx; 17 }; 18 19 struct lll_sync_iso_data_chan_interleaved { 20 uint16_t prn_s; 21 uint16_t remap_idx; 22 uint16_t id; 23 }; 24 25 struct lll_sync_iso { 26 struct lll_hdr hdr; 27 28 uint8_t seed_access_addr[4]; 29 uint8_t base_crc_init[2]; 30 31 uint16_t iso_interval; 32 33 uint16_t lazy_prepare; 34 uint16_t latency_prepare; 35 uint16_t latency_event; 36 37 union { 38 struct lll_sync_iso_data_chan data_chan; 39 40 #if defined(CONFIG_BT_CTLR_SYNC_ISO_INTERLEAVED) 41 struct lll_sync_iso_data_chan_interleaved 42 interleaved_data_chan[BT_CTLR_SYNC_ISO_STREAM_MAX]; 43 #endif /* CONFIG_BT_CTLR_SYNC_ISO_INTERLEAVED */ 44 }; 45 uint8_t next_chan_use; 46 47 uint64_t payload_count:39; 48 uint64_t framing:1; 49 uint64_t enc:1; 50 uint64_t ctrl:1; 51 uint64_t cssn_curr:3; 52 uint64_t cssn_next:3; 53 54 uint8_t data_chan_map[PDU_CHANNEL_MAP_SIZE]; 55 uint8_t data_chan_count:6; 56 uint8_t num_bis:5; 57 uint8_t bn:3; 58 uint8_t nse:5; 59 uint8_t phy:3; 60 61 uint32_t sub_interval:20; 62 uint32_t max_pdu:8; 63 uint32_t pto:4; 64 65 uint32_t bis_spacing:20; 66 uint32_t max_sdu:8; 67 uint32_t irc:4; 68 69 uint32_t sdu_interval:20; 70 uint32_t irc_curr:4; 71 uint32_t ptc_curr:4; 72 uint32_t ptc:4; 73 74 uint8_t bn_curr:3; 75 uint8_t bis_curr:5; 76 77 uint8_t stream_curr:5; 78 uint8_t establish_events:3; 79 80 /* Encryption */ 81 uint8_t giv[8]; 82 struct ccm ccm_rx; 83 84 uint8_t chm_chan_map[PDU_CHANNEL_MAP_SIZE]; 85 uint8_t chm_chan_count:6; 86 87 uint8_t term_reason; 88 89 uint16_t ctrl_instant; 90 91 uint8_t stream_count; 92 uint16_t stream_handle[BT_CTLR_SYNC_ISO_STREAM_MAX]; 93 94 struct node_rx_pdu *payload[BT_CTLR_SYNC_ISO_STREAM_MAX] 95 [PDU_BIG_PAYLOAD_COUNT_MAX]; 96 uint8_t payload_count_max; 97 uint8_t payload_tail; 98 99 uint32_t window_widening_periodic_us; 100 uint32_t window_widening_max_us; 101 uint32_t window_widening_prepare_us; 102 uint32_t window_widening_event_us; 103 uint32_t window_size_event_us; 104 }; 105 106 int lll_sync_iso_init(void); 107 int lll_sync_iso_reset(void); 108 void lll_sync_iso_create_prepare(void *param); 109 void lll_sync_iso_prepare(void *param); 110 void lll_sync_iso_flush(uint8_t handle, struct lll_sync_iso *lll); 111 112 extern uint8_t ull_sync_iso_lll_index_get(struct lll_sync_iso *lll); 113 extern struct lll_sync_iso_stream *ull_sync_iso_lll_stream_get(uint16_t handle); 114 extern void ll_iso_rx_put(memq_link_t *link, void *rx); 115 extern void ll_rx_sched(void); 116