Lines Matching refs:pcb
409 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
415 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_hci_raw_send_sync_ngmsg()
422 pcb->token = msg->header.token; in ng_btsocket_hci_raw_send_sync_ngmsg()
423 pcb->msg = NULL; in ng_btsocket_hci_raw_send_sync_ngmsg()
427 pcb->token = 0; in ng_btsocket_hci_raw_send_sync_ngmsg()
431 error = msleep(&pcb->msg, &pcb->pcb_mtx, PZERO|PCATCH, "hcictl", in ng_btsocket_hci_raw_send_sync_ngmsg()
433 pcb->token = 0; in ng_btsocket_hci_raw_send_sync_ngmsg()
438 if (pcb->msg != NULL && pcb->msg->header.cmd == cmd) in ng_btsocket_hci_raw_send_sync_ngmsg()
439 bcopy(pcb->msg->data, rsp, rsplen); in ng_btsocket_hci_raw_send_sync_ngmsg()
443 NG_FREE_MSG(pcb->msg); /* checks for != NULL */ in ng_btsocket_hci_raw_send_sync_ngmsg()
453 ng_btsocket_hci_raw_savctl(ng_btsocket_hci_raw_pcb_p pcb, struct mbuf **ctl, in ng_btsocket_hci_raw_savctl() argument
459 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_hci_raw_savctl()
461 if (pcb->flags & NG_BTSOCKET_HCI_RAW_DIRECTION) { in ng_btsocket_hci_raw_savctl()
469 if (pcb->so->so_options & SO_TIMESTAMP) { in ng_btsocket_hci_raw_savctl()
485 ng_btsocket_hci_raw_pcb_p pcb = NULL; in ng_btsocket_hci_raw_data_input() local
501 LIST_FOREACH(pcb, &ng_btsocket_hci_raw_sockets, next) { in ng_btsocket_hci_raw_data_input()
502 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_data_input()
509 if (pcb->addr.hci_node[0] != 0 && in ng_btsocket_hci_raw_data_input()
510 strcmp(sa->hci_node, pcb->addr.hci_node) != 0) in ng_btsocket_hci_raw_data_input()
518 if (ng_btsocket_hci_raw_filter(pcb, m0, 1) != 0) in ng_btsocket_hci_raw_data_input()
531 ng_btsocket_hci_raw_savctl(pcb, &ctl, m); in ng_btsocket_hci_raw_data_input()
533 if (sbappendaddr(&pcb->so->so_rcv, in ng_btsocket_hci_raw_data_input()
535 sorwakeup(pcb->so); in ng_btsocket_hci_raw_data_input()
542 soroverflow(pcb->so); in ng_btsocket_hci_raw_data_input()
546 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_data_input()
562 ng_btsocket_hci_raw_pcb_p pcb = NULL; in ng_btsocket_hci_raw_msg_input() local
566 LIST_FOREACH(pcb, &ng_btsocket_hci_raw_sockets, next) { in ng_btsocket_hci_raw_msg_input()
567 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_msg_input()
569 if (msg->header.token == pcb->token) { in ng_btsocket_hci_raw_msg_input()
570 pcb->msg = msg; in ng_btsocket_hci_raw_msg_input()
571 wakeup(&pcb->msg); in ng_btsocket_hci_raw_msg_input()
573 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_msg_input()
579 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_msg_input()
677 ng_btsocket_hci_raw_filter(ng_btsocket_hci_raw_pcb_p pcb, struct mbuf *m, int d) in ng_btsocket_hci_raw_filter() argument
681 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_hci_raw_filter()
685 if (!(pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)) { in ng_btsocket_hci_raw_filter()
694 if (d && !bit_test(pcb->filter.packet_mask, NG_HCI_CMD_PKT - 1)) in ng_btsocket_hci_raw_filter()
700 if (!(pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) || in ng_btsocket_hci_raw_filter()
701 !bit_test(pcb->filter.packet_mask, type - 1) || in ng_btsocket_hci_raw_filter()
712 if (!(pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED)) in ng_btsocket_hci_raw_filter()
716 if (!bit_test(pcb->filter.event_mask, event)) in ng_btsocket_hci_raw_filter()
914 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_attach() local
917 if (pcb != NULL) in ng_btsocket_hci_raw_attach()
932 pcb = malloc(sizeof(*pcb), in ng_btsocket_hci_raw_attach()
934 if (pcb == NULL) in ng_btsocket_hci_raw_attach()
937 so->so_pcb = (caddr_t) pcb; in ng_btsocket_hci_raw_attach()
938 pcb->so = so; in ng_btsocket_hci_raw_attach()
941 pcb->flags |= NG_BTSOCKET_HCI_RAW_PRIVILEGED; in ng_btsocket_hci_raw_attach()
948 bit_set(pcb->filter.event_mask, NG_HCI_EVENT_COMMAND_COMPL - 1); in ng_btsocket_hci_raw_attach()
949 bit_set(pcb->filter.event_mask, NG_HCI_EVENT_COMMAND_STATUS - 1); in ng_btsocket_hci_raw_attach()
951 mtx_init(&pcb->pcb_mtx, "btsocks_hci_raw_pcb_mtx", NULL, MTX_DEF); in ng_btsocket_hci_raw_attach()
954 LIST_INSERT_HEAD(&ng_btsocket_hci_raw_sockets, pcb, next); in ng_btsocket_hci_raw_attach()
968 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_bind() local
971 if (pcb == NULL) in ng_btsocket_hci_raw_bind()
985 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_bind()
986 bcopy(sa, &pcb->addr, sizeof(pcb->addr)); in ng_btsocket_hci_raw_bind()
987 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_bind()
1000 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_connect() local
1003 if (pcb == NULL) in ng_btsocket_hci_raw_connect()
1017 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_connect()
1019 if (bcmp(sa, &pcb->addr, sizeof(pcb->addr)) != 0) { in ng_btsocket_hci_raw_connect()
1020 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_connect()
1026 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_connect()
1039 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_control() local
1044 if (pcb == NULL) in ng_btsocket_hci_raw_control()
1049 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1052 if (pcb->addr.hci_node[0] == 0) { in ng_btsocket_hci_raw_control()
1053 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1058 if (pcb->token != 0) { in ng_btsocket_hci_raw_control()
1059 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1063 snprintf(path, sizeof(path), "%s:", pcb->addr.hci_node); in ng_btsocket_hci_raw_control()
1070 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1076 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1087 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1096 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1108 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1117 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1126 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1135 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1141 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1149 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1166 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1173 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1177 pcb->token = msg->header.token; in ng_btsocket_hci_raw_control()
1178 pcb->msg = NULL; in ng_btsocket_hci_raw_control()
1182 pcb->token = 0; in ng_btsocket_hci_raw_control()
1183 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1187 error = msleep(&pcb->msg, &pcb->pcb_mtx, in ng_btsocket_hci_raw_control()
1190 pcb->token = 0; in ng_btsocket_hci_raw_control()
1193 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1197 msg = pcb->msg; in ng_btsocket_hci_raw_control()
1198 pcb->msg = NULL; in ng_btsocket_hci_raw_control()
1200 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1229 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1236 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1240 pcb->token = msg->header.token; in ng_btsocket_hci_raw_control()
1241 pcb->msg = NULL; in ng_btsocket_hci_raw_control()
1245 pcb->token = 0; in ng_btsocket_hci_raw_control()
1246 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1250 error = msleep(&pcb->msg, &pcb->pcb_mtx, in ng_btsocket_hci_raw_control()
1253 pcb->token = 0; in ng_btsocket_hci_raw_control()
1256 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1260 msg = pcb->msg; in ng_btsocket_hci_raw_control()
1261 pcb->msg = NULL; in ng_btsocket_hci_raw_control()
1263 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1289 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1299 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1312 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1321 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1334 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1343 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1358 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1365 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1369 pcb->token = msg->header.token; in ng_btsocket_hci_raw_control()
1370 pcb->msg = NULL; in ng_btsocket_hci_raw_control()
1374 pcb->token = 0; in ng_btsocket_hci_raw_control()
1375 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1379 error = msleep(&pcb->msg, &pcb->pcb_mtx, in ng_btsocket_hci_raw_control()
1382 pcb->token = 0; in ng_btsocket_hci_raw_control()
1385 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1389 msg = pcb->msg; in ng_btsocket_hci_raw_control()
1390 pcb->msg = NULL; in ng_btsocket_hci_raw_control()
1392 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1428 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1440 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_ctloutput() local
1444 if (pcb == NULL) in ng_btsocket_hci_raw_ctloutput()
1452 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_ctloutput()
1458 error = sooptcopyout(sopt, &pcb->filter, in ng_btsocket_hci_raw_ctloutput()
1459 sizeof(pcb->filter)); in ng_btsocket_hci_raw_ctloutput()
1463 dir = (pcb->flags & NG_BTSOCKET_HCI_RAW_DIRECTION)?1:0; in ng_btsocket_hci_raw_ctloutput()
1479 bcopy(&filter, &pcb->filter, in ng_btsocket_hci_raw_ctloutput()
1480 sizeof(pcb->filter)); in ng_btsocket_hci_raw_ctloutput()
1490 pcb->flags |= NG_BTSOCKET_HCI_RAW_DIRECTION; in ng_btsocket_hci_raw_ctloutput()
1492 pcb->flags &= ~NG_BTSOCKET_HCI_RAW_DIRECTION; in ng_btsocket_hci_raw_ctloutput()
1506 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_ctloutput()
1518 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_detach() local
1520 KASSERT(pcb != NULL, ("ng_btsocket_hci_raw_detach: pcb == NULL")); in ng_btsocket_hci_raw_detach()
1526 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_detach()
1528 LIST_REMOVE(pcb, next); in ng_btsocket_hci_raw_detach()
1530 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_detach()
1533 mtx_destroy(&pcb->pcb_mtx); in ng_btsocket_hci_raw_detach()
1535 bzero(pcb, sizeof(*pcb)); in ng_btsocket_hci_raw_detach()
1536 free(pcb, M_NETGRAPH_BTSOCKET_HCI_RAW); in ng_btsocket_hci_raw_detach()
1548 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_disconnect() local
1550 if (pcb == NULL) in ng_btsocket_hci_raw_disconnect()
1555 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_disconnect()
1557 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_disconnect()
1580 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_send() local
1588 if (pcb == NULL) { in ng_btsocket_hci_raw_send()
1614 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1616 error = ng_btsocket_hci_raw_filter(pcb, m, 0); in ng_btsocket_hci_raw_send()
1618 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1623 if (pcb->addr.hci_node[0] == 0) { in ng_btsocket_hci_raw_send()
1624 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1629 sa = (struct sockaddr *) &pcb->addr; in ng_btsocket_hci_raw_send()
1634 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1645 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1664 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_sockaddr() local
1667 if (pcb == NULL) in ng_btsocket_hci_raw_sockaddr()
1676 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_sockaddr()
1677 strlcpy(sa.hci_node, pcb->addr.hci_node, sizeof(sa.hci_node)); in ng_btsocket_hci_raw_sockaddr()
1678 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_sockaddr()