Lines Matching refs:vi

32 	struct virtrng_info *vi = vq->vdev->priv;  in random_recv_done()  local
35 if (!virtqueue_get_buf(vi->vq, &vi->data_avail)) in random_recv_done()
38 complete(&vi->have_data); in random_recv_done()
42 static void register_buffer(struct virtrng_info *vi, u8 *buf, size_t size) in register_buffer() argument
49 virtqueue_add_inbuf(vi->vq, &sg, 1, buf, GFP_KERNEL); in register_buffer()
51 virtqueue_kick(vi->vq); in register_buffer()
57 struct virtrng_info *vi = (struct virtrng_info *)rng->priv; in virtio_read() local
59 if (vi->hwrng_removed) in virtio_read()
62 if (!vi->busy) { in virtio_read()
63 vi->busy = true; in virtio_read()
64 reinit_completion(&vi->have_data); in virtio_read()
65 register_buffer(vi, buf, size); in virtio_read()
71 ret = wait_for_completion_killable(&vi->have_data); in virtio_read()
75 vi->busy = false; in virtio_read()
77 return vi->data_avail; in virtio_read()
82 struct virtrng_info *vi = (struct virtrng_info *)rng->priv; in virtio_cleanup() local
84 if (vi->busy) in virtio_cleanup()
85 wait_for_completion(&vi->have_data); in virtio_cleanup()
91 struct virtrng_info *vi = NULL; in probe_common() local
93 vi = kzalloc(sizeof(struct virtrng_info), GFP_KERNEL); in probe_common()
94 if (!vi) in probe_common()
97 vi->index = index = ida_simple_get(&rng_index_ida, 0, 0, GFP_KERNEL); in probe_common()
102 sprintf(vi->name, "virtio_rng.%d", index); in probe_common()
103 init_completion(&vi->have_data); in probe_common()
105 vi->hwrng = (struct hwrng) { in probe_common()
108 .priv = (unsigned long)vi, in probe_common()
109 .name = vi->name, in probe_common()
112 vdev->priv = vi; in probe_common()
115 vi->vq = virtio_find_single_vq(vdev, random_recv_done, "input"); in probe_common()
116 if (IS_ERR(vi->vq)) { in probe_common()
117 err = PTR_ERR(vi->vq); in probe_common()
126 kfree(vi); in probe_common()
132 struct virtrng_info *vi = vdev->priv; in remove_common() local
134 vi->hwrng_removed = true; in remove_common()
135 vi->data_avail = 0; in remove_common()
136 complete(&vi->have_data); in remove_common()
138 vi->busy = false; in remove_common()
139 if (vi->hwrng_register_done) in remove_common()
140 hwrng_unregister(&vi->hwrng); in remove_common()
142 ida_simple_remove(&rng_index_ida, vi->index); in remove_common()
143 kfree(vi); in remove_common()
158 struct virtrng_info *vi = vdev->priv; in virtrng_scan() local
161 err = hwrng_register(&vi->hwrng); in virtrng_scan()
163 vi->hwrng_register_done = true; in virtrng_scan()
179 struct virtrng_info *vi = vdev->priv; in virtrng_restore() local
186 vi->hwrng_removed = true; in virtrng_restore()
187 err = hwrng_register(&vi->hwrng); in virtrng_restore()
189 vi->hwrng_register_done = true; in virtrng_restore()
190 vi->hwrng_removed = false; in virtrng_restore()