Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging
[qemu.git] / include / sysemu / cryptodev-vhost.h
1 /*
2 * QEMU Crypto Device Common Vhost Implement
3 *
4 * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD.
5 *
6 * Authors:
7 * Gonglei <arei.gonglei@huawei.com>
8 * Jay Zhou <jianjay.zhou@huawei.com>
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
22 *
23 */
24 #ifndef CRYPTODEV_VHOST_H
25 #define CRYPTODEV_VHOST_H
26
27 #include "hw/virtio/vhost.h"
28 #include "hw/virtio/vhost-backend.h"
29 #include "chardev/char.h"
30
31 #include "sysemu/cryptodev.h"
32
33
34 typedef struct CryptoDevBackendVhostOptions {
35 VhostBackendType backend_type;
36 void *opaque;
37 int total_queues;
38 CryptoDevBackendClient *cc;
39 } CryptoDevBackendVhostOptions;
40
41 typedef struct CryptoDevBackendVhost {
42 struct vhost_dev dev;
43 struct vhost_virtqueue vqs[1];
44 int backend;
45 CryptoDevBackendClient *cc;
46 } CryptoDevBackendVhost;
47
48 /**
49 * cryptodev_vhost_get_max_queues:
50 * @crypto: the cryptodev backend common vhost object
51 *
52 * Get the maximum queue number of @crypto.
53 *
54 *
55 * Returns: the maximum queue number
56 */
57 uint64_t
58 cryptodev_vhost_get_max_queues(
59 CryptoDevBackendVhost *crypto);
60
61
62 /**
63 * cryptodev_vhost_init:
64 * @options: the common vhost object's option
65 *
66 * Creates a new cryptodev backend common vhost object
67 *
68 ** The returned object must be released with
69 * cryptodev_vhost_cleanup() when no
70 * longer required
71 *
72 * Returns: the cryptodev backend common vhost object
73 */
74 struct CryptoDevBackendVhost *
75 cryptodev_vhost_init(
76 CryptoDevBackendVhostOptions *options);
77
78 /**
79 * cryptodev_vhost_cleanup:
80 * @crypto: the cryptodev backend common vhost object
81 *
82 * Clean the resouce associated with @crypto that realizaed
83 * by cryptodev_vhost_init()
84 *
85 */
86 void cryptodev_vhost_cleanup(
87 CryptoDevBackendVhost *crypto);
88
89 /**
90 * cryptodev_get_vhost:
91 * @cc: the client object for each queue
92 * @b: the cryptodev backend common vhost object
93 * @queue: the cryptodev backend queue index
94 *
95 * Gets a new cryptodev backend common vhost object based on
96 * @b and @queue
97 *
98 * Returns: the cryptodev backend common vhost object
99 */
100 CryptoDevBackendVhost *
101 cryptodev_get_vhost(CryptoDevBackendClient *cc,
102 CryptoDevBackend *b,
103 uint16_t queue);
104 /**
105 * cryptodev_vhost_start:
106 * @dev: the virtio crypto object
107 * @total_queues: the total count of queue
108 *
109 * Starts the vhost crypto logic
110 *
111 * Returns: 0 for success, negative for errors
112 */
113 int cryptodev_vhost_start(VirtIODevice *dev, int total_queues);
114
115 /**
116 * cryptodev_vhost_stop:
117 * @dev: the virtio crypto object
118 * @total_queues: the total count of queue
119 *
120 * Stops the vhost crypto logic
121 *
122 */
123 void cryptodev_vhost_stop(VirtIODevice *dev, int total_queues);
124
125 /**
126 * cryptodev_vhost_virtqueue_mask:
127 * @dev: the virtio crypto object
128 * @queue: the cryptodev backend queue index
129 * @idx: the virtqueue index
130 * @mask: mask or not (true or false)
131 *
132 * Mask/unmask events for @idx virtqueue on @dev device
133 *
134 */
135 void cryptodev_vhost_virtqueue_mask(VirtIODevice *dev,
136 int queue,
137 int idx, bool mask);
138
139 /**
140 * cryptodev_vhost_virtqueue_pending:
141 * @dev: the virtio crypto object
142 * @queue: the cryptodev backend queue index
143 * @idx: the virtqueue index
144 *
145 * Test and clear event pending status for @idx virtqueue on @dev device.
146 * Should be called after unmask to avoid losing events.
147 *
148 * Returns: true for success, false for errors
149 */
150 bool cryptodev_vhost_virtqueue_pending(VirtIODevice *dev,
151 int queue, int idx);
152
153 #endif /* CRYPTODEV_VHOST_H */