1 /*
2 * Copyright (C) 2018-2022 Intel Corporation.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8 /* Routines to notify the VBS-K in kernel */
9
10 #include <stdio.h>
11 #include <sys/ioctl.h>
12 #include "virtio_kernel.h"
13 #include "log.h"
14
15 static int virtio_kernel_debug;
16 #define DPRINTF(params) do { if (virtio_kernel_debug) pr_dbg params; } while (0)
17 #define WPRINTF(params) (pr_err params)
18
19 static int
vbs_dev_info_set(int fd,void * arg)20 vbs_dev_info_set(int fd, void *arg)
21 {
22 return ioctl(fd, VBS_K_SET_DEV, arg);
23 }
24
25 static int
vbs_vqs_info_set(int fd,void * arg)26 vbs_vqs_info_set(int fd, void *arg)
27 {
28 return ioctl(fd, VBS_K_SET_VQ, arg);
29 }
30
31 /* VBS-K common ops */
32 /**
33 * @brief Virtio kernel module reset.
34 *
35 * @param fd File descriptor representing virtio backend in kernel module.
36 *
37 * @return 0 on OK and non-zero on error.
38 */
39 int
vbs_kernel_reset(int fd)40 vbs_kernel_reset(int fd)
41 {
42 return ioctl(fd, VBS_K_RESET_DEV, NULL);
43 }
44
45 /*
46 * We need a way to start/stop vbs_k execution since guest might want to
47 * change the configuration of the virtio device after VBS-K has been
48 * initialized.
49 */
50 /**
51 * @brief Virtio kernel module start.
52 *
53 * @param fd File descriptor representing virtio backend in kernel module.
54 * @param dev Pointer to struct vbs_dev_info.
55 * @param vqs Pointer to struct vbs_vqs_info.
56 *
57 * @return 0 on OK and non-zero on error.
58 */
59 int
vbs_kernel_start(int fd,struct vbs_dev_info * dev,struct vbs_vqs_info * vqs)60 vbs_kernel_start(int fd, struct vbs_dev_info *dev, struct vbs_vqs_info *vqs)
61 {
62 int ret;
63
64 if (fd < 0) {
65 WPRINTF(("%s: fd < 0\n", __func__));
66 return -VIRTIO_ERROR_FD_OPEN_FAILED;
67 }
68
69 ret = vbs_dev_info_set(fd, dev);
70 if (ret < 0) {
71 WPRINTF(("vbs_kernel_set_dev failed: ret %d\n", ret));
72 return ret;
73 }
74
75 ret = vbs_vqs_info_set(fd, vqs);
76 if (ret < 0) {
77 WPRINTF(("vbs_kernel_set_vqs failed: ret %d\n", ret));
78 return ret;
79 }
80
81 return VIRTIO_SUCCESS;
82 }
83
84 /**
85 * @brief Virtio kernel module stop.
86 *
87 * @param fd File descriptor representing virtio backend in kernel module.
88 *
89 * @return 0 on OK and non-zero on error.
90 */
91 int
vbs_kernel_stop(int fd)92 vbs_kernel_stop(int fd)
93 {
94 DPRINTF(("%s\n", __func__));
95 return VIRTIO_SUCCESS;
96 }
97