> -----Original Message----- > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of > zbigniew.bo...@caviumnetworks.com > Sent: Wednesday, December 07, 2016 2:33 AM > To: De Lara Guarch, Pablo; jerin.ja...@caviumnetworks.com > Cc: dev@dpdk.org; Zbigniew Bodek > Subject: [dpdk-dev] [PATCH v2 06/12] crypto/armv8: add PMD optimized > for ARMv8 processors > > From: Zbigniew Bodek <zbigniew.bo...@caviumnetworks.com> > > This patch introduces crypto poll mode driver > using ARMv8 cryptographic extensions. > CPU compatibility with this driver is detected in > run-time and virtual crypto device will not be > created if CPU doesn't provide: > AES, SHA1, SHA2 and NEON. > > This PMD is optimized to provide performance boost > for chained crypto operations processing, > such as encryption + HMAC generation, > decryption + HMAC validation. In particular, > cipher only or hash only operations are > not provided. > > The driver currently supports AES-128-CBC > in combination with: > SHA256 MAC, SHA256 HMAC and SHA1 HMAC and relies > on the low-level assembly code. > > This patch adds driver's code only and does > not include it in the build system. > > Signed-off-by: Zbigniew Bodek <zbigniew.bo...@caviumnetworks.com> > --- > drivers/crypto/armv8/Makefile | 72 ++ > drivers/crypto/armv8/asm/include/rte_armv8_defs.h | 80 ++ > drivers/crypto/armv8/rte_armv8_pmd.c | 915 > ++++++++++++++++++++++ > drivers/crypto/armv8/rte_armv8_pmd_ops.c | 390 +++++++++ > drivers/crypto/armv8/rte_armv8_pmd_private.h | 210 +++++ > drivers/crypto/armv8/rte_armv8_pmd_version.map | 3 + > 6 files changed, 1670 insertions(+) > create mode 100644 drivers/crypto/armv8/Makefile > create mode 100644 > drivers/crypto/armv8/asm/include/rte_armv8_defs.h > create mode 100644 drivers/crypto/armv8/rte_armv8_pmd.c > create mode 100644 drivers/crypto/armv8/rte_armv8_pmd_ops.c > create mode 100644 drivers/crypto/armv8/rte_armv8_pmd_private.h > create mode 100644 drivers/crypto/armv8/rte_armv8_pmd_version.map > ...
> diff --git a/drivers/crypto/armv8/asm/include/rte_armv8_defs.h > b/drivers/crypto/armv8/asm/include/rte_armv8_defs.h > new file mode 100644 > index 0000000..ea05495 > --- /dev/null > +++ b/drivers/crypto/armv8/asm/include/rte_armv8_defs.h > @@ -0,0 +1,80 @@ ... > + > +#ifndef _RTE_ARMV8_DEFS_H_ > +#define _RTE_ARMV8_DEFS_H_ > + > +struct crypto_arg { > + struct { > + uint8_t *key; > + uint8_t *iv; > + } cipher; Remove unnecessary tab above. > + struct { > + struct { > + uint8_t *key; > + uint8_t *i_key_pad; > + uint8_t *o_key_pad; > + } hmac; > + } digest; > +}; ... > diff --git a/drivers/crypto/armv8/rte_armv8_pmd.c > b/drivers/crypto/armv8/rte_armv8_pmd.c > new file mode 100644 > index 0000000..0410bb0 > --- /dev/null > +++ b/drivers/crypto/armv8/rte_armv8_pmd.c > + * 3D array type for ARM Combined Mode crypto functions pointers. > + * CRYPTO_CIPHER_MAX: max cipher ID number > + * CRYPTO_AUTH_MAX: max auth ID number > + * CRYPTO_CIPHER_KEYLEN_MAX: max key length ID number > + */ > +typedef const crypto_func_t > +crypto_func_tbl_t[CRYPTO_CIPHER_MAX][CRYPTO_AUTH_MAX][CRYPTO_ > CIPHER_KEYLEN_MAX]; > + > +/* Evaluate to key length definition */ > +#define KEYL(keyl) (ARMV8_CRYPTO_CIPHER_KEYLEN_ > ## keyl) I don't think a tab is necessary here after define (happens on other parts) > + > +/* Local aliases for supported ciphers */ > +#define CIPH_AES_CBC RTE_CRYPTO_CIPHER_AES_CBC > +/* Local aliases for supported hashes */ > +#define AUTH_SHA1_HMAC > RTE_CRYPTO_AUTH_SHA1_HMAC > +#define AUTH_SHA256 RTE_CRYPTO_AUTH_SHA256 > +#define AUTH_SHA256_HMAC RTE_CRYPTO_AUTH_SHA256_HMAC ... > diff --git a/drivers/crypto/armv8/rte_armv8_pmd_ops.c > b/drivers/crypto/armv8/rte_armv8_pmd_ops.c > new file mode 100644 > index 0000000..0f768f4 > --- /dev/null > +++ b/drivers/crypto/armv8/rte_armv8_pmd_ops.c ... > + { /* AES CBC */ > + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, > + {.sym = { > + .xform_type = > RTE_CRYPTO_SYM_XFORM_CIPHER, > + {.cipher = { > + .algo = > RTE_CRYPTO_CIPHER_AES_CBC, > + .block_size = 16, > + .key_size = { > + .min = 16, > + .max = 32, > + .increment = 8 >From what I read, this PMD only supports AES-128-CBC. If that's right, then key_size should be .min = 16, .max = 16, .increment = 0.