Lines Matching refs:vi
44 struct virtrng_info *vi = vq->vdev->priv; in random_recv_done() local
47 if (!virtqueue_get_buf(vi->vq, &vi->data_avail)) in random_recv_done()
50 complete(&vi->have_data); in random_recv_done()
54 static void register_buffer(struct virtrng_info *vi, u8 *buf, size_t size) in register_buffer() argument
61 virtqueue_add_inbuf(vi->vq, &sg, 1, buf, GFP_KERNEL); in register_buffer()
63 virtqueue_kick(vi->vq); in register_buffer()
69 struct virtrng_info *vi = (struct virtrng_info *)rng->priv; in virtio_read() local
71 if (vi->hwrng_removed) in virtio_read()
74 if (!vi->busy) { in virtio_read()
75 vi->busy = true; in virtio_read()
76 init_completion(&vi->have_data); in virtio_read()
77 register_buffer(vi, buf, size); in virtio_read()
83 ret = wait_for_completion_killable(&vi->have_data); in virtio_read()
87 vi->busy = false; in virtio_read()
89 return vi->data_avail; in virtio_read()
94 struct virtrng_info *vi = (struct virtrng_info *)rng->priv; in virtio_cleanup() local
96 if (vi->busy) in virtio_cleanup()
97 wait_for_completion(&vi->have_data); in virtio_cleanup()
103 struct virtrng_info *vi = NULL; in probe_common() local
105 vi = kzalloc(sizeof(struct virtrng_info), GFP_KERNEL); in probe_common()
106 if (!vi) in probe_common()
109 vi->index = index = ida_simple_get(&rng_index_ida, 0, 0, GFP_KERNEL); in probe_common()
114 sprintf(vi->name, "virtio_rng.%d", index); in probe_common()
115 init_completion(&vi->have_data); in probe_common()
117 vi->hwrng = (struct hwrng) { in probe_common()
120 .priv = (unsigned long)vi, in probe_common()
121 .name = vi->name, in probe_common()
124 vdev->priv = vi; in probe_common()
127 vi->vq = virtio_find_single_vq(vdev, random_recv_done, "input"); in probe_common()
128 if (IS_ERR(vi->vq)) { in probe_common()
129 err = PTR_ERR(vi->vq); in probe_common()
138 kfree(vi); in probe_common()
144 struct virtrng_info *vi = vdev->priv; in remove_common() local
146 vi->hwrng_removed = true; in remove_common()
147 vi->data_avail = 0; in remove_common()
148 complete(&vi->have_data); in remove_common()
150 vi->busy = false; in remove_common()
151 if (vi->hwrng_register_done) in remove_common()
152 hwrng_unregister(&vi->hwrng); in remove_common()
154 ida_simple_remove(&rng_index_ida, vi->index); in remove_common()
155 kfree(vi); in remove_common()
170 struct virtrng_info *vi = vdev->priv; in virtrng_scan() local
173 err = hwrng_register(&vi->hwrng); in virtrng_scan()
175 vi->hwrng_register_done = true; in virtrng_scan()