From 9660f52dc7379a73a3c5e837f23dee6d3e35b881 Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Thu, 1 Dec 2022 23:18:32 +0530 Subject: [PATCH] Bluetooth: Controller: Fix Broadcast ISO PDU receive connection handle Fix broadcast ISO PDU receive connection handle. The look up was using BIS index instead of the index of the selected stream that is being received. Example, when receiving BISes 2 and 4, only the connection handle for BIS 2 was correct and connection handle lookup was out-of-bounds for BIS 4; symptoms being that Host dropped the received ISO PDU. Signed-off-by: Vinayak Kariappa Chettimada --- .../controller/ll_sw/nordic/lll/lll_sync_iso.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/subsys/bluetooth/controller/ll_sw/nordic/lll/lll_sync_iso.c b/subsys/bluetooth/controller/ll_sw/nordic/lll/lll_sync_iso.c index dda66239afc..4dd905647e6 100644 --- a/subsys/bluetooth/controller/ll_sw/nordic/lll/lll_sync_iso.c +++ b/subsys/bluetooth/controller/ll_sw/nordic/lll/lll_sync_iso.c @@ -44,9 +44,9 @@ static void abort_cb(struct lll_prepare_param *prepare_param, void *param); static void isr_rx_estab(void *param); static void isr_rx(void *param); static void isr_rx_iso_data_valid(const struct lll_sync_iso *const lll, - uint8_t bis_idx, struct node_rx_pdu *node_rx); + uint16_t handle, struct node_rx_pdu *node_rx); static void isr_rx_iso_data_invalid(const struct lll_sync_iso *const lll, - uint8_t bis_idx, uint8_t bn, + uint8_t bn, uint16_t handle, struct node_rx_pdu *node_rx); static void isr_rx_ctrl_recv(struct lll_sync_iso *lll, struct pdu_bis *pdu); @@ -530,7 +530,7 @@ static void isr_rx(void *param) ((payload_index >= lll->payload_tail) || (payload_index < lll->payload_head))) { ull_iso_pdu_rx_alloc(); - isr_rx_iso_data_valid(lll, bis_idx, node_rx); + isr_rx_iso_data_valid(lll, handle, node_rx); lll->payload[bis_idx][payload_index] = node_rx; } @@ -698,8 +698,8 @@ isr_rx_find_subevent: pdu->ll_id = PDU_BIS_LLID_COMPLETE_END; pdu->len = 0U; - isr_rx_iso_data_invalid(lll, bis_idx, - bn, node_rx); + isr_rx_iso_data_invalid(lll, bn, handle, + node_rx); iso_rx_put(node_rx->hdr.link, node_rx); } @@ -898,12 +898,12 @@ isr_rx_next_subevent: } static void isr_rx_iso_data_valid(const struct lll_sync_iso *const lll, - uint8_t bis_idx, struct node_rx_pdu *node_rx) + uint16_t handle, struct node_rx_pdu *node_rx) { struct node_rx_iso_meta *iso_meta; node_rx->hdr.type = NODE_RX_TYPE_ISO_PDU; - node_rx->hdr.handle = lll->stream_handle[bis_idx]; + node_rx->hdr.handle = handle; iso_meta = &node_rx->hdr.rx_iso_meta; iso_meta->payload_number = lll->payload_count + (lll->bn_curr - 1U) + @@ -916,13 +916,13 @@ static void isr_rx_iso_data_valid(const struct lll_sync_iso *const lll, } static void isr_rx_iso_data_invalid(const struct lll_sync_iso *const lll, - uint8_t bis_idx, uint8_t bn, + uint8_t bn, uint16_t handle, struct node_rx_pdu *node_rx) { struct node_rx_iso_meta *iso_meta; node_rx->hdr.type = NODE_RX_TYPE_ISO_PDU; - node_rx->hdr.handle = lll->stream_handle[bis_idx]; + node_rx->hdr.handle = handle; iso_meta = &node_rx->hdr.rx_iso_meta; iso_meta->payload_number = lll->payload_count - bn - 1U;