Lines Matching refs:pcb

406 ng_btsocket_hci_raw_send_sync_ngmsg(ng_btsocket_hci_raw_pcb_p pcb, char *path,
412 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
419 pcb->token = msg->header.token;
420 pcb->msg = NULL;
424 pcb->token = 0;
428 error = msleep(&pcb->msg, &pcb->pcb_mtx, PZERO|PCATCH, "hcictl",
430 pcb->token = 0;
435 if (pcb->msg != NULL && pcb->msg->header.cmd == cmd)
436 bcopy(pcb->msg->data, rsp, rsplen);
440 NG_FREE_MSG(pcb->msg); /* checks for != NULL */
450 ng_btsocket_hci_raw_savctl(ng_btsocket_hci_raw_pcb_p pcb, struct mbuf **ctl,
456 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
458 if (pcb->flags & NG_BTSOCKET_HCI_RAW_DIRECTION) {
466 if (pcb->so->so_options & SO_TIMESTAMP) {
482 ng_btsocket_hci_raw_pcb_p pcb = NULL;
498 LIST_FOREACH(pcb, &ng_btsocket_hci_raw_sockets, next) {
500 mtx_lock(&pcb->pcb_mtx);
507 if (pcb->addr.hci_node[0] != 0 &&
508 strcmp(sa->hci_node, pcb->addr.hci_node) != 0)
516 if (ng_btsocket_hci_raw_filter(pcb, m0, 1) != 0)
529 ng_btsocket_hci_raw_savctl(pcb, &ctl, m);
531 if (sbappendaddr(&pcb->so->so_rcv,
533 sorwakeup(pcb->so);
543 mtx_unlock(&pcb->pcb_mtx);
559 ng_btsocket_hci_raw_pcb_p pcb = NULL;
563 LIST_FOREACH(pcb, &ng_btsocket_hci_raw_sockets, next) {
564 mtx_lock(&pcb->pcb_mtx);
566 if (msg->header.token == pcb->token) {
567 pcb->msg = msg;
568 wakeup(&pcb->msg);
570 mtx_unlock(&pcb->pcb_mtx);
576 mtx_unlock(&pcb->pcb_mtx);
674 ng_btsocket_hci_raw_filter(ng_btsocket_hci_raw_pcb_p pcb, struct mbuf *m, int d)
678 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
682 if (!(pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)) {
691 if (d && !bit_test(pcb->filter.packet_mask, NG_HCI_CMD_PKT - 1))
697 if (!(pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) ||
698 !bit_test(pcb->filter.packet_mask, type - 1) ||
709 if (!(pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED))
713 if (!bit_test(pcb->filter.event_mask, event))
905 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
908 if (pcb != NULL)
923 pcb = malloc(sizeof(*pcb),
925 if (pcb == NULL)
928 so->so_pcb = (caddr_t) pcb;
929 pcb->so = so;
932 pcb->flags |= NG_BTSOCKET_HCI_RAW_PRIVILEGED;
939 bit_set(pcb->filter.event_mask, NG_HCI_EVENT_COMMAND_COMPL - 1);
940 bit_set(pcb->filter.event_mask, NG_HCI_EVENT_COMMAND_STATUS - 1);
942 mtx_init(&pcb->pcb_mtx, "btsocks_hci_raw_pcb_mtx", NULL, MTX_DEF);
945 LIST_INSERT_HEAD(&ng_btsocket_hci_raw_sockets, pcb, next);
959 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
962 if (pcb == NULL)
976 mtx_lock(&pcb->pcb_mtx);
977 bcopy(sa, &pcb->addr, sizeof(pcb->addr));
978 mtx_unlock(&pcb->pcb_mtx);
991 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
994 if (pcb == NULL)
1008 mtx_lock(&pcb->pcb_mtx);
1010 if (bcmp(sa, &pcb->addr, sizeof(pcb->addr)) != 0) {
1011 mtx_unlock(&pcb->pcb_mtx);
1017 mtx_unlock(&pcb->pcb_mtx);
1030 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1035 if (pcb == NULL)
1040 mtx_lock(&pcb->pcb_mtx);
1043 if (pcb->addr.hci_node[0] == 0) {
1044 mtx_unlock(&pcb->pcb_mtx);
1049 if (pcb->token != 0) {
1050 mtx_unlock(&pcb->pcb_mtx);
1054 snprintf(path, sizeof(path), "%s:", pcb->addr.hci_node);
1061 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1067 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1078 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1087 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1099 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1108 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1117 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1126 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1132 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1140 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1168 pcb->token = msg->header.token;
1169 pcb->msg = NULL;
1173 pcb->token = 0;
1177 error = msleep(&pcb->msg, &pcb->pcb_mtx,
1180 pcb->token = 0;
1185 if (pcb->msg != NULL &&
1186 pcb->msg->header.cmd == NGM_HCI_NODE_GET_NEIGHBOR_CACHE) {
1189 (pcb->msg->data);
1201 NG_FREE_MSG(pcb->msg); /* checks for != NULL */
1224 pcb->token = msg->header.token;
1225 pcb->msg = NULL;
1229 pcb->token = 0;
1233 error = msleep(&pcb->msg, &pcb->pcb_mtx,
1236 pcb->token = 0;
1241 if (pcb->msg != NULL &&
1242 pcb->msg->header.cmd == NGM_HCI_NODE_GET_CON_LIST) {
1244 p1 = (ng_hci_node_con_list_ep *)(pcb->msg->data);
1256 NG_FREE_MSG(pcb->msg); /* checks for != NULL */
1264 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1274 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1287 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1296 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1309 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1318 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1344 pcb->token = msg->header.token;
1345 pcb->msg = NULL;
1349 pcb->token = 0;
1353 error = msleep(&pcb->msg, &pcb->pcb_mtx,
1356 pcb->token = 0;
1361 if (pcb->msg != NULL && pcb->msg->header.cmd == NGM_LISTNAMES) {
1363 struct namelist *nl1 = (struct namelist *) pcb->msg->data;
1386 NG_FREE_MSG(pcb->msg); /* checks for != NULL */
1394 mtx_unlock(&pcb->pcb_mtx);
1406 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1410 if (pcb == NULL)
1418 mtx_lock(&pcb->pcb_mtx);
1424 error = sooptcopyout(sopt, &pcb->filter,
1425 sizeof(pcb->filter));
1429 dir = (pcb->flags & NG_BTSOCKET_HCI_RAW_DIRECTION)?1:0;
1445 bcopy(&filter, &pcb->filter,
1446 sizeof(pcb->filter));
1456 pcb->flags |= NG_BTSOCKET_HCI_RAW_DIRECTION;
1458 pcb->flags &= ~NG_BTSOCKET_HCI_RAW_DIRECTION;
1472 mtx_unlock(&pcb->pcb_mtx);
1484 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1486 KASSERT(pcb != NULL, ("ng_btsocket_hci_raw_detach: pcb == NULL"));
1492 mtx_lock(&pcb->pcb_mtx);
1494 LIST_REMOVE(pcb, next);
1496 mtx_unlock(&pcb->pcb_mtx);
1499 mtx_destroy(&pcb->pcb_mtx);
1501 bzero(pcb, sizeof(*pcb));
1502 free(pcb, M_NETGRAPH_BTSOCKET_HCI_RAW);
1514 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1516 if (pcb == NULL)
1521 mtx_lock(&pcb->pcb_mtx);
1523 mtx_unlock(&pcb->pcb_mtx);
1546 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1554 if (pcb == NULL) {
1580 mtx_lock(&pcb->pcb_mtx);
1582 error = ng_btsocket_hci_raw_filter(pcb, m, 0);
1584 mtx_unlock(&pcb->pcb_mtx);
1589 if (pcb->addr.hci_node[0] == 0) {
1590 mtx_unlock(&pcb->pcb_mtx);
1595 sa = (struct sockaddr *) &pcb->addr;
1600 mtx_unlock(&pcb->pcb_mtx);
1611 mtx_unlock(&pcb->pcb_mtx);
1630 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1633 if (pcb == NULL)
1642 mtx_lock(&pcb->pcb_mtx);
1643 strlcpy(sa.hci_node, pcb->addr.hci_node, sizeof(sa.hci_node));
1644 mtx_unlock(&pcb->pcb_mtx);