Lines Matching defs:p_lcb

42 static BOOLEAN l2c_link_send_to_lower (tL2C_LCB *p_lcb, BT_HDR *p_buf);
62 tL2C_LCB *p_lcb;
68 p_lcb = l2cu_find_lcb_by_bd_addr (bd_addr, BT_TRANSPORT_BR_EDR);
71 if (!p_lcb)
73 p_lcb = l2cu_allocate_lcb (bd_addr, FALSE, BT_TRANSPORT_BR_EDR);
74 if (!p_lcb)
86 if (p_lcb_cur == p_lcb)
92 p_lcb->link_role = HCI_ROLE_MASTER;
100 p_lcb->link_role = HCI_ROLE_SLAVE;
102 p_lcb->link_role = l2cu_get_conn_role(p_lcb);
106 btsnd_hcic_accept_conn (bd_addr, p_lcb->link_role);
108 p_lcb->link_state = LST_CONNECTING;
111 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, L2CAP_LINK_CONNECT_TOUT);
116 if ((p_lcb->link_state == LST_CONNECTING) || (p_lcb->link_state == LST_CONNECT_HOLDING))
121 p_lcb->link_role = HCI_ROLE_SLAVE;
123 p_lcb->link_role = l2cu_get_conn_role(p_lcb);
125 btsnd_hcic_accept_conn (bd_addr, p_lcb->link_role);
127 p_lcb->link_state = LST_CONNECTING;
130 else if (p_lcb->link_state == LST_DISCONNECTING)
138 p_lcb->link_state);
158 tL2C_LCB *p_lcb;
171 p_lcb = l2cu_find_lcb_by_bd_addr (ci.bd_addr, BT_TRANSPORT_BR_EDR);
174 if (!p_lcb)
180 if (p_lcb->link_state != LST_CONNECTING)
182 L2CAP_TRACE_ERROR ("L2CAP got conn_comp in bad state: %d status: 0x%d", p_lcb->link_state, status);
185 l2c_link_hci_disc_comp (p_lcb->handle, status);
191 p_lcb->handle = handle;
196 p_lcb->link_state = LST_CONNECTED;
199 l2cu_send_peer_info_req (p_lcb, L2CAP_EXTENDED_FEATURES_INFO_TYPE);
205 p_lcb->link_role, BT_TRANSPORT_BR_EDR);
207 btm_acl_created (ci.bd_addr, NULL, NULL, handle, p_lcb->link_role, BT_TRANSPORT_BR_EDR);
212 if (p_lcb->is_bonding)
221 btu_stop_timer (&p_lcb->timer_entry);
224 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_ccb->p_next_ccb)
229 if (p_lcb->p_echo_rsp_cb)
231 l2cu_send_peer_echo_req (p_lcb, NULL, 0);
232 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, L2CAP_ECHO_RSP_TOUT);
234 else if (!p_lcb->ccb_queue.p_first_ccb)
236 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, L2CAP_LINK_STARTUP_TOUT);
243 p_lcb->link_state = LST_CONNECT_HOLDING;
244 p_lcb->handle = HCI_INVALID_HANDLE;
249 p_lcb->link_state = LST_DISCONNECTING;
253 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; )
262 p_lcb->disc_reason = status;
264 if (p_lcb->ccb_queue.p_first_ccb == NULL)
265 l2cu_release_lcb (p_lcb);
271 p_lcb->link_state = LST_CONNECTING;
275 l2cu_create_conn(p_lcb, BT_TRANSPORT_BR_EDR);
296 tL2C_LCB *p_lcb;
312 p_lcb = l2cu_find_lcb_by_bd_addr (p_bda, BT_TRANSPORT_BR_EDR);
315 if (!p_lcb)
322 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_next_ccb)
362 tL2C_LCB *p_lcb;
369 p_lcb = l2cu_find_lcb_by_handle (handle);
372 if (!p_lcb)
383 p_lcb->disc_reason = btm_cb.acl_disc_reason;
386 p_lcb->link_state = LST_DISCONNECTING;
390 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; )
400 if (p_ccb != p_lcb->p_pending_ccb)
409 if (p_lcb->transport == BT_TRANSPORT_BR_EDR)
412 btm_sco_acl_removed (p_lcb->remote_bd_addr);
419 if (p_lcb->ccb_queue.p_first_ccb != NULL || p_lcb->p_pending_ccb)
424 if (p_lcb->transport == BT_TRANSPORT_LE)
426 l2cu_release_lcb (p_lcb);
427 p_lcb->in_use = TRUE;
439 if (p_lcb->p_fixed_ccbs[xx] && p_lcb->p_fixed_ccbs[xx] != p_lcb->p_pending_ccb)
442 (*l2cb.fixed_reg[xx].pL2CA_FixedConn_Cb)(p_lcb->remote_bd_addr, FALSE,
443 p_lcb->disc_reason, p_lcb->transport);
445 (*l2cb.fixed_reg[xx].pL2CA_FixedConn_Cb)(p_lcb->remote_bd_addr, FALSE,
446 p_lcb->disc_reason, BT_TRANSPORT_BR_EDR);
448 l2cu_release_ccb (p_lcb->p_fixed_ccbs[xx]);
450 p_lcb->p_fixed_ccbs[xx] = NULL;
455 if (l2cu_create_conn(p_lcb, transport))
459 p_lcb->p_pending_ccb = NULL;
463 l2cu_release_lcb (p_lcb);
467 if (lcb_is_free && ((p_lcb = l2cu_find_lcb_by_state(LST_CONNECT_HOLDING)) != NULL))
470 l2cu_create_conn(p_lcb, BT_TRANSPORT_BR_EDR);
489 tL2C_LCB *p_lcb;
493 p_lcb = l2cu_find_lcb_by_handle (handle);
496 if (!p_lcb)
500 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_ccb->p_next_ccb)
520 void l2c_link_timeout (tL2C_LCB *p_lcb)
527 p_lcb->link_state, p_lcb->ccb_queue.p_first_ccb, p_lcb->is_bonding);
530 if ((p_lcb->link_state == LST_CONNECTING_WAIT_SWITCH) ||
531 (p_lcb->link_state == LST_CONNECTING) ||
532 (p_lcb->link_state == LST_CONNECT_HOLDING) ||
533 (p_lcb->link_state == LST_DISCONNECTING))
535 p_lcb->p_pending_ccb = NULL;
539 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; )
548 if (p_lcb->link_state == LST_CONNECTING &&
555 l2cu_release_lcb (p_lcb);
559 if (p_lcb->link_state == LST_CONNECTED)
562 if (p_lcb->p_echo_rsp_cb)
564 tL2CA_ECHO_RSP_CB *p_cb = p_lcb->p_echo_rsp_cb;
567 p_lcb->p_echo_rsp_cb = NULL;
575 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; )
586 if (!p_lcb->ccb_queue.p_first_ccb)
588 rc = btm_sec_disconnect (p_lcb->handle, HCI_ERR_PEER_USER);
597 p_lcb->link_state = LST_DISCONNECTING;
602 l2cu_process_fixed_disc_cback(p_lcb);
604 p_lcb->link_state = LST_DISCONNECTING;
612 else if ((p_lcb->is_bonding)
613 && (btsnd_hcic_disconnect (p_lcb->handle, HCI_ERR_PEER_USER)))
615 l2cu_process_fixed_disc_cback(p_lcb);
616 p_lcb->link_state = LST_DISCONNECTING;
627 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, timeout);
633 l2c_link_check_send_pkts (p_lcb, NULL, NULL);
647 void l2c_info_timeout (tL2C_LCB *p_lcb)
653 if (p_lcb->w4_info_rsp)
656 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_ccb->p_next_ccb)
660 btu_start_timer (&p_lcb->info_timer_entry, BTU_TTYPE_L2CAP_INFO, L2CAP_WAIT_INFO_RSP_TOUT);
665 p_lcb->w4_info_rsp = FALSE;
668 if ((p_lcb->link_state != LST_DISCONNECTED) &&
669 (p_lcb->link_state != LST_DISCONNECTING))
672 if (p_lcb->ccb_queue.p_first_ccb)
675 memcpy (ci.bd_addr, p_lcb->remote_bd_addr, sizeof(BD_ADDR));
677 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_ccb->p_next_ccb)
704 tL2C_LCB *p_lcb;
720 for (yy = 0, p_lcb = &l2cb.lcb_pool[0]; yy < MAX_L2CAP_LINKS; yy++, p_lcb++)
722 if (p_lcb->in_use)
724 if (p_lcb->acl_priority == L2CAP_PRIORITY_HIGH)
769 for (yy = 0, p_lcb = &l2cb.lcb_pool[0]; yy < MAX_L2CAP_LINKS; yy++, p_lcb++)
771 if (p_lcb->in_use)
773 if (p_lcb->acl_priority == L2CAP_PRIORITY_HIGH)
775 p_lcb->link_xmit_quota = high_pri_link_quota;
782 if (( p_lcb->link_xmit_quota > 0 )&&( qq == 0 ))
783 l2cb.round_robin_unacked += p_lcb->sent_not_acked;
785 p_lcb->link_xmit_quota = qq;
788 p_lcb->link_xmit_quota++;
794 p_lcb->link_ack_thresh = L2CAP_HOST_FC_ACL_BUFS / l2cb.num_links_active;
797 yy, p_lcb->acl_priority, p_lcb->link_xmit_quota);
800 p_lcb->sent_not_acked, l2cb.round_robin_unacked);
805 if ( (p_lcb->link_state == LST_CONNECTED)
806 && (p_lcb->link_xmit_data_q.count)
807 && (p_lcb->sent_not_acked < p_lcb->link_xmit_quota) )
808 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, L2CAP_LINK_FLOW_CONTROL_TOUT);
966 tL2C_LCB *p_lcb = &l2cb.lcb_pool[0];
968 for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p_lcb++)
970 if ((p_lcb->in_use) && (p_lcb->link_pkts_unacked))
972 num_pkts[num_found] = p_lcb->link_pkts_unacked;
973 handles[num_found] = p_lcb->handle;
974 p_lcb->link_pkts_unacked = 0;
998 tL2C_LCB *p_lcb;
1005 p_lcb = l2cu_find_lcb_by_bd_addr (bd_addr, BT_TRANSPORT_BR_EDR);
1006 if (p_lcb)
1008 p_lcb->link_role = new_role;
1012 l2cu_set_acl_priority(bd_addr, p_lcb->acl_priority, TRUE);
1017 for (xx = 0, p_lcb = &l2cb.lcb_pool[0]; xx < MAX_L2CAP_LINKS; xx++, p_lcb++)
1019 if ((p_lcb->in_use) && (p_lcb->link_state == LST_CONNECTING_WAIT_SWITCH))
1021 l2cu_create_conn_after_switch (p_lcb);
1041 tL2C_LCB *p_lcb = l2cu_find_lcb_by_bd_addr (bd_addr, BT_TRANSPORT_BR_EDR);
1043 if ( (p_lcb) && (!p_lcb->ccb_queue.p_first_ccb) )
1045 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, L2CAP_LINK_CONNECT_TOUT_EXT);
1060 BOOLEAN l2c_link_check_power_mode (tL2C_LCB *p_lcb)
1069 if ( p_lcb->link_xmit_data_q.count == 0 )
1071 for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb; p_ccb = p_ccb->p_next_ccb)
1087 if (BTM_ReadPowerMode(p_lcb->remote_bd_addr, &mode) == BTM_SUCCESS)
1091 L2CAP_TRACE_DEBUG ("LCB(0x%x) is in PM pending state", p_lcb->handle);
1112 void l2c_link_check_send_pkts (tL2C_LCB *p_lcb, tL2C_CCB *p_ccb, BT_HDR *p_buf)
1129 GKI_enqueue (&p_lcb->link_xmit_data_q, p_buf);
1131 if (p_lcb->link_xmit_quota == 0)
1134 if (p_lcb->transport == BT_TRANSPORT_LE)
1151 if ( (p_lcb == NULL) || (p_lcb->link_xmit_quota == 0) )
1153 if (p_lcb == NULL)
1154 p_lcb = l2cb.lcb_pool;
1156 p_lcb++;
1159 for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p_lcb++)
1164 && (p_lcb->transport == BT_TRANSPORT_BR_EDR)
1168 || (p_lcb->transport == BT_TRANSPORT_LE && l2cb.controller_le_xmit_window == 0 )
1174 if (p_lcb == &l2cb.lcb_pool[MAX_L2CAP_LINKS])
1175 p_lcb = &l2cb.lcb_pool[0];
1177 if ( (!p_lcb->in_use)
1178 || (p_lcb->partial_segment_being_sent)
1179 || (p_lcb->link_state != LST_CONNECTED)
1180 || (p_lcb->link_xmit_quota != 0)
1181 || (L2C_LINK_CHECK_POWER_MODE (p_lcb)) )
1185 if ((p_buf = (BT_HDR *)GKI_dequeue (&p_lcb->link_xmit_data_q)) != NULL)
1187 l2c_link_send_to_lower (p_lcb, p_buf);
1195 else if ((p_buf = l2cu_get_next_buffer_to_send (p_lcb)) != NULL)
1197 l2c_link_send_to_lower (p_lcb, p_buf);
1205 && (p_lcb->transport == BT_TRANSPORT_BR_EDR)
1213 && (p_lcb->transport == BT_TRANSPORT_LE))
1220 if ( (p_lcb->partial_segment_being_sent)
1221 || (p_lcb->link_state != LST_CONNECTED)
1222 || (L2C_LINK_CHECK_POWER_MODE (p_lcb)) )
1227 while ( ((l2cb.controller_xmit_window != 0 && (p_lcb->transport == BT_TRANSPORT_BR_EDR)) ||
1228 (l2cb.controller_le_xmit_window != 0 && (p_lcb->transport == BT_TRANSPORT_LE)))
1229 && (p_lcb->sent_not_acked < p_lcb->link_xmit_quota))
1232 && (p_lcb->sent_not_acked < p_lcb->link_xmit_quota))
1235 if ((p_buf = (BT_HDR *)GKI_dequeue (&p_lcb->link_xmit_data_q)) == NULL)
1238 if (!l2c_link_send_to_lower (p_lcb, p_buf))
1246 while ( ((l2cb.controller_xmit_window != 0 && (p_lcb->transport == BT_TRANSPORT_BR_EDR)) ||
1247 (l2cb.controller_le_xmit_window != 0 && (p_lcb->transport == BT_TRANSPORT_LE)))
1248 && (p_lcb->sent_not_acked < p_lcb->link_xmit_quota))
1250 while ((l2cb.controller_xmit_window != 0) && (p_lcb->sent_not_acked < p_lcb->link_xmit_quota))
1253 if ((p_buf = l2cu_get_next_buffer_to_send (p_lcb)) == NULL)
1256 if (!l2c_link_send_to_lower (p_lcb, p_buf))
1264 if ( (p_lcb->link_xmit_data_q.count) && (p_lcb->sent_not_acked < p_lcb->link_xmit_quota) )
1265 btu_start_timer (&p_lcb->timer_entry, BTU_TTYPE_L2CAP_LINK, L2CAP_LINK_FLOW_CONTROL_TOUT);
1279 static BOOLEAN l2c_link_send_to_lower (tL2C_LCB *p_lcb, BT_HDR *p_buf)
1286 && (p_lcb->transport == BT_TRANSPORT_BR_EDR)) ||
1287 ((p_lcb->transport == BT_TRANSPORT_LE) && (p_buf->len <= btu_cb.hcit_ble_acl_pkt_size))
1293 if (p_lcb->link_xmit_quota == 0)
1296 if (p_lcb->transport == BT_TRANSPORT_LE)
1302 p_lcb->sent_not_acked++;
1306 if (p_lcb->transport == BT_TRANSPORT_LE)
1321 if (p_lcb->transport == BT_TRANSPORT_LE)
1337 if (p_lcb->link_xmit_quota == 0)
1340 p_lcb->partial_segment_being_sent = TRUE;
1348 p_lcb->partial_segment_being_sent = TRUE;
1351 if (num_segs > (p_lcb->link_xmit_quota - p_lcb->sent_not_acked))
1353 num_segs = (p_lcb->link_xmit_quota - p_lcb->sent_not_acked);
1354 p_lcb->partial_segment_being_sent = TRUE;
1360 if (p_lcb->transport == BT_TRANSPORT_LE)
1363 if (p_lcb->link_xmit_quota == 0)
1371 if (p_lcb->link_xmit_quota == 0)
1375 p_lcb->sent_not_acked += num_segs;
1377 if (p_lcb->transport == BT_TRANSPORT_LE)
1390 if (p_lcb->transport == BT_TRANSPORT_LE)
1394 p_lcb->handle,
1395 p_lcb->link_xmit_quota, p_lcb->sent_not_acked,
1403 p_lcb->handle,
1404 p_lcb->link_xmit_quota, p_lcb->sent_not_acked,
1428 tL2C_LCB *p_lcb;
1437 p_lcb = l2cu_find_lcb_by_handle (handle);
1441 if((p_lcb != NULL) && (p_lcb->p_nocp_cb))
1444 (*p_lcb->p_nocp_cb)(p_lcb->remote_bd_addr);
1447 if (p_lcb)
1450 if (p_lcb && (p_lcb->transport == BT_TRANSPORT_LE))
1459 if (p_lcb->link_xmit_quota == 0)
1462 if (p_lcb->transport == BT_TRANSPORT_LE)
1482 if (p_lcb->sent_not_acked > num_sent)
1483 p_lcb->sent_not_acked -= num_sent;
1485 p_lcb->sent_not_acked = 0;
1487 l2c_link_check_send_pkts (p_lcb, NULL, NULL);
1490 if ( (p_lcb->acl_priority == L2CAP_PRIORITY_HIGH)
1497 if ((p_lcb->transport == BT_TRANSPORT_LE)
1498 && (p_lcb->acl_priority == L2CAP_PRIORITY_HIGH)
1508 if (p_lcb)
1511 if (p_lcb->transport == BT_TRANSPORT_LE)
1515 p_lcb->handle, p_lcb->sent_not_acked,
1523 p_lcb->handle, p_lcb->sent_not_acked,
1576 tL2C_LCB *p_lcb;
1601 p_lcb = l2cu_find_lcb_by_handle (handle);
1604 if (!p_lcb)
1611 if (p_lcb->p_hcit_rcv_acl)
1614 GKI_freebuf (p_lcb->p_hcit_rcv_acl);
1615 p_lcb->p_hcit_rcv_acl = NULL;
1621 p_lcb->p_hcit_rcv_acl = p_return_buf;
1622 l2cb.p_cur_hcit_lcb = p_lcb;
1628 if (p_lcb->p_hcit_rcv_acl)
1631 BT_HDR *p_base_buf = p_lcb->p_hcit_rcv_acl;
1641 p_return_buf = p_lcb->p_hcit_rcv_acl; /* CR419: return base buffer */
1642 l2cb.p_cur_hcit_lcb = p_lcb;
1671 p_lcb->p_hcit_rcv_acl->len, total_len, hci_len);
1673 GKI_freebuf (p_lcb->p_hcit_rcv_acl);
1674 p_lcb->p_hcit_rcv_acl = NULL;
1710 tL2C_LCB *p_lcb;
1713 if (((p_lcb = l2cb.p_cur_hcit_lcb) == NULL) || ((p_buf = p_lcb->p_hcit_rcv_acl) == NULL))
1728 p_lcb->p_hcit_rcv_acl = NULL;
1748 tL2C_LCB *p_lcb;
1755 if ((p_lcb = l2cu_find_lcb_by_handle (handle)) == NULL)
1762 if (p_lcb->link_state == LST_CONNECTED)
1766 GKI_enqueue_head (&p_lcb->link_xmit_data_q, p_msg);
1768 p_lcb->partial_segment_being_sent = FALSE;
1770 l2c_link_check_send_pkts (p_lcb, NULL, NULL);