qemu/include/hw/virtio/virtio-rng.h
<<
>>
Prefs
   1/*
   2 * Virtio RNG Support
   3 *
   4 * Copyright Red Hat, Inc. 2012
   5 * Copyright Amit Shah <amit.shah@redhat.com>
   6 *
   7 * This work is licensed under the terms of the GNU GPL, version 2 or
   8 * (at your option) any later version.  See the COPYING file in the
   9 * top-level directory.
  10 */
  11
  12#ifndef QEMU_VIRTIO_RNG_H
  13#define QEMU_VIRTIO_RNG_H
  14
  15#include "hw/virtio/virtio.h"
  16#include "sysemu/rng.h"
  17#include "standard-headers/linux/virtio_rng.h"
  18
  19#define TYPE_VIRTIO_RNG "virtio-rng-device"
  20#define VIRTIO_RNG(obj) \
  21        OBJECT_CHECK(VirtIORNG, (obj), TYPE_VIRTIO_RNG)
  22#define VIRTIO_RNG_GET_PARENT_CLASS(obj) \
  23        OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_RNG)
  24
  25struct VirtIORNGConf {
  26    RngBackend *rng;
  27    uint64_t max_bytes;
  28    uint32_t period_ms;
  29};
  30
  31typedef struct VirtIORNG {
  32    VirtIODevice parent_obj;
  33
  34    /* Only one vq - guest puts buffer(s) on it when it needs entropy */
  35    VirtQueue *vq;
  36
  37    VirtIORNGConf conf;
  38
  39    RngBackend *rng;
  40
  41    /* We purposefully don't migrate this state.  The quota will reset on the
  42     * destination as a result.  Rate limiting is host state, not guest state.
  43     */
  44    QEMUTimer *rate_limit_timer;
  45    int64_t quota_remaining;
  46    bool activate_timer;
  47
  48    VMChangeStateEntry *vmstate;
  49} VirtIORNG;
  50
  51#endif
  52