From: "Ananyev, Konstantin" <konstantin.ananyev@intel.com> To: "Smoczynski, MarcinX" <marcinx.smoczynski@intel.com>, "akhil.goyal@nxp.com" <akhil.goyal@nxp.com>, "Zhang, Roy Fan" <roy.fan.zhang@intel.com>, "Doherty, Declan" <declan.doherty@intel.com>, "Nicolau, Radu" <radu.nicolau@intel.com> Cc: "dev@dpdk.org" <dev@dpdk.org> Subject: Re: [dpdk-dev] [PATCH v3 1/6] cryptodev: introduce cpu crypto support API Date: Wed, 15 Jan 2020 23:20:35 +0000 Message-ID: <SN6PR11MB2558196BA1A8D8A54FC5E4C99A370@SN6PR11MB2558.namprd11.prod.outlook.com> (raw) In-Reply-To: <20200115182832.17012-2-marcinx.smoczynski@intel.com> Hi Marcin, > 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. > > Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com> > Signed-off-by: Marcin Smoczynski <marcinx.smoczynski@intel.com> > --- > lib/librte_cryptodev/rte_crypto_sym.h | 62 ++++++++++++++++++- > lib/librte_cryptodev/rte_cryptodev.c | 30 +++++++++ > lib/librte_cryptodev/rte_cryptodev.h | 20 ++++++ > lib/librte_cryptodev/rte_cryptodev_pmd.h | 19 ++++++ > .../rte_cryptodev_version.map | 1 + > 5 files changed, 131 insertions(+), 1 deletion(-) > > diff --git a/lib/librte_cryptodev/rte_crypto_sym.h b/lib/librte_cryptodev/rte_crypto_sym.h > index ffa038dc4..f5dd05ab0 100644 > --- a/lib/librte_cryptodev/rte_crypto_sym.h > +++ b/lib/librte_cryptodev/rte_crypto_sym.h > @@ -25,6 +25,59 @@ 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; > +}; > + > +struct rte_crypto_sgl { > + /** start of an array of vectors */ > + struct rte_crypto_vec *vec; > + /** size of an array of vectors */ > + uint32_t num; > +}; > + > +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 { > @@ -425,7 +478,14 @@ enum rte_crypto_sym_xform_type { > RTE_CRYPTO_SYM_XFORM_NOT_SPECIFIED = 0, /**< No xform specified */ > RTE_CRYPTO_SYM_XFORM_AUTH, /**< Authentication xform */ > RTE_CRYPTO_SYM_XFORM_CIPHER, /**< Cipher xform */ > - RTE_CRYPTO_SYM_XFORM_AEAD /**< AEAD xform */ > + RTE_CRYPTO_SYM_XFORM_AEAD, /**< AEAD xform */ > + > + RTE_CRYPTO_SYM_XFORM_TYPE_MASK = 0xFFFF, > + /**< xform type mask value */ > + RTE_CRYPTO_SYM_XFORM_FLAG_MASK = 0xFFFF0000, > + /**< xform flag mask value */ > + RTE_CRYPTO_SYM_CPU_CRYPTO = 0x80000000, > + /**< xform flag for cpu-crypto */ We probably can avoid that. Instead just expect each PMD that does provide FF_SYM_CPU_CRYPTO capability to always create session that is capable to work in both modes (sync/async). Apart from that - LGTM. Konstantin > }; > > /** > diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c > index 89aa2ed3e..157fda890 100644 > --- a/lib/librte_cryptodev/rte_cryptodev.c > +++ b/lib/librte_cryptodev/rte_cryptodev.c > @@ -1616,6 +1616,36 @@ rte_cryptodev_sym_session_get_user_data( > return (void *)(sess->sess_data + sess->nb_drivers); > } > > +static inline void > +sym_crypto_fill_status(struct rte_crypto_sym_vec *vec, int32_t errnum) > +{ > + uint32_t i; > + for (i = 0; i < vec->num; i++) > + vec->status[i] = errnum; > +} > + > +uint32_t > +rte_cryptodev_sym_cpu_crypto_process(uint8_t dev_id, > + struct rte_cryptodev_sym_session *sess, union rte_crypto_sym_ofs ofs, > + struct rte_crypto_sym_vec *vec) > +{ > + struct rte_cryptodev *dev; > + > + if (!rte_cryptodev_pmd_is_valid_dev(dev_id)) { > + sym_crypto_fill_status(vec, EINVAL); > + return 0; > + } > + > + dev = rte_cryptodev_pmd_get_dev(dev_id); > + > + if (*dev->dev_ops->sym_cpu_process == NULL) { > + sym_crypto_fill_status(vec, ENOTSUP); > + return 0; > + } > + > + return dev->dev_ops->sym_cpu_process(dev, sess, ofs, vec); > +} > + > /** Initialise rte_crypto_op mempool element */ > static void > rte_crypto_op_init(struct rte_mempool *mempool, > diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h > index c6ffa3b35..8786dfb90 100644 > --- a/lib/librte_cryptodev/rte_cryptodev.h > +++ b/lib/librte_cryptodev/rte_cryptodev.h > @@ -450,6 +450,8 @@ rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum, > /**< Support encrypted-digest operations where digest is appended to data */ > #define RTE_CRYPTODEV_FF_ASYM_SESSIONLESS (1ULL << 20) > /**< Support asymmetric session-less operations */ > +#define RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO (1ULL << 21) > +/**< Support symmeteric cpu-crypto processing */ > > > /** > @@ -1274,6 +1276,24 @@ void * > rte_cryptodev_sym_session_get_user_data( > struct rte_cryptodev_sym_session *sess); > > +/** > + * Perform actual crypto processing (encrypt/digest or auth/decrypt) > + * on user provided data. > + * > + * @param dev_id The device identifier. > + * @param sess Cryptodev session structure > + * @param ofs Start and stop offsets for auth and cipher operations > + * @param vec Vectorized operation descriptor > + * > + * @return > + * - Returns number of successfully processed packets. > + */ > +__rte_experimental > +uint32_t > +rte_cryptodev_sym_cpu_crypto_process(uint8_t dev_id, > + struct rte_cryptodev_sym_session *sess, union rte_crypto_sym_ofs ofs, > + struct rte_crypto_sym_vec *vec); > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h b/lib/librte_cryptodev/rte_cryptodev_pmd.h > index fba14f2fa..5d9ee5fef 100644 > --- a/lib/librte_cryptodev/rte_cryptodev_pmd.h > +++ b/lib/librte_cryptodev/rte_cryptodev_pmd.h > @@ -308,6 +308,23 @@ typedef void (*cryptodev_sym_free_session_t)(struct rte_cryptodev *dev, > */ > typedef void (*cryptodev_asym_free_session_t)(struct rte_cryptodev *dev, > struct rte_cryptodev_asym_session *sess); > +/** > + * Perform actual crypto processing (encrypt/digest or auth/decrypt) > + * on user provided data. > + * > + * @param dev Crypto device pointer > + * @param sess Cryptodev session structure > + * @param ofs Start and stop offsets for auth and cipher operations > + * @param vec Vectorized operation descriptor > + * > + * @return > + * - Returns number of successfully processed packets. > + * > + */ > +typedef uint32_t (*cryptodev_sym_cpu_crypto_process_t) > + (struct rte_cryptodev *dev, struct rte_cryptodev_sym_session *sess, > + union rte_crypto_sym_ofs ofs, struct rte_crypto_sym_vec *vec); > + > > /** Crypto device operations function pointer table */ > struct rte_cryptodev_ops { > @@ -342,6 +359,8 @@ struct rte_cryptodev_ops { > /**< Clear a Crypto sessions private data. */ > cryptodev_asym_free_session_t asym_session_clear; > /**< Clear a Crypto sessions private data. */ > + cryptodev_sym_cpu_crypto_process_t sym_cpu_process; > + /**< process input data synchronously (cpu-crypto). */ > }; > > > diff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map > index 1dd1e259a..6e41b4be5 100644 > --- a/lib/librte_cryptodev/rte_cryptodev_version.map > +++ b/lib/librte_cryptodev/rte_cryptodev_version.map > @@ -71,6 +71,7 @@ EXPERIMENTAL { > rte_cryptodev_asym_session_init; > rte_cryptodev_asym_xform_capability_check_modlen; > rte_cryptodev_asym_xform_capability_check_optype; > + rte_cryptodev_sym_cpu_crypto_process; > rte_cryptodev_sym_get_existing_header_session_size; > rte_cryptodev_sym_session_get_user_data; > rte_cryptodev_sym_session_pool_create; > -- > 2.17.1
next prev parent reply other threads:[~2020-01-15 23:20 UTC|newest] Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-01-15 18:28 [dpdk-dev] [PATCH v3 0/6] Introduce CPU crypto mode Marcin Smoczynski 2020-01-15 18:28 ` [dpdk-dev] [PATCH v3 1/6] cryptodev: introduce cpu crypto support API Marcin Smoczynski 2020-01-15 23:20 ` Ananyev, Konstantin [this message] 2020-01-16 10:11 ` Zhang, Roy Fan 2020-01-15 18:28 ` [dpdk-dev] [PATCH v3 2/6] crypto/aesni_gcm: cpu crypto support Marcin Smoczynski 2020-01-15 23:16 ` Ananyev, Konstantin 2020-01-16 10:00 ` Zhang, Roy Fan 2020-01-21 13:53 ` De Lara Guarch, Pablo 2020-01-21 14:29 ` Ananyev, Konstantin 2020-01-21 14:51 ` De Lara Guarch, Pablo 2020-01-21 15:23 ` Ananyev, Konstantin 2020-01-21 22:33 ` De Lara Guarch, Pablo 2020-01-22 12:43 ` Ananyev, Konstantin 2020-01-15 18:28 ` [dpdk-dev] [PATCH v3 3/6] security: add cpu crypto action type Marcin Smoczynski 2020-01-15 22:49 ` Ananyev, Konstantin 2020-01-16 10:01 ` Zhang, Roy Fan 2020-01-15 18:28 ` [dpdk-dev] [PATCH v3 4/6] ipsec: introduce support for cpu crypto mode Marcin Smoczynski 2020-01-16 10:53 ` Zhang, Roy Fan 2020-01-16 10:53 ` Zhang, Roy Fan 2020-01-15 18:28 ` [dpdk-dev] [PATCH v3 5/6] examples/ipsec-secgw: cpu crypto support Marcin Smoczynski 2020-01-16 10:54 ` Zhang, Roy Fan 2020-01-15 18:28 ` [dpdk-dev] [PATCH v3 6/6] examples/ipsec-secgw: cpu crypto testing Marcin Smoczynski 2020-01-16 10:54 ` Zhang, Roy Fan 2020-01-28 3:16 ` [dpdk-dev] [PATCH v4 0/8] Introduce CPU crypto mode Marcin Smoczynski 2020-01-28 3:16 ` [dpdk-dev] [PATCH v4 1/8] cryptodev: introduce cpu crypto support API Marcin Smoczynski 2020-01-28 3:16 ` [dpdk-dev] [PATCH v4 2/8] crypto/aesni_gcm: cpu crypto support Marcin Smoczynski 2020-01-28 10:49 ` De Lara Guarch, Pablo 2020-01-28 3:16 ` [dpdk-dev] [PATCH v4 3/8] test/crypto: add CPU crypto tests Marcin Smoczynski 2020-01-28 9:31 ` De Lara Guarch, Pablo 2020-01-28 10:51 ` De Lara Guarch, Pablo 2020-01-28 3:16 ` [dpdk-dev] [PATCH v4 4/8] security: add cpu crypto action type Marcin Smoczynski 2020-01-28 11:00 ` Ananyev, Konstantin 2020-01-28 3:16 ` [dpdk-dev] [PATCH v4 5/8] ipsec: introduce support for cpu crypto mode Marcin Smoczynski 2020-01-28 3:16 ` [dpdk-dev] [PATCH v4 6/8] examples/ipsec-secgw: cpu crypto support Marcin Smoczynski 2020-01-28 3:16 ` [dpdk-dev] [PATCH v4 7/8] examples/ipsec-secgw: cpu crypto testing Marcin Smoczynski 2020-01-28 3:16 ` [dpdk-dev] [PATCH v4 8/8] doc: add cpu crypto related documentation Marcin Smoczynski 2020-01-28 14:22 ` [dpdk-dev] [PATCH v5 0/8] Introduce CPU crypto mode Marcin Smoczynski 2020-01-28 14:22 ` [dpdk-dev] [PATCH v5 1/8] cryptodev: introduce cpu crypto support API Marcin Smoczynski 2020-01-31 14:30 ` Akhil Goyal 2020-01-28 14:22 ` [dpdk-dev] [PATCH v5 2/8] crypto/aesni_gcm: cpu crypto support Marcin Smoczynski 2020-01-28 16:39 ` Ananyev, Konstantin 2020-01-31 14:33 ` Akhil Goyal 2020-01-28 14:22 ` [dpdk-dev] [PATCH v5 3/8] test/crypto: add CPU crypto tests Marcin Smoczynski 2020-01-31 14:37 ` Akhil Goyal 2020-01-28 14:22 ` [dpdk-dev] [PATCH v5 4/8] security: add cpu crypto action type Marcin Smoczynski 2020-01-31 14:26 ` Akhil Goyal 2020-02-04 10:36 ` Akhil Goyal 2020-02-04 10:43 ` Ananyev, Konstantin 2020-01-28 14:22 ` [dpdk-dev] [PATCH v5 5/8] ipsec: introduce support for cpu crypto mode Marcin Smoczynski 2020-01-28 16:37 ` Ananyev, Konstantin 2020-01-28 14:22 ` [dpdk-dev] [PATCH v5 6/8] examples/ipsec-secgw: cpu crypto support Marcin Smoczynski 2020-01-28 14:22 ` [dpdk-dev] [PATCH v5 7/8] examples/ipsec-secgw: cpu crypto testing Marcin Smoczynski 2020-01-28 14:22 ` [dpdk-dev] [PATCH v5 8/8] doc: add cpu crypto related documentation Marcin Smoczynski 2020-01-31 14:43 ` Akhil Goyal 2020-02-04 13:12 ` [dpdk-dev] [PATCH v6 0/8] Introduce CPU crypto mode Marcin Smoczynski 2020-02-04 13:12 ` [dpdk-dev] [PATCH v6 1/8] cryptodev: introduce cpu crypto support API Marcin Smoczynski 2020-02-05 14:57 ` Akhil Goyal 2020-02-06 0:48 ` Thomas Monjalon 2020-02-06 12:36 ` [dpdk-dev] [PATCH] cryptodev: fix missing doxygen comment Marcin Smoczynski 2020-02-06 12:43 ` Ananyev, Konstantin 2020-02-12 13:15 ` Akhil Goyal 2020-02-04 13:12 ` [dpdk-dev] [PATCH v6 2/8] crypto/aesni_gcm: cpu crypto support Marcin Smoczynski 2020-02-04 13:12 ` [dpdk-dev] [PATCH v6 3/8] security: add cpu crypto action type Marcin Smoczynski 2020-02-05 14:58 ` Akhil Goyal 2020-02-04 13:12 ` [dpdk-dev] [PATCH v6 4/8] test/crypto: add cpu crypto mode to tests Marcin Smoczynski 2020-02-05 14:59 ` Akhil Goyal 2020-02-07 14:28 ` [dpdk-dev] [PATCH] test/crypto: add cpu crypto mode tests Marcin Smoczynski 2020-02-07 17:04 ` Ananyev, Konstantin 2020-02-13 9:14 ` Akhil Goyal 2020-02-13 9:29 ` Akhil Goyal 2020-02-04 13:12 ` [dpdk-dev] [PATCH v6 5/8] ipsec: introduce support for cpu crypto mode Marcin Smoczynski 2020-02-05 14:59 ` Akhil Goyal 2020-02-04 13:12 ` [dpdk-dev] [PATCH v6 6/8] examples/ipsec-secgw: cpu crypto support Marcin Smoczynski 2020-02-05 15:00 ` Akhil Goyal 2020-02-04 13:12 ` [dpdk-dev] [PATCH v6 7/8] examples/ipsec-secgw: cpu crypto testing Marcin Smoczynski 2020-02-04 13:12 ` [dpdk-dev] [PATCH v6 8/8] doc: add release notes for cpu crypto Marcin Smoczynski 2020-02-05 15:03 ` [dpdk-dev] [PATCH v6 0/8] Introduce CPU crypto mode Akhil Goyal
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=SN6PR11MB2558196BA1A8D8A54FC5E4C99A370@SN6PR11MB2558.namprd11.prod.outlook.com \ --to=konstantin.ananyev@intel.com \ --cc=akhil.goyal@nxp.com \ --cc=declan.doherty@intel.com \ --cc=dev@dpdk.org \ --cc=marcinx.smoczynski@intel.com \ --cc=radu.nicolau@intel.com \ --cc=roy.fan.zhang@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git