Lines Matching refs:pcb
408 ng_btsocket_hci_raw_send_sync_ngmsg(ng_btsocket_hci_raw_pcb_p pcb, char *path,
414 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
421 pcb->token = msg->header.token;
422 pcb->msg = NULL;
426 pcb->token = 0;
430 error = msleep(&pcb->msg, &pcb->pcb_mtx, PZERO|PCATCH, "hcictl",
432 pcb->token = 0;
437 if (pcb->msg != NULL && pcb->msg->header.cmd == cmd)
438 bcopy(pcb->msg->data, rsp, rsplen);
442 NG_FREE_MSG(pcb->msg); /* checks for != NULL */
452 ng_btsocket_hci_raw_savctl(ng_btsocket_hci_raw_pcb_p pcb, struct mbuf **ctl,
458 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
460 if (pcb->flags & NG_BTSOCKET_HCI_RAW_DIRECTION) {
468 if (pcb->so->so_options & SO_TIMESTAMP) {
484 ng_btsocket_hci_raw_pcb_p pcb = NULL;
500 LIST_FOREACH(pcb, &ng_btsocket_hci_raw_sockets, next) {
501 mtx_lock(&pcb->pcb_mtx);
508 if (pcb->addr.hci_node[0] != 0 &&
509 strcmp(sa->hci_node, pcb->addr.hci_node) != 0)
517 if (ng_btsocket_hci_raw_filter(pcb, m0, 1) != 0)
530 ng_btsocket_hci_raw_savctl(pcb, &ctl, m);
532 if (sbappendaddr(&pcb->so->so_rcv,
534 sorwakeup(pcb->so);
541 soroverflow(pcb->so);
545 mtx_unlock(&pcb->pcb_mtx);
561 ng_btsocket_hci_raw_pcb_p pcb = NULL;
565 LIST_FOREACH(pcb, &ng_btsocket_hci_raw_sockets, next) {
566 mtx_lock(&pcb->pcb_mtx);
568 if (msg->header.token == pcb->token) {
569 pcb->msg = msg;
570 wakeup(&pcb->msg);
572 mtx_unlock(&pcb->pcb_mtx);
578 mtx_unlock(&pcb->pcb_mtx);
676 ng_btsocket_hci_raw_filter(ng_btsocket_hci_raw_pcb_p pcb, struct mbuf *m, int d)
680 mtx_assert(&pcb->pcb_mtx, MA_OWNED);
684 if (!(pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)) {
693 if (d && !bit_test(pcb->filter.packet_mask, NG_HCI_CMD_PKT - 1))
699 if (!(pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) ||
700 !bit_test(pcb->filter.packet_mask, type - 1) ||
711 if (!(pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED))
715 if (!bit_test(pcb->filter.event_mask, event))
910 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
913 if (pcb != NULL)
928 pcb = malloc(sizeof(*pcb),
930 if (pcb == NULL)
933 so->so_pcb = (caddr_t) pcb;
934 pcb->so = so;
937 pcb->flags |= NG_BTSOCKET_HCI_RAW_PRIVILEGED;
944 bit_set(pcb->filter.event_mask, NG_HCI_EVENT_COMMAND_COMPL - 1);
945 bit_set(pcb->filter.event_mask, NG_HCI_EVENT_COMMAND_STATUS - 1);
947 mtx_init(&pcb->pcb_mtx, "btsocks_hci_raw_pcb_mtx", NULL, MTX_DEF);
950 LIST_INSERT_HEAD(&ng_btsocket_hci_raw_sockets, pcb, next);
964 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
967 if (pcb == NULL)
981 mtx_lock(&pcb->pcb_mtx);
982 bcopy(sa, &pcb->addr, sizeof(pcb->addr));
983 mtx_unlock(&pcb->pcb_mtx);
996 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
999 if (pcb == NULL)
1013 mtx_lock(&pcb->pcb_mtx);
1015 if (bcmp(sa, &pcb->addr, sizeof(pcb->addr)) != 0) {
1016 mtx_unlock(&pcb->pcb_mtx);
1022 mtx_unlock(&pcb->pcb_mtx);
1035 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1040 if (pcb == NULL)
1045 mtx_lock(&pcb->pcb_mtx);
1048 if (pcb->addr.hci_node[0] == 0) {
1049 mtx_unlock(&pcb->pcb_mtx);
1054 if (pcb->token != 0) {
1055 mtx_unlock(&pcb->pcb_mtx);
1059 snprintf(path, sizeof(path), "%s:", pcb->addr.hci_node);
1066 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1072 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1083 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1092 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1104 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1113 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1122 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1131 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1137 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1145 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1162 mtx_unlock(&pcb->pcb_mtx);
1169 mtx_unlock(&pcb->pcb_mtx);
1173 pcb->token = msg->header.token;
1174 pcb->msg = NULL;
1178 pcb->token = 0;
1179 mtx_unlock(&pcb->pcb_mtx);
1183 error = msleep(&pcb->msg, &pcb->pcb_mtx,
1186 pcb->token = 0;
1189 mtx_unlock(&pcb->pcb_mtx);
1193 msg = pcb->msg;
1194 pcb->msg = NULL;
1196 mtx_unlock(&pcb->pcb_mtx);
1225 mtx_unlock(&pcb->pcb_mtx);
1232 mtx_unlock(&pcb->pcb_mtx);
1236 pcb->token = msg->header.token;
1237 pcb->msg = NULL;
1241 pcb->token = 0;
1242 mtx_unlock(&pcb->pcb_mtx);
1246 error = msleep(&pcb->msg, &pcb->pcb_mtx,
1249 pcb->token = 0;
1252 mtx_unlock(&pcb->pcb_mtx);
1256 msg = pcb->msg;
1257 pcb->msg = NULL;
1259 mtx_unlock(&pcb->pcb_mtx);
1285 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1295 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1308 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1317 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1330 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path,
1339 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)
1354 mtx_unlock(&pcb->pcb_mtx);
1361 mtx_unlock(&pcb->pcb_mtx);
1365 pcb->token = msg->header.token;
1366 pcb->msg = NULL;
1370 pcb->token = 0;
1371 mtx_unlock(&pcb->pcb_mtx);
1375 error = msleep(&pcb->msg, &pcb->pcb_mtx,
1378 pcb->token = 0;
1381 mtx_unlock(&pcb->pcb_mtx);
1385 msg = pcb->msg;
1386 pcb->msg = NULL;
1388 mtx_unlock(&pcb->pcb_mtx);
1424 mtx_unlock(&pcb->pcb_mtx);
1436 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1440 if (pcb == NULL)
1448 mtx_lock(&pcb->pcb_mtx);
1454 error = sooptcopyout(sopt, &pcb->filter,
1455 sizeof(pcb->filter));
1459 dir = (pcb->flags & NG_BTSOCKET_HCI_RAW_DIRECTION)?1:0;
1475 bcopy(&filter, &pcb->filter,
1476 sizeof(pcb->filter));
1486 pcb->flags |= NG_BTSOCKET_HCI_RAW_DIRECTION;
1488 pcb->flags &= ~NG_BTSOCKET_HCI_RAW_DIRECTION;
1502 mtx_unlock(&pcb->pcb_mtx);
1514 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1516 KASSERT(pcb != NULL, ("ng_btsocket_hci_raw_detach: pcb == NULL"));
1522 mtx_lock(&pcb->pcb_mtx);
1524 LIST_REMOVE(pcb, next);
1526 mtx_unlock(&pcb->pcb_mtx);
1529 mtx_destroy(&pcb->pcb_mtx);
1531 bzero(pcb, sizeof(*pcb));
1532 free(pcb, M_NETGRAPH_BTSOCKET_HCI_RAW);
1544 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1546 if (pcb == NULL)
1551 mtx_lock(&pcb->pcb_mtx);
1553 mtx_unlock(&pcb->pcb_mtx);
1566 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1574 if (pcb == NULL) {
1611 mtx_lock(&pcb->pcb_mtx);
1613 error = ng_btsocket_hci_raw_filter(pcb, m, 0);
1615 mtx_unlock(&pcb->pcb_mtx);
1620 if (pcb->addr.hci_node[0] == 0) {
1621 mtx_unlock(&pcb->pcb_mtx);
1626 sa = (struct sockaddr *) &pcb->addr;
1631 mtx_unlock(&pcb->pcb_mtx);
1642 mtx_unlock(&pcb->pcb_mtx);
1661 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so);
1664 if (pcb == NULL)
1674 mtx_lock(&pcb->pcb_mtx);
1675 strlcpy(hci->hci_node, pcb->addr.hci_node, sizeof(hci->hci_node));
1676 mtx_unlock(&pcb->pcb_mtx);