Home | History | Annotate | Download | only in l2cap

Lines Matching full:p_lcb

52     tL2C_LCB    *p_lcb = &l2cb.lcb_pool[0];
54 for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p_lcb++)
56 if (!p_lcb->in_use)
58 memset (p_lcb, 0, sizeof (tL2C_LCB));
60 memcpy (p_lcb->remote_bd_addr, p_bd_addr, BD_ADDR_LEN);
62 p_lcb->in_use = TRUE;
63 p_lcb->link_state = LST_DISCONNECTED;
64 p_lcb->handle = HCI_INVALID_HANDLE;
65 p_lcb->link_flush_tout = 0xFFFF;
66 p_lcb->timer_entry.param = (TIMER_PARAM_TYPE)p_lcb;
67 p_lcb->info_timer_entry.param = (TIMER_PARAM_TYPE)p_lcb;
68 p_lcb->idle_timeout = l2cb.idle_timeout;
69 p_lcb->id = 1; /* spec does not allow '0' */
70 p_lcb->is_bonding = is_bonding;
75 return (p_lcb);
95 tL2C_LCB *p_lcb = l2cu_find_lcb_by_bd_addr (p_bd_addr);
97 if (p_lcb)
102 p_lcb->is_bonding = is_bonding;
116 void l2cu_release_lcb (tL2C_LCB *p_lcb)
120 p_lcb->in_use = FALSE;
121 p_lcb->is_bonding = FALSE;
124 btu_stop_timer (&p_lcb->timer_entry);
125 btu_stop_timer (&p_lcb->info_timer_entry);
128 if (p_lcb->p_hcit_rcv_acl)
130 GKI_freebuf(p_lcb->p_hcit_rcv_acl);
131 p_lcb->p_hcit_rcv_acl = NULL;
136 btm_remove_sco_links(p_lcb->remote_bd_addr);
139 if (p_lcb->sent_not_acked > 0)
142 if (p_lcb->is_ble_link)
144 l2cb.controller_le_xmit_window += p_lcb->sent_not_acked;
153 l2cb.controller_xmit_window += p_lcb->sent_not_acked;
162 p_lcb->is_ble_link = FALSE;
172 if (p_lcb->p_fixed_ccbs[xx])
174 l2cu_release_ccb (p_lcb->p_fixed_ccbs[xx]);
175 p_lcb->p_fixed_ccbs[xx] = NULL;
176 (*l2cb.fixed_reg[xx].pL2CA_FixedConn_Cb)(p_lcb->remote_bd_addr, FALSE, p_lcb->disc_reason);
178 else if ( (p_lcb->peer_chnl_mask[0] & (1 << (xx + L2CAP_FIRST_FIXED_CHNL)))
180 (*l2cb.fixed_reg[xx].pL2CA_FixedConn_Cb)(p_lcb->remote_bd_addr, FALSE, p_lcb->disc_reason);
186 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_lcb->ccb_queue.p_first_ccb)
192 if ((p_lcb->link_state == LST_CONNECTED) || (p_lcb->link_state == LST_DISCONNECTING))
193 btm_acl_removed (p_lcb->remote_bd_addr);
196 while (p_lcb->link_xmit_data_q.p_first)
197 GKI_freebuf (GKI_dequeue (&p_lcb->link_xmit_data_q));
201 l2c_ucd_delete_sec_pending_q(p_lcb);
211 if (p_lcb->p_echo_rsp_cb)
213 tL2CA_ECHO_RSP_CB *p_cb = p_lcb->p_echo_rsp_cb;
216 p_lcb->p_echo_rsp_cb = NULL;
236 tL2C_LCB *p_lcb = &l2cb.lcb_pool[0];
238 for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p_lcb++)
240 if ((p_lcb->in_use) && (!memcmp (p_lcb->remote_bd_addr, p_bd_addr, BD_ADDR_LEN)))
242 return (p_lcb);
287 BT_HDR *l2cu_build_header (tL2C_LCB *p_lcb, UINT16 len, UINT8 cmd, UINT8 id)
304 UINT16_TO_STREAM (p, p_lcb->handle | l2cb.non_flushable_pbf);
306 UINT16_TO_STREAM (p, (p_lcb->handle | (L2CAP_PKT_START << L2CAP_PKT_TYPE_SHIFT)));
313 if (p_lcb->is_ble_link)
341 void l2cu_adj_id (tL2C_LCB *p_lcb, UINT8 adj_mask)
343 if ((adj_mask & L2CAP_ADJ_ZERO_ID) && !p_lcb->id)
345 p_lcb->id++;
359 void l2cu_send_peer_cmd_reject (tL2C_LCB *p_lcb, UINT16 reason, UINT8 rem_id,
374 if ((p_buf = l2cu_build_header (p_lcb, (UINT16) (L2CAP_CMD_REJECT_LEN + param_len), L2CAP_CMD_REJECT, rem_id)) == NULL )
391 l2c_link_check_send_pkts (p_lcb, NULL, p_buf);
411 p_ccb->p_lcb->id++;
412 l2cu_adj_id(p_ccb->p_lcb, L2CAP_ADJ_ID);
414 p_ccb->local_id = p_ccb->p_lcb->id;
416 if ((p_buf = l2cu_build_header (p_ccb->p_lcb, L2CAP_CONN_REQ_LEN, L2CAP_CMD_CONN_REQ,
429 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, p_buf);
457 if ((p_buf=l2cu_build_header(p_ccb->p_lcb, L2CAP_CONN_RSP_LEN, L2CAP_CMD_CONN_RSP, p_ccb->remote_id)) == NULL)
471 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, p_buf);
486 void l2cu_reject_connection (tL2C_LCB *p_lcb, UINT16 remote_cid, UINT8 rem_id, UINT16 result)
491 if ((p_buf = l2cu_build_header(p_lcb, L2CAP_CONN_RSP_LEN, L2CAP_CMD_CONN_RSP, rem_id)) == NULL )
504 l2c_link_check_send_pkts (p_lcb, NULL, p_buf);
524 p_lcb->id++;
525 l2cu_adj_id(p_ccb->p_lcb, L2CAP_ADJ_ID);
527 p_ccb->local_id = p_ccb->p_lcb->id;
542 if ((p_buf = l2cu_build_header (p_ccb->p_lcb, (UINT16) (L2CAP_CONFIG_REQ_LEN + cfg_len),
611 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, p_buf);
642 if ((p_buf = l2cu_build_header (p_ccb->p_lcb, (UINT16)(L2CAP_CONFIG_RSP_LEN + cfg_len),
704 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, p_buf);
737 UINT16_TO_STREAM (p, (p_ccb->p_lcb->handle | (L2CAP_PKT_START_NON_FLUSHABLE << L2CAP_PKT_TYPE_SHIFT)));
742 UINT16_TO_STREAM (p, (p_ccb->p_lcb->handle | (L2CAP_PKT_START << L2CAP_PKT_TYPE_SHIFT)));
805 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, p_buf);
824 p_ccb->p_lcb->id++;
825 l2cu_adj_id(p_ccb->p_lcb, L2CAP_ADJ_ID);
827 p_ccb->local_id = p_ccb->p_lcb->id;
829 if ((p_buf = l2cu_build_header(p_ccb->p_lcb, L2CAP_DISC_REQ_LEN, L2CAP_CMD_DISC_REQ, p_ccb->local_id)) == NULL)
849 l2c_link_check_send_pkts (p_ccb->p_lcb, p_ccb, p_buf2);
853 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, p_buf);
871 void l2cu_send_peer_disc_rsp (tL2C_LCB *p_lcb, UINT8 remote_id, UINT16 local_cid,
877 if ((p_buf=l2cu_build_header(p_lcb, L2CAP_DISC_RSP_LEN, L2CAP_CMD_DISC_RSP, remote_id)) == NULL)
888 l2c_link_check_send_pkts (p_lcb, NULL, p_buf);
903 void l2cu_send_peer_echo_req (tL2C_LCB *p_lcb, UINT8 *p_data, UINT16 data_len)
908 p_lcb->id++;
909 l2cu_adj_id(p_lcb, L2CAP_ADJ_ZERO_ID); /* check for wrap to '0' */
911 if ((p_buf = l2cu_build_header(p_lcb, (UINT16) (L2CAP_ECHO_REQ_LEN + data_len), L2CAP_CMD_ECHO_REQ, p_lcb->id)) == NULL)
924 l2c_link_check_send_pkts (p_lcb, NULL, p_buf);
938 void l2cu_send_peer_echo_rsp (tL2C_LCB *p_lcb, UINT8 id, UINT8 *p_data, UINT16 data_len)
953 if ((p_buf = l2cu_build_header (p_lcb, (UINT16)(L2CAP_ECHO_RSP_LEN + data_len), L2CAP_CMD_ECHO_RSP, id)) == NULL)
967 l2c_link_check_send_pkts (p_lcb, NULL, p_buf);
979 void l2cu_send_peer_info_req (tL2C_LCB *p_lcb, UINT16 info_type)
985 p_lcb->id++;
986 l2cu_adj_id(p_lcb, L2CAP_ADJ_ID);
988 if ((p_buf = l2cu_build_header(p_lcb, 2, L2CAP_CMD_INFO_REQ, p_lcb->id)) == NULL)
1001 p_lcb->w4_info_rsp = TRUE;
1002 btu_start_timer (&p_lcb->info_timer_entry, BTU_TTYPE_L2CAP_INFO, L2CAP_WAIT_INFO_RSP_TOUT);
1004 l2c_link_check_send_pkts (p_lcb, NULL, p_buf);
1018 void l2cu_send_peer_info_rsp (tL2C_LCB *p_lcb, UINT8 remote_id, UINT16 info_type)
1048 if ((p_buf = l2cu_build_header(p_lcb, len, L2CAP_CMD_INFO_RSP, remote_id)) == NULL)
1071 if (p_lcb->is_ble_link)
1120 l2c_link_check_send_pkts (p_lcb, NULL, p_buf);
1140 if (p_ccb->p_lcb != NULL)
1141 p_q = &p_ccb->p_lcb->ccb_queue;
1145 L2CAP_TRACE_ERROR3 ("l2cu_enqueue_ccb CID: 0x%04x ERROR in_use: %u p_lcb: 0x%08x",
1146 p_ccb->local_cid, p_ccb->in_use, p_ccb->p_lcb);
1197 if (p_ccb->p_lcb != NULL)
1200 if (p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].num_ccb == 0 )
1203 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_first_ccb = p_ccb;
1205 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_serve_ccb = p_ccb;
1207 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].quota = L2CAP_GET_PRIORITY_QUOTA(p_ccb->ccb_priority);
1210 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].num_ccb++;
1233 if (p_ccb->p_lcb != NULL)
1234 p_q = &p_ccb->p_lcb->ccb_queue;
1238 L2CAP_TRACE_ERROR5 ("l2cu_dequeue_ccb CID: 0x%04x ERROR in_use: %u p_lcb: 0x%08x p_q: 0x%08x p_q->p_first_ccb: 0x%08x",
1239 p_ccb->local_cid, p_ccb->in_use, p_ccb->p_lcb, p_q, p_q ? p_q->p_first_ccb : 0);
1245 if (p_ccb->p_lcb != NULL)
1248 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].num_ccb--;
1251 if (p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].num_ccb == 0 )
1253 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_first_ccb = NULL;
1254 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_serve_ccb = NULL;
1259 if ( p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_first_ccb == p_ccb )
1261 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_first_ccb = p_ccb->p_next_ccb;
1264 if ( p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_serve_ccb == p_ccb )
1267 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_serve_ccb
1268 = p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_first_ccb;
1329 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].num_ccb = 0;
1330 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_first_ccb = NULL;
1331 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_serve_ccb = NULL;
1335 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_first_ccb = p_ccb;
1336 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].p_serve_ccb = p_ccb;
1337 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].quota = L2CAP_GET_PRIORITY_QUOTA(p_ccb->ccb_priority);
1338 p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].num_ccb = 1;
1355 tL2C_CCB *l2cu_allocate_ccb (tL2C_LCB *p_lcb, UINT16 cid)
1408 p_ccb->p_lcb = p_lcb;
1414 if (p_lcb)
1511 tL2C_LCB *p_lcb = l2cu_find_lcb_by_handle(handle);
1513 if (!p_lcb)
1516 p_lcb->is_bonding = FALSE;
1519 if (p_lcb->ccb_queue.p_first_ccb != NULL)
1523 if ( (p_lcb->link_state == LST_CONNECTED) || (p_lcb->link_state == LST_CONNECTING) || (p_lcb->link_state == LST_DISCONNECTING) )
1525 if (p_lcb->idle_timeout == 0)
1527 if (btsnd_hcic_disconnect (p_lcb->handle, HCI_ERR_PEER_USER))
1529 p_lcb->link_state = LST_DISCONNECTING;
1541 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, timeout);
1562 tL2C_LCB *p_lcb = p_ccb->p_lcb;
1576 btm_sec_clr_temp_auth_service (p_lcb->remote_bd_addr);
1587 if ( (p_lcb) &&
1598 p_ccb->p_lcb = NULL;
1621 if ((p_lcb) && p_lcb->in_use && (p_lcb->link_state == LST_CONNECTED))
1623 if (!p_lcb->ccb_queue.p_first_ccb)
1625 l2cu_no_dynamic_ccbs (p_lcb);
1645 tL2C_CCB *l2cu_find_ccb_by_remote_cid (tL2C_LCB *p_lcb, UINT16 remote_cid)
1650 if (!p_lcb)
1656 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_ccb->p_next_ccb)
1963 tL2C_LCB *p_lcb;
1993 if (p_ccb->p_lcb->peer_ext_fea & L2CAP_EXTFEA_NO_CRC)
2024 p_lcb = p_ccb->p_lcb;
2026 if (p_cfg->flush_to < p_lcb->link_flush_tout)
2028 p_lcb->link_flush_tout = p_cfg->flush_to;
2035 btsnd_hcic_write_auto_flush_tout (p_lcb->handle, hci_flush_to);
2079 tL2C_LCB *p_lcb = &l2cb.lcb_pool[0];
2081 for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p_lcb++)
2083 if ((p_lcb->in_use) && (p_lcb->handle != HCI_INVALID_HANDLE))
2085 l2c_link_hci_disc_comp (p_lcb->handle, (UINT8) -1);
2106 BOOLEAN l2cu_create_conn (tL2C_LCB *p_lcb)
2118 BTM_ReadDevInfo(p_lcb->remote_bd_addr, &dev_type, &addr_type);
2125 p_lcb->ble_addr_type = addr_type;
2126 p_lcb->is_ble_link = TRUE;
2128 return (l2cble_create_conn(p_lcb));
2136 if (p_lcb_cur == p_lcb)
2161 p_lcb->link_state = LST_CONNECTING_WAIT_SWITCH;
2162 p_lcb->link_role = HCI_ROLE_MASTER;
2166 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, L2CAP_LINK_ROLE_SWITCH_TOUT);
2173 p_lcb->link_state = LST_CONNECTING;
2175 return (l2cu_create_conn_after_switch (p_lcb));
2191 tL2C_LCB *p_lcb = &l2cb.lcb_pool[0];
2193 for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p_lcb++)
2195 if ((p_lcb->in_use) && (p_lcb->acl_priority == L2CAP_PRIORITY_HIGH))
2215 BOOLEAN l2cu_create_conn_after_switch (tL2C_LCB *p_lcb)
2224 tBTM_SEC_DEV_REC *p_dev_rec = btm_find_dev (p_lcb->remote_bd_addr);
2230 l2cb.disallow_switch, num_acl, no_hi_prio_chs, p_lcb->is_bonding);
2234 if ( ((!l2cb.disallow_switch && (num_acl < 3)) || (p_lcb->is_bonding && (no_hi_prio_chs==0)))
2240 p_lcb->link_state = LST_CONNECTING;
2244 if ( (clock_offset = tcs_wug_get_clk_offset( p_lcb->remote_bd_addr )) != 0 )
2254 if ((p_inq_info = BTM_InqDbRead(p_lcb->remote_bd_addr)) != NULL)
2272 if (!btsnd_hcic_create_conn (p_lcb->remote_bd_addr,
2281 l2cu_release_lcb (p_lcb);
2289 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK,
2309 tL2C_LCB *p_lcb = &l2cb.lcb_pool[0];
2311 for (i = 0; i < MAX_L2CAP_LINKS; i++, p_lcb++)
2313 if ((p_lcb->in_use) && (p_lcb->link_state == state))
2315 return (p_lcb);
2338 tL2C_LCB *p_lcb;
2343 p_lcb = &l2cb.lcb_pool[0];
2345 for (i = 0; i < MAX_L2CAP_LINKS; i++, p_lcb++)
2347 if (p_lcb->in_use)
2350 if ((!p_lcb->ccb_queue.p_first_ccb) || (p_lcb->link_state == LST_DISCONNECTING))
2356 else if (p_lcb->ccb_queue.p_first_ccb == p_lcb->ccb_queue.p_last_ccb)
2358 p_ccb = p_lcb->ccb_queue.p_first_ccb;
2388 tL2C_LCB *p_lcb;
2396 if ((p_lcb = l2cu_find_lcb_by_bd_addr(bd_addr)) == NULL)
2405 if ((!reset_after_rs && (priority != p_lcb->acl_priority)) ||
2407 ( reset_after_rs && p_lcb->acl_priority == L2CAP_PRIORITY_HIGH))
2413 UINT16_TO_STREAM (pp, p_lcb->handle);
2419 if (p_lcb->acl_priority != priority)
2421 p_lcb->acl_priority = priority;
2460 tL2C_LCB *p_lcb;
2470 p_lcb = l2cu_find_lcb_by_bd_addr (p_bda);
2473 if (p_lcb)
2476 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_next_ccb)
2490 for (xx = 0, p_lcb = &l2cb.lcb_pool[0]; xx < MAX_L2CAP_LINKS; xx++, p_lcb++)
2492 if (p_lcb->in_use)
2495 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_next_ccb)
2536 packet_size = btm_get_max_packet_size (p_ccb->p_lcb->remote_bd_addr);
2576 BOOLEAN l2cu_initialize_fixed_ccb (tL2C_LCB *p_lcb, UINT16 fixed_cid, tL2CAP_FCR_OPTS *p_fcr)
2582 if (p_lcb->p_fixed_ccbs[fixed_cid - L2CAP_FIRST_FIXED_CHNL] != NULL)
2588 btu_stop_timer(&p_lcb->timer_entry);
2615 p_lcb->p_fixed_ccbs[fixed_cid - L2CAP_FIRST_FIXED_CHNL] = p_ccb;
2616 p_ccb->p_lcb = p_lcb;
2619 if (p_lcb->link_state == LST_CONNECTED)
2639 void l2cu_no_dynamic_ccbs (tL2C_LCB *p_lcb)
2642 UINT16 timeout = p_lcb->idle_timeout;
2649 if ( (p_lcb->p_fixed_ccbs[xx] != NULL) && (p_lcb->p_fixed_ccbs[xx]->fixed_chnl_idle_tout > timeout) )
2650 timeout = p_lcb->p_fixed_ccbs[xx]->fixed_chnl_idle_tout;
2655 if (p_lcb->is_bonding)
2662 rc = btm_sec_disconnect (p_lcb->handle, HCI_ERR_PEER_USER);
2665 p_lcb->link_state = LST_DISCONNECTING;
2671 p_lcb->link_state = LST_DISCONNECTING;
2674 else if ( (p_lcb->is_bonding)
2675 && (btsnd_hcic_disconnect (p_lcb->handle, HCI_ERR_PEER_USER)) )
2677 p_lcb->link_state = LST_DISCONNECTING;
2690 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, timeout);
2694 btu_stop_timer(&p_lcb->timer_entry);
2708 void l2cu_process_fixed_chnl_resp (tL2C_LCB *p_lcb)
2712 UINT16 reason = (p_lcb->is_ble_link ) ? 1 : 0;
2722 if (p_lcb->peer_chnl_mask[0] & (1 << (xx + L2CAP_FIRST_FIXED_CHNL)))
2724 if (p_lcb->p_fixed_ccbs[xx])
2725 p_lcb->p_fixed_ccbs[xx]->chnl_state = CST_OPEN;
2727 (*l2cb.fixed_reg[xx].pL2CA_FixedConn_Cb)(p_lcb->remote_bd_addr, TRUE, reason);
2731 (*l2cb.fixed_reg[xx].pL2CA_FixedConn_Cb)(p_lcb->remote_bd_addr, FALSE, p_lcb->disc_reason);
2733 if (p_lcb->p_fixed_ccbs[xx])
2735 l2cu_release_ccb (p_lcb->p_fixed_ccbs[xx]);
2736 p_lcb->p_fixed_ccbs[xx] = NULL;
2755 void l2cu_send_peer_ble_par_req (tL2C_LCB *p_lcb, UINT16 min_int, UINT16 max_int, UINT16 latency, UINT16 timeout)
2761 p_lcb->id++;
2762 l2cu_adj_id (p_lcb, L2CAP_ADJ_ID);
2764 if ((p_buf = l2cu_build_header (p_lcb, L2CAP_CMD_BLE_UPD_REQ_LEN, L2CAP_CMD_BLE_UPDATE_REQ, p_lcb->id)) == NULL )
2778 l2c_link_check_send_pkts (p_lcb, NULL, p_buf);
2791 void l2cu_send_peer_ble_par_rsp (tL2C_LCB *p_lcb, UINT16 reason, UINT8 rem_id)
2796 if ((p_buf = l2cu_build_header (p_lcb, L2CAP_CMD_BLE_UPD_RSP_LEN, L2CAP_CMD_BLE_UPDATE_RSP, rem_id)) == NULL )
2807 l2c_link_check_send_pkts (p_lcb, NULL, p_buf);
2830 tL2C_LCB *p_lcb = &l2cb.lcb_pool[0];
2832 for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p_lcb++)
2834 if ((p_lcb->in_use) && (p_lcb->handle == handle))
2836 return (p_lcb);
2855 tL2C_CCB *l2cu_find_ccb_by_cid (tL2C_LCB *p_lcb, UINT16 local_cid)
2878 else if (p_lcb && p_lcb != p_ccb->p_lcb)
2892 &&(p_lcb == p_ccb->p_lcb))
2917 static tL2C_CCB *l2cu_get_next_channel_in_rr(tL2C_LCB *p_lcb)
2928 for ( j = 0; (j < p_lcb->rr_serv[p_lcb->rr_pri].num_ccb)&&(!p_serve_ccb); j++)
2931 p_ccb = p_lcb->rr_serv[p_lcb->rr_pri].p_serve_ccb;
2935 L2CAP_TRACE_ERROR1("p_serve_ccb is NULL, rr_pri=%d", p_lcb->rr_pri);
2948 p_lcb->rr_serv[p_lcb->rr_pri].p_serve_ccb = p_lcb->rr_serv[p_lcb->rr_pri].p_first_ccb;
2953 p_lcb->rr_serv[p_lcb->rr_pri].p_serve_ccb = p_ccb->p_next_ccb;
2988 p_lcb->rr_serv[p_lcb->rr_pri].quota--;
2992 if ((p_lcb->rr_serv[p_lcb->rr_pri].quota == 0)||(!p_serve_ccb))
2995 p_lcb->rr_pri = (p_lcb->rr_pri + 1) % L2CAP_NUM_CHNL_PRIORITY;
2997 p_lcb->rr_serv[p_lcb->rr_pri].quota = L2CAP_GET_PRIORITY_QUOTA(p_lcb->rr_pri);
3005 p_lcb->rr_serv[p_serve_ccb->ccb_priority].quota,
3024 static tL2C_CCB *l2cu_get_next_channel(tL2C_LCB *p_lcb)
3030 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_ccb->p_next_ccb)
3070 BT_HDR *l2cu_get_next_buffer_to_send (tL2C_LCB *p_lcb)
3081 if ((p_ccb = p_lcb->p_fixed_ccbs[xx]) == NULL)
3130 p_ccb = l2cu_get_next_channel_in_rr( p_lcb );
3132 p_ccb = l2cu_get_next_channel( p_lcb );
3185 UINT16_TO_STREAM (p, p_ccb->p_lcb->handle | (L2CAP_PKT_START << L2CAP_PKT_TYPE_SHIFT));
3189 UINT16_TO_STREAM (p, p_ccb->p_lcb->handle | l2cb.non_flushable_pbf);
3192 UINT16_TO_STREAM (p, p_ccb->p_lcb->handle | (L2CAP_PKT_START << L2CAP_PKT_TYPE_SHIFT));
3195 if (p_ccb->p_lcb->is_ble_link)
3241 q_count += p_ccb->p_lcb->ucd_out_sec_pending_q.count;
3273 p_ccb->p_lcb->ucd_out_sec_pending_q.count,
3275 p_ccb->p_rcb->ucd.cb_info.pL2CA_UCD_Congestion_Status_Cb( p_ccb->p_lcb->remote_bd_addr, FALSE );
3300 p_ccb->p_lcb->ucd_out_sec_pending_q.count,
3302 p_ccb->p_rcb->ucd.cb_info.pL2CA_UCD_Congestion_Status_Cb( p_ccb->p_lcb->remote_bd_addr, TRUE );