diff --git a/subsys/bluetooth/controller/hci/hci.c b/subsys/bluetooth/controller/hci/hci.c index 902ee9f600a..3860475fe10 100644 --- a/subsys/bluetooth/controller/hci/hci.c +++ b/subsys/bluetooth/controller/hci/hci.c @@ -2371,9 +2371,11 @@ static int controller_cmd_handle(uint16_t ocf, struct net_buf *cmd, #endif /* CONFIG_BT_OBSERVER */ #if defined(CONFIG_BT_CONN) +#if defined(CONFIG_BT_CENTRAL) case BT_OCF(BT_HCI_OP_LE_EXT_CREATE_CONN): le_ext_create_connection(cmd, evt); break; +#endif /* CONFIG_BT_CENTRAL */ #endif /* CONFIG_BT_CONN */ #endif /* CONFIG_BT_CTLR_ADV_EXT */ @@ -3716,7 +3718,11 @@ static void le_adv_ext_coded_report(struct pdu_data *pdu_data, { le_adv_ext_report(pdu_data, node_rx, buf, BIT(2)); } +#endif /* CONFIG_BT_CTLR_ADV_EXT */ +#endif /* CONFIG_BT_OBSERVER */ +#if defined(CONFIG_BT_BROADCASTER) +#if defined(CONFIG_BT_CTLR_ADV_EXT) static void le_adv_ext_terminate(struct pdu_data *pdu_data, struct node_rx_pdu *node_rx, struct net_buf *buf) @@ -3737,7 +3743,7 @@ static void le_adv_ext_terminate(struct pdu_data *pdu_data, node_rx->hdr.rx_ftr.param_adv_term.num_events; } #endif /* CONFIG_BT_CTLR_ADV_EXT */ -#endif /* CONFIG_BT_OBSERVER */ +#endif /* CONFIG_BT_BROADCASTER */ #if defined(CONFIG_BT_CTLR_SCAN_REQ_NOTIFY) static void le_scan_req_received(struct pdu_data *pdu_data, diff --git a/subsys/bluetooth/controller/ll_sw/ull.c b/subsys/bluetooth/controller/ll_sw/ull.c index 58b9a5467a3..fb27eaa7bab 100644 --- a/subsys/bluetooth/controller/ll_sw/ull.c +++ b/subsys/bluetooth/controller/ll_sw/ull.c @@ -560,6 +560,7 @@ void ll_rx_dequeue(void) /* handle object specific clean up */ switch (rx->type) { #if defined(CONFIG_BT_CTLR_ADV_EXT) +#if defined(CONFIG_BT_OBSERVER) case NODE_RX_TYPE_EXT_1M_REPORT: case NODE_RX_TYPE_EXT_2M_REPORT: case NODE_RX_TYPE_EXT_CODED_REPORT: @@ -583,17 +584,18 @@ void ll_rx_dequeue(void) } } break; +#endif /* CONFIG_BT_OBSERVER */ +#if defined(CONFIG_BT_BROADCASTER) case NODE_RX_TYPE_EXT_ADV_TERMINATE: { - struct lll_conn *lll_conn; struct ll_adv_set *adv; - struct ll_conn *conn; - memq_link_t *link; adv = ull_adv_set_get(rx->handle); - lll_conn = adv->lll.conn; +#if defined(CONFIG_BT_PERIPHERAL) + struct lll_conn *lll_conn = adv->lll.conn; + if (!lll_conn) { adv->is_enabled = 0U; @@ -601,23 +603,29 @@ void ll_rx_dequeue(void) } LL_ASSERT(!lll_conn->link_tx_free); - link = memq_deinit(&lll_conn->memq_tx.head, - &lll_conn->memq_tx.tail); + + memq_link_t *link = memq_deinit(&lll_conn->memq_tx.head, + &lll_conn->memq_tx.tail); LL_ASSERT(link); + lll_conn->link_tx_free = link; - conn = (void *)HDR_LLL2EVT(lll_conn); + struct ll_conn *conn = (void *)HDR_LLL2EVT(lll_conn); + ll_conn_release(conn); adv->lll.conn = NULL; ll_rx_release(adv->node_rx_cc_free); adv->node_rx_cc_free = NULL; + ll_rx_link_release(adv->link_cc_free); adv->link_cc_free = NULL; +#endif /* CONFIG_BT_PERIPHERAL */ adv->is_enabled = 0U; } break; +#endif /* CONFIG_BT_BROADCASTER */ #endif /* CONFIG_BT_CTLR_ADV_EXT */ #if defined(CONFIG_BT_CONN)