Lines Matching full:ipc
369 static void qrtr_port_put(struct qrtr_sock *ipc);
384 struct qrtr_sock *ipc; in qrtr_node_rx_work() local
397 ipc = qrtr_port_lookup(cb->dst_port); in qrtr_node_rx_work()
398 if (!ipc) { in qrtr_node_rx_work()
401 if (sock_queue_rcv_skb(&ipc->sk, skb)) in qrtr_node_rx_work()
404 qrtr_port_put(ipc); in qrtr_node_rx_work()
494 struct qrtr_sock *ipc; in qrtr_port_lookup() local
500 ipc = idr_find(&qrtr_ports, port); in qrtr_port_lookup()
501 if (ipc) in qrtr_port_lookup()
502 sock_hold(&ipc->sk); in qrtr_port_lookup()
505 return ipc; in qrtr_port_lookup()
509 static void qrtr_port_put(struct qrtr_sock *ipc) in qrtr_port_put() argument
511 sock_put(&ipc->sk); in qrtr_port_put()
515 static void qrtr_port_remove(struct qrtr_sock *ipc) in qrtr_port_remove() argument
519 int port = ipc->us.sq_port; in qrtr_port_remove()
529 pkt->client.node = cpu_to_le32(ipc->us.sq_node); in qrtr_port_remove()
530 pkt->client.port = cpu_to_le32(ipc->us.sq_port); in qrtr_port_remove()
532 skb_set_owner_w(skb, &ipc->sk); in qrtr_port_remove()
533 qrtr_bcast_enqueue(NULL, skb, QRTR_TYPE_DEL_CLIENT, &ipc->us, in qrtr_port_remove()
540 __sock_put(&ipc->sk); in qrtr_port_remove()
557 static int qrtr_port_assign(struct qrtr_sock *ipc, int *port) in qrtr_port_assign() argument
565 rc = idr_alloc_u32(&qrtr_ports, ipc, &min_port, QRTR_MAX_EPH_SOCKET, GFP_ATOMIC); in qrtr_port_assign()
572 rc = idr_alloc_u32(&qrtr_ports, ipc, &min_port, 0, GFP_ATOMIC); in qrtr_port_assign()
575 rc = idr_alloc_u32(&qrtr_ports, ipc, &min_port, *port, GFP_ATOMIC); in qrtr_port_assign()
586 sock_hold(&ipc->sk); in qrtr_port_assign()
594 struct qrtr_sock *ipc; in qrtr_reset_ports() local
598 idr_for_each_entry(&qrtr_ports, ipc, id) { in qrtr_reset_ports()
603 sock_hold(&ipc->sk); in qrtr_reset_ports()
604 ipc->sk.sk_err = ENETRESET; in qrtr_reset_ports()
605 ipc->sk.sk_error_report(&ipc->sk); in qrtr_reset_ports()
606 sock_put(&ipc->sk); in qrtr_reset_ports()
618 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in __qrtr_bind() local
624 if (!zapped && addr->sq_port == ipc->us.sq_port) in __qrtr_bind()
628 rc = qrtr_port_assign(ipc, &port); in __qrtr_bind()
634 qrtr_port_remove(ipc); in __qrtr_bind()
635 ipc->us.sq_port = port; in __qrtr_bind()
666 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_bind() local
673 if (addr->sq_node != ipc->us.sq_node) in qrtr_bind()
688 struct qrtr_sock *ipc; in qrtr_local_enqueue() local
691 ipc = qrtr_port_lookup(to->sq_port); in qrtr_local_enqueue()
692 if (!ipc || &ipc->sk == skb->sk) { /* do not send to self */ in qrtr_local_enqueue()
701 if (sock_queue_rcv_skb(&ipc->sk, skb)) { in qrtr_local_enqueue()
702 qrtr_port_put(ipc); in qrtr_local_enqueue()
707 qrtr_port_put(ipc); in qrtr_local_enqueue()
739 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_sendmsg() local
772 addr = &ipc->peer; in qrtr_sendmsg()
786 } else if (addr->sq_node == ipc->us.sq_node) { in qrtr_sendmsg()
811 if (ipc->us.sq_port == QRTR_PORT_CTRL) { in qrtr_sendmsg()
823 rc = enqueue_fn(node, skb, type, &ipc->us, addr); in qrtr_sendmsg()
892 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_connect() local
910 ipc->peer = *addr; in qrtr_connect()
922 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_getname() local
933 qaddr = ipc->peer; in qrtr_getname()
935 qaddr = ipc->us; in qrtr_getname()
949 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_ioctl() local
979 *sq = ipc->us; in qrtr_ioctl()
1012 struct qrtr_sock *ipc; in qrtr_release() local
1019 ipc = qrtr_sk(sk); in qrtr_release()
1029 qrtr_port_remove(ipc); in qrtr_release()
1069 struct qrtr_sock *ipc; in qrtr_create() local
1084 ipc = qrtr_sk(sk); in qrtr_create()
1085 ipc->us.sq_family = AF_QIPCRTR; in qrtr_create()
1086 ipc->us.sq_node = qrtr_local_nid; in qrtr_create()
1087 ipc->us.sq_port = 0; in qrtr_create()
1161 MODULE_DESCRIPTION("Qualcomm IPC-router driver");