Hi Marcin/Konstantin, > > Add new API allowing to process crypto operations in a synchronous > manner. Operations are performed on a set of SG arrays. > > Sync mode is selected by setting appropriate flag in an xform > type number. Cryptodevs which allows CPU crypto operation mode have to > use RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO capability.
There is no change in xform. This description need to be updated. I think It was not edited while you removed that xform changes. Documentation missing in this patch. > > Signed-off-by: Konstantin Ananyev <konstantin.anan...@intel.com> > Signed-off-by: Marcin Smoczynski <marcinx.smoczyn...@intel.com> > --- > lib/librte_cryptodev/rte_crypto_sym.h | 63 ++++++++++++++++++- > lib/librte_cryptodev/rte_cryptodev.c | 35 ++++++++++- > lib/librte_cryptodev/rte_cryptodev.h | 22 ++++++- > lib/librte_cryptodev/rte_cryptodev_pmd.h | 21 ++++++- > .../rte_cryptodev_version.map | 1 + > 5 files changed, 138 insertions(+), 4 deletions(-) > > diff --git a/lib/librte_cryptodev/rte_crypto_sym.h > b/lib/librte_cryptodev/rte_crypto_sym.h > index bc356f6ff..d6f3105fe 100644 > --- a/lib/librte_cryptodev/rte_crypto_sym.h > +++ b/lib/librte_cryptodev/rte_crypto_sym.h > @@ -1,5 +1,5 @@ > /* SPDX-License-Identifier: BSD-3-Clause > - * Copyright(c) 2016-2019 Intel Corporation > + * Copyright(c) 2016-2020 Intel Corporation > */ > > #ifndef _RTE_CRYPTO_SYM_H_ > @@ -25,6 +25,67 @@ extern "C" { > #include <rte_mempool.h> > #include <rte_common.h> > > +/** > + * Crypto IO Vector (in analogy with struct iovec) > + * Supposed be used to pass input/output data buffers for crypto data-path > + * functions. > + */ > +struct rte_crypto_vec { > + /** virtual address of the data buffer */ > + void *base; > + /** IOVA of the data buffer */ > + rte_iova_t *iova; > + /** length of the data buffer */ > + uint32_t len; > +}; > + > +/** > + * Crypto scatter-gather list descriptor. Consists of a pointer to an array > + * of Crypto IO vectors with its size. > + */ > +struct rte_crypto_sgl { > + /** start of an array of vectors */ > + struct rte_crypto_vec *vec; > + /** size of an array of vectors */ > + uint32_t num; > +}; > + > +/** > + * Synchronous operation descriptor. > + * Supposed to be used with CPU crypto API call. > + */ > +struct rte_crypto_sym_vec { > + /** array of SGL vectors */ > + struct rte_crypto_sgl *sgl; > + /** array of pointers to IV */ > + void **iv; > + /** array of pointers to AAD */ > + void **aad; > + /** array of pointers to digest */ > + void **digest; > + /** > + * array of statuses for each operation: > + * - 0 on success > + * - errno on error > + */ > + int32_t *status; > + /** number of operations to perform */ > + uint32_t num; > +}; > + > +/** > + * used for cpu_crypto_process_bulk() to specify head/tail offsets > + * for auth/cipher processing. > + */ > +union rte_crypto_sym_ofs { > + uint64_t raw; > + struct { > + struct { > + uint16_t head; > + uint16_t tail; > + } auth, cipher; > + } ofs; > +}; > > /** Symmetric Cipher Algorithms */ > enum rte_crypto_cipher_algorithm { > diff --git a/lib/librte_cryptodev/rte_cryptodev.c > b/lib/librte_cryptodev/rte_cryptodev.c > index 5c6359b5c..889d61319 100644 > --- a/lib/librte_cryptodev/rte_cryptodev.c > +++ b/lib/librte_cryptodev/rte_cryptodev.c > @@ -1,5 +1,5 @@ > /* SPDX-License-Identifier: BSD-3-Clause > - * Copyright(c) 2015-2017 Intel Corporation > + * Copyright(c) 2015-2020 Intel Corporation > */ > > #include <sys/types.h> > @@ -494,6 +494,8 @@ rte_cryptodev_get_feature_name(uint64_t flag) > return "RSA_PRIV_OP_KEY_QT"; > case RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED: > return "DIGEST_ENCRYPTED"; > + case RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO: > + return "SYM_CPU_CRYPTO"; Update needed in the doc/guides/cryptodevs/features/default.ini