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