Lines Matching refs: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()
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()
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()
907 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_attach() local
910 if (pcb != NULL) in ng_btsocket_hci_raw_attach()
925 pcb = malloc(sizeof(*pcb), in ng_btsocket_hci_raw_attach()
927 if (pcb == NULL) in ng_btsocket_hci_raw_attach()
930 so->so_pcb = (caddr_t) pcb; in ng_btsocket_hci_raw_attach()
931 pcb->so = so; in ng_btsocket_hci_raw_attach()
934 pcb->flags |= NG_BTSOCKET_HCI_RAW_PRIVILEGED; in ng_btsocket_hci_raw_attach()
941 bit_set(pcb->filter.event_mask, NG_HCI_EVENT_COMMAND_COMPL - 1); in ng_btsocket_hci_raw_attach()
942 bit_set(pcb->filter.event_mask, NG_HCI_EVENT_COMMAND_STATUS - 1); in ng_btsocket_hci_raw_attach()
944 mtx_init(&pcb->pcb_mtx, "btsocks_hci_raw_pcb_mtx", NULL, MTX_DEF); in ng_btsocket_hci_raw_attach()
947 LIST_INSERT_HEAD(&ng_btsocket_hci_raw_sockets, pcb, next); in ng_btsocket_hci_raw_attach()
961 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_bind() local
964 if (pcb == NULL) in ng_btsocket_hci_raw_bind()
978 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_bind()
979 bcopy(sa, &pcb->addr, sizeof(pcb->addr)); in ng_btsocket_hci_raw_bind()
980 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_bind()
993 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_connect() local
996 if (pcb == NULL) in ng_btsocket_hci_raw_connect()
1010 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_connect()
1012 if (bcmp(sa, &pcb->addr, sizeof(pcb->addr)) != 0) { in ng_btsocket_hci_raw_connect()
1013 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_connect()
1019 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_connect()
1032 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_control() local
1037 if (pcb == NULL) in ng_btsocket_hci_raw_control()
1042 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1045 if (pcb->addr.hci_node[0] == 0) { in ng_btsocket_hci_raw_control()
1046 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1051 if (pcb->token != 0) { in ng_btsocket_hci_raw_control()
1052 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1056 snprintf(path, sizeof(path), "%s:", pcb->addr.hci_node); in ng_btsocket_hci_raw_control()
1063 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1069 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1080 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1089 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1101 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1110 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1119 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1128 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1134 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1142 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1170 pcb->token = msg->header.token; in ng_btsocket_hci_raw_control()
1171 pcb->msg = NULL; in ng_btsocket_hci_raw_control()
1175 pcb->token = 0; in ng_btsocket_hci_raw_control()
1179 error = msleep(&pcb->msg, &pcb->pcb_mtx, in ng_btsocket_hci_raw_control()
1182 pcb->token = 0; in ng_btsocket_hci_raw_control()
1187 if (pcb->msg != NULL && in ng_btsocket_hci_raw_control()
1188 pcb->msg->header.cmd == NGM_HCI_NODE_GET_NEIGHBOR_CACHE) { in ng_btsocket_hci_raw_control()
1191 (pcb->msg->data); in ng_btsocket_hci_raw_control()
1203 NG_FREE_MSG(pcb->msg); /* checks for != NULL */ in ng_btsocket_hci_raw_control()
1226 pcb->token = msg->header.token; in ng_btsocket_hci_raw_control()
1227 pcb->msg = NULL; in ng_btsocket_hci_raw_control()
1231 pcb->token = 0; in ng_btsocket_hci_raw_control()
1235 error = msleep(&pcb->msg, &pcb->pcb_mtx, in ng_btsocket_hci_raw_control()
1238 pcb->token = 0; in ng_btsocket_hci_raw_control()
1243 if (pcb->msg != NULL && in ng_btsocket_hci_raw_control()
1244 pcb->msg->header.cmd == NGM_HCI_NODE_GET_CON_LIST) { in ng_btsocket_hci_raw_control()
1246 p1 = (ng_hci_node_con_list_ep *)(pcb->msg->data); in ng_btsocket_hci_raw_control()
1258 NG_FREE_MSG(pcb->msg); /* checks for != NULL */ in ng_btsocket_hci_raw_control()
1266 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1276 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1289 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1298 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1311 error = ng_btsocket_hci_raw_send_sync_ngmsg(pcb, path, in ng_btsocket_hci_raw_control()
1320 if (pcb->flags & NG_BTSOCKET_HCI_RAW_PRIVILEGED) in ng_btsocket_hci_raw_control()
1346 pcb->token = msg->header.token; in ng_btsocket_hci_raw_control()
1347 pcb->msg = NULL; in ng_btsocket_hci_raw_control()
1351 pcb->token = 0; in ng_btsocket_hci_raw_control()
1355 error = msleep(&pcb->msg, &pcb->pcb_mtx, in ng_btsocket_hci_raw_control()
1358 pcb->token = 0; in ng_btsocket_hci_raw_control()
1363 if (pcb->msg != NULL && pcb->msg->header.cmd == NGM_LISTNAMES) { in ng_btsocket_hci_raw_control()
1365 struct namelist *nl1 = (struct namelist *) pcb->msg->data; in ng_btsocket_hci_raw_control()
1388 NG_FREE_MSG(pcb->msg); /* checks for != NULL */ in ng_btsocket_hci_raw_control()
1396 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_control()
1408 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_ctloutput() local
1412 if (pcb == NULL) in ng_btsocket_hci_raw_ctloutput()
1420 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_ctloutput()
1426 error = sooptcopyout(sopt, &pcb->filter, in ng_btsocket_hci_raw_ctloutput()
1427 sizeof(pcb->filter)); in ng_btsocket_hci_raw_ctloutput()
1431 dir = (pcb->flags & NG_BTSOCKET_HCI_RAW_DIRECTION)?1:0; in ng_btsocket_hci_raw_ctloutput()
1447 bcopy(&filter, &pcb->filter, in ng_btsocket_hci_raw_ctloutput()
1448 sizeof(pcb->filter)); in ng_btsocket_hci_raw_ctloutput()
1458 pcb->flags |= NG_BTSOCKET_HCI_RAW_DIRECTION; in ng_btsocket_hci_raw_ctloutput()
1460 pcb->flags &= ~NG_BTSOCKET_HCI_RAW_DIRECTION; in ng_btsocket_hci_raw_ctloutput()
1474 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_ctloutput()
1486 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_detach() local
1488 KASSERT(pcb != NULL, ("ng_btsocket_hci_raw_detach: pcb == NULL")); in ng_btsocket_hci_raw_detach()
1494 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_detach()
1496 LIST_REMOVE(pcb, next); in ng_btsocket_hci_raw_detach()
1498 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_detach()
1501 mtx_destroy(&pcb->pcb_mtx); in ng_btsocket_hci_raw_detach()
1503 bzero(pcb, sizeof(*pcb)); in ng_btsocket_hci_raw_detach()
1504 free(pcb, M_NETGRAPH_BTSOCKET_HCI_RAW); in ng_btsocket_hci_raw_detach()
1516 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_disconnect() local
1518 if (pcb == NULL) in ng_btsocket_hci_raw_disconnect()
1523 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_disconnect()
1525 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_disconnect()
1548 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_send() local
1556 if (pcb == NULL) { in ng_btsocket_hci_raw_send()
1582 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1584 error = ng_btsocket_hci_raw_filter(pcb, m, 0); in ng_btsocket_hci_raw_send()
1586 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1591 if (pcb->addr.hci_node[0] == 0) { in ng_btsocket_hci_raw_send()
1592 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1597 sa = (struct sockaddr *) &pcb->addr; in ng_btsocket_hci_raw_send()
1602 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1613 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_send()
1632 ng_btsocket_hci_raw_pcb_p pcb = so2hci_raw_pcb(so); in ng_btsocket_hci_raw_sockaddr() local
1635 if (pcb == NULL) in ng_btsocket_hci_raw_sockaddr()
1644 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_sockaddr()
1645 strlcpy(sa.hci_node, pcb->addr.hci_node, sizeof(sa.hci_node)); in ng_btsocket_hci_raw_sockaddr()
1646 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_hci_raw_sockaddr()