Lines Matching refs:pcb
160 (ng_btsocket_rfcomm_pcb_p pcb, u_int8_t cr, u_int8_t flow_control,
169 (ng_btsocket_rfcomm_pcb_p pcb);
171 (ng_btsocket_rfcomm_pcb_p pcb);
173 (ng_btsocket_rfcomm_pcb_p pcb);
176 (ng_btsocket_rfcomm_pcb_p pcb, int limit);
178 (ng_btsocket_rfcomm_pcb_p pcb, int error);
185 (ng_btsocket_rfcomm_pcb_p pcb);
187 (ng_btsocket_rfcomm_pcb_p pcb);
393 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_attach() local
406 if (pcb != NULL) in ng_btsocket_rfcomm_attach()
418 pcb = malloc(sizeof(*pcb), in ng_btsocket_rfcomm_attach()
420 if (pcb == NULL) in ng_btsocket_rfcomm_attach()
424 so->so_pcb = (caddr_t) pcb; in ng_btsocket_rfcomm_attach()
425 pcb->so = so; in ng_btsocket_rfcomm_attach()
428 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CLOSED; in ng_btsocket_rfcomm_attach()
429 pcb->flags = NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_attach()
431 pcb->lmodem = in ng_btsocket_rfcomm_attach()
432 pcb->rmodem = (RFCOMM_MODEM_RTC | RFCOMM_MODEM_RTR | RFCOMM_MODEM_DV); in ng_btsocket_rfcomm_attach()
434 pcb->mtu = RFCOMM_DEFAULT_MTU; in ng_btsocket_rfcomm_attach()
435 pcb->tx_cred = 0; in ng_btsocket_rfcomm_attach()
436 pcb->rx_cred = RFCOMM_DEFAULT_CREDITS; in ng_btsocket_rfcomm_attach()
438 mtx_init(&pcb->pcb_mtx, "btsocks_rfcomm_pcb_mtx", NULL, MTX_DEF); in ng_btsocket_rfcomm_attach()
439 callout_init_mtx(&pcb->timo, &pcb->pcb_mtx, 0); in ng_btsocket_rfcomm_attach()
443 LIST_INSERT_HEAD(&ng_btsocket_rfcomm_sockets, pcb, next); in ng_btsocket_rfcomm_attach()
457 ng_btsocket_rfcomm_pcb_t *pcb = so2rfcomm_pcb(so), *pcb1; in ng_btsocket_rfcomm_bind() local
460 if (pcb == NULL) in ng_btsocket_rfcomm_bind()
473 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_bind()
483 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_bind()
492 bcopy(&sa->rfcomm_bdaddr, &pcb->src, sizeof(pcb->src)); in ng_btsocket_rfcomm_bind()
493 pcb->channel = sa->rfcomm_channel; in ng_btsocket_rfcomm_bind()
495 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_bind()
508 ng_btsocket_rfcomm_pcb_t *pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_connect() local
514 if (pcb == NULL) in ng_btsocket_rfcomm_connect()
545 s = ng_btsocket_rfcomm_session_by_addr(&pcb->src, &sa->rfcomm_bdaddr); in ng_btsocket_rfcomm_connect()
559 &pcb->src, &sa->rfcomm_bdaddr, td); in ng_btsocket_rfcomm_connect()
574 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect()
579 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect()
599 bcopy(&sa->rfcomm_bdaddr, &pcb->dst, sizeof(pcb->dst)); in ng_btsocket_rfcomm_connect()
600 pcb->channel = sa->rfcomm_channel; in ng_btsocket_rfcomm_connect()
601 pcb->dlci = dlci; in ng_btsocket_rfcomm_connect()
603 LIST_INSERT_HEAD(&s->dlcs, pcb, session_next); in ng_btsocket_rfcomm_connect()
604 pcb->session = s; in ng_btsocket_rfcomm_connect()
606 ng_btsocket_rfcomm_timeout(pcb); in ng_btsocket_rfcomm_connect()
607 soisconnecting(pcb->so); in ng_btsocket_rfcomm_connect()
610 pcb->mtu = s->mtu; in ng_btsocket_rfcomm_connect()
611 bcopy(&so2l2cap_pcb(s->l2so)->src, &pcb->src, in ng_btsocket_rfcomm_connect()
612 sizeof(pcb->src)); in ng_btsocket_rfcomm_connect()
614 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONFIGURING; in ng_btsocket_rfcomm_connect()
616 error = ng_btsocket_rfcomm_send_pn(pcb); in ng_btsocket_rfcomm_connect()
620 pcb->state = NG_BTSOCKET_RFCOMM_DLC_W4_CONNECT; in ng_btsocket_rfcomm_connect()
628 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect()
654 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_ctloutput() local
658 if (pcb == NULL) in ng_btsocket_rfcomm_ctloutput()
663 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_ctloutput()
669 error = sooptcopyout(sopt, &pcb->mtu, sizeof(pcb->mtu)); in ng_btsocket_rfcomm_ctloutput()
673 fcinfo.lmodem = pcb->lmodem; in ng_btsocket_rfcomm_ctloutput()
674 fcinfo.rmodem = pcb->rmodem; in ng_btsocket_rfcomm_ctloutput()
675 fcinfo.tx_cred = pcb->tx_cred; in ng_btsocket_rfcomm_ctloutput()
676 fcinfo.rx_cred = pcb->rx_cred; in ng_btsocket_rfcomm_ctloutput()
677 fcinfo.cfc = (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC)? in ng_btsocket_rfcomm_ctloutput()
703 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_ctloutput()
715 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_detach() local
717 KASSERT(pcb != NULL, ("ng_btsocket_rfcomm_detach: pcb == NULL")); in ng_btsocket_rfcomm_detach()
719 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_detach()
721 switch (pcb->state) { in ng_btsocket_rfcomm_detach()
727 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) in ng_btsocket_rfcomm_detach()
728 ng_btsocket_rfcomm_untimeout(pcb); in ng_btsocket_rfcomm_detach()
730 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_W4_CONNECT) in ng_btsocket_rfcomm_detach()
731 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_DETACHED; in ng_btsocket_rfcomm_detach()
733 pcb->state = NG_BTSOCKET_RFCOMM_DLC_DISCONNECTING; in ng_btsocket_rfcomm_detach()
743 while (pcb->state != NG_BTSOCKET_RFCOMM_DLC_CLOSED) in ng_btsocket_rfcomm_detach()
744 msleep(&pcb->state, &pcb->pcb_mtx, PZERO, "rf_det", 0); in ng_btsocket_rfcomm_detach()
746 if (pcb->session != NULL) in ng_btsocket_rfcomm_detach()
748 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) in ng_btsocket_rfcomm_detach()
750 __func__, pcb->flags); in ng_btsocket_rfcomm_detach()
753 LIST_REMOVE(pcb, next); in ng_btsocket_rfcomm_detach()
756 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_detach()
758 mtx_destroy(&pcb->pcb_mtx); in ng_btsocket_rfcomm_detach()
759 bzero(pcb, sizeof(*pcb)); in ng_btsocket_rfcomm_detach()
760 free(pcb, M_NETGRAPH_BTSOCKET_RFCOMM); in ng_btsocket_rfcomm_detach()
773 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_disconnect() local
775 if (pcb == NULL) in ng_btsocket_rfcomm_disconnect()
778 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_disconnect()
780 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_DISCONNECTING) { in ng_btsocket_rfcomm_disconnect()
781 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_disconnect()
786 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) in ng_btsocket_rfcomm_disconnect()
787 ng_btsocket_rfcomm_untimeout(pcb); in ng_btsocket_rfcomm_disconnect()
789 switch (pcb->state) { in ng_btsocket_rfcomm_disconnect()
799 pcb->state = NG_BTSOCKET_RFCOMM_DLC_DISCONNECTING; in ng_btsocket_rfcomm_disconnect()
811 __func__, pcb->state, pcb->flags); in ng_btsocket_rfcomm_disconnect()
815 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_disconnect()
827 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so), pcb1; in ng_btsocket_rfcomm_listen() local
832 if (pcb == NULL) in ng_btsocket_rfcomm_listen()
834 if (pcb->channel > 30) in ng_btsocket_rfcomm_listen()
839 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_listen()
841 if (pcb->channel == 0) { in ng_btsocket_rfcomm_listen()
846 bcmp(&pcb1->src, &pcb->src, sizeof(pcb->src)) == 0) in ng_btsocket_rfcomm_listen()
849 for (pcb->channel = 30; pcb->channel > 0; pcb->channel --) in ng_btsocket_rfcomm_listen()
850 if (!(usedchannels & (1 << (pcb->channel - 1)))) in ng_btsocket_rfcomm_listen()
853 if (pcb->channel == 0) { in ng_btsocket_rfcomm_listen()
855 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_listen()
863 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_listen()
934 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_peeraddr() local
937 if (pcb == NULL) in ng_btsocket_rfcomm_peeraddr()
940 bcopy(&pcb->dst, &sa.rfcomm_bdaddr, sizeof(sa.rfcomm_bdaddr)); in ng_btsocket_rfcomm_peeraddr()
941 sa.rfcomm_channel = pcb->channel; in ng_btsocket_rfcomm_peeraddr()
958 ng_btsocket_rfcomm_pcb_t *pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_send() local
962 if (pcb == NULL || m == NULL || control != NULL) { in ng_btsocket_rfcomm_send()
967 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_send()
970 if (pcb->state != NG_BTSOCKET_RFCOMM_DLC_CONNECTED) { in ng_btsocket_rfcomm_send()
971 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_send()
977 sbappend(&pcb->so->so_snd, m, flags); in ng_btsocket_rfcomm_send()
980 if (!(pcb->flags & NG_BTSOCKET_RFCOMM_DLC_SENDING)) { in ng_btsocket_rfcomm_send()
981 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_SENDING; in ng_btsocket_rfcomm_send()
985 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_send()
1000 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_sockaddr() local
1003 if (pcb == NULL) in ng_btsocket_rfcomm_sockaddr()
1006 bcopy(&pcb->src, &sa.rfcomm_bdaddr, sizeof(sa.rfcomm_bdaddr)); in ng_btsocket_rfcomm_sockaddr()
1007 sa.rfcomm_channel = pcb->channel; in ng_btsocket_rfcomm_sockaddr()
1152 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb1 = NULL; in ng_btsocket_rfcomm_connect_ind() local
1164 pcb = ng_btsocket_rfcomm_pcb_listener(&l2pcb->src, channel); in ng_btsocket_rfcomm_connect_ind()
1165 if (pcb == NULL) in ng_btsocket_rfcomm_connect_ind()
1174 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect_ind()
1176 CURVNET_SET(pcb->so->so_vnet); in ng_btsocket_rfcomm_connect_ind()
1177 so1 = sonewconn(pcb->so, 0); in ng_btsocket_rfcomm_connect_ind()
1180 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect_ind()
1216 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb_next = NULL; in ng_btsocket_rfcomm_connect_cfm() local
1229 for (pcb = LIST_FIRST(&s->dlcs); pcb != NULL; ) { in ng_btsocket_rfcomm_connect_cfm()
1230 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect_cfm()
1231 pcb_next = LIST_NEXT(pcb, session_next); in ng_btsocket_rfcomm_connect_cfm()
1233 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_W4_CONNECT) { in ng_btsocket_rfcomm_connect_cfm()
1234 pcb->mtu = s->mtu; in ng_btsocket_rfcomm_connect_cfm()
1235 bcopy(&so2l2cap_pcb(s->l2so)->src, &pcb->src, in ng_btsocket_rfcomm_connect_cfm()
1236 sizeof(pcb->src)); in ng_btsocket_rfcomm_connect_cfm()
1238 error = ng_btsocket_rfcomm_send_pn(pcb); in ng_btsocket_rfcomm_connect_cfm()
1240 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONFIGURING; in ng_btsocket_rfcomm_connect_cfm()
1242 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_connect_cfm()
1245 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect_cfm()
1246 pcb = pcb_next; in ng_btsocket_rfcomm_connect_cfm()
1659 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb_next = NULL; in ng_btsocket_rfcomm_session_clean() local
1669 for (pcb = LIST_FIRST(&s->dlcs); pcb != NULL; ) { in ng_btsocket_rfcomm_session_clean()
1670 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_session_clean()
1671 pcb_next = LIST_NEXT(pcb, session_next); in ng_btsocket_rfcomm_session_clean()
1675 __func__, pcb->dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_session_clean()
1677 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_CONNECTED) in ng_btsocket_rfcomm_session_clean()
1682 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_session_clean()
1684 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_session_clean()
1685 pcb = pcb_next; in ng_btsocket_rfcomm_session_clean()
1696 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb_next = NULL; in ng_btsocket_rfcomm_session_process_pcb() local
1706 for (pcb = LIST_FIRST(&s->dlcs); pcb != NULL; ) { in ng_btsocket_rfcomm_session_process_pcb()
1707 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_session_process_pcb()
1708 pcb_next = LIST_NEXT(pcb, session_next); in ng_btsocket_rfcomm_session_process_pcb()
1710 switch (pcb->state) { in ng_btsocket_rfcomm_session_process_pcb()
1718 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_DETACHED) in ng_btsocket_rfcomm_session_process_pcb()
1719 ng_btsocket_rfcomm_pcb_kill(pcb, 0); in ng_btsocket_rfcomm_session_process_pcb()
1720 else if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT) in ng_btsocket_rfcomm_session_process_pcb()
1721 ng_btsocket_rfcomm_pcb_kill(pcb, ETIMEDOUT); in ng_btsocket_rfcomm_session_process_pcb()
1732 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT) in ng_btsocket_rfcomm_session_process_pcb()
1733 ng_btsocket_rfcomm_pcb_kill(pcb, ETIMEDOUT); in ng_btsocket_rfcomm_session_process_pcb()
1746 error = ng_btsocket_rfcomm_pcb_send(pcb, ALOT); in ng_btsocket_rfcomm_session_process_pcb()
1748 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_session_process_pcb()
1761 if (!(pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO)) { in ng_btsocket_rfcomm_session_process_pcb()
1763 pcb->session, RFCOMM_FRAME_DISC, in ng_btsocket_rfcomm_session_process_pcb()
1764 pcb->dlci); in ng_btsocket_rfcomm_session_process_pcb()
1766 ng_btsocket_rfcomm_timeout(pcb); in ng_btsocket_rfcomm_session_process_pcb()
1768 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_session_process_pcb()
1769 } else if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT) in ng_btsocket_rfcomm_session_process_pcb()
1770 ng_btsocket_rfcomm_pcb_kill(pcb, ETIMEDOUT); in ng_btsocket_rfcomm_session_process_pcb()
1776 __func__, pcb->state, pcb->flags); in ng_btsocket_rfcomm_session_process_pcb()
1780 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_session_process_pcb()
1781 pcb = pcb_next; in ng_btsocket_rfcomm_session_process_pcb()
1964 ng_btsocket_rfcomm_pcb_p pcb = NULL; in ng_btsocket_rfcomm_receive_sabm() local
2014 pcb = ng_btsocket_rfcomm_pcb_by_dlci(s, dlci); in ng_btsocket_rfcomm_receive_sabm()
2015 if (pcb != NULL) { in ng_btsocket_rfcomm_receive_sabm()
2016 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_sabm()
2018 if (pcb->state != NG_BTSOCKET_RFCOMM_DLC_CONNECTING) { in ng_btsocket_rfcomm_receive_sabm()
2021 __func__, dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_receive_sabm()
2022 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_sabm()
2027 ng_btsocket_rfcomm_untimeout(pcb); in ng_btsocket_rfcomm_receive_sabm()
2031 error = ng_btsocket_rfcomm_send_msc(pcb); in ng_btsocket_rfcomm_receive_sabm()
2034 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONNECTED; in ng_btsocket_rfcomm_receive_sabm()
2035 soisconnected(pcb->so); in ng_btsocket_rfcomm_receive_sabm()
2037 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_receive_sabm()
2039 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_sabm()
2049 pcb = ng_btsocket_rfcomm_connect_ind(s, RFCOMM_SRVCHANNEL(dlci)); in ng_btsocket_rfcomm_receive_sabm()
2050 if (pcb != NULL) { in ng_btsocket_rfcomm_receive_sabm()
2051 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_sabm()
2053 pcb->dlci = dlci; in ng_btsocket_rfcomm_receive_sabm()
2057 error = ng_btsocket_rfcomm_send_msc(pcb); in ng_btsocket_rfcomm_receive_sabm()
2060 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONNECTED; in ng_btsocket_rfcomm_receive_sabm()
2061 soisconnected(pcb->so); in ng_btsocket_rfcomm_receive_sabm()
2063 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_receive_sabm()
2065 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_sabm()
2080 ng_btsocket_rfcomm_pcb_p pcb = NULL; in ng_btsocket_rfcomm_receive_disc() local
2103 pcb = ng_btsocket_rfcomm_pcb_by_dlci(s, dlci); in ng_btsocket_rfcomm_receive_disc()
2104 if (pcb != NULL) { in ng_btsocket_rfcomm_receive_disc()
2107 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_disc()
2111 __func__, dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_receive_disc()
2116 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_CONNECTED) in ng_btsocket_rfcomm_receive_disc()
2121 ng_btsocket_rfcomm_pcb_kill(pcb, err); in ng_btsocket_rfcomm_receive_disc()
2123 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_disc()
2143 ng_btsocket_rfcomm_pcb_p pcb = NULL; in ng_btsocket_rfcomm_receive_ua() local
2178 pcb = ng_btsocket_rfcomm_pcb_by_dlci(s, dlci); in ng_btsocket_rfcomm_receive_ua()
2179 if (pcb != NULL) { in ng_btsocket_rfcomm_receive_ua()
2180 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_ua()
2184 __func__, dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_receive_ua()
2186 switch (pcb->state) { in ng_btsocket_rfcomm_receive_ua()
2188 ng_btsocket_rfcomm_untimeout(pcb); in ng_btsocket_rfcomm_receive_ua()
2190 error = ng_btsocket_rfcomm_send_msc(pcb); in ng_btsocket_rfcomm_receive_ua()
2192 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONNECTED; in ng_btsocket_rfcomm_receive_ua()
2193 soisconnected(pcb->so); in ng_btsocket_rfcomm_receive_ua()
2198 ng_btsocket_rfcomm_pcb_kill(pcb, 0); in ng_btsocket_rfcomm_receive_ua()
2204 __func__, dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_receive_ua()
2209 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_ua()
2227 ng_btsocket_rfcomm_pcb_p pcb = NULL; in ng_btsocket_rfcomm_receive_dm() local
2242 pcb = ng_btsocket_rfcomm_pcb_by_dlci(s, dlci); in ng_btsocket_rfcomm_receive_dm()
2243 if (pcb != NULL) { in ng_btsocket_rfcomm_receive_dm()
2244 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_dm()
2248 __func__, dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_receive_dm()
2250 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_CONNECTED) in ng_btsocket_rfcomm_receive_dm()
2255 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_receive_dm()
2257 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_dm()
2274 ng_btsocket_rfcomm_pcb_p pcb = NULL; in ng_btsocket_rfcomm_receive_uih() local
2293 pcb = ng_btsocket_rfcomm_pcb_by_dlci(s, dlci); in ng_btsocket_rfcomm_receive_uih()
2294 if (pcb == NULL) { in ng_btsocket_rfcomm_receive_uih()
2301 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_uih()
2304 if (pcb->state != NG_BTSOCKET_RFCOMM_DLC_CONNECTED) { in ng_btsocket_rfcomm_receive_uih()
2307 __func__, dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_receive_uih()
2313 if (((pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) && pcb->rx_cred <= 0) || in ng_btsocket_rfcomm_receive_uih()
2314 (pcb->lmodem & RFCOMM_MODEM_FC)) { in ng_btsocket_rfcomm_receive_uih()
2318 __func__, dlci, pcb->state, pcb->flags, in ng_btsocket_rfcomm_receive_uih()
2319 pcb->rx_cred, pcb->lmodem); in ng_btsocket_rfcomm_receive_uih()
2324 if ((pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) && pf) { in ng_btsocket_rfcomm_receive_uih()
2328 __func__, *mtod(m0, u_int8_t *), dlci, pcb->state, in ng_btsocket_rfcomm_receive_uih()
2329 pcb->flags, pcb->rx_cred, pcb->tx_cred); in ng_btsocket_rfcomm_receive_uih()
2331 pcb->tx_cred += *mtod(m0, u_int8_t *); in ng_btsocket_rfcomm_receive_uih()
2335 ng_btsocket_rfcomm_pcb_send(pcb, ALOT); in ng_btsocket_rfcomm_receive_uih()
2341 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) { in ng_btsocket_rfcomm_receive_uih()
2343 if (-- pcb->rx_cred <= RFCOMM_MAX_CREDITS / 2) in ng_btsocket_rfcomm_receive_uih()
2344 ng_btsocket_rfcomm_send_credits(pcb); in ng_btsocket_rfcomm_receive_uih()
2348 "rx_cred=%d, tx_cred=%d\n", __func__, dlci, pcb->state, pcb->flags, in ng_btsocket_rfcomm_receive_uih()
2349 pcb->rx_cred, pcb->tx_cred); in ng_btsocket_rfcomm_receive_uih()
2353 if (m0->m_pkthdr.len > pcb->mtu) { in ng_btsocket_rfcomm_receive_uih()
2356 __func__, dlci, pcb->state, pcb->flags, in ng_btsocket_rfcomm_receive_uih()
2357 pcb->mtu, m0->m_pkthdr.len); in ng_btsocket_rfcomm_receive_uih()
2360 } else if (m0->m_pkthdr.len > sbspace(&pcb->so->so_rcv)) { in ng_btsocket_rfcomm_receive_uih()
2371 __func__, dlci, pcb->state, pcb->flags, in ng_btsocket_rfcomm_receive_uih()
2372 m0->m_pkthdr.len, sbspace(&pcb->so->so_rcv)); in ng_btsocket_rfcomm_receive_uih()
2377 sbappend(&pcb->so->so_rcv, m0, 0); in ng_btsocket_rfcomm_receive_uih()
2380 sorwakeup(pcb->so); in ng_btsocket_rfcomm_receive_uih()
2384 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_uih()
2584 ng_btsocket_rfcomm_pcb_t *pcb = NULL; in ng_btsocket_rfcomm_receive_msc() local
2597 pcb = ng_btsocket_rfcomm_pcb_by_dlci(s, RFCOMM_DLCI(msc->address)); in ng_btsocket_rfcomm_receive_msc()
2598 if (pcb == NULL) { in ng_btsocket_rfcomm_receive_msc()
2607 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_msc()
2609 if (pcb->state != NG_BTSOCKET_RFCOMM_DLC_CONNECTING && in ng_btsocket_rfcomm_receive_msc()
2610 pcb->state != NG_BTSOCKET_RFCOMM_DLC_CONNECTED) { in ng_btsocket_rfcomm_receive_msc()
2614 pcb->state); in ng_btsocket_rfcomm_receive_msc()
2616 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_msc()
2622 pcb->rmodem = msc->modem; /* Update remote port signals */ in ng_btsocket_rfcomm_receive_msc()
2630 if (!(pcb->rmodem & RFCOMM_MODEM_FC) && in ng_btsocket_rfcomm_receive_msc()
2631 !(pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC)) in ng_btsocket_rfcomm_receive_msc()
2632 ng_btsocket_rfcomm_pcb_send(pcb, ALOT); in ng_btsocket_rfcomm_receive_msc()
2635 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_msc()
2800 ng_btsocket_rfcomm_pcb_t *pcb = NULL; in ng_btsocket_rfcomm_receive_pn() local
2822 pcb = ng_btsocket_rfcomm_pcb_by_dlci(s, pn->dlci); in ng_btsocket_rfcomm_receive_pn()
2823 if (pcb != NULL) { in ng_btsocket_rfcomm_receive_pn()
2824 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_pn()
2828 ng_btsocket_rfcomm_set_pn(pcb, 1, pn->flow_control, in ng_btsocket_rfcomm_receive_pn()
2831 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) { in ng_btsocket_rfcomm_receive_pn()
2845 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_CONFIGURING) { in ng_btsocket_rfcomm_receive_pn()
2846 ng_btsocket_rfcomm_set_pn(pcb, 0, in ng_btsocket_rfcomm_receive_pn()
2849 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONNECTING; in ng_btsocket_rfcomm_receive_pn()
2855 __func__, pn->dlci, pcb->state); in ng_btsocket_rfcomm_receive_pn()
2860 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_pn()
2863 pcb = ng_btsocket_rfcomm_connect_ind(s, in ng_btsocket_rfcomm_receive_pn()
2865 if (pcb != NULL) { in ng_btsocket_rfcomm_receive_pn()
2866 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_pn()
2868 pcb->dlci = pn->dlci; in ng_btsocket_rfcomm_receive_pn()
2870 ng_btsocket_rfcomm_set_pn(pcb, 1, pn->flow_control, in ng_btsocket_rfcomm_receive_pn()
2873 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) { in ng_btsocket_rfcomm_receive_pn()
2887 ng_btsocket_rfcomm_timeout(pcb); in ng_btsocket_rfcomm_receive_pn()
2888 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONNECTING; in ng_btsocket_rfcomm_receive_pn()
2889 soisconnecting(pcb->so); in ng_btsocket_rfcomm_receive_pn()
2891 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_receive_pn()
2893 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_pn()
2929 ng_btsocket_rfcomm_set_pn(ng_btsocket_rfcomm_pcb_p pcb, u_int8_t cr, in ng_btsocket_rfcomm_set_pn() argument
2932 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_set_pn()
2934 pcb->mtu = le16toh(mtu); in ng_btsocket_rfcomm_set_pn()
2938 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_set_pn()
2939 pcb->tx_cred = credits; in ng_btsocket_rfcomm_set_pn()
2941 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_set_pn()
2942 pcb->tx_cred = 0; in ng_btsocket_rfcomm_set_pn()
2946 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_set_pn()
2947 pcb->tx_cred = credits; in ng_btsocket_rfcomm_set_pn()
2949 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_set_pn()
2950 pcb->tx_cred = 0; in ng_btsocket_rfcomm_set_pn()
2956 __func__, cr, pcb->dlci, pcb->state, pcb->flags, pcb->mtu, in ng_btsocket_rfcomm_set_pn()
2957 pcb->rx_cred, pcb->tx_cred); in ng_btsocket_rfcomm_set_pn()
3091 ng_btsocket_rfcomm_send_msc(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_send_msc() argument
3097 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_msc()
3098 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_msc()
3112 msc->address = RFCOMM_MKADDRESS(1, pcb->dlci); in ng_btsocket_rfcomm_send_msc()
3113 msc->modem = pcb->lmodem; in ng_btsocket_rfcomm_send_msc()
3117 __func__, pcb->dlci, pcb->state, pcb->flags, msc->address, in ng_btsocket_rfcomm_send_msc()
3120 return (ng_btsocket_rfcomm_send_uih(pcb->session, in ng_btsocket_rfcomm_send_msc()
3121 RFCOMM_MKADDRESS(INITIATOR(pcb->session), 0), 0, 0, m)); in ng_btsocket_rfcomm_send_msc()
3129 ng_btsocket_rfcomm_send_pn(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_send_pn() argument
3135 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_pn()
3136 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_pn()
3150 pn->dlci = pcb->dlci; in ng_btsocket_rfcomm_send_pn()
3157 pn->priority = (pcb->dlci < 56)? (((pcb->dlci >> 3) << 3) + 7) : 61; in ng_btsocket_rfcomm_send_pn()
3159 pn->mtu = htole16(pcb->mtu); in ng_btsocket_rfcomm_send_pn()
3162 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) { in ng_btsocket_rfcomm_send_pn()
3164 pn->credits = pcb->rx_cred; in ng_btsocket_rfcomm_send_pn()
3172 "credits=%d\n", __func__, pcb->dlci, pcb->state, pcb->flags, pcb->mtu, in ng_btsocket_rfcomm_send_pn()
3175 return (ng_btsocket_rfcomm_send_uih(pcb->session, in ng_btsocket_rfcomm_send_pn()
3176 RFCOMM_MKADDRESS(INITIATOR(pcb->session), 0), 0, 0, m)); in ng_btsocket_rfcomm_send_pn()
3184 ng_btsocket_rfcomm_send_credits(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_send_credits() argument
3189 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_credits()
3190 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_credits()
3195 __func__, pcb->dlci, pcb->state, pcb->flags, pcb->mtu, in ng_btsocket_rfcomm_send_credits()
3196 sbspace(&pcb->so->so_rcv), pcb->tx_cred, pcb->rx_cred); in ng_btsocket_rfcomm_send_credits()
3198 credits = sbspace(&pcb->so->so_rcv) / pcb->mtu; in ng_btsocket_rfcomm_send_credits()
3200 if (pcb->rx_cred + credits > RFCOMM_MAX_CREDITS) in ng_btsocket_rfcomm_send_credits()
3201 credits = RFCOMM_MAX_CREDITS - pcb->rx_cred; in ng_btsocket_rfcomm_send_credits()
3204 pcb->session, in ng_btsocket_rfcomm_send_credits()
3205 RFCOMM_MKADDRESS(INITIATOR(pcb->session), in ng_btsocket_rfcomm_send_credits()
3206 pcb->dlci), 1, credits, NULL); in ng_btsocket_rfcomm_send_credits()
3208 pcb->rx_cred += credits; in ng_btsocket_rfcomm_send_credits()
3212 "rx_cred=%d, tx_cred=%d\n", __func__, credits, pcb->dlci, pcb->state, in ng_btsocket_rfcomm_send_credits()
3213 pcb->flags, pcb->rx_cred, pcb->tx_cred); in ng_btsocket_rfcomm_send_credits()
3218 __func__, error, pcb->dlci, pcb->state, in ng_btsocket_rfcomm_send_credits()
3219 pcb->flags, pcb->mtu, sbspace(&pcb->so->so_rcv), in ng_btsocket_rfcomm_send_credits()
3220 pcb->tx_cred, pcb->rx_cred); in ng_btsocket_rfcomm_send_credits()
3238 ng_btsocket_rfcomm_pcb_send(ng_btsocket_rfcomm_pcb_p pcb, int limit) in ng_btsocket_rfcomm_pcb_send() argument
3243 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_pcb_send()
3244 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_pcb_send()
3246 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) in ng_btsocket_rfcomm_pcb_send()
3247 limit = min(limit, pcb->tx_cred); in ng_btsocket_rfcomm_pcb_send()
3248 else if (!(pcb->rmodem & RFCOMM_MODEM_FC)) in ng_btsocket_rfcomm_pcb_send()
3257 __func__, pcb->dlci, pcb->flags, pcb->rmodem, in ng_btsocket_rfcomm_pcb_send()
3258 pcb->tx_cred); in ng_btsocket_rfcomm_pcb_send()
3264 length = min(pcb->mtu, sbavail(&pcb->so->so_snd)); in ng_btsocket_rfcomm_pcb_send()
3269 m = ng_btsocket_rfcomm_prepare_packet(&pcb->so->so_snd, length); in ng_btsocket_rfcomm_pcb_send()
3275 sbdrop(&pcb->so->so_snd, length); in ng_btsocket_rfcomm_pcb_send()
3277 error = ng_btsocket_rfcomm_send_uih(pcb->session, in ng_btsocket_rfcomm_pcb_send()
3278 RFCOMM_MKADDRESS(INITIATOR(pcb->session), in ng_btsocket_rfcomm_pcb_send()
3279 pcb->dlci), 0, 0, m); in ng_btsocket_rfcomm_pcb_send()
3284 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) in ng_btsocket_rfcomm_pcb_send()
3285 pcb->tx_cred -= sent; in ng_btsocket_rfcomm_pcb_send()
3288 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_SENDING; in ng_btsocket_rfcomm_pcb_send()
3289 sowwakeup(pcb->so); in ng_btsocket_rfcomm_pcb_send()
3302 ng_btsocket_rfcomm_pcb_kill(ng_btsocket_rfcomm_pcb_p pcb, int error) in ng_btsocket_rfcomm_pcb_kill() argument
3304 ng_btsocket_rfcomm_session_p s = pcb->session; in ng_btsocket_rfcomm_pcb_kill()
3308 __func__, pcb->so, pcb->dlci, pcb->state, pcb->flags, error); in ng_btsocket_rfcomm_pcb_kill()
3310 if (pcb->session == NULL) in ng_btsocket_rfcomm_pcb_kill()
3312 __func__, pcb, pcb->state, pcb->flags); in ng_btsocket_rfcomm_pcb_kill()
3314 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_pcb_kill()
3315 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_pcb_kill()
3317 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) in ng_btsocket_rfcomm_pcb_kill()
3318 ng_btsocket_rfcomm_untimeout(pcb); in ng_btsocket_rfcomm_pcb_kill()
3321 LIST_REMOVE(pcb, session_next); in ng_btsocket_rfcomm_pcb_kill()
3322 pcb->session = NULL; in ng_btsocket_rfcomm_pcb_kill()
3325 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CLOSED; in ng_btsocket_rfcomm_pcb_kill()
3326 pcb->so->so_error = error; in ng_btsocket_rfcomm_pcb_kill()
3327 soisdisconnected(pcb->so); in ng_btsocket_rfcomm_pcb_kill()
3328 wakeup(&pcb->state); in ng_btsocket_rfcomm_pcb_kill()
3379 ng_btsocket_rfcomm_pcb_p pcb = NULL; in ng_btsocket_rfcomm_pcb_by_dlci() local
3383 LIST_FOREACH(pcb, &s->dlcs, session_next) in ng_btsocket_rfcomm_pcb_by_dlci()
3384 if (pcb->dlci == dlci) in ng_btsocket_rfcomm_pcb_by_dlci()
3387 return (pcb); in ng_btsocket_rfcomm_pcb_by_dlci()
3397 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb1 = NULL; in ng_btsocket_rfcomm_pcb_listener() local
3401 LIST_FOREACH(pcb, &ng_btsocket_rfcomm_sockets, next) { in ng_btsocket_rfcomm_pcb_listener()
3402 if (pcb->channel != channel || in ng_btsocket_rfcomm_pcb_listener()
3403 !(pcb->so->so_options & SO_ACCEPTCONN)) in ng_btsocket_rfcomm_pcb_listener()
3406 if (bcmp(&pcb->src, src, sizeof(*src)) == 0) in ng_btsocket_rfcomm_pcb_listener()
3409 if (bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(bdaddr_t)) == 0) in ng_btsocket_rfcomm_pcb_listener()
3410 pcb1 = pcb; in ng_btsocket_rfcomm_pcb_listener()
3415 return ((pcb != NULL)? pcb : pcb1); in ng_btsocket_rfcomm_pcb_listener()
3429 ng_btsocket_rfcomm_timeout(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_timeout() argument
3431 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_timeout()
3433 if (!(pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO)) { in ng_btsocket_rfcomm_timeout()
3434 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_TIMO; in ng_btsocket_rfcomm_timeout()
3435 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT; in ng_btsocket_rfcomm_timeout()
3436 callout_reset(&pcb->timo, ng_btsocket_rfcomm_timo * hz, in ng_btsocket_rfcomm_timeout()
3437 ng_btsocket_rfcomm_process_timeout, pcb); in ng_btsocket_rfcomm_timeout()
3447 ng_btsocket_rfcomm_untimeout(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_untimeout() argument
3449 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_untimeout()
3451 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) { in ng_btsocket_rfcomm_untimeout()
3452 callout_stop(&pcb->timo); in ng_btsocket_rfcomm_untimeout()
3453 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_TIMO; in ng_btsocket_rfcomm_untimeout()
3454 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT; in ng_btsocket_rfcomm_untimeout()
3466 ng_btsocket_rfcomm_pcb_p pcb = (ng_btsocket_rfcomm_pcb_p) xpcb; in ng_btsocket_rfcomm_process_timeout() local
3468 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_process_timeout()
3472 __func__, pcb->so, pcb->dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_process_timeout()
3474 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_TIMO; in ng_btsocket_rfcomm_process_timeout()
3475 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT; in ng_btsocket_rfcomm_process_timeout()
3477 switch (pcb->state) { in ng_btsocket_rfcomm_process_timeout()
3480 pcb->state = NG_BTSOCKET_RFCOMM_DLC_DISCONNECTING; in ng_btsocket_rfcomm_process_timeout()
3490 __func__, pcb->dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_process_timeout()