Lines Matching refs:conn

122 void ull_cp_update_tx_buffer_queue(struct ll_conn *conn)  in ull_cp_update_tx_buffer_queue()  argument
124 if (conn->llcp.tx_buffer_alloc > CONFIG_BT_CTLR_LLCP_PER_CONN_TX_CTRL_BUF_NUM) { in ull_cp_update_tx_buffer_queue()
125 common_tx_buffer_alloc -= (conn->llcp.tx_buffer_alloc - in ull_cp_update_tx_buffer_queue()
135 static inline bool static_tx_buffer_available(struct ll_conn *conn, struct proc_ctx *ctx) in static_tx_buffer_available() argument
139 if (conn->llcp.tx_buffer_alloc < CONFIG_BT_CTLR_LLCP_PER_CONN_TX_CTRL_BUF_NUM) { in static_tx_buffer_available()
153 bool llcp_tx_alloc_peek(struct ll_conn *conn, struct proc_ctx *ctx) in llcp_tx_alloc_peek() argument
155 if (!static_tx_buffer_available(conn, ctx)) { in llcp_tx_alloc_peek()
196 struct node_tx *llcp_tx_alloc(struct ll_conn *conn, struct proc_ctx *ctx) in llcp_tx_alloc() argument
198 conn->llcp.tx_buffer_alloc++; in llcp_tx_alloc()
200 if (conn->llcp.tx_buffer_alloc > CONFIG_BT_CTLR_LLCP_PER_CONN_TX_CTRL_BUF_NUM) { in llcp_tx_alloc()
220 bool llcp_tx_alloc_peek(struct ll_conn *conn, struct proc_ctx *ctx) in llcp_tx_alloc_peek() argument
222 ARG_UNUSED(conn); in llcp_tx_alloc_peek()
232 struct node_tx *llcp_tx_alloc(struct ll_conn *conn, struct proc_ctx *ctx) in llcp_tx_alloc() argument
237 ARG_UNUSED(conn); in llcp_tx_alloc()
271 void llcp_tx_enqueue(struct ll_conn *conn, struct node_tx *tx) in llcp_tx_enqueue() argument
273 ull_tx_q_enqueue_ctrl(&conn->tx_q, tx); in llcp_tx_enqueue()
276 void llcp_tx_pause_data(struct ll_conn *conn, enum llcp_tx_q_pause_data_mask pause_mask) in llcp_tx_pause_data() argument
279 if (conn->llcp.tx_q_pause_data_mask == 0) { in llcp_tx_pause_data()
280 ull_tx_q_pause_data(&conn->tx_q); in llcp_tx_pause_data()
284 conn->llcp.tx_q_pause_data_mask |= pause_mask; in llcp_tx_pause_data()
287 void llcp_tx_resume_data(struct ll_conn *conn, enum llcp_tx_q_pause_data_mask resume_mask) in llcp_tx_resume_data() argument
290 conn->llcp.tx_q_pause_data_mask &= ~resume_mask; in llcp_tx_resume_data()
293 if (conn->llcp.tx_q_pause_data_mask == 0) { in llcp_tx_resume_data()
294 ull_tx_q_resume_data(&conn->tx_q); in llcp_tx_resume_data()
324 void llcp_nodes_release(struct ll_conn *conn, struct proc_ctx *ctx) in llcp_nodes_release() argument
328 ctx->node_ref.rx->hdr.link->mem = conn->llcp.rx_node_release; in llcp_nodes_release()
330 conn->llcp.rx_node_release = ctx->node_ref.rx; in llcp_nodes_release()
335 ctx->data.pu.ntf_dle_node->hdr.link->mem = conn->llcp.rx_node_release; in llcp_nodes_release()
337 conn->llcp.rx_node_release = ctx->data.pu.ntf_dle_node; in llcp_nodes_release()
342 ctx->node_ref.tx->next = conn->llcp.tx_node_release; in llcp_nodes_release()
343 conn->llcp.tx_node_release = ctx->node_ref.tx; in llcp_nodes_release()
409 void ull_llcp_init(struct ll_conn *conn) in ull_llcp_init() argument
412 llcp_lr_init(conn); in ull_llcp_init()
413 sys_slist_init(&conn->llcp.local.pend_proc_list); in ull_llcp_init()
414 conn->llcp.local.pause = 0U; in ull_llcp_init()
417 llcp_rr_init(conn); in ull_llcp_init()
418 sys_slist_init(&conn->llcp.remote.pend_proc_list); in ull_llcp_init()
419 conn->llcp.remote.pause = 0U; in ull_llcp_init()
420 conn->llcp.remote.incompat = INCOMPAT_NO_COLLISION; in ull_llcp_init()
421 conn->llcp.remote.collision = 0U; in ull_llcp_init()
423 conn->llcp.remote.paused_cmd = PROC_NONE; in ull_llcp_init()
429 conn->llcp.prt_reload = 0U; in ull_llcp_init()
432 memset(&conn->llcp.vex, 0, sizeof(conn->llcp.vex)); in ull_llcp_init()
436 memset(&conn->llcp.muc, 0, sizeof(conn->llcp.muc)); in ull_llcp_init()
440 memset(&conn->llcp.fex, 0, sizeof(conn->llcp.fex)); in ull_llcp_init()
441 conn->llcp.fex.features_used = ll_feat_get(); in ull_llcp_init()
445 conn->lll.enc_tx = 0U; in ull_llcp_init()
446 conn->lll.enc_rx = 0U; in ull_llcp_init()
450 conn->llcp.cte_req.is_enabled = 0U; in ull_llcp_init()
451 conn->llcp.cte_req.req_expire = 0U; in ull_llcp_init()
454 conn->llcp.cte_rsp.is_enabled = 0U; in ull_llcp_init()
455 conn->llcp.cte_rsp.is_active = 0U; in ull_llcp_init()
456 conn->llcp.cte_rsp.disable_param = NULL; in ull_llcp_init()
457 conn->llcp.cte_rsp.disable_cb = NULL; in ull_llcp_init()
461 conn->llcp.tx_buffer_alloc = 0; in ull_llcp_init()
464 conn->llcp.tx_q_pause_data_mask = 0; in ull_llcp_init()
465 conn->lll.event_counter = 0; in ull_llcp_init()
467 conn->llcp.tx_node_release = NULL; in ull_llcp_init()
468 conn->llcp.rx_node_release = NULL; in ull_llcp_init()
471 void ull_cp_release_tx(struct ll_conn *conn, struct node_tx *tx) in ull_cp_release_tx() argument
474 if (conn) { in ull_cp_release_tx()
475 LL_ASSERT(conn->llcp.tx_buffer_alloc > 0); in ull_cp_release_tx()
476 if (conn->llcp.tx_buffer_alloc > CONFIG_BT_CTLR_LLCP_PER_CONN_TX_CTRL_BUF_NUM) { in ull_cp_release_tx()
479 conn->llcp.tx_buffer_alloc--; in ull_cp_release_tx()
482 ARG_UNUSED(conn); in ull_cp_release_tx()
502 int ull_cp_prt_elapse(struct ll_conn *conn, uint16_t elapsed_event, uint8_t *error_code) in ull_cp_prt_elapse() argument
507 loc_ret = prt_elapse(&conn->llcp.local.prt_expire, elapsed_event); in ull_cp_prt_elapse()
513 ctx = llcp_lr_peek(conn); in ull_cp_prt_elapse()
526 rem_ret = prt_elapse(&conn->llcp.remote.prt_expire, elapsed_event); in ull_cp_prt_elapse()
539 void ull_cp_prt_reload_set(struct ll_conn *conn, uint32_t conn_intv_us) in ull_cp_prt_reload_set() argument
542 conn->llcp.prt_reload = RADIO_CONN_EVENTS((40U * 1000U * 1000U), conn_intv_us); in ull_cp_prt_reload_set()
545 void ull_cp_run(struct ll_conn *conn) in ull_cp_run() argument
547 llcp_rr_run(conn); in ull_cp_run()
548 llcp_lr_run(conn); in ull_cp_run()
551 void ull_cp_state_set(struct ll_conn *conn, uint8_t state) in ull_cp_state_set() argument
555 llcp_rr_connect(conn); in ull_cp_state_set()
556 llcp_lr_connect(conn); in ull_cp_state_set()
559 llcp_rr_disconnect(conn); in ull_cp_state_set()
560 llcp_lr_disconnect(conn); in ull_cp_state_set()
567 void ull_cp_release_nodes(struct ll_conn *conn) in ull_cp_release_nodes() argument
573 rx = conn->llcp.rx_node_release; in ull_cp_release_nodes()
584 conn->llcp.rx_node_release = NULL; in ull_cp_release_nodes()
587 tx = conn->llcp.tx_node_release; in ull_cp_release_nodes()
594 ull_cp_release_tx(conn, tx_release); in ull_cp_release_nodes()
596 conn->llcp.tx_node_release = NULL; in ull_cp_release_nodes()
600 uint8_t ull_cp_min_used_chans(struct ll_conn *conn, uint8_t phys, uint8_t min_used_chans) in ull_cp_min_used_chans() argument
604 if (conn->lll.role != BT_HCI_ROLE_PERIPHERAL) { in ull_cp_min_used_chans()
616 llcp_lr_enqueue(conn, ctx); in ull_cp_min_used_chans()
623 uint8_t ull_cp_le_ping(struct ll_conn *conn) in ull_cp_le_ping() argument
632 llcp_lr_enqueue(conn, ctx); in ull_cp_le_ping()
639 uint8_t ull_cp_feature_exchange(struct ll_conn *conn, uint8_t host_initiated) in ull_cp_feature_exchange() argument
650 llcp_lr_enqueue(conn, ctx); in ull_cp_feature_exchange()
656 uint8_t ull_cp_version_exchange(struct ll_conn *conn) in ull_cp_version_exchange() argument
665 llcp_lr_enqueue(conn, ctx); in ull_cp_version_exchange()
672 uint8_t ull_cp_encryption_start(struct ll_conn *conn, const uint8_t rand[8], const uint8_t ediv[2], in ull_cp_encryption_start() argument
677 if (conn->lll.role != BT_HCI_ROLE_CENTRAL) { in ull_cp_encryption_start()
693 llcp_lr_enqueue(conn, ctx); in ull_cp_encryption_start()
698 uint8_t ull_cp_encryption_pause(struct ll_conn *conn, const uint8_t rand[8], const uint8_t ediv[2], in ull_cp_encryption_pause() argument
703 if (conn->lll.role != BT_HCI_ROLE_CENTRAL) { in ull_cp_encryption_pause()
719 llcp_lr_enqueue(conn, ctx); in ull_cp_encryption_pause()
725 uint8_t ull_cp_encryption_paused(struct ll_conn *conn) in ull_cp_encryption_paused() argument
729 ctx = llcp_rr_peek(conn); in ull_cp_encryption_paused()
734 ctx = llcp_lr_peek(conn); in ull_cp_encryption_paused()
744 uint8_t ull_cp_phy_update(struct ll_conn *conn, uint8_t tx, uint8_t flags, uint8_t rx, in ull_cp_phy_update() argument
759 llcp_lr_enqueue(conn, ctx); in ull_cp_phy_update()
765 uint8_t ull_cp_terminate(struct ll_conn *conn, uint8_t error_code) in ull_cp_terminate() argument
769 llcp_lr_terminate(conn); in ull_cp_terminate()
770 llcp_rr_terminate(conn); in ull_cp_terminate()
779 llcp_lr_enqueue(conn, ctx); in ull_cp_terminate()
784 uint8_t ull_cp_cis_terminate(struct ll_conn *conn, in ull_cp_cis_terminate() argument
790 if (conn->lll.handle != cis->lll.acl_handle) { in ull_cp_cis_terminate()
803 llcp_lr_enqueue(conn, ctx); in ull_cp_cis_terminate()
810 uint8_t ull_cp_cis_create(struct ll_conn *conn, struct ll_conn_iso_stream *cis) in ull_cp_cis_create() argument
815 if (!conn->llcp.fex.valid) { in ull_cp_cis_create()
817 if (ull_cp_feature_exchange(conn, 0U) != BT_HCI_ERR_SUCCESS) { in ull_cp_cis_create()
853 llcp_lr_enqueue(conn, ctx); in ull_cp_cis_create()
860 uint8_t ull_cp_chan_map_update(struct ll_conn *conn, const uint8_t chm[5]) in ull_cp_chan_map_update() argument
864 if (conn->lll.role != BT_HCI_ROLE_CENTRAL) { in ull_cp_chan_map_update()
875 llcp_lr_enqueue(conn, ctx); in ull_cp_chan_map_update()
881 const uint8_t *ull_cp_chan_map_update_pending(struct ll_conn *conn) in ull_cp_chan_map_update_pending() argument
885 if (conn->lll.role == BT_HCI_ROLE_CENTRAL) { in ull_cp_chan_map_update_pending()
886 ctx = llcp_lr_peek(conn); in ull_cp_chan_map_update_pending()
888 ctx = llcp_rr_peek(conn); in ull_cp_chan_map_update_pending()
899 uint8_t ull_cp_data_length_update(struct ll_conn *conn, uint16_t max_tx_octets, in ull_cp_data_length_update() argument
904 if (!feature_dle(conn)) { in ull_cp_data_length_update()
921 ull_dle_local_tx_update(conn, max_tx_octets, max_tx_time); in ull_cp_data_length_update()
923 llcp_lr_enqueue(conn, ctx); in ull_cp_data_length_update()
930 uint8_t ull_cp_req_peer_sca(struct ll_conn *conn) in ull_cp_req_peer_sca() argument
934 if (!feature_sca(conn)) { in ull_cp_req_peer_sca()
944 llcp_lr_enqueue(conn, ctx); in ull_cp_req_peer_sca()
951 uint8_t ull_cp_ltk_req_reply(struct ll_conn *conn, const uint8_t ltk[16]) in ull_cp_ltk_req_reply() argument
955 ctx = llcp_rr_peek(conn); in ull_cp_ltk_req_reply()
957 llcp_rp_enc_ltk_req_reply_allowed(conn, ctx)) { in ull_cp_ltk_req_reply()
959 llcp_rp_enc_ltk_req_reply(conn, ctx); in ull_cp_ltk_req_reply()
965 uint8_t ull_cp_ltk_req_neq_reply(struct ll_conn *conn) in ull_cp_ltk_req_neq_reply() argument
969 ctx = llcp_rr_peek(conn); in ull_cp_ltk_req_neq_reply()
971 llcp_rp_enc_ltk_req_reply_allowed(conn, ctx)) { in ull_cp_ltk_req_neq_reply()
972 llcp_rp_enc_ltk_req_neg_reply(conn, ctx); in ull_cp_ltk_req_neq_reply()
979 uint8_t ull_cp_conn_update(struct ll_conn *conn, uint16_t interval_min, uint16_t interval_max, in ull_cp_conn_update() argument
985 if (feature_conn_param_req(conn)) { in ull_cp_conn_update()
987 } else if (conn->lll.role == BT_HCI_ROLE_CENTRAL) { in ull_cp_conn_update()
993 if (conn->lll.role == BT_HCI_ROLE_PERIPHERAL) { in ull_cp_conn_update()
1022 (conn->lll.role == BT_HCI_ROLE_PERIPHERAL)) { in ull_cp_conn_update()
1023 uint16_t handle = ll_conn_handle_get(conn); in ull_cp_conn_update()
1025 ull_periph_latency_cancel(conn, handle); in ull_cp_conn_update()
1032 llcp_lr_enqueue(conn, ctx); in ull_cp_conn_update()
1038 uint8_t ull_cp_periodic_sync(struct ll_conn *conn, struct ll_sync_set *sync, in ull_cp_periodic_sync() argument
1056 if (!feature_peer_periodic_sync_recv(conn)) { in ull_cp_periodic_sync()
1139 llcp_lr_enqueue(conn, ctx); in ull_cp_periodic_sync()
1146 uint8_t ull_cp_remote_dle_pending(struct ll_conn *conn) in ull_cp_remote_dle_pending() argument
1150 ctx = llcp_rr_peek(conn); in ull_cp_remote_dle_pending()
1157 void ull_cp_conn_param_req_reply(struct ll_conn *conn) in ull_cp_conn_param_req_reply() argument
1161 ctx = llcp_rr_peek(conn); in ull_cp_conn_param_req_reply()
1163 llcp_rp_conn_param_req_reply(conn, ctx); in ull_cp_conn_param_req_reply()
1167 void ull_cp_conn_param_req_neg_reply(struct ll_conn *conn, uint8_t error_code) in ull_cp_conn_param_req_neg_reply() argument
1171 ctx = llcp_rr_peek(conn); in ull_cp_conn_param_req_neg_reply()
1174 llcp_rp_conn_param_req_neg_reply(conn, ctx); in ull_cp_conn_param_req_neg_reply()
1178 uint8_t ull_cp_remote_cpr_pending(struct ll_conn *conn) in ull_cp_remote_cpr_pending() argument
1182 ctx = llcp_rr_peek(conn); in ull_cp_remote_cpr_pending()
1188 bool ull_cp_remote_cpr_apm_awaiting_reply(struct ll_conn *conn) in ull_cp_remote_cpr_apm_awaiting_reply() argument
1192 ctx = llcp_rr_peek(conn); in ull_cp_remote_cpr_apm_awaiting_reply()
1201 void ull_cp_remote_cpr_apm_reply(struct ll_conn *conn, uint16_t *offsets) in ull_cp_remote_cpr_apm_reply() argument
1205 ctx = llcp_rr_peek(conn); in ull_cp_remote_cpr_apm_reply()
1215 llcp_rp_conn_param_req_apm_reply(conn, ctx); in ull_cp_remote_cpr_apm_reply()
1219 void ull_cp_remote_cpr_apm_neg_reply(struct ll_conn *conn, uint8_t error_code) in ull_cp_remote_cpr_apm_neg_reply() argument
1223 ctx = llcp_rr_peek(conn); in ull_cp_remote_cpr_apm_neg_reply()
1227 llcp_rp_conn_param_req_apm_reply(conn, ctx); in ull_cp_remote_cpr_apm_neg_reply()
1234 void ull_cp_cte_rsp_enable(struct ll_conn *conn, bool enable, uint8_t max_cte_len, in ull_cp_cte_rsp_enable() argument
1237 conn->llcp.cte_rsp.is_enabled = enable; in ull_cp_cte_rsp_enable()
1240 conn->llcp.cte_rsp.max_cte_len = max_cte_len; in ull_cp_cte_rsp_enable()
1241 conn->llcp.cte_rsp.cte_types = cte_types; in ull_cp_cte_rsp_enable()
1247 uint8_t ull_cp_cte_req(struct ll_conn *conn, uint8_t min_cte_len, uint8_t cte_type) argument
1258 if ((conn->llcp.fex.valid &&
1259 (!(conn->llcp.fex.features_peer & BIT64(BT_LE_FEAT_BIT_CONN_CTE_RESP)))) ||
1260 (!conn->llcp.fex.valid && !feature_cte_req(conn))) {
1268 if (conn->lll.phy_rx != PHY_CODED) {
1280 llcp_lr_enqueue(conn, ctx);
1288 void ull_cp_cte_req_set_disable(struct ll_conn *conn) argument
1290 conn->llcp.cte_req.is_enabled = 0U;
1291 conn->llcp.cte_req.req_interval = 0U;
1296 void ull_cp_cc_offset_calc_reply(struct ll_conn *conn, uint32_t cis_offset_min, argument
1301 ctx = llcp_lr_peek(conn);
1306 llcp_lp_cc_offset_calc_reply(conn, ctx);
1312 bool ull_cp_cc_awaiting_reply(struct ll_conn *conn) argument
1316 ctx = llcp_rr_peek(conn);
1324 uint16_t ull_cp_cc_ongoing_handle(struct ll_conn *conn) argument
1328 ctx = llcp_rr_peek(conn);
1336 void ull_cp_cc_accept(struct ll_conn *conn, uint32_t cis_offset_min) argument
1340 ctx = llcp_rr_peek(conn);
1345 llcp_rp_cc_reject(conn, ctx);
1353 llcp_rp_cc_accept(conn, ctx);
1357 void ull_cp_cc_reject(struct ll_conn *conn, uint8_t error_code) argument
1361 ctx = llcp_rr_peek(conn);
1364 llcp_rp_cc_reject(conn, ctx);
1370 bool ull_cp_cc_awaiting_established(struct ll_conn *conn) argument
1375 ctx = llcp_rr_peek(conn);
1382 ctx = llcp_lr_peek(conn);
1391 bool ull_cp_cc_cancel(struct ll_conn *conn) argument
1395 ctx = llcp_lr_peek(conn);
1397 return llcp_lp_cc_cancel(conn, ctx);
1404 void ull_cp_cc_established(struct ll_conn *conn, uint8_t error_code) argument
1409 ctx = llcp_rr_peek(conn);
1412 llcp_rp_cc_established(conn, ctx);
1413 llcp_rr_check_done(conn, ctx);
1418 ctx = llcp_lr_peek(conn);
1421 llcp_lp_cc_established(conn, ctx);
1422 llcp_lr_check_done(conn, ctx);
1429 bool ull_lp_cc_is_active(struct ll_conn *conn) argument
1433 ctx = llcp_lr_peek(conn);
1440 bool ull_lp_cc_is_enqueued(struct ll_conn *conn) argument
1444 ctx = llcp_lr_peek_proc(conn, PROC_CIS_CREATE);
1451 void ull_lp_past_offset_get_calc_params(struct ll_conn *conn, argument
1456 ctx = llcp_lr_peek_proc(conn, PROC_PERIODIC_SYNC);
1467 void ull_lp_past_offset_calc_reply(struct ll_conn *conn, uint32_t offset_us, argument
1473 ctx = llcp_lr_peek_proc(conn, PROC_PERIODIC_SYNC);
1484 uint32_t conn_interval_us = conn->lll.interval * CONN_INT_UNIT_US;
1491 ctx->data.periodic_sync.conn_event_count = ull_conn_event_counter(conn) +
1501 ctx->data.periodic_sync.sync_conn_event_count = ull_conn_event_counter(conn);
1502 ctx->data.periodic_sync.conn_event_count = ull_conn_event_counter(conn) +
1509 llcp_lp_past_offset_calc_reply(conn, ctx);
1513 void ull_lp_past_conn_evt_done(struct ll_conn *conn, struct node_rx_event_done *done) argument
1517 ctx = llcp_lr_peek_proc(conn, PROC_PERIODIC_SYNC);
1520 if (conn->lll.role == BT_HCI_ROLE_PERIPHERAL && done->extra.trx_cnt) {
1532 llcp_lp_past_conn_evt_done(conn, ctx);
1864 void ull_cp_tx_ack(struct ll_conn *conn, struct node_tx *tx) argument
1868 ctx = llcp_lr_peek(conn);
1871 llcp_lr_tx_ack(conn, ctx, tx);
1874 ctx = llcp_rr_peek(conn);
1877 llcp_rr_tx_ack(conn, ctx, tx);
1881 void ull_cp_tx_ntf(struct ll_conn *conn) argument
1885 ctx = llcp_lr_peek(conn);
1888 llcp_lr_tx_ntf(conn, ctx);
1891 ctx = llcp_rr_peek(conn);
1894 llcp_rr_tx_ntf(conn, ctx);
1898 void ull_cp_rx(struct ll_conn *conn, memq_link_t *link, struct node_rx_pdu *rx) argument
1914 ctx = llcp_lr_peek(conn);
1919 ctx = llcp_rr_peek(conn);
1933 ctx_l = llcp_lr_peek(conn);
1934 ctx_r = llcp_rr_peek(conn);
1961 conn->llcp_terminate.reason_final =
1972 llcp_rr_rx(conn, ctx_r, link, rx);
1981 llcp_lr_rx(conn, ctx_l, link, rx);
2003 llcp_rr_new(conn, link, rx, true);
2011 llcp_lr_rx(conn, ctx_l, link, rx);
2020 llcp_rr_rx(conn, ctx_r, link, rx);
2027 llcp_rr_new(conn, link, rx, pdu_valid);