qemu/include/hw/virtio/virtio-crypto.h
<<
>>
Prefs
   1/*
   2 * Virtio crypto Support
   3 *
   4 * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD.
   5 *
   6 * Authors:
   7 *    Gonglei <arei.gonglei@huawei.com>
   8 *
   9 * This work is licensed under the terms of the GNU GPL, version 2 or
  10 * (at your option) any later version.  See the COPYING file in the
  11 * top-level directory.
  12 */
  13
  14#ifndef QEMU_VIRTIO_CRYPTO_H
  15#define QEMU_VIRTIO_CRYPTO_H
  16
  17#include "standard-headers/linux/virtio_crypto.h"
  18#include "hw/virtio/virtio.h"
  19#include "sysemu/iothread.h"
  20#include "sysemu/cryptodev.h"
  21#include "qom/object.h"
  22
  23
  24#define DEBUG_VIRTIO_CRYPTO 0
  25
  26#define DPRINTF(fmt, ...) \
  27do { \
  28    if (DEBUG_VIRTIO_CRYPTO) { \
  29        fprintf(stderr, "virtio_crypto: " fmt, ##__VA_ARGS__); \
  30    } \
  31} while (0)
  32
  33
  34#define TYPE_VIRTIO_CRYPTO "virtio-crypto-device"
  35OBJECT_DECLARE_SIMPLE_TYPE(VirtIOCrypto, VIRTIO_CRYPTO)
  36#define VIRTIO_CRYPTO_GET_PARENT_CLASS(obj) \
  37        OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_CRYPTO)
  38
  39
  40typedef struct VirtIOCryptoConf {
  41    CryptoDevBackend *cryptodev;
  42
  43    /* Supported service mask */
  44    uint32_t crypto_services;
  45
  46    /* Detailed algorithms mask */
  47    uint32_t cipher_algo_l;
  48    uint32_t cipher_algo_h;
  49    uint32_t hash_algo;
  50    uint32_t mac_algo_l;
  51    uint32_t mac_algo_h;
  52    uint32_t aead_algo;
  53    uint32_t akcipher_algo;
  54
  55    /* Maximum length of cipher key */
  56    uint32_t max_cipher_key_len;
  57    /* Maximum length of authenticated key */
  58    uint32_t max_auth_key_len;
  59    /* Maximum size of each crypto request's content */
  60    uint64_t max_size;
  61} VirtIOCryptoConf;
  62
  63struct VirtIOCrypto;
  64
  65typedef struct VirtIOCryptoReq {
  66    VirtQueueElement elem;
  67    /* flags of operation, such as type of algorithm */
  68    uint32_t flags;
  69    struct virtio_crypto_inhdr *in;
  70    struct iovec *in_iov; /* Head address of dest iovec */
  71    unsigned int in_num; /* Number of dest iovec */
  72    size_t in_len;
  73    VirtQueue *vq;
  74    struct VirtIOCrypto *vcrypto;
  75    CryptoDevBackendOpInfo op_info;
  76} VirtIOCryptoReq;
  77
  78typedef struct VirtIOCryptoQueue {
  79    VirtQueue *dataq;
  80    QEMUBH *dataq_bh;
  81    struct VirtIOCrypto *vcrypto;
  82} VirtIOCryptoQueue;
  83
  84struct VirtIOCrypto {
  85    VirtIODevice parent_obj;
  86
  87    VirtQueue *ctrl_vq;
  88    VirtIOCryptoQueue *vqs;
  89    VirtIOCryptoConf conf;
  90    CryptoDevBackend *cryptodev;
  91
  92    uint32_t max_queues;
  93    uint32_t status;
  94
  95    int multiqueue;
  96    uint32_t curr_queues;
  97    size_t config_size;
  98    uint8_t vhost_started;
  99};
 100
 101#endif /* QEMU_VIRTIO_CRYPTO_H */
 102