#include <asm/barrier.h>
#include <linux/err.h>
#include <linux/hw_random.h>
#include <linux/scatterlist.h>
#include <linux/spinlock.h>
#include <linux/virtio.h>
#include <linux/virtio_rng.h>
#include <linux/module.h>
#include <linux/slab.h>
static DEFINE_IDA(rng_index_ida);
struct virtrng_info { … };
static void random_recv_done(struct virtqueue *vq)
{ … }
static void request_entropy(struct virtrng_info *vi)
{ … }
static unsigned int copy_data(struct virtrng_info *vi, void *buf,
unsigned int size)
{ … }
static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
{ … }
static void virtio_cleanup(struct hwrng *rng)
{ … }
static int probe_common(struct virtio_device *vdev)
{ … }
static void remove_common(struct virtio_device *vdev)
{ … }
static int virtrng_probe(struct virtio_device *vdev)
{ … }
static void virtrng_remove(struct virtio_device *vdev)
{ … }
static void virtrng_scan(struct virtio_device *vdev)
{ … }
static int virtrng_freeze(struct virtio_device *vdev)
{ … }
static int virtrng_restore(struct virtio_device *vdev)
{ … }
static const struct virtio_device_id id_table[] = …;
static struct virtio_driver virtio_rng_driver = …;
module_virtio_driver(…) …;
MODULE_DEVICE_TABLE(virtio, id_table);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;