• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/sys/netgraph/bluetooth/socket/

Lines Matching refs:pcb

381 	ng_btsocket_sco_pcb_t	*pcb = NULL;
392 pcb = ng_btsocket_sco_pcb_by_addrs(&rt->src, &ep->bdaddr);
393 if (pcb == NULL) {
398 /* pcb is locked */
404 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3],
405 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0],
406 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3],
407 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0],
408 ep->status, ep->con_handle, pcb->state);
410 if (pcb->state != NG_BTSOCKET_SCO_CONNECTING) {
411 mtx_unlock(&pcb->pcb_mtx);
417 ng_btsocket_sco_untimeout(pcb);
425 pcb->con_handle = ep->con_handle;
426 pcb->state = NG_BTSOCKET_SCO_OPEN;
427 soisconnected(pcb->so);
433 pcb->so->so_error = ECONNREFUSED; /* XXX convert status ??? */
434 pcb->state = NG_BTSOCKET_SCO_CLOSED;
435 soisdisconnected(pcb->so);
438 mtx_unlock(&pcb->pcb_mtx);
454 ng_btsocket_sco_pcb_t *pcb = NULL, *pcb1 = NULL;
474 pcb = ng_btsocket_sco_pcb_by_addr(&rt->src);
475 if (pcb != NULL) {
478 /* pcb is locked */
480 CURVNET_SET(pcb->so->so_vnet);
481 so1 = sonewconn(pcb->so, 0);
502 if (bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src)) != 0)
503 bcopy(&pcb->src, &pcb1->src, sizeof(pcb1->src));
532 if (pcb != NULL)
533 mtx_unlock(&pcb->pcb_mtx);
549 ng_btsocket_sco_pcb_t *pcb = NULL;
560 pcb = ng_btsocket_sco_pcb_by_handle(&rt->src, ep->con_handle);
561 if (pcb == NULL) {
571 /* pcb is locked */
577 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3],
578 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0],
579 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3],
580 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0],
581 pcb->con_handle, pcb->state);
583 if (pcb->flags & NG_BTSOCKET_SCO_TIMO)
584 ng_btsocket_sco_untimeout(pcb);
586 pcb->state = NG_BTSOCKET_SCO_CLOSED;
587 soisdisconnected(pcb->so);
589 mtx_unlock(&pcb->pcb_mtx);
600 ng_btsocket_sco_send_lp_con_req(ng_btsocket_sco_pcb_p pcb)
606 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
608 if (pcb->rt == NULL ||
609 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook))
619 bcopy(&pcb->dst, &ep->bdaddr, sizeof(ep->bdaddr));
621 NG_SEND_MSG_HOOK(error, ng_btsocket_sco_node, msg, pcb->rt->hook, 0);
660 ng_btsocket_sco_send_lp_discon_req(ng_btsocket_sco_pcb_p pcb)
666 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
668 if (pcb->rt == NULL ||
669 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook))
678 ep->con_handle = pcb->con_handle;
681 NG_SEND_MSG_HOOK(error, ng_btsocket_sco_node, msg, pcb->rt->hook, 0);
700 ng_btsocket_sco_pcb_t *pcb = NULL;
757 pcb = ng_btsocket_sco_pcb_by_handle(&rt->src, con_handle);
758 if (pcb == NULL) {
763 /* pcb is locked */
765 if (pcb->state != NG_BTSOCKET_SCO_OPEN) {
771 pcb->state);
773 mtx_unlock(&pcb->pcb_mtx);
779 if (m->m_pkthdr.len > sbspace(&pcb->so->so_rcv)) {
787 sbspace(&pcb->so->so_rcv));
789 mtx_unlock(&pcb->pcb_mtx);
795 sbappendrecord(&pcb->so->so_rcv, m);
798 sorwakeup(pcb->so);
800 mtx_unlock(&pcb->pcb_mtx);
862 ng_btsocket_sco_pcb_t *pcb = NULL;
886 pcb = ng_btsocket_sco_pcb_by_handle(&rt->src, ep->con_handle);
887 if (pcb == NULL) {
892 /* pcb is locked */
895 if (pcb->state == NG_BTSOCKET_SCO_OPEN) {
897 ng_btsocket_sco_untimeout(pcb);
901 sbdroprecord(&pcb->so->so_snd);
904 if (sbavail(&pcb->so->so_snd) > 0)
905 if (ng_btsocket_sco_send2(pcb) == 0)
906 ng_btsocket_sco_timeout(pcb);
909 sowwakeup(pcb->so);
912 mtx_unlock(&pcb->pcb_mtx);
1041 ng_btsocket_sco_pcb_p pcb = NULL, pcb_next = NULL;
1050 for(pcb = LIST_FIRST(&ng_btsocket_sco_sockets); pcb != NULL; ) {
1051 mtx_lock(&pcb->pcb_mtx);
1052 pcb_next = LIST_NEXT(pcb, next);
1054 if (pcb->rt != NULL &&
1055 pcb->rt->hook != NULL && NG_HOOK_NOT_VALID(pcb->rt->hook)) {
1056 if (pcb->flags & NG_BTSOCKET_SCO_TIMO)
1057 ng_btsocket_sco_untimeout(pcb);
1059 pcb->rt = NULL;
1060 pcb->so->so_error = ENETDOWN;
1061 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1062 soisdisconnected(pcb->so);
1065 mtx_unlock(&pcb->pcb_mtx);
1066 pcb = pcb_next;
1202 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1217 if (pcb != NULL)
1229 pcb = malloc(sizeof(*pcb),
1231 if (pcb == NULL)
1235 so->so_pcb = (caddr_t) pcb;
1236 pcb->so = so;
1237 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1239 callout_init(&pcb->timo, 1);
1248 mtx_init(&pcb->pcb_mtx, "btsocks_sco_pcb_mtx", NULL,
1275 LIST_INSERT_HEAD(&ng_btsocket_sco_sockets, pcb, next);
1291 ng_btsocket_sco_pcb_t *pcb = NULL;
1313 LIST_FOREACH(pcb, &ng_btsocket_sco_sockets, next) {
1314 mtx_lock(&pcb->pcb_mtx);
1316 if (bcmp(&pcb->src, &sa->sco_bdaddr, sizeof(bdaddr_t)) == 0) {
1317 mtx_unlock(&pcb->pcb_mtx);
1323 mtx_unlock(&pcb->pcb_mtx);
1328 pcb = so2sco_pcb(so);
1329 if (pcb == NULL) {
1334 mtx_lock(&pcb->pcb_mtx);
1335 bcopy(&sa->sco_bdaddr, &pcb->src, sizeof(pcb->src));
1336 mtx_unlock(&pcb->pcb_mtx);
1351 ng_btsocket_sco_pcb_t *pcb = so2sco_pcb(so);
1357 if (pcb == NULL)
1380 mtx_lock(&pcb->pcb_mtx);
1382 if (pcb->state == NG_BTSOCKET_SCO_CONNECTING) {
1383 mtx_unlock(&pcb->pcb_mtx);
1389 if (bcmp(&sa->sco_bdaddr, &pcb->src, sizeof(pcb->src)) == 0) {
1390 mtx_unlock(&pcb->pcb_mtx);
1397 bcopy(&sa->sco_bdaddr, &pcb->dst, sizeof(pcb->dst));
1399 pcb->rt = NULL;
1400 have_src = bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src));
1408 if (bcmp(&pcb->src, &rt->src, sizeof(rt->src)) == 0)
1411 if (bcmp(&pcb->dst, &rt->src, sizeof(rt->src)) != 0)
1417 pcb->rt = rt;
1420 bcopy(&rt->src, &pcb->src, sizeof(pcb->src));
1429 error = ng_btsocket_sco_send_lp_con_req(pcb);
1431 pcb->flags |= NG_BTSOCKET_SCO_CLIENT;
1432 pcb->state = NG_BTSOCKET_SCO_CONNECTING;
1433 soisconnecting(pcb->so);
1435 ng_btsocket_sco_timeout(pcb);
1439 mtx_unlock(&pcb->pcb_mtx);
1463 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1468 if (pcb == NULL)
1474 mtx_lock(&pcb->pcb_mtx);
1478 if (pcb->state != NG_BTSOCKET_SCO_OPEN) {
1485 tmp = pcb->rt->pkt_size;
1490 tmp = pcb->con_handle;
1509 mtx_unlock(&pcb->pcb_mtx);
1521 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1523 KASSERT(pcb != NULL, ("ng_btsocket_sco_detach: pcb == NULL"));
1529 mtx_lock(&pcb->pcb_mtx);
1531 if (pcb->flags & NG_BTSOCKET_SCO_TIMO)
1532 ng_btsocket_sco_untimeout(pcb);
1534 if (pcb->state == NG_BTSOCKET_SCO_OPEN)
1535 ng_btsocket_sco_send_lp_discon_req(pcb);
1537 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1539 LIST_REMOVE(pcb, next);
1541 mtx_unlock(&pcb->pcb_mtx);
1544 mtx_destroy(&pcb->pcb_mtx);
1545 bzero(pcb, sizeof(*pcb));
1546 free(pcb, M_NETGRAPH_BTSOCKET_SCO);
1559 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1561 if (pcb == NULL)
1566 mtx_lock(&pcb->pcb_mtx);
1568 if (pcb->state == NG_BTSOCKET_SCO_DISCONNECTING) {
1569 mtx_unlock(&pcb->pcb_mtx);
1574 if (pcb->flags & NG_BTSOCKET_SCO_TIMO)
1575 ng_btsocket_sco_untimeout(pcb);
1577 if (pcb->state == NG_BTSOCKET_SCO_OPEN) {
1578 ng_btsocket_sco_send_lp_discon_req(pcb);
1580 pcb->state = NG_BTSOCKET_SCO_DISCONNECTING;
1583 ng_btsocket_sco_timeout(pcb);
1585 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1589 mtx_unlock(&pcb->pcb_mtx);
1601 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1604 if (pcb == NULL)
1610 mtx_lock(&pcb->pcb_mtx);
1616 if (bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(bdaddr_t)) == 0) {
1623 mtx_unlock(&pcb->pcb_mtx);
1636 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1639 if (pcb == NULL)
1644 mtx_lock(&pcb->pcb_mtx);
1645 bcopy(&pcb->dst, &sa.sco_bdaddr, sizeof(sa.sco_bdaddr));
1646 mtx_unlock(&pcb->pcb_mtx);
1664 ng_btsocket_sco_pcb_t *pcb = so2sco_pcb(so);
1673 if (pcb == NULL || m == NULL || control != NULL) {
1678 mtx_lock(&pcb->pcb_mtx);
1681 if (pcb->state != NG_BTSOCKET_SCO_OPEN) {
1682 mtx_unlock(&pcb->pcb_mtx);
1688 if (pcb->rt == NULL ||
1689 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) {
1690 mtx_unlock(&pcb->pcb_mtx);
1696 if (m->m_pkthdr.len > pcb->rt->pkt_size) {
1699 __func__, m->m_pkthdr.len, pcb->rt->pkt_size);
1701 mtx_unlock(&pcb->pcb_mtx);
1713 sbappendrecord(&pcb->so->so_snd, m);
1716 if (!(pcb->flags & NG_BTSOCKET_SCO_TIMO)) {
1717 error = ng_btsocket_sco_send2(pcb);
1719 ng_btsocket_sco_timeout(pcb);
1721 sbdroprecord(&pcb->so->so_snd); /* XXX */
1724 mtx_unlock(&pcb->pcb_mtx);
1737 ng_btsocket_sco_send2(ng_btsocket_sco_pcb_p pcb)
1743 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
1745 while (pcb->rt->pending < pcb->rt->num_pkts &&
1746 sbavail(&pcb->so->so_snd) > 0) {
1748 m = m_dup(pcb->so->so_snd.sb_mb, M_NOWAIT);
1768 hdr->con_handle = htole16(NG_HCI_MK_CON_HANDLE(pcb->con_handle, 0, 0));
1772 NG_SEND_DATA_ONLY(error, pcb->rt->hook, m);
1776 pcb->rt->pending ++;
1779 return ((pcb->rt->pending > 0)? 0 : error);
1789 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1792 if (pcb == NULL)
1797 mtx_lock(&pcb->pcb_mtx);
1798 bcopy(&pcb->src, &sa.sco_bdaddr, sizeof(sa.sco_bdaddr));
1799 mtx_unlock(&pcb->pcb_mtx);
1819 * Returns with locked pcb.
1838 return (p); /* return with locked pcb */
1855 * Returns with locked pcb.
1870 return (p); /* return with locked pcb */
1881 * Returns with locked pcb.
1897 return (p); /* return with locked pcb */
1910 ng_btsocket_sco_timeout(ng_btsocket_sco_pcb_p pcb)
1912 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
1914 if (!(pcb->flags & NG_BTSOCKET_SCO_TIMO)) {
1915 pcb->flags |= NG_BTSOCKET_SCO_TIMO;
1916 callout_reset(&pcb->timo, bluetooth_sco_rtx_timeout(),
1917 ng_btsocket_sco_process_timeout, pcb);
1928 ng_btsocket_sco_untimeout(ng_btsocket_sco_pcb_p pcb)
1930 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
1932 if (pcb->flags & NG_BTSOCKET_SCO_TIMO) {
1933 callout_stop(&pcb->timo);
1934 pcb->flags &= ~NG_BTSOCKET_SCO_TIMO;
1947 ng_btsocket_sco_pcb_p pcb = (ng_btsocket_sco_pcb_p) xpcb;
1949 mtx_lock(&pcb->pcb_mtx);
1951 pcb->flags &= ~NG_BTSOCKET_SCO_TIMO;
1952 pcb->so->so_error = ETIMEDOUT;
1954 switch (pcb->state) {
1957 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1958 soisdisconnected(pcb->so);
1963 sbdroprecord(&pcb->so->so_snd);
1964 sowwakeup(pcb->so);
1965 /* XXX FIXME what to do with pcb->rt->pending??? */
1970 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1971 soisdisconnected(pcb->so);
1976 "%s: Invalid socket state=%d\n", __func__, pcb->state);
1980 mtx_unlock(&pcb->pcb_mtx);