Home | History | Annotate | Download | only in l2cap

Lines Matching refs:p_ccb

42 static void l2c_csm_closed (tL2C_CCB *p_ccb, UINT16 event, void *p_data);
43 static void l2c_csm_orig_w4_sec_comp (tL2C_CCB *p_ccb, UINT16 event, void *p_data);
44 static void l2c_csm_term_w4_sec_comp (tL2C_CCB *p_ccb, UINT16 event, void *p_data);
45 static void l2c_csm_w4_l2cap_connect_rsp (tL2C_CCB *p_ccb, UINT16 event, void *p_data);
46 static void l2c_csm_w4_l2ca_connect_rsp (tL2C_CCB *p_ccb, UINT16 event, void *p_data);
47 static void l2c_csm_config (tL2C_CCB *p_ccb, UINT16 event, void *p_data);
48 static void l2c_csm_open (tL2C_CCB *p_ccb, UINT16 event, void *p_data);
49 static void l2c_csm_w4_l2cap_disconnect_rsp (tL2C_CCB *p_ccb, UINT16 event, void *p_data);
50 static void l2c_csm_w4_l2ca_disconnect_rsp (tL2C_CCB *p_ccb, UINT16 event, void *p_data);
65 void l2c_csm_execute (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
67 switch (p_ccb->chnl_state)
70 l2c_csm_closed (p_ccb, event, p_data);
74 l2c_csm_orig_w4_sec_comp (p_ccb, event, p_data);
78 l2c_csm_term_w4_sec_comp (p_ccb, event, p_data);
82 l2c_csm_w4_l2cap_connect_rsp (p_ccb, event, p_data);
86 l2c_csm_w4_l2ca_connect_rsp (p_ccb, event, p_data);
90 l2c_csm_config (p_ccb, event, p_data);
94 l2c_csm_open (p_ccb, event, p_data);
98 l2c_csm_w4_l2cap_disconnect_rsp (p_ccb, event, p_data);
102 l2c_csm_w4_l2ca_disconnect_rsp (p_ccb, event, p_data);
121 static void l2c_csm_closed (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
124 UINT16 local_cid = p_ccb->local_cid;
128 if (p_ccb->p_rcb == NULL)
131 L2CAP_TRACE_ERROR ("L2CAP - LCID: 0x%04x st: CLOSED evt: %s p_rcb == NULL", p_ccb->local_cid, l2c_csm_get_event_name (event));
133 L2CAP_TRACE_ERROR ("L2CAP - LCID: 0x%04x st: CLOSED evt: 0x%04x p_rcb == NULL", p_ccb->local_cid, event);
142 if ( l2c_ucd_process_event (p_ccb, event, p_data) )
150 disconnect_ind = p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb;
151 connect_cfm = p_ccb->p_rcb->api.pL2CA_ConnectCfm_Cb;
154 L2CAP_TRACE_EVENT ("L2CAP - LCID: 0x%04x st: CLOSED evt: %s", p_ccb->local_cid, l2c_csm_get_event_name (event));
162 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
163 l2cu_release_ccb (p_ccb);
168 p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP;
169 btm_sec_l2cap_access_req (p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm,
170 p_ccb->p_lcb->handle, TRUE, &l2c_link_sec_comp, p_ccb);
176 || !btm_acl_notif_conn_collision(p_ccb->p_lcb->remote_bd_addr))
178 L2CAP_TRACE_API ("L2CAP - Calling ConnectCfm_Cb(), CID: 0x%04x Status: %d", p_ccb->local_cid, p_ci->status);
179 l2cu_release_ccb (p_ccb);
200 BTM_SetPowerMode (BTM_PM_SET_ONLY_ID, p_ccb->p_lcb->remote_bd_addr, &settings);
203 BTM_CancelSniffMode (p_ccb->p_lcb->remote_bd_addr);
207 if (btm_sec_l2cap_access_req (p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm,
208 p_ccb->p_lcb->handle, TRUE, &l2c_link_sec_comp, p_ccb) == BTM_CMD_STARTED)
209 p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP;
213 p_ccb->chnl_state = CST_W4_L2CAP_CONNECT_RSP;
216 if (!p_ccb->p_lcb->w4_info_rsp)
219 if (!l2c_fcr_chk_chan_modes(p_ccb))
221 l2cu_release_ccb (p_ccb);
222 (*p_ccb->p_rcb->api.pL2CA_ConnectCfm_Cb)(local_cid, L2CAP_CONN_NO_LINK);
226 l2cu_send_peer_connect_req (p_ccb);
227 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CONNECT_TOUT);
233 L2CAP_TRACE_API ("L2CAP - Calling ConnectCfm_Cb(), CID: 0x%04x Status: %d", p_ccb->local_cid, L2CAP_CONN_TIMEOUT);
234 l2cu_release_ccb (p_ccb);
240 btu_stop_timer (&p_ccb->p_lcb->timer_entry);
257 BTM_SetPowerMode (BTM_PM_SET_ONLY_ID, p_ccb->p_lcb->remote_bd_addr, &settings);
260 BTM_CancelSniffMode (p_ccb->p_lcb->remote_bd_addr);
263 p_ccb->chnl_state = CST_TERM_W4_SEC_COMP;
264 if (btm_sec_l2cap_access_req (p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm,
265 p_ccb->p_lcb->handle, FALSE, &l2c_link_sec_comp, p_ccb) == BTM_CMD_STARTED)
268 l2cu_send_peer_connect_rsp(p_ccb, L2CAP_CONN_PENDING, 0);
273 L2CAP_TRACE_API ("L2CAP - Calling ConnectCfm_Cb(), CID: 0x%04x Status: %d", p_ccb->local_cid, L2CAP_CONN_TIMEOUT);
274 l2cu_release_ccb (p_ccb);
284 l2cu_release_ccb (p_ccb);
300 static void l2c_csm_orig_w4_sec_comp (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
302 tL2CA_DISCONNECT_IND_CB *disconnect_ind = p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb;
303 tL2CA_CONNECT_CFM_CB *connect_cfm = p_ccb->p_rcb->api.pL2CA_ConnectCfm_Cb;
304 UINT16 local_cid = p_ccb->local_cid;
307 L2CAP_TRACE_EVENT ("L2CAP - LCID: 0x%04x st: ORIG_W4_SEC_COMP evt: %s", p_ccb->local_cid, l2c_csm_get_event_name (event));
316 if ( l2c_ucd_process_event (p_ccb, event, p_data) )
327 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
328 l2cu_release_ccb (p_ccb);
334 btm_sec_l2cap_access_req (p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm,
335 p_ccb->p_lcb->handle, TRUE, &l2c_link_sec_comp, p_ccb);
340 p_ccb->chnl_state = CST_W4_L2CAP_CONNECT_RSP;
341 if (!p_ccb->p_lcb->w4_info_rsp)
344 if (!l2c_fcr_chk_chan_modes(p_ccb))
346 l2cu_release_ccb (p_ccb);
351 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CONNECT_TOUT);
352 l2cu_send_peer_connect_req (p_ccb); /* Start Connection */
358 L2CAP_TRACE_API ("L2CAP - Calling ConnectCfm_Cb(), CID: 0x%04x Status: %d", p_ccb->local_cid, HCI_ERR_AUTH_FAILURE);
362 if ( (p_ccb == p_ccb->p_lcb->ccb_queue.p_first_ccb) && (p_ccb == p_ccb->p_lcb->ccb_queue.p_last_ccb) )
364 p_ccb->p_lcb->idle_timeout = 0;
367 l2cu_release_ccb (p_ccb);
378 btm_sec_abort_access_req (p_ccb->p_lcb->remote_bd_addr);
380 l2cu_release_ccb (p_ccb);
396 static void l2c_csm_term_w4_sec_comp (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
399 L2CAP_TRACE_EVENT ("L2CAP - LCID: 0x%04x st: TERM_W4_SEC_COMP evt: %s", p_ccb->local_cid, l2c_csm_get_event_name (event));
405 if ( p_ccb->local_cid == L2CAP_CONNECTIONLESS_CID )
408 if ( l2c_ucd_process_event (p_ccb, event, p_data) )
420 btm_sec_abort_access_req (p_ccb->p_lcb->remote_bd_addr);
422 l2cu_release_ccb (p_ccb);
426 p_ccb->chnl_state = CST_W4_L2CA_CONNECT_RSP;
429 if (!p_ccb->p_lcb->w4_info_rsp)
432 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CONNECT_TOUT);
433 L2CAP_TRACE_API ("L2CAP - Calling Connect_Ind_Cb(), CID: 0x%04x", p_ccb->local_cid);
435 (*p_ccb->p_rcb->api.pL2CA_ConnectInd_Cb) (p_ccb->p_lcb->remote_bd_addr, p_ccb->local_cid,
436 p_ccb->p_rcb->psm, p_ccb->remote_id);
450 l2cu_send_peer_connect_rsp(p_ccb, L2CAP_CONN_PENDING, 0);
458 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_DELAY_CHECK_SM4);
462 l2cu_send_peer_connect_rsp (p_ccb, L2CAP_CONN_SECURITY_BLOCK, 0);
463 l2cu_release_ccb (p_ccb);
473 l2cu_release_ccb (p_ccb);
477 l2cu_send_peer_disc_rsp (p_ccb->p_lcb, p_ccb->remote_id, p_ccb->local_cid, p_ccb->remote_cid);
480 btm_sec_abort_access_req (p_ccb->p_lcb->remote_bd_addr);
482 l2cu_release_ccb (p_ccb);
487 if (!btsnd_hcic_disconnect (p_ccb->p_lcb->handle, HCI_ERR_AUTH_FAILURE))
489 L2CAP_TRACE_API ("L2CAP - Calling btsnd_hcic_disconnect for handle %i failed", p_ccb->p_lcb->handle);
490 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, 1);
495 btm_sec_l2cap_access_req (p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm,
496 p_ccb->p_lcb->handle, FALSE, &l2c_link_sec_comp, p_ccb);
512 static void l2c_csm_w4_l2cap_connect_rsp (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
515 tL2CA_DISCONNECT_IND_CB *disconnect_ind = p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb;
516 tL2CA_CONNECT_CFM_CB *connect_cfm = p_ccb->p_rcb->api.pL2CA_ConnectCfm_Cb;
517 UINT16 local_cid = p_ccb->local_cid;
520 L2CAP_TRACE_EVENT ("L2CAP - LCID: 0x%04x st: W4_L2CAP_CON_RSP evt: %s", p_ccb->local_cid, l2c_csm_get_event_name (event));
530 p_ccb->chnl_state = CST_CLOSED;
531 if ((p_ccb->flags & CCB_FLAG_NO_RETRY) || !p_data || (*((UINT8 *)p_data) != HCI_ERR_PEER_USER))
534 p_ccb->local_cid);
535 l2cu_release_ccb (p_ccb);
538 p_ccb->flags |= CCB_FLAG_NO_RETRY;
542 p_ccb->remote_cid = p_ci->remote_cid;
543 p_ccb->chnl_state = CST_CONFIG;
544 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CFG_TIMEOUT);
545 L2CAP_TRACE_API ("L2CAP - Calling Connect_Cfm_Cb(), CID: 0x%04x, Success", p_ccb->local_cid);
547 (*p_ccb->p_rcb->api.pL2CA_ConnectCfm_Cb)(local_cid, L2CAP_CONN_OK);
551 p_ccb->remote_cid = p_ci->remote_cid;
552 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CONNECT_TOUT_EXT);
553 if (p_ccb->p_rcb->api.pL2CA_ConnectPnd_Cb)
555 L2CAP_TRACE_API ("L2CAP - Calling Connect_Pnd_Cb(), CID: 0x%04x", p_ccb->local_cid);
556 (*p_ccb->p_rcb->api.pL2CA_ConnectPnd_Cb)(p_ccb->local_cid);
561 L2CAP_TRACE_API ("L2CAP - Calling Connect_Cfm_Cb(), CID: 0x%04x, Failure Code: %d", p_ccb->local_cid, p_ci->l2cap_result);
562 l2cu_release_ccb (p_ccb);
567 L2CAP_TRACE_API ("L2CAP - Calling Connect_Cfm_Cb(), CID: 0x%04x, Timeout", p_ccb->local_cid);
568 l2cu_release_ccb (p_ccb);
574 if (p_ccb->remote_cid != 0)
576 l2cu_send_peer_disc_req (p_ccb);
577 p_ccb->chnl_state = CST_W4_L2CAP_DISCONNECT_RSP;
578 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_DISCONNECT_TOUT);
581 l2cu_release_ccb (p_ccb);
591 if (!l2c_fcr_chk_chan_modes(p_ccb))
593 l2cu_release_ccb (p_ccb);
599 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CONNECT_TOUT);
600 l2cu_send_peer_connect_req (p_ccb); /* Start Connection */
617 static void l2c_csm_w4_l2ca_connect_rsp (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
620 tL2CA_DISCONNECT_IND_CB *disconnect_ind = p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb;
621 UINT16 local_cid = p_ccb->local_cid;
624 L2CAP_TRACE_EVENT ("L2CAP - LCID: 0x%04x st: W4_L2CA_CON_RSP evt: %s", p_ccb->local_cid, l2c_csm_get_event_name (event));
632 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
633 l2cu_release_ccb (p_ccb);
643 l2cu_send_peer_connect_rsp (p_ccb, L2CAP_CONN_OK, 0);
644 p_ccb->chnl_state = CST_CONFIG;
645 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CFG_TIMEOUT);
650 l2cu_send_peer_connect_rsp (p_ccb, p_ci->l2cap_result, p_ci->l2cap_status);
651 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CONNECT_TOUT_EXT);
657 l2cu_send_peer_connect_rsp (p_ccb, p_ci->l2cap_result, p_ci->l2cap_status);
658 l2cu_release_ccb (p_ccb);
662 l2cu_send_peer_connect_rsp (p_ccb, L2CAP_CONN_NO_PSM, 0);
663 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
664 l2cu_release_ccb (p_ccb);
674 l2cu_send_peer_disc_req (p_ccb);
675 p_ccb->chnl_state = CST_W4_L2CAP_DISCONNECT_RSP;
676 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_DISCONNECT_TOUT);
681 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CONNECT_TOUT);
682 L2CAP_TRACE_API ("L2CAP - Calling Connect_Ind_Cb(), CID: 0x%04x", p_ccb->local_cid);
684 (*p_ccb->p_rcb->api.pL2CA_ConnectInd_Cb) (p_ccb->p_lcb->remote_bd_addr,
685 p_ccb->local_cid,
686 p_ccb->p_rcb->psm,
687 p_ccb->remote_id);
703 static void l2c_csm_config (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
706 tL2CA_DISCONNECT_IND_CB *disconnect_ind = p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb;
707 UINT16 local_cid = p_ccb->local_cid;
711 L2CAP_TRACE_EVENT ("L2CAP - LCID: 0x%04x st: CONFIG evt: %s", p_ccb->local_cid, l2c_csm_get_event_name (event));
719 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
720 l2cu_release_ccb (p_ccb);
726 if ((cfg_result = l2cu_process_peer_cfg_req (p_ccb, p_cfg)) == L2CAP_PEER_CFG_OK)
729 p_ccb->local_cid, (p_cfg->flags & L2CAP_CFG_FLAGS_MASK_CONT));
730 (*p_ccb->p_rcb->api.pL2CA_ConfigInd_Cb)(p_ccb->local_cid, p_cfg);
736 l2cu_disconnect_chnl (p_ccb);
741 l2cu_send_peer_config_rsp (p_ccb, p_cfg);
746 l2cu_process_peer_cfg_rsp (p_ccb, p_cfg);
755 p_ccb->config_done |= OB_CFG_DONE;
757 if (p_ccb->config_done & IB_CFG_DONE)
760 if (p_ccb->our_cfg.fcr.mode != p_ccb->peer_cfg.fcr.mode)
762 l2cu_send_peer_disc_req (p_ccb);
763 L2CAP_TRACE_WARNING ("L2CAP - Calling Disconnect_Ind_Cb(Incompatible CFG), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
764 l2cu_release_ccb (p_ccb);
769 p_ccb->config_done |= RECONFIG_FLAG;
770 p_ccb->chnl_state = CST_OPEN;
772 btu_stop_timer (&p_ccb->timer_entry);
775 if (p_ccb->fcrb.wait_ack)
776 l2c_fcr_start_timer(p_ccb);
779 ** check p_ccb->our_cfg.fcr.mon_tout and p_ccb->our_cfg.fcr.rtrans_tout
782 if ((p_ccb->our_cfg.fcr.mode == L2CAP_FCR_ERTM_MODE)
783 &&((p_ccb->our_cfg.fcr.mon_tout == 0)||(p_ccb->our_cfg.fcr.rtrans_tout)))
785 l2c_fcr_adj_monitor_retran_timeout (p_ccb);
789 p_ccb->fcrb.connect_tick_count = GKI_get_os_tick_count();
792 if (p_ccb->xmit_hold_q.count)
794 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, NULL);
799 L2CAP_TRACE_API ("L2CAP - Calling Config_Rsp_Cb(), CID: 0x%04x", p_ccb->local_cid);
800 (*p_ccb->p_rcb->api.pL2CA_ConfigCfm_Cb)(p_ccb->local_cid, p_cfg);
805 btu_stop_timer (&p_ccb->timer_entry);
808 if (l2c_fcr_renegotiate_chan(p_ccb, p_cfg) == FALSE)
810 L2CAP_TRACE_API ("L2CAP - Calling Config_Rsp_Cb(), CID: 0x%04x, Failure: %d", p_ccb->local_cid, p_cfg->result);
811 (*p_ccb->p_rcb->api.pL2CA_ConfigCfm_Cb)(p_ccb->local_cid, p_cfg);
816 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_DISCONNECT_TOUT);
817 p_ccb->chnl_state = CST_W4_L2CA_DISCONNECT_RSP;
818 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x Conf Needed", p_ccb->local_cid);
819 (*p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb)(p_ccb->local_cid, TRUE);
823 l2cu_process_our_cfg_req (p_ccb, p_cfg);
824 l2cu_send_peer_config_req (p_ccb, p_cfg);
825 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CFG_TIMEOUT);
829 l2cu_process_our_cfg_rsp (p_ccb, p_cfg);
835 l2cu_send_peer_config_rsp (p_ccb, p_cfg);
840 p_ccb->peer_cfg.mtu_present = FALSE;
841 p_ccb->peer_cfg.flush_to_present = FALSE;
842 p_ccb->peer_cfg.qos_present = FALSE;
844 p_ccb->config_done |= IB_CFG_DONE;
846 if (p_ccb->config_done & OB_CFG_DONE)
849 if (p_ccb->our_cfg.fcr.mode != p_ccb->peer_cfg.fcr.mode)
851 l2cu_send_peer_disc_req (p_ccb);
852 L2CAP_TRACE_WARNING ("L2CAP - Calling Disconnect_Ind_Cb(Incompatible CFG), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
853 l2cu_release_ccb (p_ccb);
858 p_ccb->config_done |= RECONFIG_FLAG;
859 p_ccb->chnl_state = CST_OPEN;
861 btu_stop_timer (&p_ccb->timer_entry);
864 l2cu_send_peer_config_rsp (p_ccb, p_cfg);
867 if (p_ccb->fcrb.wait_ack)
868 l2c_fcr_start_timer(p_ccb);
871 p_ccb->fcrb.connect_tick_count = GKI_get_os_tick_count();
875 if ( (p_ccb->chnl_state == CST_OPEN) && (p_ccb->xmit_hold_q.count) )
877 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, NULL);
882 l2cu_send_peer_config_rsp (p_ccb, p_cfg);
883 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CFG_TIMEOUT);
887 l2cu_send_peer_disc_req (p_ccb);
888 p_ccb->chnl_state = CST_W4_L2CAP_DISCONNECT_RSP;
889 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_DISCONNECT_TOUT);
893 L2CAP_TRACE_API ("L2CAP - Calling DataInd_Cb(), CID: 0x%04x", p_ccb->local_cid);
895 if (p_ccb->local_cid >= L2CAP_FIRST_FIXED_CHNL &&
896 p_ccb->local_cid <= L2CAP_LAST_FIXED_CHNL)
898 if (p_ccb->local_cid < L2CAP_BASE_APPL_CID)
900 if (l2cb.fixed_reg[p_ccb->local_cid - L2CAP_FIRST_FIXED_CHNL].pL2CA_FixedData_Cb)
901 (*l2cb.fixed_reg[p_ccb->local_cid - L2CAP_FIRST_FIXED_CHNL].pL2CA_FixedData_Cb)(p_ccb->p_lcb->remote_bd_addr,(BT_HDR *)p_data);
908 (*p_ccb->p_rcb->api.pL2CA_DataInd_Cb)(p_ccb->local_cid, (BT_HDR *)p_data);
912 if (p_ccb->config_done & OB_CFG_DONE)
913 l2c_enqueue_peer_data (p_ccb, (BT_HDR *)p_data);
919 l2cu_send_peer_disc_req (p_ccb);
920 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
921 l2cu_release_ccb (p_ccb);
938 static void l2c_csm_open (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
940 UINT16 local_cid = p_ccb->local_cid;
947 L2CAP_TRACE_EVENT ("L2CAP - LCID: 0x%04x st: OPEN evt: %s", p_ccb->local_cid, l2c_csm_get_event_name (event));
956 if ( l2c_ucd_process_event (p_ccb, event, p_data) )
967 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
968 l2cu_release_ccb (p_ccb);
969 if (p_ccb->p_rcb)
970 (*p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb)(local_cid, FALSE);
975 if (p_ccb->p_rcb->api.pL2CA_QoSViolationInd_Cb)
976 (*p_ccb->p_rcb->api.pL2CA_QoSViolationInd_Cb)(p_ccb->p_lcb->remote_bd_addr);
982 tempstate = p_ccb->chnl_state;
983 tempcfgdone = p_ccb->config_done;
984 p_ccb->chnl_state = CST_CONFIG;
985 p_ccb->config_done &= ~CFG_DONE_MASK;
987 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CFG_TIMEOUT);
989 if ((cfg_result = l2cu_process_peer_cfg_req (p_ccb, p_cfg)) == L2CAP_PEER_CFG_OK)
991 (*p_ccb->p_rcb->api.pL2CA_ConfigInd_Cb)(p_ccb->local_cid, p_cfg);
997 btu_stop_timer(&p_ccb->timer_entry);
998 p_ccb->chnl_state = tempstate;
999 p_ccb->config_done = tempcfgdone;
1000 l2cu_send_peer_config_rsp (p_ccb, p_cfg);
1008 l2cu_disconnect_chnl (p_ccb);
1020 BTM_SetPowerMode (BTM_PM_SET_ONLY_ID, p_ccb->p_lcb->remote_bd_addr, &settings);
1023 BTM_CancelSniffMode (p_ccb->p_lcb->remote_bd_addr);
1027 p_ccb->chnl_state = CST_W4_L2CA_DISCONNECT_RSP;
1028 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_DISCONNECT_TOUT);
1029 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x Conf Needed", p_ccb->local_cid);
1030 (*p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb)(p_ccb->local_cid, TRUE);
1034 (*p_ccb->p_rcb->api.pL2CA_DataInd_Cb)(p_ccb->local_cid, (BT_HDR *)p_data);
1044 BTM_SetPowerMode (BTM_PM_SET_ONLY_ID, p_ccb->p_lcb->remote_bd_addr, &settings);
1047 BTM_CancelSniffMode (p_ccb->p_lcb->remote_bd_addr);
1050 l2cu_send_peer_disc_req (p_ccb);
1051 p_ccb->chnl_state = CST_W4_L2CAP_DISCONNECT_RSP;
1052 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_DISCONNECT_TOUT);
1056 l2c_enqueue_peer_data (p_ccb, (BT_HDR *)p_data);
1057 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, NULL);
1061 p_ccb->chnl_state = CST_CONFIG;
1062 p_ccb->config_done &= ~CFG_DONE_MASK;
1063 l2cu_process_our_cfg_req (p_ccb, (tL2CAP_CFG_INFO *)p_data);
1064 l2cu_send_peer_config_req (p_ccb, (tL2CAP_CFG_INFO *)p_data);
1065 btu_start_timer (&p_ccb->timer_entry, BTU_TTYPE_L2CAP_CHNL, L2CAP_CHNL_CFG_TIMEOUT);
1070 if (p_ccb->peer_cfg.fcr.mode == L2CAP_FCR_ERTM_MODE)
1071 l2c_fcr_proc_tout (p_ccb);
1075 l2c_fcr_proc_ack_tout (p_ccb);
1091 static void l2c_csm_w4_l2cap_disconnect_rsp (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
1093 tL2CA_DISCONNECT_CFM_CB *disconnect_cfm = p_ccb->p_rcb->api.pL2CA_DisconnectCfm_Cb;
1094 UINT16 local_cid = p_ccb->local_cid;
1097 L2CAP_TRACE_EVENT ("L2CAP - LCID: 0x%04x st: W4_L2CAP_DISC_RSP evt: %s", p_ccb->local_cid, l2c_csm_get_event_name (event));
1105 l2cu_release_ccb (p_ccb);
1114 l2cu_send_peer_disc_rsp (p_ccb->p_lcb, p_ccb->remote_id, p_ccb->local_cid, p_ccb->remote_cid);
1115 l2cu_release_ccb (p_ccb);
1125 l2cu_release_ccb (p_ccb);
1151 static void l2c_csm_w4_l2ca_disconnect_rsp (tL2C_CCB *p_ccb, UINT16 event, void *p_data)
1153 tL2CA_DISCONNECT_IND_CB *disconnect_ind = p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb;
1154 UINT16 local_cid = p_ccb->local_cid;
1157 L2CAP_TRACE_EVENT ("L2CAP - LCID: 0x%04x st: W4_L2CA_DISC_RSP evt: %s", p_ccb->local_cid, l2c_csm_get_event_name (event));
1165 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
1166 l2cu_release_ccb (p_ccb);
1171 l2cu_send_peer_disc_rsp (p_ccb->p_lcb, p_ccb->remote_id, p_ccb->local_cid, p_ccb->remote_cid);
1172 L2CAP_TRACE_API ("L2CAP - Calling Disconnect_Ind_Cb(), CID: 0x%04x No Conf Needed", p_ccb->local_cid);
1173 l2cu_release_ccb (p_ccb);
1179 l2cu_send_peer_disc_rsp (p_ccb->p_lcb, p_ccb->remote_id, p_ccb->local_cid, p_ccb->remote_cid);
1180 l2cu_release_ccb (p_ccb);
1294 void l2c_enqueue_peer_data (tL2C_CCB *p_ccb, BT_HDR *p_buf)
1298 if (p_ccb->peer_cfg.fcr.mode != L2CAP_FCR_BASIC_MODE)
1305 p_buf->event = p_ccb->local_cid;
1316 UINT16_TO_STREAM (p, p_ccb->remote_cid);
1319 GKI_enqueue (&p_ccb->xmit_hold_q, p_buf);
1321 l2cu_check_channel_congestion (p_ccb);
1325 if (( p_ccb->p_lcb->rr_pri > p_ccb->ccb_priority )
1326 &&( p_ccb->p_lcb->rr_serv[p_ccb->ccb_priority].quota > 0))
1329 p_ccb->p_lcb->rr_pri = p_ccb->ccb_priority;
1334 if (p_ccb->p_lcb->link_xmit_quota == 0)