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 latency_prepare; 34 uint16_t latency_event; 35 union { 36 struct lll_sync_iso_data_chan data_chan; 37 38 #if defined(CONFIG_BT_CTLR_SYNC_ISO_INTERLEAVED) 39 struct lll_sync_iso_data_chan_interleaved 40 interleaved_data_chan[BT_CTLR_SYNC_ISO_STREAM_MAX]; 41 #endif /* CONFIG_BT_CTLR_SYNC_ISO_INTERLEAVED */ 42 }; 43 uint8_t next_chan_use; 44 45 uint64_t payload_count:39; 46 uint64_t framing:1; 47 uint64_t enc:1; 48 uint64_t ctrl:1; 49 uint64_t cssn_curr:3; 50 uint64_t cssn_next:3; 51 52 uint8_t data_chan_map[PDU_CHANNEL_MAP_SIZE]; 53 uint8_t data_chan_count:6; 54 uint8_t num_bis:5; 55 uint8_t bn:3; 56 uint8_t nse:5; 57 uint8_t phy:3; 58 59 uint32_t sub_interval:20; 60 uint32_t max_pdu:8; 61 uint32_t pto:4; 62 63 uint32_t bis_spacing:20; 64 uint32_t max_sdu:8; 65 uint32_t irc:4; 66 67 uint32_t sdu_interval:20; 68 uint32_t irc_curr:4; 69 uint32_t ptc_curr:4; 70 uint32_t ptc:4; 71 72 uint8_t bn_curr:3; 73 uint8_t bis_curr:5; 74 75 uint8_t stream_curr:5; 76 uint8_t establish_events:3; 77 78 /* Encryption */ 79 uint8_t giv[8]; 80 struct ccm ccm_rx; 81 82 uint8_t chm_chan_map[PDU_CHANNEL_MAP_SIZE]; 83 uint8_t chm_chan_count:6; 84 85 uint8_t term_reason; 86 87 uint16_t ctrl_instant; 88 89 uint8_t stream_count; 90 uint16_t stream_handle[BT_CTLR_SYNC_ISO_STREAM_MAX]; 91 92 struct node_rx_pdu *payload[BT_CTLR_SYNC_ISO_STREAM_MAX] 93 [PDU_BIG_PAYLOAD_COUNT_MAX]; 94 uint8_t payload_count_max; 95 uint8_t payload_tail; 96 97 uint32_t window_widening_periodic_us; 98 uint32_t window_widening_max_us; 99 uint32_t window_widening_prepare_us; 100 uint32_t window_widening_event_us; 101 uint32_t window_size_event_us; 102 }; 103 104 int lll_sync_iso_init(void); 105 int lll_sync_iso_reset(void); 106 void lll_sync_iso_create_prepare(void *param); 107 void lll_sync_iso_prepare(void *param); 108 void lll_sync_iso_flush(uint8_t handle, struct lll_sync_iso *lll); 109 110 extern uint8_t ull_sync_iso_lll_index_get(struct lll_sync_iso *lll); 111 extern struct lll_sync_iso_stream *ull_sync_iso_lll_stream_get(uint16_t handle); 112 extern void ll_iso_rx_put(memq_link_t *link, void *rx); 113 extern void ll_rx_sched(void); 114