vrp 130 drivers/rpmsg/virtio_rpmsg_bus.c struct virtproc_info *vrp; vrp 232 drivers/rpmsg/virtio_rpmsg_bus.c static struct rpmsg_endpoint *__rpmsg_create_ept(struct virtproc_info *vrp, vrp 239 drivers/rpmsg/virtio_rpmsg_bus.c struct device *dev = rpdev ? &rpdev->dev : &vrp->vdev->dev; vrp 262 drivers/rpmsg/virtio_rpmsg_bus.c mutex_lock(&vrp->endpoints_lock); vrp 265 drivers/rpmsg/virtio_rpmsg_bus.c id = idr_alloc(&vrp->endpoints, ept, id_min, id_max, GFP_KERNEL); vrp 272 drivers/rpmsg/virtio_rpmsg_bus.c mutex_unlock(&vrp->endpoints_lock); vrp 277 drivers/rpmsg/virtio_rpmsg_bus.c mutex_unlock(&vrp->endpoints_lock); vrp 289 drivers/rpmsg/virtio_rpmsg_bus.c return __rpmsg_create_ept(vch->vrp, rpdev, cb, priv, chinfo.src); vrp 303 drivers/rpmsg/virtio_rpmsg_bus.c __rpmsg_destroy_ept(struct virtproc_info *vrp, struct rpmsg_endpoint *ept) vrp 306 drivers/rpmsg/virtio_rpmsg_bus.c mutex_lock(&vrp->endpoints_lock); vrp 307 drivers/rpmsg/virtio_rpmsg_bus.c idr_remove(&vrp->endpoints, ept->addr); vrp 308 drivers/rpmsg/virtio_rpmsg_bus.c mutex_unlock(&vrp->endpoints_lock); vrp 322 drivers/rpmsg/virtio_rpmsg_bus.c __rpmsg_destroy_ept(vch->vrp, ept); vrp 328 drivers/rpmsg/virtio_rpmsg_bus.c struct virtproc_info *vrp = vch->vrp; vrp 334 drivers/rpmsg/virtio_rpmsg_bus.c virtio_has_feature(vrp->vdev, VIRTIO_RPMSG_F_NS)) { vrp 352 drivers/rpmsg/virtio_rpmsg_bus.c struct virtproc_info *vrp = vch->vrp; vrp 358 drivers/rpmsg/virtio_rpmsg_bus.c virtio_has_feature(vrp->vdev, VIRTIO_RPMSG_F_NS)) { vrp 392 drivers/rpmsg/virtio_rpmsg_bus.c static struct rpmsg_device *rpmsg_create_channel(struct virtproc_info *vrp, vrp 397 drivers/rpmsg/virtio_rpmsg_bus.c struct device *tmp, *dev = &vrp->vdev->dev; vrp 415 drivers/rpmsg/virtio_rpmsg_bus.c vch->vrp = vrp; vrp 431 drivers/rpmsg/virtio_rpmsg_bus.c rpdev->dev.parent = &vrp->vdev->dev; vrp 441 drivers/rpmsg/virtio_rpmsg_bus.c static void *get_a_tx_buf(struct virtproc_info *vrp) vrp 447 drivers/rpmsg/virtio_rpmsg_bus.c mutex_lock(&vrp->tx_lock); vrp 453 drivers/rpmsg/virtio_rpmsg_bus.c if (vrp->last_sbuf < vrp->num_bufs / 2) vrp 454 drivers/rpmsg/virtio_rpmsg_bus.c ret = vrp->sbufs + vrp->buf_size * vrp->last_sbuf++; vrp 457 drivers/rpmsg/virtio_rpmsg_bus.c ret = virtqueue_get_buf(vrp->svq, &len); vrp 459 drivers/rpmsg/virtio_rpmsg_bus.c mutex_unlock(&vrp->tx_lock); vrp 480 drivers/rpmsg/virtio_rpmsg_bus.c static void rpmsg_upref_sleepers(struct virtproc_info *vrp) vrp 483 drivers/rpmsg/virtio_rpmsg_bus.c mutex_lock(&vrp->tx_lock); vrp 486 drivers/rpmsg/virtio_rpmsg_bus.c if (atomic_inc_return(&vrp->sleepers) == 1) vrp 488 drivers/rpmsg/virtio_rpmsg_bus.c virtqueue_enable_cb(vrp->svq); vrp 490 drivers/rpmsg/virtio_rpmsg_bus.c mutex_unlock(&vrp->tx_lock); vrp 507 drivers/rpmsg/virtio_rpmsg_bus.c static void rpmsg_downref_sleepers(struct virtproc_info *vrp) vrp 510 drivers/rpmsg/virtio_rpmsg_bus.c mutex_lock(&vrp->tx_lock); vrp 513 drivers/rpmsg/virtio_rpmsg_bus.c if (atomic_dec_and_test(&vrp->sleepers)) vrp 515 drivers/rpmsg/virtio_rpmsg_bus.c virtqueue_disable_cb(vrp->svq); vrp 517 drivers/rpmsg/virtio_rpmsg_bus.c mutex_unlock(&vrp->tx_lock); vrp 559 drivers/rpmsg/virtio_rpmsg_bus.c struct virtproc_info *vrp = vch->vrp; vrp 580 drivers/rpmsg/virtio_rpmsg_bus.c if (len > vrp->buf_size - sizeof(struct rpmsg_hdr)) { vrp 586 drivers/rpmsg/virtio_rpmsg_bus.c msg = get_a_tx_buf(vrp); vrp 593 drivers/rpmsg/virtio_rpmsg_bus.c rpmsg_upref_sleepers(vrp); vrp 601 drivers/rpmsg/virtio_rpmsg_bus.c err = wait_event_interruptible_timeout(vrp->sendq, vrp 602 drivers/rpmsg/virtio_rpmsg_bus.c (msg = get_a_tx_buf(vrp)), vrp 606 drivers/rpmsg/virtio_rpmsg_bus.c rpmsg_downref_sleepers(vrp); vrp 631 drivers/rpmsg/virtio_rpmsg_bus.c mutex_lock(&vrp->tx_lock); vrp 634 drivers/rpmsg/virtio_rpmsg_bus.c err = virtqueue_add_outbuf(vrp->svq, &sg, 1, msg, GFP_KERNEL); vrp 646 drivers/rpmsg/virtio_rpmsg_bus.c virtqueue_kick(vrp->svq); vrp 648 drivers/rpmsg/virtio_rpmsg_bus.c mutex_unlock(&vrp->tx_lock); vrp 702 drivers/rpmsg/virtio_rpmsg_bus.c static int rpmsg_recv_single(struct virtproc_info *vrp, struct device *dev, vrp 720 drivers/rpmsg/virtio_rpmsg_bus.c if (len > vrp->buf_size || vrp 727 drivers/rpmsg/virtio_rpmsg_bus.c mutex_lock(&vrp->endpoints_lock); vrp 729 drivers/rpmsg/virtio_rpmsg_bus.c ept = idr_find(&vrp->endpoints, msg->dst); vrp 735 drivers/rpmsg/virtio_rpmsg_bus.c mutex_unlock(&vrp->endpoints_lock); vrp 753 drivers/rpmsg/virtio_rpmsg_bus.c rpmsg_sg_init(&sg, msg, vrp->buf_size); vrp 756 drivers/rpmsg/virtio_rpmsg_bus.c err = virtqueue_add_inbuf(vrp->rvq, &sg, 1, msg, GFP_KERNEL); vrp 768 drivers/rpmsg/virtio_rpmsg_bus.c struct virtproc_info *vrp = rvq->vdev->priv; vrp 781 drivers/rpmsg/virtio_rpmsg_bus.c err = rpmsg_recv_single(vrp, dev, msg, len); vrp 794 drivers/rpmsg/virtio_rpmsg_bus.c virtqueue_kick(vrp->rvq); vrp 806 drivers/rpmsg/virtio_rpmsg_bus.c struct virtproc_info *vrp = svq->vdev->priv; vrp 811 drivers/rpmsg/virtio_rpmsg_bus.c wake_up_interruptible(&vrp->sendq); vrp 821 drivers/rpmsg/virtio_rpmsg_bus.c struct virtproc_info *vrp = priv; vrp 822 drivers/rpmsg/virtio_rpmsg_bus.c struct device *dev = &vrp->vdev->dev; vrp 858 drivers/rpmsg/virtio_rpmsg_bus.c ret = rpmsg_unregister_device(&vrp->vdev->dev, &chinfo); vrp 862 drivers/rpmsg/virtio_rpmsg_bus.c newch = rpmsg_create_channel(vrp, &chinfo); vrp 875 drivers/rpmsg/virtio_rpmsg_bus.c struct virtproc_info *vrp; vrp 881 drivers/rpmsg/virtio_rpmsg_bus.c vrp = kzalloc(sizeof(*vrp), GFP_KERNEL); vrp 882 drivers/rpmsg/virtio_rpmsg_bus.c if (!vrp) vrp 885 drivers/rpmsg/virtio_rpmsg_bus.c vrp->vdev = vdev; vrp 887 drivers/rpmsg/virtio_rpmsg_bus.c idr_init(&vrp->endpoints); vrp 888 drivers/rpmsg/virtio_rpmsg_bus.c mutex_init(&vrp->endpoints_lock); vrp 889 drivers/rpmsg/virtio_rpmsg_bus.c mutex_init(&vrp->tx_lock); vrp 890 drivers/rpmsg/virtio_rpmsg_bus.c init_waitqueue_head(&vrp->sendq); vrp 897 drivers/rpmsg/virtio_rpmsg_bus.c vrp->rvq = vqs[0]; vrp 898 drivers/rpmsg/virtio_rpmsg_bus.c vrp->svq = vqs[1]; vrp 901 drivers/rpmsg/virtio_rpmsg_bus.c WARN_ON(virtqueue_get_vring_size(vrp->rvq) != vrp 902 drivers/rpmsg/virtio_rpmsg_bus.c virtqueue_get_vring_size(vrp->svq)); vrp 905 drivers/rpmsg/virtio_rpmsg_bus.c if (virtqueue_get_vring_size(vrp->rvq) < MAX_RPMSG_NUM_BUFS / 2) vrp 906 drivers/rpmsg/virtio_rpmsg_bus.c vrp->num_bufs = virtqueue_get_vring_size(vrp->rvq) * 2; vrp 908 drivers/rpmsg/virtio_rpmsg_bus.c vrp->num_bufs = MAX_RPMSG_NUM_BUFS; vrp 910 drivers/rpmsg/virtio_rpmsg_bus.c vrp->buf_size = MAX_RPMSG_BUF_SIZE; vrp 912 drivers/rpmsg/virtio_rpmsg_bus.c total_buf_space = vrp->num_bufs * vrp->buf_size; vrp 916 drivers/rpmsg/virtio_rpmsg_bus.c total_buf_space, &vrp->bufs_dma, vrp 924 drivers/rpmsg/virtio_rpmsg_bus.c bufs_va, &vrp->bufs_dma); vrp 927 drivers/rpmsg/virtio_rpmsg_bus.c vrp->rbufs = bufs_va; vrp 930 drivers/rpmsg/virtio_rpmsg_bus.c vrp->sbufs = bufs_va + total_buf_space / 2; vrp 933 drivers/rpmsg/virtio_rpmsg_bus.c for (i = 0; i < vrp->num_bufs / 2; i++) { vrp 935 drivers/rpmsg/virtio_rpmsg_bus.c void *cpu_addr = vrp->rbufs + i * vrp->buf_size; vrp 937 drivers/rpmsg/virtio_rpmsg_bus.c rpmsg_sg_init(&sg, cpu_addr, vrp->buf_size); vrp 939 drivers/rpmsg/virtio_rpmsg_bus.c err = virtqueue_add_inbuf(vrp->rvq, &sg, 1, cpu_addr, vrp 945 drivers/rpmsg/virtio_rpmsg_bus.c virtqueue_disable_cb(vrp->svq); vrp 947 drivers/rpmsg/virtio_rpmsg_bus.c vdev->priv = vrp; vrp 952 drivers/rpmsg/virtio_rpmsg_bus.c vrp->ns_ept = __rpmsg_create_ept(vrp, NULL, rpmsg_ns_cb, vrp 953 drivers/rpmsg/virtio_rpmsg_bus.c vrp, RPMSG_NS_ADDR); vrp 954 drivers/rpmsg/virtio_rpmsg_bus.c if (!vrp->ns_ept) { vrp 965 drivers/rpmsg/virtio_rpmsg_bus.c notify = virtqueue_kick_prepare(vrp->rvq); vrp 976 drivers/rpmsg/virtio_rpmsg_bus.c virtqueue_notify(vrp->rvq); vrp 984 drivers/rpmsg/virtio_rpmsg_bus.c bufs_va, vrp->bufs_dma); vrp 986 drivers/rpmsg/virtio_rpmsg_bus.c vdev->config->del_vqs(vrp->vdev); vrp 988 drivers/rpmsg/virtio_rpmsg_bus.c kfree(vrp); vrp 1001 drivers/rpmsg/virtio_rpmsg_bus.c struct virtproc_info *vrp = vdev->priv; vrp 1002 drivers/rpmsg/virtio_rpmsg_bus.c size_t total_buf_space = vrp->num_bufs * vrp->buf_size; vrp 1011 drivers/rpmsg/virtio_rpmsg_bus.c if (vrp->ns_ept) vrp 1012 drivers/rpmsg/virtio_rpmsg_bus.c __rpmsg_destroy_ept(vrp, vrp->ns_ept); vrp 1014 drivers/rpmsg/virtio_rpmsg_bus.c idr_destroy(&vrp->endpoints); vrp 1016 drivers/rpmsg/virtio_rpmsg_bus.c vdev->config->del_vqs(vrp->vdev); vrp 1019 drivers/rpmsg/virtio_rpmsg_bus.c vrp->rbufs, vrp->bufs_dma); vrp 1021 drivers/rpmsg/virtio_rpmsg_bus.c kfree(vrp);