Lines Matching refs:pcb

379 	ng_btsocket_sco_pcb_t	*pcb = NULL;
390 pcb = ng_btsocket_sco_pcb_by_addrs(&rt->src, &ep->bdaddr);
391 if (pcb == NULL) {
396 /* pcb is locked */
402 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3],
403 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0],
404 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3],
405 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0],
406 ep->status, ep->con_handle, pcb->state);
408 if (pcb->state != NG_BTSOCKET_SCO_CONNECTING) {
409 mtx_unlock(&pcb->pcb_mtx);
415 ng_btsocket_sco_untimeout(pcb);
423 pcb->con_handle = ep->con_handle;
424 pcb->state = NG_BTSOCKET_SCO_OPEN;
425 soisconnected(pcb->so);
431 pcb->so->so_error = ECONNREFUSED; /* XXX convert status ??? */
432 pcb->state = NG_BTSOCKET_SCO_CLOSED;
433 soisdisconnected(pcb->so);
436 mtx_unlock(&pcb->pcb_mtx);
452 ng_btsocket_sco_pcb_t *pcb = NULL, *pcb1 = NULL;
472 pcb = ng_btsocket_sco_pcb_by_addr(&rt->src);
473 if (pcb != NULL) {
476 /* pcb is locked */
483 if (pcb->so->so_qlen <= pcb->so->so_qlimit) {
484 CURVNET_SET(pcb->so->so_vnet);
485 so1 = sonewconn(pcb->so, 0);
507 if (bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src)) != 0)
508 bcopy(&pcb->src, &pcb1->src, sizeof(pcb1->src));
537 if (pcb != NULL)
538 mtx_unlock(&pcb->pcb_mtx);
554 ng_btsocket_sco_pcb_t *pcb = NULL;
565 pcb = ng_btsocket_sco_pcb_by_handle(&rt->src, ep->con_handle);
566 if (pcb == NULL) {
576 /* pcb is locked */
582 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3],
583 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0],
584 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3],
585 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0],
586 pcb->con_handle, pcb->state);
588 if (pcb->flags & NG_BTSOCKET_SCO_TIMO)
589 ng_btsocket_sco_untimeout(pcb);
591 pcb->state = NG_BTSOCKET_SCO_CLOSED;
592 soisdisconnected(pcb->so);
594 mtx_unlock(&pcb->pcb_mtx);
605 ng_btsocket_sco_send_lp_con_req(ng_btsocket_sco_pcb_p pcb)
611 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
613 if (pcb->rt == NULL ||
614 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook))
624 bcopy(&pcb->dst, &ep->bdaddr, sizeof(ep->bdaddr));
626 NG_SEND_MSG_HOOK(error, ng_btsocket_sco_node, msg, pcb->rt->hook, 0);
665 ng_btsocket_sco_send_lp_discon_req(ng_btsocket_sco_pcb_p pcb)
671 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
673 if (pcb->rt == NULL ||
674 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook))
683 ep->con_handle = pcb->con_handle;
686 NG_SEND_MSG_HOOK(error, ng_btsocket_sco_node, msg, pcb->rt->hook, 0);
705 ng_btsocket_sco_pcb_t *pcb = NULL;
762 pcb = ng_btsocket_sco_pcb_by_handle(&rt->src, con_handle);
763 if (pcb == NULL) {
768 /* pcb is locked */
770 if (pcb->state != NG_BTSOCKET_SCO_OPEN) {
776 pcb->state);
778 mtx_unlock(&pcb->pcb_mtx);
784 if (m->m_pkthdr.len > sbspace(&pcb->so->so_rcv)) {
792 sbspace(&pcb->so->so_rcv));
794 mtx_unlock(&pcb->pcb_mtx);
800 sbappendrecord(&pcb->so->so_rcv, m);
803 sorwakeup(pcb->so);
805 mtx_unlock(&pcb->pcb_mtx);
867 ng_btsocket_sco_pcb_t *pcb = NULL;
891 pcb = ng_btsocket_sco_pcb_by_handle(&rt->src, ep->con_handle);
892 if (pcb == NULL) {
897 /* pcb is locked */
900 if (pcb->state == NG_BTSOCKET_SCO_OPEN) {
902 ng_btsocket_sco_untimeout(pcb);
906 sbdroprecord(&pcb->so->so_snd);
909 if (sbavail(&pcb->so->so_snd) > 0)
910 if (ng_btsocket_sco_send2(pcb) == 0)
911 ng_btsocket_sco_timeout(pcb);
914 sowwakeup(pcb->so);
917 mtx_unlock(&pcb->pcb_mtx);
1046 ng_btsocket_sco_pcb_p pcb = NULL, pcb_next = NULL;
1055 for(pcb = LIST_FIRST(&ng_btsocket_sco_sockets); pcb != NULL; ) {
1056 mtx_lock(&pcb->pcb_mtx);
1057 pcb_next = LIST_NEXT(pcb, next);
1059 if (pcb->rt != NULL &&
1060 pcb->rt->hook != NULL && NG_HOOK_NOT_VALID(pcb->rt->hook)) {
1061 if (pcb->flags & NG_BTSOCKET_SCO_TIMO)
1062 ng_btsocket_sco_untimeout(pcb);
1064 pcb->rt = NULL;
1065 pcb->so->so_error = ENETDOWN;
1066 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1067 soisdisconnected(pcb->so);
1070 mtx_unlock(&pcb->pcb_mtx);
1071 pcb = pcb_next;
1207 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1222 if (pcb != NULL)
1234 pcb = malloc(sizeof(*pcb),
1236 if (pcb == NULL)
1240 so->so_pcb = (caddr_t) pcb;
1241 pcb->so = so;
1242 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1244 callout_init(&pcb->timo, 1);
1253 mtx_init(&pcb->pcb_mtx, "btsocks_sco_pcb_mtx", NULL,
1280 LIST_INSERT_HEAD(&ng_btsocket_sco_sockets, pcb, next);
1296 ng_btsocket_sco_pcb_t *pcb = NULL;
1318 LIST_FOREACH(pcb, &ng_btsocket_sco_sockets, next) {
1319 mtx_lock(&pcb->pcb_mtx);
1321 if (bcmp(&pcb->src, &sa->sco_bdaddr, sizeof(bdaddr_t)) == 0) {
1322 mtx_unlock(&pcb->pcb_mtx);
1328 mtx_unlock(&pcb->pcb_mtx);
1333 pcb = so2sco_pcb(so);
1334 if (pcb == NULL) {
1339 mtx_lock(&pcb->pcb_mtx);
1340 bcopy(&sa->sco_bdaddr, &pcb->src, sizeof(pcb->src));
1341 mtx_unlock(&pcb->pcb_mtx);
1356 ng_btsocket_sco_pcb_t *pcb = so2sco_pcb(so);
1362 if (pcb == NULL)
1385 mtx_lock(&pcb->pcb_mtx);
1387 if (pcb->state == NG_BTSOCKET_SCO_CONNECTING) {
1388 mtx_unlock(&pcb->pcb_mtx);
1394 if (bcmp(&sa->sco_bdaddr, &pcb->src, sizeof(pcb->src)) == 0) {
1395 mtx_unlock(&pcb->pcb_mtx);
1402 bcopy(&sa->sco_bdaddr, &pcb->dst, sizeof(pcb->dst));
1404 pcb->rt = NULL;
1405 have_src = bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src));
1413 if (bcmp(&pcb->src, &rt->src, sizeof(rt->src)) == 0)
1416 if (bcmp(&pcb->dst, &rt->src, sizeof(rt->src)) != 0)
1422 pcb->rt = rt;
1425 bcopy(&rt->src, &pcb->src, sizeof(pcb->src));
1434 error = ng_btsocket_sco_send_lp_con_req(pcb);
1436 pcb->flags |= NG_BTSOCKET_SCO_CLIENT;
1437 pcb->state = NG_BTSOCKET_SCO_CONNECTING;
1438 soisconnecting(pcb->so);
1440 ng_btsocket_sco_timeout(pcb);
1444 mtx_unlock(&pcb->pcb_mtx);
1468 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1473 if (pcb == NULL)
1479 mtx_lock(&pcb->pcb_mtx);
1483 if (pcb->state != NG_BTSOCKET_SCO_OPEN) {
1490 tmp = pcb->rt->pkt_size;
1495 tmp = pcb->con_handle;
1514 mtx_unlock(&pcb->pcb_mtx);
1526 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1528 KASSERT(pcb != NULL, ("ng_btsocket_sco_detach: pcb == NULL"));
1534 mtx_lock(&pcb->pcb_mtx);
1536 if (pcb->flags & NG_BTSOCKET_SCO_TIMO)
1537 ng_btsocket_sco_untimeout(pcb);
1539 if (pcb->state == NG_BTSOCKET_SCO_OPEN)
1540 ng_btsocket_sco_send_lp_discon_req(pcb);
1542 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1544 LIST_REMOVE(pcb, next);
1546 mtx_unlock(&pcb->pcb_mtx);
1549 mtx_destroy(&pcb->pcb_mtx);
1550 bzero(pcb, sizeof(*pcb));
1551 free(pcb, M_NETGRAPH_BTSOCKET_SCO);
1564 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1566 if (pcb == NULL)
1571 mtx_lock(&pcb->pcb_mtx);
1573 if (pcb->state == NG_BTSOCKET_SCO_DISCONNECTING) {
1574 mtx_unlock(&pcb->pcb_mtx);
1579 if (pcb->flags & NG_BTSOCKET_SCO_TIMO)
1580 ng_btsocket_sco_untimeout(pcb);
1582 if (pcb->state == NG_BTSOCKET_SCO_OPEN) {
1583 ng_btsocket_sco_send_lp_discon_req(pcb);
1585 pcb->state = NG_BTSOCKET_SCO_DISCONNECTING;
1588 ng_btsocket_sco_timeout(pcb);
1590 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1594 mtx_unlock(&pcb->pcb_mtx);
1606 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1609 if (pcb == NULL)
1615 mtx_lock(&pcb->pcb_mtx);
1621 if (bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(bdaddr_t)) == 0) {
1628 mtx_unlock(&pcb->pcb_mtx);
1641 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1644 if (pcb == NULL)
1649 mtx_lock(&pcb->pcb_mtx);
1650 bcopy(&pcb->dst, &sa.sco_bdaddr, sizeof(sa.sco_bdaddr));
1651 mtx_unlock(&pcb->pcb_mtx);
1669 ng_btsocket_sco_pcb_t *pcb = so2sco_pcb(so);
1678 if (pcb == NULL || m == NULL || control != NULL) {
1683 mtx_lock(&pcb->pcb_mtx);
1686 if (pcb->state != NG_BTSOCKET_SCO_OPEN) {
1687 mtx_unlock(&pcb->pcb_mtx);
1693 if (pcb->rt == NULL ||
1694 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) {
1695 mtx_unlock(&pcb->pcb_mtx);
1701 if (m->m_pkthdr.len > pcb->rt->pkt_size) {
1704 __func__, m->m_pkthdr.len, pcb->rt->pkt_size);
1706 mtx_unlock(&pcb->pcb_mtx);
1718 sbappendrecord(&pcb->so->so_snd, m);
1721 if (!(pcb->flags & NG_BTSOCKET_SCO_TIMO)) {
1722 error = ng_btsocket_sco_send2(pcb);
1724 ng_btsocket_sco_timeout(pcb);
1726 sbdroprecord(&pcb->so->so_snd); /* XXX */
1729 mtx_unlock(&pcb->pcb_mtx);
1742 ng_btsocket_sco_send2(ng_btsocket_sco_pcb_p pcb)
1748 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
1750 while (pcb->rt->pending < pcb->rt->num_pkts &&
1751 sbavail(&pcb->so->so_snd) > 0) {
1753 m = m_dup(pcb->so->so_snd.sb_mb, M_NOWAIT);
1773 hdr->con_handle = htole16(NG_HCI_MK_CON_HANDLE(pcb->con_handle, 0, 0));
1777 NG_SEND_DATA_ONLY(error, pcb->rt->hook, m);
1781 pcb->rt->pending ++;
1784 return ((pcb->rt->pending > 0)? 0 : error);
1794 ng_btsocket_sco_pcb_p pcb = so2sco_pcb(so);
1797 if (pcb == NULL)
1802 mtx_lock(&pcb->pcb_mtx);
1803 bcopy(&pcb->src, &sa.sco_bdaddr, sizeof(sa.sco_bdaddr));
1804 mtx_unlock(&pcb->pcb_mtx);
1824 * Returns with locked pcb.
1843 return (p); /* return with locked pcb */
1860 * Returns with locked pcb.
1875 return (p); /* return with locked pcb */
1886 * Returns with locked pcb.
1902 return (p); /* return with locked pcb */
1915 ng_btsocket_sco_timeout(ng_btsocket_sco_pcb_p pcb)
1917 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
1919 if (!(pcb->flags & NG_BTSOCKET_SCO_TIMO)) {
1920 pcb->flags |= NG_BTSOCKET_SCO_TIMO;
1921 callout_reset(&pcb->timo, bluetooth_sco_rtx_timeout(),
1922 ng_btsocket_sco_process_timeout, pcb);
1933 ng_btsocket_sco_untimeout(ng_btsocket_sco_pcb_p pcb)
1935 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
1937 if (pcb->flags & NG_BTSOCKET_SCO_TIMO) {
1938 callout_stop(&pcb->timo);
1939 pcb->flags &= ~NG_BTSOCKET_SCO_TIMO;
1952 ng_btsocket_sco_pcb_p pcb = (ng_btsocket_sco_pcb_p) xpcb;
1954 mtx_lock(&pcb->pcb_mtx);
1956 pcb->flags &= ~NG_BTSOCKET_SCO_TIMO;
1957 pcb->so->so_error = ETIMEDOUT;
1959 switch (pcb->state) {
1962 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1963 soisdisconnected(pcb->so);
1968 sbdroprecord(&pcb->so->so_snd);
1969 sowwakeup(pcb->so);
1970 /* XXX FIXME what to do with pcb->rt->pending??? */
1975 pcb->state = NG_BTSOCKET_SCO_CLOSED;
1976 soisdisconnected(pcb->so);
1981 "%s: Invalid socket state=%d\n", __func__, pcb->state);
1985 mtx_unlock(&pcb->pcb_mtx);