14433ced9SRavi Kumar.. SPDX-License-Identifier: BSD-3-Clause 24433ced9SRavi Kumar Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved. 34433ced9SRavi Kumar 44433ced9SRavi KumarAMD CCP Poll Mode Driver 54433ced9SRavi Kumar======================== 64433ced9SRavi Kumar 74433ced9SRavi KumarThis code provides the initial implementation of the ccp poll mode driver. 88809f78cSBruce RichardsonThe CCP poll mode driver library (**librte_crypto_ccp**) implements support for 94433ced9SRavi KumarAMD’s cryptographic co-processor (CCP). The CCP PMD is a virtual crypto 104433ced9SRavi Kumarpoll mode driver which schedules crypto operations to one or more available 114433ced9SRavi KumarCCP hardware engines on the platform. The CCP PMD provides poll mode crypto 124433ced9SRavi Kumardriver support for the following hardware accelerator devices:: 134433ced9SRavi Kumar 144433ced9SRavi Kumar AMD Cryptographic Co-processor (0x1456) 154433ced9SRavi Kumar AMD Cryptographic Co-processor (0x1468) 164433ced9SRavi Kumar 174433ced9SRavi KumarFeatures 184433ced9SRavi Kumar-------- 194433ced9SRavi Kumar 204433ced9SRavi KumarCCP crypto PMD has support for: 214433ced9SRavi Kumar 224433ced9SRavi KumarCipher algorithms: 234433ced9SRavi Kumar 244433ced9SRavi Kumar* ``RTE_CRYPTO_CIPHER_AES_CBC`` 254433ced9SRavi Kumar* ``RTE_CRYPTO_CIPHER_AES_ECB`` 264433ced9SRavi Kumar* ``RTE_CRYPTO_CIPHER_AES_CTR`` 274433ced9SRavi Kumar* ``RTE_CRYPTO_CIPHER_3DES_CBC`` 284433ced9SRavi Kumar 294433ced9SRavi KumarHash algorithms: 304433ced9SRavi Kumar 314433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA1`` 324433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA1_HMAC`` 334433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA224`` 344433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA224_HMAC`` 354433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA256`` 364433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA256_HMAC`` 374433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA384`` 384433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA384_HMAC`` 394433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA512`` 404433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA512_HMAC`` 414433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_MD5_HMAC`` 424433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_AES_CMAC`` 434433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_224`` 444433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_224_HMAC`` 454433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_256`` 464433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_256_HMAC`` 474433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_384`` 484433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_384_HMAC`` 494433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_512`` 504433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_512_HMAC`` 514433ced9SRavi Kumar 524433ced9SRavi KumarAEAD algorithms: 534433ced9SRavi Kumar 544433ced9SRavi Kumar* ``RTE_CRYPTO_AEAD_AES_GCM`` 554433ced9SRavi Kumar 564433ced9SRavi KumarInstallation 574433ced9SRavi Kumar------------ 584433ced9SRavi Kumar 59fd5f9fb9SCiara PowerTo compile ccp PMD, openssl packages have to be installed in the build 60fd5f9fb9SCiara Powerenvironment. 614433ced9SRavi Kumar 62e0d88a39SRavi KumarFor Ubuntu 16.04 LTS use below to install openssl in the build system: 63e0d88a39SRavi Kumar 64e0d88a39SRavi Kumar.. code-block:: console 65e0d88a39SRavi Kumar 66e0d88a39SRavi Kumar sudo apt-get install openssl 674433ced9SRavi Kumar 684433ced9SRavi KumarThis code was verified on Ubuntu 16.04. 694433ced9SRavi Kumar 704433ced9SRavi KumarInitialization 714433ced9SRavi Kumar-------------- 724433ced9SRavi Kumar 73*33f32941SDavid MarchandBind the CCP devices to ``vfio_pci`` or ``igb_uio`` (see :ref:`linux_gsg_binding_kernel`) 74*33f32941SDavid Marchandbefore running the CCP PMD stack. 754433ced9SRavi Kumar 76e0d88a39SRavi KumarTo use the PMD in an application, user must: 77e0d88a39SRavi Kumar 78e0d88a39SRavi Kumar* Call rte_vdev_init("crypto_ccp") within the application. 79e0d88a39SRavi Kumar 80e0d88a39SRavi Kumar* Use --vdev="crypto_ccp" in the EAL options, which will call rte_vdev_init() internally. 81e0d88a39SRavi Kumar 82e0d88a39SRavi KumarThe following parameters (all optional) can be provided in the previous two calls: 83e0d88a39SRavi Kumar 84e0d88a39SRavi Kumar* socket_id: Specify the socket where the memory for the device is going to be allocated. 85e0d88a39SRavi Kumar (by default, socket_id will be the socket where the core that is creating the PMD is running on). 86e0d88a39SRavi Kumar 87e0d88a39SRavi Kumar* max_nb_queue_pairs: Specify the maximum number of queue pairs in the device. 88e0d88a39SRavi Kumar 89e0d88a39SRavi Kumar* max_nb_sessions: Specify the maximum number of sessions that can be created (2048 by default). 90e0d88a39SRavi Kumar 91e0d88a39SRavi Kumar* ccp_auth_opt: Specify authentication operations to perform on CPU using openssl APIs. 92e0d88a39SRavi Kumar 9335bd0a5cSSean MorrisseyTo validate ccp PMD, l2fwd-crypto example can be used with following command: 944433ced9SRavi Kumar 954433ced9SRavi Kumar.. code-block:: console 964433ced9SRavi Kumar 97fd5f9fb9SCiara Power sudo ./<build_dir>/examples/dpdk-l2fwd-crypto -l 1 -n 4 --vdev "crypto_ccp" -- -p 0x1 981151b4aeSAmaranath Somalapuram --chain CIPHER_HASH --cipher_op ENCRYPT --cipher_algo aes-cbc 994433ced9SRavi Kumar --cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f 1001151b4aeSAmaranath Somalapuram --cipher_iv 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:ff 1011151b4aeSAmaranath Somalapuram --auth_op GENERATE --auth_algo sha1-hmac 1024433ced9SRavi Kumar --auth_key 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11 1034433ced9SRavi Kumar :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11 1044433ced9SRavi Kumar :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11 1054433ced9SRavi Kumar 106e0d88a39SRavi KumarThe CCP PMD also supports computing authentication over CPU with cipher offloaded to CCP. 107e0d88a39SRavi KumarTo enable this feature, pass an additional argument as ccp_auth_opt=1 to --vdev parameters as 108e0d88a39SRavi Kumarfollowing: 109e0d88a39SRavi Kumar 110e0d88a39SRavi Kumar.. code-block:: console 111e0d88a39SRavi Kumar 112fd5f9fb9SCiara Power sudo ./<build_dir>/examples/dpdk-l2fwd-crypto -l 1 -n 4 --vdev "crypto_ccp,ccp_auth_opt=1" -- -p 0x1 1131151b4aeSAmaranath Somalapuram --chain CIPHER_HASH --cipher_op ENCRYPT --cipher_algo aes-cbc 114e0d88a39SRavi Kumar --cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f 1151151b4aeSAmaranath Somalapuram --cipher_iv 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:ff 1161151b4aeSAmaranath Somalapuram --auth_op GENERATE --auth_algo sha1-hmac 117e0d88a39SRavi Kumar --auth_key 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11 118e0d88a39SRavi Kumar :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11 119e0d88a39SRavi Kumar :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11 120e0d88a39SRavi Kumar 1214433ced9SRavi KumarLimitations 1224433ced9SRavi Kumar----------- 1234433ced9SRavi Kumar 124e0d88a39SRavi Kumar* Chained mbufs are not supported. 125e0d88a39SRavi Kumar* MD5_HMAC is supported only for CPU based authentication. 126