[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 10/13] cryptodev: introduce an unified wrapper fo
From: |
Gonglei |
Subject: |
[Qemu-devel] [PATCH v4 10/13] cryptodev: introduce an unified wrapper for crypto operation |
Date: |
Wed, 28 Sep 2016 16:25:49 +0800 |
We use an opaque point to the VirtIOCryptoReq which
can support different packets based on different
algorithms.
Signed-off-by: Gonglei <address@hidden>
---
backends/cryptodev-builtin.c | 2 +-
backends/cryptodev.c | 28 ++++++++++++++++++++++++++--
hw/virtio/virtio-crypto.c | 10 +++++-----
include/sysemu/cryptodev.h | 13 +++++++------
4 files changed, 39 insertions(+), 14 deletions(-)
diff --git a/backends/cryptodev-builtin.c b/backends/cryptodev-builtin.c
index 22fbe84..fa207da 100644
--- a/backends/cryptodev-builtin.c
+++ b/backends/cryptodev-builtin.c
@@ -282,7 +282,7 @@ static int qcrypto_cryptodev_backend_builtin_sym_operation(
return -VIRTIO_CRYPTO_ERR;
}
}
- return 0;
+ return VIRTIO_CRYPTO_OK;
}
static void qcrypto_cryptodev_backend_builtin_cleanup(
diff --git a/backends/cryptodev.c b/backends/cryptodev.c
index 8963019..6c2381d 100644
--- a/backends/cryptodev.c
+++ b/backends/cryptodev.c
@@ -30,6 +30,8 @@
#include "qapi-visit.h"
#include "qemu/config-file.h"
#include "qom/object_interfaces.h"
+#include "hw/virtio/virtio-crypto.h"
+
static QTAILQ_HEAD(, QCryptoCryptoDevBackendClientState) crypto_clients;
@@ -104,7 +106,7 @@ int qcrypto_cryptodev_backend_sym_close_session(
return -1;
}
-int qcrypto_cryptodev_backend_sym_operation(
+static int qcrypto_cryptodev_backend_sym_operation(
QCryptoCryptoDevBackend *backend,
QCryptoCryptoDevBackendSymOpInfo *op_info,
uint32_t queue_index, Error **errp)
@@ -116,7 +118,29 @@ int qcrypto_cryptodev_backend_sym_operation(
return bc->do_sym_op(backend, op_info, queue_index, errp);
}
- return -1;
+ return -VIRTIO_CRYPTO_ERR;
+}
+
+int qcrypto_cryptodev_backend_crypto_operation(
+ QCryptoCryptoDevBackend *backend,
+ void *opaque,
+ uint32_t queue_index, Error **errp)
+{
+ VirtIOCryptoReq *req = opaque;
+
+ if (req->flags == QCRYPTO_CRYPTODEV_BACKEND_ALG_SYM) {
+ QCryptoCryptoDevBackendSymOpInfo *op_info;
+ op_info = req->u.sym_op_info;
+
+ return qcrypto_cryptodev_backend_sym_operation(backend,
+ op_info, queue_index, errp);
+ } else {
+ error_setg(errp, "Unsupported cryptodev alg type: %" PRIu32 "",
+ req->flags);
+ return -VIRTIO_CRYPTO_NOTSUPP;
+ }
+
+ return -VIRTIO_CRYPTO_ERR;
}
static void
diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c
index a35dbcd..6d006c3 100644
--- a/hw/virtio/virtio-crypto.c
+++ b/hw/virtio/virtio-crypto.c
@@ -672,15 +672,15 @@ virtio_crypto_handle_request(VirtIOCryptoReq *request)
request->flags = QCRYPTO_CRYPTODEV_BACKEND_ALG_SYM;
request->u.sym_op_info = sym_op_info;
request->idata_hva = idata_hva;
- ret = qcrypto_cryptodev_backend_sym_operation(vcrypto->cryptodev,
- sym_op_info, queue_index, &local_err);
+ ret = qcrypto_cryptodev_backend_crypto_operation(vcrypto->cryptodev,
+ request, queue_index, &local_err);
if (ret < 0) {
- status = VIRTIO_CRYPTO_ERR;
+ status = -ret;
if (local_err) {
error_report_err(local_err);
}
- } else { /* ret >= 0 */
- status = VIRTIO_CRYPTO_OK;
+ } else { /* ret == VIRTIO_CRYPTO_OK */
+ status = ret;
}
virtio_crypto_req_complete(request, status);
virtio_crypto_free_request(request);
diff --git a/include/sysemu/cryptodev.h b/include/sysemu/cryptodev.h
index ea5e1bb..9ae5b22 100644
--- a/include/sysemu/cryptodev.h
+++ b/include/sysemu/cryptodev.h
@@ -259,20 +259,21 @@ int qcrypto_cryptodev_backend_sym_close_session(
uint32_t queue_index, Error **errp);
/**
- * qcrypto_cryptodev_backend_sym_operation:
+ * qcrypto_cryptodev_backend_crypto_operation:
* @backend: the cryptodev backend object
- * @op_info: parameters needed by symmetric crypto operation
+ * @opaque: pointer to a VirtIOCryptoReq object
* @queue_index: queue index of cryptodev backend client
* @errp: pointer to a NULL-initialized error object
*
- * Do symmetric crypto operation, such as encryption and
+ * Do crypto operation, such as encryption and
* decryption
*
- * Returns: 0 on success, or Negative on error
+ * Returns: VIRTIO_CRYPTO_OK on success,
+ * or -VIRTIO_CRYPTO_* on error
*/
-int qcrypto_cryptodev_backend_sym_operation(
+int qcrypto_cryptodev_backend_crypto_operation(
QCryptoCryptoDevBackend *backend,
- QCryptoCryptoDevBackendSymOpInfo *op_info,
+ void *opaque,
uint32_t queue_index, Error **errp);
#endif /* QCRYPTO_CRYPTODEV_H */
--
1.7.12.4
- [Qemu-devel] [PATCH v4 03/13] virtio-crypto: introduce virtio_crypto.h, (continued)
- [Qemu-devel] [PATCH v4 03/13] virtio-crypto: introduce virtio_crypto.h, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 11/13] virtio-crypto: emulate virtio crypto as a legacy device by default, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 13/13] virtio-crypto: add myself as virtio-crypto and cryptodev backends maintainer, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 06/13] virtio-crypto-pci: add virtio crypto pci support, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 02/13] cryptodev: add symmetric algorithm operation stuff, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 01/13] cryptodev: introduce cryptodev backend interface, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 05/13] virtio-crypto: add virtio crypto device emulation, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 09/13] virtio-crypto: add data queue processing handler, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 12/13] virtio-crypto-test: add qtest case for virtio-crypto, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 07/13] virtio-crypto: set capacity of algorithms supported, Gonglei, 2016/09/28
- [Qemu-devel] [PATCH v4 10/13] cryptodev: introduce an unified wrapper for crypto operation,
Gonglei <=
- [Qemu-devel] [PATCH v4 04/13] cryptodev: introduce a new cryptodev backend, Gonglei, 2016/09/28
- Re: [Qemu-devel] [PATCH v4 00/13] virtio-crypto: introduce framework and device emulation, no-reply, 2016/09/28