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);
394 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_attach() local
407 if (pcb != NULL) in ng_btsocket_rfcomm_attach()
419 pcb = malloc(sizeof(*pcb), in ng_btsocket_rfcomm_attach()
421 if (pcb == NULL) in ng_btsocket_rfcomm_attach()
425 so->so_pcb = (caddr_t) pcb; in ng_btsocket_rfcomm_attach()
426 pcb->so = so; in ng_btsocket_rfcomm_attach()
429 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CLOSED; in ng_btsocket_rfcomm_attach()
430 pcb->flags = NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_attach()
432 pcb->lmodem = in ng_btsocket_rfcomm_attach()
433 pcb->rmodem = (RFCOMM_MODEM_RTC | RFCOMM_MODEM_RTR | RFCOMM_MODEM_DV); in ng_btsocket_rfcomm_attach()
435 pcb->mtu = RFCOMM_DEFAULT_MTU; in ng_btsocket_rfcomm_attach()
436 pcb->tx_cred = 0; in ng_btsocket_rfcomm_attach()
437 pcb->rx_cred = RFCOMM_DEFAULT_CREDITS; in ng_btsocket_rfcomm_attach()
439 mtx_init(&pcb->pcb_mtx, "btsocks_rfcomm_pcb_mtx", NULL, MTX_DEF); in ng_btsocket_rfcomm_attach()
440 callout_init_mtx(&pcb->timo, &pcb->pcb_mtx, 0); in ng_btsocket_rfcomm_attach()
444 LIST_INSERT_HEAD(&ng_btsocket_rfcomm_sockets, pcb, next); in ng_btsocket_rfcomm_attach()
458 ng_btsocket_rfcomm_pcb_t *pcb = so2rfcomm_pcb(so), *pcb1; in ng_btsocket_rfcomm_bind() local
461 if (pcb == NULL) in ng_btsocket_rfcomm_bind()
474 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_bind()
484 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_bind()
493 bcopy(&sa->rfcomm_bdaddr, &pcb->src, sizeof(pcb->src)); in ng_btsocket_rfcomm_bind()
494 pcb->channel = sa->rfcomm_channel; in ng_btsocket_rfcomm_bind()
496 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_bind()
509 ng_btsocket_rfcomm_pcb_t *pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_connect() local
515 if (pcb == NULL) in ng_btsocket_rfcomm_connect()
546 s = ng_btsocket_rfcomm_session_by_addr(&pcb->src, &sa->rfcomm_bdaddr); in ng_btsocket_rfcomm_connect()
560 &pcb->src, &sa->rfcomm_bdaddr, td); in ng_btsocket_rfcomm_connect()
575 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect()
580 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect()
600 bcopy(&sa->rfcomm_bdaddr, &pcb->dst, sizeof(pcb->dst)); in ng_btsocket_rfcomm_connect()
601 pcb->channel = sa->rfcomm_channel; in ng_btsocket_rfcomm_connect()
602 pcb->dlci = dlci; in ng_btsocket_rfcomm_connect()
604 LIST_INSERT_HEAD(&s->dlcs, pcb, session_next); in ng_btsocket_rfcomm_connect()
605 pcb->session = s; in ng_btsocket_rfcomm_connect()
607 ng_btsocket_rfcomm_timeout(pcb); in ng_btsocket_rfcomm_connect()
608 soisconnecting(pcb->so); in ng_btsocket_rfcomm_connect()
611 pcb->mtu = s->mtu; in ng_btsocket_rfcomm_connect()
612 bcopy(&so2l2cap_pcb(s->l2so)->src, &pcb->src, in ng_btsocket_rfcomm_connect()
613 sizeof(pcb->src)); in ng_btsocket_rfcomm_connect()
615 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONFIGURING; in ng_btsocket_rfcomm_connect()
617 error = ng_btsocket_rfcomm_send_pn(pcb); in ng_btsocket_rfcomm_connect()
621 pcb->state = NG_BTSOCKET_RFCOMM_DLC_W4_CONNECT; in ng_btsocket_rfcomm_connect()
629 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect()
655 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_ctloutput() local
659 if (pcb == NULL) in ng_btsocket_rfcomm_ctloutput()
664 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_ctloutput()
670 error = sooptcopyout(sopt, &pcb->mtu, sizeof(pcb->mtu)); in ng_btsocket_rfcomm_ctloutput()
674 fcinfo.lmodem = pcb->lmodem; in ng_btsocket_rfcomm_ctloutput()
675 fcinfo.rmodem = pcb->rmodem; in ng_btsocket_rfcomm_ctloutput()
676 fcinfo.tx_cred = pcb->tx_cred; in ng_btsocket_rfcomm_ctloutput()
677 fcinfo.rx_cred = pcb->rx_cred; in ng_btsocket_rfcomm_ctloutput()
678 fcinfo.cfc = (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC)? in ng_btsocket_rfcomm_ctloutput()
704 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_ctloutput()
716 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_detach() local
718 KASSERT(pcb != NULL, ("ng_btsocket_rfcomm_detach: pcb == NULL")); in ng_btsocket_rfcomm_detach()
720 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_detach()
722 switch (pcb->state) { in ng_btsocket_rfcomm_detach()
728 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) in ng_btsocket_rfcomm_detach()
729 ng_btsocket_rfcomm_untimeout(pcb); in ng_btsocket_rfcomm_detach()
731 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_W4_CONNECT) in ng_btsocket_rfcomm_detach()
732 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_DETACHED; in ng_btsocket_rfcomm_detach()
734 pcb->state = NG_BTSOCKET_RFCOMM_DLC_DISCONNECTING; in ng_btsocket_rfcomm_detach()
744 while (pcb->state != NG_BTSOCKET_RFCOMM_DLC_CLOSED) in ng_btsocket_rfcomm_detach()
745 msleep(&pcb->state, &pcb->pcb_mtx, PZERO, "rf_det", 0); in ng_btsocket_rfcomm_detach()
747 if (pcb->session != NULL) in ng_btsocket_rfcomm_detach()
749 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) in ng_btsocket_rfcomm_detach()
751 __func__, pcb->flags); in ng_btsocket_rfcomm_detach()
754 LIST_REMOVE(pcb, next); in ng_btsocket_rfcomm_detach()
757 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_detach()
759 mtx_destroy(&pcb->pcb_mtx); in ng_btsocket_rfcomm_detach()
760 bzero(pcb, sizeof(*pcb)); in ng_btsocket_rfcomm_detach()
761 free(pcb, M_NETGRAPH_BTSOCKET_RFCOMM); in ng_btsocket_rfcomm_detach()
774 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_disconnect() local
776 if (pcb == NULL) in ng_btsocket_rfcomm_disconnect()
779 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_disconnect()
781 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_DISCONNECTING) { in ng_btsocket_rfcomm_disconnect()
782 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_disconnect()
787 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) in ng_btsocket_rfcomm_disconnect()
788 ng_btsocket_rfcomm_untimeout(pcb); in ng_btsocket_rfcomm_disconnect()
790 switch (pcb->state) { in ng_btsocket_rfcomm_disconnect()
800 pcb->state = NG_BTSOCKET_RFCOMM_DLC_DISCONNECTING; in ng_btsocket_rfcomm_disconnect()
812 __func__, pcb->state, pcb->flags); in ng_btsocket_rfcomm_disconnect()
816 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_disconnect()
828 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so), pcb1; in ng_btsocket_rfcomm_listen() local
833 if (pcb == NULL) in ng_btsocket_rfcomm_listen()
835 if (pcb->channel > 30) in ng_btsocket_rfcomm_listen()
840 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_listen()
842 if (pcb->channel == 0) { in ng_btsocket_rfcomm_listen()
847 bcmp(&pcb1->src, &pcb->src, sizeof(pcb->src)) == 0) in ng_btsocket_rfcomm_listen()
850 for (pcb->channel = 30; pcb->channel > 0; pcb->channel --) in ng_btsocket_rfcomm_listen()
851 if (!(usedchannels & (1 << (pcb->channel - 1)))) in ng_btsocket_rfcomm_listen()
854 if (pcb->channel == 0) { in ng_btsocket_rfcomm_listen()
856 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_listen()
864 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_listen()
935 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_peeraddr() local
938 if (pcb == NULL) in ng_btsocket_rfcomm_peeraddr()
941 bcopy(&pcb->dst, &sa.rfcomm_bdaddr, sizeof(sa.rfcomm_bdaddr)); in ng_btsocket_rfcomm_peeraddr()
942 sa.rfcomm_channel = pcb->channel; in ng_btsocket_rfcomm_peeraddr()
959 ng_btsocket_rfcomm_pcb_t *pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_send() local
963 if (pcb == NULL || m == NULL || control != NULL) { in ng_btsocket_rfcomm_send()
968 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_send()
971 if (pcb->state != NG_BTSOCKET_RFCOMM_DLC_CONNECTED) { in ng_btsocket_rfcomm_send()
972 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_send()
978 sbappend(&pcb->so->so_snd, m, flags); in ng_btsocket_rfcomm_send()
981 if (!(pcb->flags & NG_BTSOCKET_RFCOMM_DLC_SENDING)) { in ng_btsocket_rfcomm_send()
982 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_SENDING; in ng_btsocket_rfcomm_send()
986 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_send()
1001 ng_btsocket_rfcomm_pcb_p pcb = so2rfcomm_pcb(so); in ng_btsocket_rfcomm_sockaddr() local
1004 if (pcb == NULL) in ng_btsocket_rfcomm_sockaddr()
1007 bcopy(&pcb->src, &sa.rfcomm_bdaddr, sizeof(sa.rfcomm_bdaddr)); in ng_btsocket_rfcomm_sockaddr()
1008 sa.rfcomm_channel = pcb->channel; in ng_btsocket_rfcomm_sockaddr()
1153 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb1 = NULL; in ng_btsocket_rfcomm_connect_ind() local
1165 pcb = ng_btsocket_rfcomm_pcb_listener(&l2pcb->src, channel); in ng_btsocket_rfcomm_connect_ind()
1166 if (pcb == NULL) in ng_btsocket_rfcomm_connect_ind()
1175 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect_ind()
1177 CURVNET_SET(pcb->so->so_vnet); in ng_btsocket_rfcomm_connect_ind()
1178 so1 = sonewconn(pcb->so, 0); in ng_btsocket_rfcomm_connect_ind()
1181 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect_ind()
1217 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb_next = NULL; in ng_btsocket_rfcomm_connect_cfm() local
1230 for (pcb = LIST_FIRST(&s->dlcs); pcb != NULL; ) { in ng_btsocket_rfcomm_connect_cfm()
1231 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect_cfm()
1232 pcb_next = LIST_NEXT(pcb, session_next); in ng_btsocket_rfcomm_connect_cfm()
1234 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_W4_CONNECT) { in ng_btsocket_rfcomm_connect_cfm()
1235 pcb->mtu = s->mtu; in ng_btsocket_rfcomm_connect_cfm()
1236 bcopy(&so2l2cap_pcb(s->l2so)->src, &pcb->src, in ng_btsocket_rfcomm_connect_cfm()
1237 sizeof(pcb->src)); in ng_btsocket_rfcomm_connect_cfm()
1239 error = ng_btsocket_rfcomm_send_pn(pcb); in ng_btsocket_rfcomm_connect_cfm()
1241 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONFIGURING; in ng_btsocket_rfcomm_connect_cfm()
1243 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_connect_cfm()
1246 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_connect_cfm()
1247 pcb = pcb_next; in ng_btsocket_rfcomm_connect_cfm()
1660 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb_next = NULL; in ng_btsocket_rfcomm_session_clean() local
1670 for (pcb = LIST_FIRST(&s->dlcs); pcb != NULL; ) { in ng_btsocket_rfcomm_session_clean()
1671 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_session_clean()
1672 pcb_next = LIST_NEXT(pcb, session_next); in ng_btsocket_rfcomm_session_clean()
1676 __func__, pcb->dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_session_clean()
1678 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_CONNECTED) in ng_btsocket_rfcomm_session_clean()
1683 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_session_clean()
1685 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_session_clean()
1686 pcb = pcb_next; in ng_btsocket_rfcomm_session_clean()
1697 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb_next = NULL; in ng_btsocket_rfcomm_session_process_pcb() local
1707 for (pcb = LIST_FIRST(&s->dlcs); pcb != NULL; ) { in ng_btsocket_rfcomm_session_process_pcb()
1708 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_session_process_pcb()
1709 pcb_next = LIST_NEXT(pcb, session_next); in ng_btsocket_rfcomm_session_process_pcb()
1711 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()
2370 __func__, dlci, pcb->state, pcb->flags, in ng_btsocket_rfcomm_receive_uih()
2371 m0->m_pkthdr.len, sbspace(&pcb->so->so_rcv)); in ng_btsocket_rfcomm_receive_uih()
2376 sbappend(&pcb->so->so_rcv, m0, 0); in ng_btsocket_rfcomm_receive_uih()
2379 sorwakeup(pcb->so); in ng_btsocket_rfcomm_receive_uih()
2383 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_uih()
2583 ng_btsocket_rfcomm_pcb_t *pcb = NULL; in ng_btsocket_rfcomm_receive_msc() local
2596 pcb = ng_btsocket_rfcomm_pcb_by_dlci(s, RFCOMM_DLCI(msc->address)); in ng_btsocket_rfcomm_receive_msc()
2597 if (pcb == NULL) { in ng_btsocket_rfcomm_receive_msc()
2606 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_msc()
2608 if (pcb->state != NG_BTSOCKET_RFCOMM_DLC_CONNECTING && in ng_btsocket_rfcomm_receive_msc()
2609 pcb->state != NG_BTSOCKET_RFCOMM_DLC_CONNECTED) { in ng_btsocket_rfcomm_receive_msc()
2613 pcb->state); in ng_btsocket_rfcomm_receive_msc()
2615 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_msc()
2621 pcb->rmodem = msc->modem; /* Update remote port signals */ in ng_btsocket_rfcomm_receive_msc()
2629 if (!(pcb->rmodem & RFCOMM_MODEM_FC) && in ng_btsocket_rfcomm_receive_msc()
2630 !(pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC)) in ng_btsocket_rfcomm_receive_msc()
2631 ng_btsocket_rfcomm_pcb_send(pcb, ALOT); in ng_btsocket_rfcomm_receive_msc()
2634 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_msc()
2799 ng_btsocket_rfcomm_pcb_t *pcb = NULL; in ng_btsocket_rfcomm_receive_pn() local
2821 pcb = ng_btsocket_rfcomm_pcb_by_dlci(s, pn->dlci); in ng_btsocket_rfcomm_receive_pn()
2822 if (pcb != NULL) { in ng_btsocket_rfcomm_receive_pn()
2823 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_pn()
2827 ng_btsocket_rfcomm_set_pn(pcb, 1, pn->flow_control, in ng_btsocket_rfcomm_receive_pn()
2830 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) { in ng_btsocket_rfcomm_receive_pn()
2844 if (pcb->state == NG_BTSOCKET_RFCOMM_DLC_CONFIGURING) { in ng_btsocket_rfcomm_receive_pn()
2845 ng_btsocket_rfcomm_set_pn(pcb, 0, in ng_btsocket_rfcomm_receive_pn()
2848 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONNECTING; in ng_btsocket_rfcomm_receive_pn()
2854 __func__, pn->dlci, pcb->state); in ng_btsocket_rfcomm_receive_pn()
2859 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_pn()
2862 pcb = ng_btsocket_rfcomm_connect_ind(s, in ng_btsocket_rfcomm_receive_pn()
2864 if (pcb != NULL) { in ng_btsocket_rfcomm_receive_pn()
2865 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_pn()
2867 pcb->dlci = pn->dlci; in ng_btsocket_rfcomm_receive_pn()
2869 ng_btsocket_rfcomm_set_pn(pcb, 1, pn->flow_control, in ng_btsocket_rfcomm_receive_pn()
2872 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) { in ng_btsocket_rfcomm_receive_pn()
2886 ng_btsocket_rfcomm_timeout(pcb); in ng_btsocket_rfcomm_receive_pn()
2887 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CONNECTING; in ng_btsocket_rfcomm_receive_pn()
2888 soisconnecting(pcb->so); in ng_btsocket_rfcomm_receive_pn()
2890 ng_btsocket_rfcomm_pcb_kill(pcb, error); in ng_btsocket_rfcomm_receive_pn()
2892 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_rfcomm_receive_pn()
2928 ng_btsocket_rfcomm_set_pn(ng_btsocket_rfcomm_pcb_p pcb, u_int8_t cr, in ng_btsocket_rfcomm_set_pn() argument
2931 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_set_pn()
2933 pcb->mtu = le16toh(mtu); in ng_btsocket_rfcomm_set_pn()
2937 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_set_pn()
2938 pcb->tx_cred = credits; in ng_btsocket_rfcomm_set_pn()
2940 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_set_pn()
2941 pcb->tx_cred = 0; in ng_btsocket_rfcomm_set_pn()
2945 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_set_pn()
2946 pcb->tx_cred = credits; in ng_btsocket_rfcomm_set_pn()
2948 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_CFC; in ng_btsocket_rfcomm_set_pn()
2949 pcb->tx_cred = 0; in ng_btsocket_rfcomm_set_pn()
2955 __func__, cr, pcb->dlci, pcb->state, pcb->flags, pcb->mtu, in ng_btsocket_rfcomm_set_pn()
2956 pcb->rx_cred, pcb->tx_cred); in ng_btsocket_rfcomm_set_pn()
3090 ng_btsocket_rfcomm_send_msc(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_send_msc() argument
3096 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_msc()
3097 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_msc()
3111 msc->address = RFCOMM_MKADDRESS(1, pcb->dlci); in ng_btsocket_rfcomm_send_msc()
3112 msc->modem = pcb->lmodem; in ng_btsocket_rfcomm_send_msc()
3116 __func__, pcb->dlci, pcb->state, pcb->flags, msc->address, in ng_btsocket_rfcomm_send_msc()
3119 return (ng_btsocket_rfcomm_send_uih(pcb->session, in ng_btsocket_rfcomm_send_msc()
3120 RFCOMM_MKADDRESS(INITIATOR(pcb->session), 0), 0, 0, m)); in ng_btsocket_rfcomm_send_msc()
3128 ng_btsocket_rfcomm_send_pn(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_send_pn() argument
3134 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_pn()
3135 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_pn()
3149 pn->dlci = pcb->dlci; in ng_btsocket_rfcomm_send_pn()
3156 pn->priority = (pcb->dlci < 56)? (((pcb->dlci >> 3) << 3) + 7) : 61; in ng_btsocket_rfcomm_send_pn()
3158 pn->mtu = htole16(pcb->mtu); in ng_btsocket_rfcomm_send_pn()
3161 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) { in ng_btsocket_rfcomm_send_pn()
3163 pn->credits = pcb->rx_cred; in ng_btsocket_rfcomm_send_pn()
3171 "credits=%d\n", __func__, pcb->dlci, pcb->state, pcb->flags, pcb->mtu, in ng_btsocket_rfcomm_send_pn()
3174 return (ng_btsocket_rfcomm_send_uih(pcb->session, in ng_btsocket_rfcomm_send_pn()
3175 RFCOMM_MKADDRESS(INITIATOR(pcb->session), 0), 0, 0, m)); in ng_btsocket_rfcomm_send_pn()
3183 ng_btsocket_rfcomm_send_credits(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_send_credits() argument
3188 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_credits()
3189 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_send_credits()
3194 __func__, pcb->dlci, pcb->state, pcb->flags, pcb->mtu, in ng_btsocket_rfcomm_send_credits()
3195 sbspace(&pcb->so->so_rcv), pcb->tx_cred, pcb->rx_cred); in ng_btsocket_rfcomm_send_credits()
3197 credits = sbspace(&pcb->so->so_rcv) / pcb->mtu; in ng_btsocket_rfcomm_send_credits()
3199 if (pcb->rx_cred + credits > RFCOMM_MAX_CREDITS) in ng_btsocket_rfcomm_send_credits()
3200 credits = RFCOMM_MAX_CREDITS - pcb->rx_cred; in ng_btsocket_rfcomm_send_credits()
3203 pcb->session, in ng_btsocket_rfcomm_send_credits()
3204 RFCOMM_MKADDRESS(INITIATOR(pcb->session), in ng_btsocket_rfcomm_send_credits()
3205 pcb->dlci), 1, credits, NULL); in ng_btsocket_rfcomm_send_credits()
3207 pcb->rx_cred += credits; in ng_btsocket_rfcomm_send_credits()
3211 "rx_cred=%d, tx_cred=%d\n", __func__, credits, pcb->dlci, pcb->state, in ng_btsocket_rfcomm_send_credits()
3212 pcb->flags, pcb->rx_cred, pcb->tx_cred); in ng_btsocket_rfcomm_send_credits()
3217 __func__, error, pcb->dlci, pcb->state, in ng_btsocket_rfcomm_send_credits()
3218 pcb->flags, pcb->mtu, sbspace(&pcb->so->so_rcv), in ng_btsocket_rfcomm_send_credits()
3219 pcb->tx_cred, pcb->rx_cred); in ng_btsocket_rfcomm_send_credits()
3237 ng_btsocket_rfcomm_pcb_send(ng_btsocket_rfcomm_pcb_p pcb, int limit) in ng_btsocket_rfcomm_pcb_send() argument
3242 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_pcb_send()
3243 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_pcb_send()
3245 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) in ng_btsocket_rfcomm_pcb_send()
3246 limit = min(limit, pcb->tx_cred); in ng_btsocket_rfcomm_pcb_send()
3247 else if (!(pcb->rmodem & RFCOMM_MODEM_FC)) in ng_btsocket_rfcomm_pcb_send()
3256 __func__, pcb->dlci, pcb->flags, pcb->rmodem, in ng_btsocket_rfcomm_pcb_send()
3257 pcb->tx_cred); in ng_btsocket_rfcomm_pcb_send()
3263 length = min(pcb->mtu, sbavail(&pcb->so->so_snd)); in ng_btsocket_rfcomm_pcb_send()
3268 m = ng_btsocket_rfcomm_prepare_packet(&pcb->so->so_snd, length); in ng_btsocket_rfcomm_pcb_send()
3274 sbdrop(&pcb->so->so_snd, length); in ng_btsocket_rfcomm_pcb_send()
3276 error = ng_btsocket_rfcomm_send_uih(pcb->session, in ng_btsocket_rfcomm_pcb_send()
3277 RFCOMM_MKADDRESS(INITIATOR(pcb->session), in ng_btsocket_rfcomm_pcb_send()
3278 pcb->dlci), 0, 0, m); in ng_btsocket_rfcomm_pcb_send()
3283 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_CFC) in ng_btsocket_rfcomm_pcb_send()
3284 pcb->tx_cred -= sent; in ng_btsocket_rfcomm_pcb_send()
3287 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_SENDING; in ng_btsocket_rfcomm_pcb_send()
3288 sowwakeup(pcb->so); in ng_btsocket_rfcomm_pcb_send()
3301 ng_btsocket_rfcomm_pcb_kill(ng_btsocket_rfcomm_pcb_p pcb, int error) in ng_btsocket_rfcomm_pcb_kill() argument
3303 ng_btsocket_rfcomm_session_p s = pcb->session; in ng_btsocket_rfcomm_pcb_kill()
3307 __func__, pcb->so, pcb->dlci, pcb->state, pcb->flags, error); in ng_btsocket_rfcomm_pcb_kill()
3309 if (pcb->session == NULL) in ng_btsocket_rfcomm_pcb_kill()
3311 __func__, pcb, pcb->state, pcb->flags); in ng_btsocket_rfcomm_pcb_kill()
3313 mtx_assert(&pcb->session->session_mtx, MA_OWNED); in ng_btsocket_rfcomm_pcb_kill()
3314 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_pcb_kill()
3316 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) in ng_btsocket_rfcomm_pcb_kill()
3317 ng_btsocket_rfcomm_untimeout(pcb); in ng_btsocket_rfcomm_pcb_kill()
3320 LIST_REMOVE(pcb, session_next); in ng_btsocket_rfcomm_pcb_kill()
3321 pcb->session = NULL; in ng_btsocket_rfcomm_pcb_kill()
3324 pcb->state = NG_BTSOCKET_RFCOMM_DLC_CLOSED; in ng_btsocket_rfcomm_pcb_kill()
3325 pcb->so->so_error = error; in ng_btsocket_rfcomm_pcb_kill()
3326 soisdisconnected(pcb->so); in ng_btsocket_rfcomm_pcb_kill()
3327 wakeup(&pcb->state); in ng_btsocket_rfcomm_pcb_kill()
3378 ng_btsocket_rfcomm_pcb_p pcb = NULL; in ng_btsocket_rfcomm_pcb_by_dlci() local
3382 LIST_FOREACH(pcb, &s->dlcs, session_next) in ng_btsocket_rfcomm_pcb_by_dlci()
3383 if (pcb->dlci == dlci) in ng_btsocket_rfcomm_pcb_by_dlci()
3386 return (pcb); in ng_btsocket_rfcomm_pcb_by_dlci()
3396 ng_btsocket_rfcomm_pcb_p pcb = NULL, pcb1 = NULL; in ng_btsocket_rfcomm_pcb_listener() local
3400 LIST_FOREACH(pcb, &ng_btsocket_rfcomm_sockets, next) { in ng_btsocket_rfcomm_pcb_listener()
3401 if (pcb->channel != channel || in ng_btsocket_rfcomm_pcb_listener()
3402 !(pcb->so->so_options & SO_ACCEPTCONN)) in ng_btsocket_rfcomm_pcb_listener()
3405 if (bcmp(&pcb->src, src, sizeof(*src)) == 0) in ng_btsocket_rfcomm_pcb_listener()
3408 if (bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(bdaddr_t)) == 0) in ng_btsocket_rfcomm_pcb_listener()
3409 pcb1 = pcb; in ng_btsocket_rfcomm_pcb_listener()
3414 return ((pcb != NULL)? pcb : pcb1); in ng_btsocket_rfcomm_pcb_listener()
3428 ng_btsocket_rfcomm_timeout(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_timeout() argument
3430 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_timeout()
3432 if (!(pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO)) { in ng_btsocket_rfcomm_timeout()
3433 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_TIMO; in ng_btsocket_rfcomm_timeout()
3434 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT; in ng_btsocket_rfcomm_timeout()
3435 callout_reset(&pcb->timo, ng_btsocket_rfcomm_timo * hz, in ng_btsocket_rfcomm_timeout()
3436 ng_btsocket_rfcomm_process_timeout, pcb); in ng_btsocket_rfcomm_timeout()
3446 ng_btsocket_rfcomm_untimeout(ng_btsocket_rfcomm_pcb_p pcb) in ng_btsocket_rfcomm_untimeout() argument
3448 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_untimeout()
3450 if (pcb->flags & NG_BTSOCKET_RFCOMM_DLC_TIMO) { in ng_btsocket_rfcomm_untimeout()
3451 callout_stop(&pcb->timo); in ng_btsocket_rfcomm_untimeout()
3452 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_TIMO; in ng_btsocket_rfcomm_untimeout()
3453 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT; in ng_btsocket_rfcomm_untimeout()
3465 ng_btsocket_rfcomm_pcb_p pcb = (ng_btsocket_rfcomm_pcb_p) xpcb; in ng_btsocket_rfcomm_process_timeout() local
3467 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_rfcomm_process_timeout()
3471 __func__, pcb->so, pcb->dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_process_timeout()
3473 pcb->flags &= ~NG_BTSOCKET_RFCOMM_DLC_TIMO; in ng_btsocket_rfcomm_process_timeout()
3474 pcb->flags |= NG_BTSOCKET_RFCOMM_DLC_TIMEDOUT; in ng_btsocket_rfcomm_process_timeout()
3476 switch (pcb->state) { in ng_btsocket_rfcomm_process_timeout()
3479 pcb->state = NG_BTSOCKET_RFCOMM_DLC_DISCONNECTING; in ng_btsocket_rfcomm_process_timeout()
3489 __func__, pcb->dlci, pcb->state, pcb->flags); in ng_btsocket_rfcomm_process_timeout()