Commit dd1ac8d0 authored by Andrzej Kaczmarek's avatar Andrzej Kaczmarek Committed by Carles Cufi
Browse files

Bluetooth: controller: Add helper for CC event with status only



A lot of commands return CC event with status parameter only, especially
when error is returned. This patch adds a helper to create such event,
similar to cmd_status.

Signed-off-by: default avatarAndrzej Kaczmarek <andrzej.kaczmarek@codecoup.pl>
parent c088b028
Loading
Loading
Loading
Loading
+63 −130
Original line number Diff line number Diff line
@@ -129,6 +129,18 @@ static struct net_buf *cmd_status(uint8_t status)
	return bt_hci_cmd_status_create(_opcode, status);
}

static struct net_buf *cmd_complete_status(uint8_t status)
{
	struct net_buf *buf;
	struct bt_hci_evt_cc_status *ccst;

	buf = bt_hci_cmd_complete_create(_opcode, sizeof(*ccst));
	ccst = net_buf_add(buf, sizeof(*ccst));
	ccst->status = status;

	return buf;
}

static void *meta_evt(struct net_buf *buf, uint8_t subevt, uint8_t melen)
{
	struct bt_hci_evt_le_meta_event *me;
@@ -202,29 +214,23 @@ static int link_control_cmd_handle(uint16_t ocf, struct net_buf *cmd,
static void set_event_mask(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_set_event_mask *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;

	event_mask = sys_get_le64(cmd->events);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = 0x00;
	*evt = cmd_complete_status(0x00);
}

static void set_event_mask_page_2(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_set_event_mask_page_2 *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;

	event_mask_page_2 = sys_get_le64(cmd->events_page_2);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = 0x00;
	*evt = cmd_complete_status(0x00);
}

static void reset(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_evt_cc_status *ccst;

#if defined(CONFIG_BT_HCI_MESH_EXT)
	int i;

@@ -245,8 +251,7 @@ static void reset(struct net_buf *buf, struct net_buf **evt)

	if (buf) {
		ll_reset();
		ccst = hci_cmd_complete(evt, sizeof(*ccst));
		ccst->status = 0x00;
		*evt = cmd_complete_status(0x00);
	}

#if defined(CONFIG_BT_CONN)
@@ -736,12 +741,10 @@ static int status_cmd_handle(uint16_t ocf, struct net_buf *cmd,
static void le_set_event_mask(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_set_event_mask *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;

	le_event_mask = sys_get_le64(cmd->events);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = 0x00;
	*evt = cmd_complete_status(0x00);
}

static void le_read_buffer_size(struct net_buf *buf, struct net_buf **evt)
@@ -771,13 +774,11 @@ static void le_read_local_features(struct net_buf *buf, struct net_buf **evt)
static void le_set_random_address(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_random_address *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_addr_set(1, &cmd->bdaddr.val[0]);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

#if defined(CONFIG_BT_CTLR_FILTER)
@@ -793,34 +794,31 @@ static void le_read_wl_size(struct net_buf *buf, struct net_buf **evt)

static void le_clear_wl(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = ll_wl_clear();
	status = ll_wl_clear();

	*evt = cmd_complete_status(status);
}

static void le_add_dev_to_wl(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_add_dev_to_wl *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_wl_add(&cmd->addr);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_rem_dev_from_wl(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_rem_dev_from_wl *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_wl_remove(&cmd->addr);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}
#endif /* CONFIG_BT_CTLR_FILTER */

@@ -911,7 +909,6 @@ static void le_read_supp_states(struct net_buf *buf, struct net_buf **evt)
static void le_set_adv_param(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_adv_param *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint16_t min_interval;
	uint8_t status;

@@ -924,9 +921,7 @@ static void le_set_adv_param(struct net_buf *buf, struct net_buf **evt)
		if ((min_interval > max_interval) ||
		    (min_interval < 0x0020) ||
		    (max_interval > 0x4000)) {
			ccst = hci_cmd_complete(evt, sizeof(*ccst));
			ccst->status = BT_HCI_ERR_INVALID_PARAM;

			*evt = cmd_complete_status(BT_HCI_ERR_INVALID_PARAM);
			return;
		}
	}
@@ -943,8 +938,7 @@ static void le_set_adv_param(struct net_buf *buf, struct net_buf **evt)
				   cmd->filter_policy);
#endif /* !CONFIG_BT_CTLR_ADV_EXT */

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_read_adv_chan_tx_power(struct net_buf *buf, struct net_buf **evt)
@@ -961,7 +955,6 @@ static void le_read_adv_chan_tx_power(struct net_buf *buf, struct net_buf **evt)
static void le_set_adv_data(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_adv_data *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

#if defined(CONFIG_BT_CTLR_ADV_EXT)
@@ -970,14 +963,12 @@ static void le_set_adv_data(struct net_buf *buf, struct net_buf **evt)
	status = ll_adv_data_set(cmd->len, &cmd->data[0]);
#endif /* !CONFIG_BT_CTLR_ADV_EXT */

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_scan_rsp_data(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_scan_rsp_data *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

#if defined(CONFIG_BT_CTLR_ADV_EXT)
@@ -986,14 +977,12 @@ static void le_set_scan_rsp_data(struct net_buf *buf, struct net_buf **evt)
	status = ll_adv_scan_rsp_set(cmd->len, &cmd->data[0]);
#endif /* !CONFIG_BT_CTLR_ADV_EXT */

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_adv_enable(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_adv_enable *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

#if defined(CONFIG_BT_CTLR_ADV_EXT) || defined(CONFIG_BT_HCI_MESH_EXT)
@@ -1006,8 +995,7 @@ static void le_set_adv_enable(struct net_buf *buf, struct net_buf **evt)
	status = ll_adv_enable(cmd->enable);
#endif /* !CONFIG_BT_CTLR_ADV_EXT || !CONFIG_BT_HCI_MESH_EXT */

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}
#endif /* CONFIG_BT_BROADCASTER */

@@ -1015,7 +1003,6 @@ static void le_set_adv_enable(struct net_buf *buf, struct net_buf **evt)
static void le_set_scan_param(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_scan_param *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint16_t interval;
	uint16_t window;
	uint8_t status;
@@ -1026,14 +1013,12 @@ static void le_set_scan_param(struct net_buf *buf, struct net_buf **evt)
	status = ll_scan_params_set(cmd->scan_type, interval, window,
				    cmd->addr_type, cmd->filter_policy);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_scan_enable(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_scan_enable *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

#if CONFIG_BT_CTLR_DUP_FILTER_LEN > 0
@@ -1048,8 +1033,7 @@ static void le_set_scan_enable(struct net_buf *buf, struct net_buf **evt)

	status = ll_scan_enable(cmd->enable);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}
#endif /* CONFIG_BT_OBSERVER */

@@ -1101,25 +1085,21 @@ static void le_create_connection(struct net_buf *buf, struct net_buf **evt)
static void le_create_conn_cancel(struct net_buf *buf, struct net_buf **evt,
				  void **node_rx)
{
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_connect_disable(node_rx);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_host_chan_classif(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_host_chan_classif *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_chm_update(&cmd->ch_map[0]);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

#if defined(CONFIG_BT_CTLR_LE_ENC)
@@ -1309,7 +1289,6 @@ static void le_write_default_data_len(struct net_buf *buf,
				      struct net_buf **evt)
{
	struct bt_hci_cp_le_write_default_data_len *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint16_t max_tx_octets;
	uint16_t max_tx_time;
	uint8_t status;
@@ -1318,8 +1297,7 @@ static void le_write_default_data_len(struct net_buf *buf,
	max_tx_time = sys_le16_to_cpu(cmd->max_tx_time);
	status = ll_length_default_set(max_tx_octets, max_tx_time);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_read_max_data_len(struct net_buf *buf, struct net_buf **evt)
@@ -1366,7 +1344,6 @@ static void le_read_phy(struct net_buf *buf, struct net_buf **evt)
static void le_set_default_phy(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_default_phy *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	if (cmd->all_phys & BT_HCI_LE_PHY_TX_ANY) {
@@ -1378,8 +1355,7 @@ static void le_set_default_phy(struct net_buf *buf, struct net_buf **evt)

	status = ll_phy_default_set(cmd->tx_phys, cmd->rx_phys);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_phy(struct net_buf *buf, struct net_buf **evt)
@@ -1440,34 +1416,30 @@ static void le_set_phy(struct net_buf *buf, struct net_buf **evt)
static void le_add_dev_to_rl(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_add_dev_to_rl *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_rl_add(&cmd->peer_id_addr, cmd->peer_irk, cmd->local_irk);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_rem_dev_from_rl(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_rem_dev_from_rl *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_rl_remove(&cmd->peer_id_addr);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_clear_rl(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	status = ll_rl_clear();

	ccst->status = ll_rl_clear();
	*evt = cmd_complete_status(status);
}

static void le_read_rl_size(struct net_buf *buf, struct net_buf **evt)
@@ -1507,35 +1479,31 @@ static void le_read_local_rpa(struct net_buf *buf, struct net_buf **evt)
static void le_set_addr_res_enable(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_addr_res_enable *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t enable = cmd->enable;
	uint8_t status;

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = ll_rl_enable(enable);
	status = ll_rl_enable(cmd->enable);

	*evt = cmd_complete_status(status);
}

static void le_set_rpa_timeout(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_rpa_timeout *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint16_t timeout = sys_le16_to_cpu(cmd->rpa_timeout);

	ll_rl_timeout_set(timeout);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = 0x00;
	*evt = cmd_complete_status(0x00);
}

static void le_set_privacy_mode(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_privacy_mode *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_priv_mode_set(&cmd->id_addr, cmd->mode);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}
#endif /* CONFIG_BT_CTLR_PRIVACY */

@@ -1552,26 +1520,22 @@ static void le_read_tx_power(struct net_buf *buf, struct net_buf **evt)
static void le_rx_test(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_rx_test *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_test_rx(cmd->rx_ch, 0x01, 0);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_tx_test(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_tx_test *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_test_tx(cmd->tx_ch, cmd->test_data_len, cmd->pkt_payload,
			    0x01);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_test_end(struct net_buf *buf, struct net_buf **evt)
@@ -1589,26 +1553,22 @@ static void le_test_end(struct net_buf *buf, struct net_buf **evt)
static void le_enh_rx_test(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_enh_rx_test *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_test_rx(cmd->rx_ch, cmd->phy, cmd->mod_index);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_enh_tx_test(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_enh_tx_test *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_test_tx(cmd->tx_ch, cmd->test_data_len, cmd->pkt_payload,
			    cmd->phy);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}
#endif /* CONFIG_BT_CTLR_DTM_HCI */

@@ -1619,13 +1579,11 @@ static void le_set_adv_set_random_addr(struct net_buf *buf,
				       struct net_buf **evt)
{
	struct bt_hci_cp_le_set_adv_set_random_addr *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_adv_aux_random_addr_set(cmd->handle, &cmd->bdaddr.val[0]);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_ext_adv_param(struct net_buf *buf, struct net_buf **evt)
@@ -1660,33 +1618,28 @@ static void le_set_ext_adv_param(struct net_buf *buf, struct net_buf **evt)
static void le_set_ext_adv_data(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_ext_adv_data *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_adv_aux_ad_data_set(cmd->handle, cmd->op, cmd->frag_pref,
					cmd->len, cmd->data);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_ext_scan_rsp_data(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_ext_scan_rsp_data *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_adv_aux_sr_data_set(cmd->handle, cmd->op, cmd->frag_pref,
					cmd->len, cmd->data);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_ext_adv_enable(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_ext_adv_enable *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	struct bt_hci_ext_adv_set *s;
	uint8_t set_num;
	uint8_t enable;
@@ -1695,15 +1648,12 @@ static void le_set_ext_adv_enable(struct net_buf *buf, struct net_buf **evt)
	set_num = cmd->set_num;
	if (!set_num) {
		if (cmd->enable) {
			ccst = hci_cmd_complete(evt, sizeof(*ccst));
			ccst->status = BT_HCI_ERR_INVALID_PARAM;

			*evt = cmd_complete_status(BT_HCI_ERR_INVALID_PARAM);
			return;
		}

		/* FIXME: Implement disable of all advertising sets */
		ccst = hci_cmd_complete(evt, sizeof(*ccst));
		ccst->status = BT_HCI_ERR_UNSUPP_FEATURE_PARAM_VAL;
		*evt = cmd_complete_status(BT_HCI_ERR_UNSUPP_FEATURE_PARAM_VAL);

		return;
	}
@@ -1728,8 +1678,7 @@ static void le_set_ext_adv_enable(struct net_buf *buf, struct net_buf **evt)
		s++;
	} while (--set_num);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_read_max_adv_data_len(struct net_buf *buf, struct net_buf **evt)
@@ -1758,31 +1707,26 @@ static void le_read_num_adv_sets(struct net_buf *buf, struct net_buf **evt)
static void le_remove_adv_set(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_remove_adv_set *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_adv_aux_set_remove(cmd->handle);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_clear_adv_sets(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_adv_aux_set_clear();

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

#if defined(CONFIG_BT_CTLR_ADV_PERIODIC)
static void le_set_per_adv_param(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_per_adv_param *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint16_t interval;
	uint16_t flags;
	uint8_t status;
@@ -1792,33 +1736,28 @@ static void le_set_per_adv_param(struct net_buf *buf, struct net_buf **evt)

	status = ll_adv_sync_param_set(cmd->handle, interval, flags);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_per_adv_data(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_per_adv_data *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_adv_sync_ad_data_set(cmd->handle, cmd->op, cmd->len,
					 cmd->data);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_per_adv_enable(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_per_adv_enable *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

	status = ll_adv_sync_enable(cmd->handle, cmd->enable);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}
#endif /* CONFIG_BT_CTLR_ADV_PERIODIC */
#endif /* CONFIG_BT_BROADCASTER */
@@ -1827,7 +1766,6 @@ static void le_set_per_adv_enable(struct net_buf *buf, struct net_buf **evt)
static void le_set_ext_scan_param(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_ext_scan_param *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	struct bt_hci_ext_scan_phy *p;
	uint8_t own_addr_type;
	uint8_t filter_policy;
@@ -1891,14 +1829,12 @@ static void le_set_ext_scan_param(struct net_buf *buf, struct net_buf **evt)
		phys_bitmask &= (phys_bitmask - 1);
	} while (phys_bitmask);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}

static void le_set_ext_scan_enable(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_set_ext_scan_enable *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;
	uint8_t status;

#if CONFIG_BT_CTLR_DUP_FILTER_LEN > 0
@@ -1914,8 +1850,7 @@ static void le_set_ext_scan_enable(struct net_buf *buf, struct net_buf **evt)
	/* FIXME: Add implementation to use duration and period parameters. */
	status = ll_scan_enable(cmd->enable);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = status;
	*evt = cmd_complete_status(status);
}
#endif /* CONFIG_BT_OBSERVER */

@@ -2375,12 +2310,10 @@ uint8_t bt_read_static_addr(struct bt_hci_vs_static_addr addrs[], uint8_t size)
static void vs_write_bd_addr(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_vs_write_bd_addr *cmd = (void *)buf->data;
	struct bt_hci_evt_cc_status *ccst;

	ll_addr_set(0, &cmd->bdaddr.val[0]);

	ccst = hci_cmd_complete(evt, sizeof(*ccst));
	ccst->status = 0x00;
	*evt = cmd_complete_status(0x00);
}

static void vs_read_build_info(struct net_buf *buf, struct net_buf **evt)