| /* | |
| * QEMU Crypto Device Common Vhost Implement | |
| * | |
| * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD. | |
| * | |
| * Authors: | |
| * Gonglei <arei.gonglei@huawei.com> | |
| * Jay Zhou <jianjay.zhou@huawei.com> | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library 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 | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, see <http://www.gnu.org/licenses/>. | |
| * | |
| */ | |
| #ifndef CRYPTODEV_VHOST_H | |
| #define CRYPTODEV_VHOST_H | |
| #include "hw/virtio/vhost.h" | |
| #include "hw/virtio/vhost-backend.h" | |
| #include "chardev/char.h" | |
| #include "system/cryptodev.h" | |
| typedef struct CryptoDevBackendVhostOptions { | |
| VhostBackendType backend_type; | |
| void *opaque; | |
| int total_queues; | |
| CryptoDevBackendClient *cc; | |
| } CryptoDevBackendVhostOptions; | |
| typedef struct CryptoDevBackendVhost { | |
| struct vhost_dev dev; | |
| struct vhost_virtqueue vqs[1]; | |
| int backend; | |
| CryptoDevBackendClient *cc; | |
| } CryptoDevBackendVhost; | |
| /** | |
| * cryptodev_vhost_get_max_queues: | |
| * @crypto: the cryptodev backend common vhost object | |
| * | |
| * Get the maximum queue number of @crypto. | |
| * | |
| * | |
| * Returns: the maximum queue number | |
| */ | |
| uint64_t | |
| cryptodev_vhost_get_max_queues( | |
| CryptoDevBackendVhost *crypto); | |
| /** | |
| * cryptodev_vhost_init: | |
| * @options: the common vhost object's option | |
| * | |
| * Creates a new cryptodev backend common vhost object | |
| * | |
| ** The returned object must be released with | |
| * cryptodev_vhost_cleanup() when no | |
| * longer required | |
| * | |
| * Returns: the cryptodev backend common vhost object | |
| */ | |
| struct CryptoDevBackendVhost * | |
| cryptodev_vhost_init( | |
| CryptoDevBackendVhostOptions *options); | |
| /** | |
| * cryptodev_vhost_cleanup: | |
| * @crypto: the cryptodev backend common vhost object | |
| * | |
| * Clean the resource associated with @crypto that realizaed | |
| * by cryptodev_vhost_init() | |
| * | |
| */ | |
| void cryptodev_vhost_cleanup( | |
| CryptoDevBackendVhost *crypto); | |
| /** | |
| * cryptodev_get_vhost: | |
| * @cc: the client object for each queue | |
| * @b: the cryptodev backend common vhost object | |
| * @queue: the cryptodev backend queue index | |
| * | |
| * Gets a new cryptodev backend common vhost object based on | |
| * @b and @queue | |
| * | |
| * Returns: the cryptodev backend common vhost object | |
| */ | |
| CryptoDevBackendVhost * | |
| cryptodev_get_vhost(CryptoDevBackendClient *cc, | |
| CryptoDevBackend *b, | |
| uint16_t queue); | |
| /** | |
| * cryptodev_vhost_start: | |
| * @dev: the virtio crypto object | |
| * @total_queues: the total count of queue | |
| * | |
| * Starts the vhost crypto logic | |
| * | |
| * Returns: 0 for success, negative for errors | |
| */ | |
| int cryptodev_vhost_start(VirtIODevice *dev, int total_queues); | |
| /** | |
| * cryptodev_vhost_stop: | |
| * @dev: the virtio crypto object | |
| * @total_queues: the total count of queue | |
| * | |
| * Stops the vhost crypto logic | |
| * | |
| */ | |
| void cryptodev_vhost_stop(VirtIODevice *dev, int total_queues); | |
| /** | |
| * cryptodev_vhost_virtqueue_mask: | |
| * @dev: the virtio crypto object | |
| * @queue: the cryptodev backend queue index | |
| * @idx: the virtqueue index | |
| * @mask: mask or not (true or false) | |
| * | |
| * Mask/unmask events for @idx virtqueue on @dev device | |
| * | |
| */ | |
| void cryptodev_vhost_virtqueue_mask(VirtIODevice *dev, | |
| int queue, | |
| int idx, bool mask); | |
| /** | |
| * cryptodev_vhost_virtqueue_pending: | |
| * @dev: the virtio crypto object | |
| * @queue: the cryptodev backend queue index | |
| * @idx: the virtqueue index | |
| * | |
| * Test and clear event pending status for @idx virtqueue on @dev device. | |
| * Should be called after unmask to avoid losing events. | |
| * | |
| * Returns: true for success, false for errors | |
| */ | |
| bool cryptodev_vhost_virtqueue_pending(VirtIODevice *dev, | |
| int queue, int idx); | |
| #endif /* CRYPTODEV_VHOST_H */ |