cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

cryptodev-vhost.h (4246B)


      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
     34typedef struct CryptoDevBackendVhostOptions {
     35    VhostBackendType backend_type;
     36    void *opaque;
     37    int total_queues;
     38    CryptoDevBackendClient *cc;
     39} CryptoDevBackendVhostOptions;
     40
     41typedef 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 */
     57uint64_t
     58cryptodev_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 */
     74struct CryptoDevBackendVhost *
     75cryptodev_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 */
     86void 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 */
    100CryptoDevBackendVhost *
    101cryptodev_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 */
    113int 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 */
    123void 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 */
    135void 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 */
    150bool cryptodev_vhost_virtqueue_pending(VirtIODevice *dev,
    151                                              int queue, int idx);
    152
    153#endif /* CRYPTODEV_VHOST_H */