aboutsummaryrefslogtreecommitdiffstats
path: root/vhost_user_rng.c
diff options
context:
space:
mode:
Diffstat (limited to 'vhost_user_rng.c')
-rw-r--r--vhost_user_rng.c219
1 files changed, 0 insertions, 219 deletions
diff --git a/vhost_user_rng.c b/vhost_user_rng.c
deleted file mode 100644
index 96eb13e..0000000
--- a/vhost_user_rng.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Based on vhost-user-rng of QEMU project
- *
- * Copyright (c) 2021 Mathieu Poirier <mathieu.poirier@linaro.org>
- *
- * Copyright (c) 2022-2023 Virtual Open Systems SAS.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdbool.h>
-#include <sys/param.h>
-
-/* Project header files */
-#include "vhost_loopback.h"
-#include "vhost_user_rng.h"
-
-#ifdef DEBUG
-#define DBG(...) printf("vhost-user-rng: " __VA_ARGS__)
-#else
-#define DBG(...)
-#endif /* DEBUG */
-
-static void vu_rng_start(VirtIODevice *vdev)
-{
- VHostUserRNG *rng = vdev->vhrng;
- VirtioBus *k = vdev->vbus;
- int ret;
- int i;
-
- /* TODO: This might be deleted in future */
- if (!k->set_guest_notifiers) {
- DBG("binding does not support guest notifiers\n");
- return;
- }
-
- ret = vhost_dev_enable_notifiers(rng->vhost_dev, vdev);
- if (ret < 0) {
- DBG("Error enabling host notifiers: %d\n", ret);
- return;
- }
-
- ret = k->set_guest_notifiers(vdev, rng->vhost_dev->nvqs, true);
- if (ret < 0) {
- DBG("Error binding guest notifier: %d\n", ret);
- return;
- }
-
- rng->vhost_dev->acked_features = vdev->guest_features;
- DBG("rng->vhost_dev->acked_features: 0x%lx\n", vdev->guest_features);
-
- ret = vhost_dev_start(rng->vhost_dev, vdev, true);
- if (ret < 0) {
- DBG("Error starting vhost-user-rng: %d\n", ret);
- return;
- }
-
- /*
- * guest_notifier_mask/pending not used yet, so just unmask
- * everything here. virtio-pci will do the right thing by
- * enabling/disabling irqfd.
- */
- for (i = 0; i < (int)rng->vhost_dev->nvqs; i++) {
- vhost_virtqueue_mask(rng->vhost_dev, vdev, i, false);
- }
-}
-
-/* To be used in future release
- *
- * static void vu_rng_stop(VirtIODevice *vdev)
- * {
- * DBG("vu_rng_stop is not yet implemented\n");
- * (void)vdev;
- * }
- *
- */
-
-static uint64_t vu_rng_get_features(VirtIODevice *vdev,
- uint64_t requested_features)
-{
- DBG("vu_rng_get_features is not yet implemented\n");
- (void)vdev;
-
- /* No feature bits used yet */
- return requested_features;
-}
-
-/* TODO: We need to implement this function in a future release */
-static void vu_rng_guest_notifier_mask(VirtIODevice *vdev, int idx, bool mask)
-{
- VHostUserRNG *rng = vdev->vhrng;
-
- DBG("vu_rng_guest_notifier_mask is not yet implemented\n");
- (void)vdev;
- (void)idx;
- (void)mask;
- (void)rng;
-
- /* ADD: vhost_virtqueue_mask(&rng->vhost_dev, vdev, idx, mask); */
-}
-
-/* TODO: We need to implement this function in a future release */
-static bool vu_rng_guest_notifier_pending(VirtIODevice *vdev, int idx)
-{
- VHostUserRNG *rng = vdev->vhrng;
-
- DBG("vu_rng_guest_notifier_pending is not yet implemented\n");
- (void)vdev;
- (void)idx;
- (void)rng;
-
- /* ADD: return vhost_virtqueue_pending(&rng->vhost_dev, idx); */
- return 1;
-}
-
-static void vu_rng_set_status(VirtIODevice *vdev, uint8_t status)
-{
- VHostUserRNG *rng = vdev->vhrng;
- bool should_start = status & VIRTIO_CONFIG_S_DRIVER_OK;
-
- if (rng->vhost_dev->started == should_start) {
- DBG("rng->vhost_dev->started != should_start\n");
- return;
- }
-
- if (should_start) {
- vu_rng_start(vdev);
- } else {
- DBG("vu_rng_stop(vdev)\n");
- /* TODO: Add vu_rng_stop(vdev); when this function is implemented */
- }
-}
-
-static void virtio_dev_class_init(VirtIODevice *vdev)
-{
- vdev->vdev_class = (VirtioDeviceClass *)malloc(sizeof(VirtioDeviceClass));
- vdev->vdev_class->parent = vdev;
- vdev->vdev_class->set_status = vu_rng_set_status;
- vdev->vdev_class->get_features = vu_rng_get_features;
- vdev->vdev_class->guest_notifier_mask = vu_rng_guest_notifier_mask;
- vdev->vdev_class->guest_notifier_pending = vu_rng_guest_notifier_pending;
- vdev->vdev_class->update_mem_table = update_mem_table;
-}
-
-
-void vhost_user_rng_init(VirtIODevice *vdev)
-{
- VHostUserRNG *vhrng = (VHostUserRNG *)malloc(sizeof(VHostUserRNG));
- vdev->vhrng = vhrng;
- vdev->nvqs = (int *)&dev->nvqs;
- vhrng->parent = vdev;
- vhrng->req_vq = vdev->vq;
- vhrng->vhost_dev = dev;
-
- virtio_dev_class_init(vdev);
- virtio_loopback_bus_init(vdev->vbus);
-}
-
-static void vu_rng_handle_output(VirtIODevice *vdev, VirtQueue *vq)
-{
- (void)vdev;
- (void)vq;
- /*
- * Not normally called; it's the daemon that handles the queue;
- * however virtio's cleanup path can call this.
- */
- DBG("vu_rng_handle_output\n");
-}
-
-
-void vhost_user_rng_realize(int queue_num, int queue_size)
-{
- (void)queue_num;
- (void)queue_size;
-
- /* Initiliaze virtio_dev data structures */
- virtio_dev_init(global_vdev, "virtio-rng", 4, 0);
-
- /* This needs to be change to vhost-user-rng init */
- vhost_user_rng_init(global_vdev);
-
- global_vdev->vq = virtio_add_queue(global_vdev, 4, vu_rng_handle_output);
-
- global_vdev->host_features = 0x39000000;
-
- proxy = (VirtIOMMIOProxy *)malloc(sizeof(VirtIOMMIOProxy));
- *proxy = (VirtIOMMIOProxy) {
- .legacy = 1,
- };
-
- /* Virtqueues conf */
- dev->nvqs = 1;
- dev->vqs = (struct vhost_virtqueue *)malloc(dev->nvqs *
- sizeof(struct vhost_virtqueue));
-
- /* Initiale vhost-user communication */
- vhost_dev_init(dev);
-
- /* Write the final features */
- global_vdev->host_features = dev->features;
- DBG("dev->host_features: 0x%lx\n", dev->features);
-}