From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 903A5A00C2; Mon, 26 Sep 2022 10:39:08 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2F553400D7; Mon, 26 Sep 2022 10:39:08 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 181E5400D5 for ; Mon, 26 Sep 2022 10:39:06 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28PIYiWd003672; Mon, 26 Sep 2022 01:36:59 -0700 Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2174.outbound.protection.outlook.com [104.47.55.174]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3jt1dp4yxv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Sep 2022 01:36:59 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WkBm/Y3SLDbzEUAv8pSswty1gqxG16sMyyjDubbRQXx4yryfBuGZobUTtTsyuahGj3urm0Y2zvcBf/gMJIVZWgZ7ok9j0QUCBxXHmdfH2yc7ZQvDI9UJUYeHbnlNgUQ9rzPjOvex9ILGzBFELHoX5P7WLTvHKFKosajeldMdlZJaiUm2+m3ymZnkBYf57a3u3+qw3AiQsFxyP+1QxRs4BfKQdVe9w0aMMKCHFCaN5t4QXx9sve0q+8T/WejV2zQj0aqxPSPsDn9c/yS5G5wJ9EFqIzuoiU/rHvqqGqaqqvfJEBXAsuAFUbjn2tbxJc+ixPJ2U2D+QEn/9Whc5HNMNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=o8djoCMMK2LjLU6hU2qo3k74UsKIRRlLI/EuKpHRAgk=; b=ewt9ipccPTB3f/up8BeCPV5jaCl3KHpl69LfvaXMAxMzueF3g4Y2+IPFh+e7NUFkP1e1Dw5SonXAIDGeaLl79rxnJgZn8S3IFMeUbeqobyQRthheeb0+WucA+D6fLBZYgHyAwC99RWXZ49VOcic4ChWrwdCHeRvQ441LUMeJ7s2pY9yHUdqSAR9yzqqn+UzGWVF8NpXyQ7+IX0TnCdSZ7/ZAUxhTDbSdSNzTQZ9LkyboY7CrVMyvraR8bb4uZjzNxFTdg6GWtLVfidWXF3w5PjZdz6iv5l3F9Cg24kQZwTwRD1JZB8GHcd9yKVohHVqD7r4va9tYcf15ooFMbcu/fg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o8djoCMMK2LjLU6hU2qo3k74UsKIRRlLI/EuKpHRAgk=; b=B8pGyBgFnmAfa+q0LxWSWv+dvSd4HGK/WMh9PdAg0GoxZokerwf6SqKMOhlWWj7/XpjXettWgl/7Wmp3rv+wPxRkQb1PW/TixAoWEI3NVvw22CnxTMwDvtB4cYEmkSWQC+odSD5486ZhcdToNqYWJFw+uebPCEVNQHHMq8Xyh7Q= Received: from CO6PR18MB4484.namprd18.prod.outlook.com (2603:10b6:5:359::9) by PH0PR18MB4622.namprd18.prod.outlook.com (2603:10b6:510:c2::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.24; Mon, 26 Sep 2022 08:36:57 +0000 Received: from CO6PR18MB4484.namprd18.prod.outlook.com ([fe80::7cea:d050:5433:8c74]) by CO6PR18MB4484.namprd18.prod.outlook.com ([fe80::7cea:d050:5433:8c74%8]) with mapi id 15.20.5654.025; Mon, 26 Sep 2022 08:36:57 +0000 From: Akhil Goyal To: Zhangfei Gao , Declan Doherty , Fan Zhang , Ashish Gupta , Ray Kinsella CC: "dev@dpdk.org" , "acc@openeuler.org" Subject: RE: [EXT] [PATCH v2 2/5] crypto/uadk: introduce uadk crypto driver Thread-Topic: [EXT] [PATCH v2 2/5] crypto/uadk: introduce uadk crypto driver Thread-Index: AQHYzvXnBBrr2ZlTYkmwsV1oOIpHxa3xXeGQ Date: Mon, 26 Sep 2022 08:36:57 +0000 Message-ID: References: <20220923024023.15849-1-zhangfei.gao@linaro.org> <20220923024023.15849-3-zhangfei.gao@linaro.org> In-Reply-To: <20220923024023.15849-3-zhangfei.gao@linaro.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO6PR18MB4484:EE_|PH0PR18MB4622:EE_ x-ms-office365-filtering-correlation-id: 9dcfac5f-d3b9-4ce8-24d8-08da9f9a45cd x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 06xtk+vFubTXOy0VvbOFXTt4T9KWYEcW551o/l8T6uL35WN4FKzlNy2O4ka83CQWXttjpIQdZkZxWJOWR5ExbcF2w9yBSkQVJVqLFafDm080wJcSEkc2Tda1W7DLKnBU9KCQKShL5KEOPRmFt0hyeQv8yN/Sl3J2ojPSM5E9jQ2voBJecEZ/vx1h1HQPDU/gvlV4kYCVw40hboMXd6dSbd9sc8FF7AyHNhYxA3OFJspS0i43viiqaztpHH0QeDG3kJLKsRqJJELTSxP8NylDHqcPPPH18brQJIrsIqmvO43aMECc3NBUIz07CH1BZEvwjreuqfNbh9ZSsg/lq58BV2fmENCG403HZ0Mcer2C1uYj5nfap0goh+S9/qyVTHFhazuR8l9q1AYY5pr9JHtxrx+tB+96D0oKZZzpg3rZWCt4kVdFC8K2zms7btTcYjPKLs7RgC/okR6CzrAFWF3UvQVpppEBVM3qVGQivosCOVtPwBbg1IPXou9AsMmkdjIQwNOAtPlryrEUGHq+/vCFYFPOLxBYPk0TGkaFUHcaGO/Y0+HVHRJ+4ozQjeRzHE0QYzRTQRk25PJmUgXhXJjqHTEbN1KiqGLtBM5+Q2JTfQcFpM95Vuu+9dLxVfYJ+rTW97/6Lxozx6QRK+uHVWWARlBM2nH59bBGzr6pLIOg02aSOmCok+AMuwCMdQSNVOr1CUgEEC+7XBWuRnOgQQ876Y8A7V4sKz+AzRuIjyEE+wlbNgrQuQ6jKKUl4TNRkaKuV40pYcbRon1zeujaexF0+WNv5Vr+Y80yqpbwUiZqVsg= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR18MB4484.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(346002)(136003)(366004)(39860400002)(376002)(396003)(451199015)(478600001)(966005)(52536014)(54906003)(38100700002)(8936002)(110136005)(55016003)(8676002)(4326008)(76116006)(66556008)(66476007)(186003)(66946007)(55236004)(2906002)(71200400001)(41300700001)(7696005)(83380400001)(64756008)(33656002)(86362001)(26005)(6506007)(9686003)(122000001)(66446008)(5660300002)(316002)(38070700005)(30864003); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?2rAkaO3c5jygeDvf4FN1/ZgeJsxgjJoZps+nS8OYgYc1/s3etKGCAiVEQAoG?= =?us-ascii?Q?8oK1uFFVFO8eDZumBV320Lc+hUNXtVFgMQaI0pQtQKXAhKLu1HfQxglh5Hb/?= =?us-ascii?Q?LL1UjhWOkEUU8lk/vBep45o9VrxFOdBQDG1YVzQkbEvSv4ufPZSJnCGqp1gs?= =?us-ascii?Q?/G/+Tg+eZCO2vbZOVPXfFtncdOAypIVjl8b5ADtXwsFgbS2VlHXMPZWD91Qn?= =?us-ascii?Q?UxCZTLajSg2Rp8pIU2a07lKhy/kuHa30VCcUqlEl0AlMQxsQpRKJ+TsTLzCx?= =?us-ascii?Q?G+EK8PLSczeaZK0GdkkBVhA3Eg+rifxVrcYnJPi3xXsZUIADqkLyzPn2xVwj?= =?us-ascii?Q?/XQ4uaA2bemncLOdsudj6pod20J5Wz1pP/7E9SupsvVB8oPswfdxpGVUIX27?= =?us-ascii?Q?+toXoDt0osEmQ/4rawgl6zmtDC63xJrGErYYmWxGLIEGTYh98CiJBMYaoqr6?= =?us-ascii?Q?YLcuhS+z20LeClbqM7xZodOHeu4AIR9OQ9ZHQvuRsXgllzYDQHYqMYjF06TQ?= =?us-ascii?Q?PGTZvBZKUxs602E6FsY2uWQTICb00uoteL3/ehNKZaOQQokbcXLL3BX6/Jhg?= =?us-ascii?Q?F1hugGuUaIP54TDisvtQdvTejYWXooBsB6bNSzT6aJVcaVQ7oF50SHGCpj9k?= =?us-ascii?Q?fKM1URK8iZnHvUpfcNXASH6MN1Ki+jvBdQ9HuSt+gMMQTnZlgqON5NPIGc7N?= =?us-ascii?Q?C5HjAwC7XVRjvXpv1cuLW636mcxU31TH8mOy4EjGXLxdotZWS8TTFM34eDbA?= =?us-ascii?Q?YdxC9Ofh4+JPwBqSCHXQDusM34ShB4nVuQorKweVwpWB1yGQhmidvAzeRK8Q?= =?us-ascii?Q?dYHg6Q+PvaLOmNuTWpMBjFkkQrWtuTIHsJY6gsnMdR580I3CIz5+B27gYoG6?= =?us-ascii?Q?TTx3a/JDSo9OphjVDad3FY+P1OnX0WVsrc7ldTK1QDdIj7nxIJPwdgnDnGQG?= =?us-ascii?Q?K3KAyIgMpZRT/60M11cHi25RepLUkDpwdXlI2Ivl7WuaWRv5s5bQWYQjO+yE?= =?us-ascii?Q?KGObbziE7jV7ZFHOiOsqU+54n6wxEYEvvQshnrhqRglCXmo6hPQ/EzhWMBNl?= =?us-ascii?Q?FYfpRArIIBFhWEsP9zy92eB1/jRkYerKnIVOzROhqvBw88tt9LjB5tPtKQo6?= =?us-ascii?Q?okF9u/PDfxL9kg8ZNku8mUpL0/NTFV4Rbt89PX++3y/uX40ANBCXMwF9sXj5?= =?us-ascii?Q?KOPAmghuGQ+rlc/RImD39vaZQCOQ1GYw8dqYLdJFm0OGHeyaoJNQCdy+20eS?= =?us-ascii?Q?k6lzH0c0D/xDeNsnuHpiCHEQTZKqugfBwIpc49uTA6WAnpr7SUaFQXO0RpLk?= =?us-ascii?Q?FlX9VhQYhsTM1XFCynfqj05XiNdlCxzzbpnF4WCWDwJXhygk6hAKk2AFnewe?= =?us-ascii?Q?2KmvwmjQnmnAsPNFmD0IzflsN/YrkoZ1A1RtZ+QX0PO1FzzH7JwqFBTcD2ug?= =?us-ascii?Q?a5sUgN5geFfBlxMoKw6LegZ5ZQjInXzlth2LAWkLNupi+Ra3rERGgtO3H9uY?= =?us-ascii?Q?nfpNSQhtlvLeVfyy5q6/LoGvnAJyEKAfAU3GomvPergodO+BsO/16r9uy8RT?= =?us-ascii?Q?eJ4pE3WHSHo+xu2YWzXZ/qyRfEmEE3pzpsI7tjdH?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: marvell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR18MB4484.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9dcfac5f-d3b9-4ce8-24d8-08da9f9a45cd X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Sep 2022 08:36:57.1042 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: hsE7bXaRc1HumEInMBHkJbC0eQVAwQG4xcbmAqb9LU59reNgP66BvCwd5FWbyLrpP9lZUQjlEUj/B9V9Am7ZEQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR18MB4622 X-Proofpoint-ORIG-GUID: 3AOTXSyn1VCZqw5g9H-v8GYeolRxed6F X-Proofpoint-GUID: 3AOTXSyn1VCZqw5g9H-v8GYeolRxed6F X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-26_06,2022-09-22_02,2022-06-22_01 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org > Introduce a new crypto PMD for hardware accelerators based on UADK [1]. >=20 > UADK is a framework for user applications to access hardware accelerators= . > UADK relies on IOMMU SVA (Shared Virtual Address) feature, which share > the same page table between IOMMU and MMU. > Thereby user application can directly use virtual address for device dma, > which enhances the performance as well as easy usability. >=20 > This patch adds the basic framework. >=20 > [1] https://github.com/Linaro/uadk >=20 > Test: > sudo dpdk-test --vdev=3Dcrypto_uadk (--log-level=3D6) > RTE>>cryptodev_uadk_autotest > RTE>>quit Remove this test info. It can be in your last patch where test app changes = are introduced. >=20 > Signed-off-by: Zhangfei Gao > --- > drivers/crypto/meson.build | 1 + > drivers/crypto/uadk/meson.build | 36 +++ > drivers/crypto/uadk/uadk_crypto_pmd.c | 450 ++++++++++++++++++++++++++ > drivers/crypto/uadk/version.map | 3 + > 4 files changed, 490 insertions(+) > create mode 100644 drivers/crypto/uadk/meson.build > create mode 100644 drivers/crypto/uadk/uadk_crypto_pmd.c > create mode 100644 drivers/crypto/uadk/version.map >=20 > diff --git a/drivers/crypto/meson.build b/drivers/crypto/meson.build > index 147b8cf633..ee5377deff 100644 > --- a/drivers/crypto/meson.build > +++ b/drivers/crypto/meson.build > @@ -18,6 +18,7 @@ drivers =3D [ > 'octeontx', > 'openssl', > 'scheduler', > + 'uadk', > 'virtio', > ] >=20 > diff --git a/drivers/crypto/uadk/meson.build b/drivers/crypto/uadk/meson.= build > new file mode 100644 > index 0000000000..a67c6c7ca5 > --- /dev/null > +++ b/drivers/crypto/uadk/meson.build > @@ -0,0 +1,36 @@ > +# SPDX-License-Identifier: BSD-3-Clause > +# Copyright 2022-2023 Huawei Technologies Co.,Ltd. All rights reserved. > +# Copyright 2022-2023 Linaro ltd. > + > +if not is_linux > + build =3D false > + reason =3D 'only supported on Linux' > + subdir_done() > +endif > + > +if arch_subdir !=3D 'arm' or not dpdk_conf.get('RTE_ARCH_64') > + build =3D false > + reason =3D 'only supported on aarch64' > + subdir_done() > +endif > + > +sources =3D files( > + 'uadk_crypto_pmd.c', > +) > + > +deps +=3D 'bus_vdev' > +dep =3D cc.find_library('libwd_crypto', dirs: ['/usr/local/lib'], requir= ed: false) I believe dirs is not required. You cannot assume that the lib is installed= in /usr/local/lib/. Check other PMDs which have such dependencies. Eg. Ipsec-mb > +if not dep.found() > + build =3D false > + reason =3D 'missing dependency, "libwd_crypto"' > +else > + ext_deps +=3D dep > +endif > + > +dep =3D cc.find_library('libwd', dirs: ['/usr/local/lib'], required: fal= se) > +if not dep.found() > + build =3D false > + reason =3D 'missing dependency, "libwd"' > +else > + ext_deps +=3D dep > +endif > diff --git a/drivers/crypto/uadk/uadk_crypto_pmd.c > b/drivers/crypto/uadk/uadk_crypto_pmd.c > new file mode 100644 > index 0000000000..aad42524d6 > --- /dev/null > +++ b/drivers/crypto/uadk/uadk_crypto_pmd.c > @@ -0,0 +1,450 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright 2022-2023 Huawei Technologies Co.,Ltd. All rights reserved. > + * Copyright 2022-2023 Linaro ltd. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +/* Maximum length for digest (SHA-512 needs 64 bytes) */ > +#define DIGEST_LENGTH_MAX 64 > + > +struct uadk_qp { > + struct rte_ring *processed_pkts; > + /* Ring for placing process packets */ > + struct rte_cryptodev_stats qp_stats; > + /* Queue pair statistics */ > + uint16_t id; > + /* Queue Pair Identifier */ > + char name[RTE_CRYPTODEV_NAME_MAX_LEN]; > + /* Unique Queue Pair Name */ > + uint8_t temp_digest[DIGEST_LENGTH_MAX]; > + /* Buffer used to store the digest generated > + * by the driver when verifying a digest provided > + * by the user (using authentication verify operation) > + */ > +} __rte_cache_aligned; These comments should be added before the variable name or else use '<' The patches are not properly organized. I am skipping the review for now. Please split the patches as below. 1. introduce driver - create files with meson.build and with probe/remove and device ops defined but not implemented. You do not need to write em= pty functions. Add basic documentation also which defines what the driver is. You can explain the build dependency here. 2. define queue structs and setup/remove APIs 3. Add data path 4. implement cipher op. Add capabilities and documentation of what is suppo= rted in each of the patch. Add feature flags etc. 5. implement auth, add capabilities and documentation 6. test app changes. > + > +enum uadk_chain_order { > + UADK_CHAIN_NOT_SUPPORTED > +}; > + > +struct uadk_crypto_session { > + enum uadk_chain_order chain_order; > +} __rte_cache_aligned; > + > +enum uadk_crypto_version { > + UADK_CRYPTO_V2, > + UADK_CRYPTO_V3, > +}; > + > +struct uadk_crypto_priv { > + enum uadk_crypto_version version; > +} __rte_cache_aligned; > + > +static uint8_t uadk_cryptodev_driver_id; > + > +RTE_LOG_REGISTER_DEFAULT(uadk_crypto_logtype, INFO); > + > +#define UADK_LOG(level, fmt, ...) \ > + rte_log(RTE_LOG_ ## level, uadk_crypto_logtype, \ > + "%s() line %u: " fmt "\n", __func__, __LINE__, \ > + ## __VA_ARGS__) > + > +static const struct rte_cryptodev_capabilities uadk_crypto_v2_capabiliti= es[] =3D { > + /* End of symmetric capabilities */ > + RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() > +}; > + > +/* Configure device */ > +static int > +uadk_crypto_pmd_config(struct rte_cryptodev *dev __rte_unused, > + struct rte_cryptodev_config *config __rte_unused) > +{ > + return 0; > +} > + > +/* Start device */ > +static int > +uadk_crypto_pmd_start(struct rte_cryptodev *dev __rte_unused) > +{ > + return 0; > +} > + > +/* Stop device */ > +static void > +uadk_crypto_pmd_stop(struct rte_cryptodev *dev __rte_unused) > +{ > +} > + > +/* Close device */ > +static int > +uadk_crypto_pmd_close(struct rte_cryptodev *dev __rte_unused) > +{ > + return 0; > +} > + > +/* Get device statistics */ > +static void > +uadk_crypto_pmd_stats_get(struct rte_cryptodev *dev, > + struct rte_cryptodev_stats *stats) > +{ > + int qp_id; > + > + for (qp_id =3D 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { > + struct uadk_qp *qp =3D dev->data->queue_pairs[qp_id]; > + > + stats->enqueued_count +=3D qp->qp_stats.enqueued_count; > + stats->dequeued_count +=3D qp->qp_stats.dequeued_count; > + stats->enqueue_err_count +=3D qp- > >qp_stats.enqueue_err_count; > + stats->dequeue_err_count +=3D qp- > >qp_stats.dequeue_err_count; > + } > +} > + > +/* Reset device statistics */ > +static void > +uadk_crypto_pmd_stats_reset(struct rte_cryptodev *dev __rte_unused) > +{ > + int qp_id; > + > + for (qp_id =3D 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { > + struct uadk_qp *qp =3D dev->data->queue_pairs[qp_id]; > + > + memset(&qp->qp_stats, 0, sizeof(qp->qp_stats)); > + } > +} > + > +/* Get device info */ > +static void > +uadk_crypto_pmd_info_get(struct rte_cryptodev *dev, > + struct rte_cryptodev_info *dev_info) > +{ > + struct uadk_crypto_priv *priv =3D dev->data->dev_private; > + > + if (dev_info !=3D NULL) { > + dev_info->driver_id =3D dev->driver_id; > + dev_info->driver_name =3D dev->device->driver->name; > + dev_info->max_nb_queue_pairs =3D 128; > + /* No limit of number of sessions */ > + dev_info->sym.max_nb_sessions =3D 0; > + dev_info->feature_flags =3D dev->feature_flags; > + > + if (priv->version =3D=3D UADK_CRYPTO_V2) > + dev_info->capabilities =3D uadk_crypto_v2_capabilities; > + } > +} > + > +/* Release queue pair */ > +static int > +uadk_crypto_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id) > +{ > + struct uadk_qp *qp =3D dev->data->queue_pairs[qp_id]; > + > + if (qp) { > + rte_ring_free(qp->processed_pkts); > + rte_free(qp); > + dev->data->queue_pairs[qp_id] =3D NULL; > + } > + > + return 0; > +} > + > +/* set a unique name for the queue pair based on its name, dev_id and qp= _id */ > +static int > +uadk_pmd_qp_set_unique_name(struct rte_cryptodev *dev, > + struct uadk_qp *qp) > +{ > + unsigned int n =3D snprintf(qp->name, sizeof(qp->name), > + "uadk_crypto_pmd_%u_qp_%u", > + dev->data->dev_id, qp->id); > + > + if (n >=3D sizeof(qp->name)) > + return -EINVAL; > + > + return 0; > +} > + > +/* Create a ring to place process packets on */ > +static struct rte_ring * > +uadk_pmd_qp_create_processed_pkts_ring(struct uadk_qp *qp, > + unsigned int ring_size, int socket_id) > +{ > + struct rte_ring *r =3D qp->processed_pkts; > + > + if (r) { > + if (rte_ring_get_size(r) >=3D ring_size) { > + UADK_LOG(INFO, "Reusing existing ring %s for > processed packets", > + qp->name); > + return r; > + } > + > + UADK_LOG(ERR, "Unable to reuse existing ring %s for processed > packets", > + qp->name); > + return NULL; > + } > + > + return rte_ring_create(qp->name, ring_size, socket_id, > + RING_F_EXACT_SZ); > +} > + > +static int > +uadk_crypto_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id, > + const struct rte_cryptodev_qp_conf *qp_conf, > + int socket_id) > +{ > + struct uadk_qp *qp; > + > + /* Free memory prior to re-allocation if needed. */ > + if (dev->data->queue_pairs[qp_id] !=3D NULL) > + uadk_crypto_pmd_qp_release(dev, qp_id); > + > + /* Allocate the queue pair data structure. */ > + qp =3D rte_zmalloc_socket("uadk PMD Queue Pair", sizeof(*qp), > + RTE_CACHE_LINE_SIZE, socket_id); > + if (qp =3D=3D NULL) > + return (-ENOMEM); > + > + qp->id =3D qp_id; > + dev->data->queue_pairs[qp_id] =3D qp; > + > + if (uadk_pmd_qp_set_unique_name(dev, qp)) > + goto qp_setup_cleanup; > + > + qp->processed_pkts =3D uadk_pmd_qp_create_processed_pkts_ring(qp, > + qp_conf->nb_descriptors, socket_id); > + if (qp->processed_pkts =3D=3D NULL) > + goto qp_setup_cleanup; > + > + memset(&qp->qp_stats, 0, sizeof(qp->qp_stats)); > + > + return 0; > + > +qp_setup_cleanup: > + if (qp) { > + rte_free(qp); > + qp =3D NULL; > + } > + return -EINVAL; > +} > + > +static unsigned int > +uadk_crypto_sym_session_get_size(struct rte_cryptodev *dev __rte_unused) > +{ > + return sizeof(struct uadk_crypto_session); > +} > + > +static enum uadk_chain_order > +uadk_get_chain_order(const struct rte_crypto_sym_xform *xform > __rte_unused) > +{ > + enum uadk_chain_order res =3D UADK_CHAIN_NOT_SUPPORTED; > + > + return res; > +} > + > +static int > +uadk_crypto_sym_session_configure(struct rte_cryptodev *dev, > + struct rte_crypto_sym_xform *xform, > + struct rte_cryptodev_sym_session *session, > + struct rte_mempool *mp) > +{ > + struct uadk_crypto_session *sess; > + int ret; > + > + ret =3D rte_mempool_get(mp, (void *)&sess); > + if (ret !=3D 0) { > + UADK_LOG(ERR, "Failed to get session %p private data from > mempool", > + sess); > + return -ENOMEM; > + } > + > + sess->chain_order =3D uadk_get_chain_order(xform); > + switch (sess->chain_order) { > + default: > + ret =3D -ENOTSUP; > + goto err; > + } > + > + set_sym_session_private_data(session, dev->driver_id, sess); > + > + return 0; > +err: > + rte_mempool_put(mp, sess); > + return ret; > +} > + > +static void > +uadk_crypto_sym_session_clear(struct rte_cryptodev *dev, > + struct rte_cryptodev_sym_session *sess) > +{ > + struct uadk_crypto_session *priv_sess =3D > + get_sym_session_private_data(sess, dev->driver_id); > + > + if (unlikely(priv_sess =3D=3D NULL)) { > + UADK_LOG(ERR, "Failed to get session %p private data.", > priv_sess); > + return; > + } > + > + set_sym_session_private_data(sess, dev->driver_id, NULL); > + rte_mempool_put(rte_mempool_from_obj(priv_sess), priv_sess); > +} > + > +static struct rte_cryptodev_ops uadk_crypto_pmd_ops =3D { > + .dev_configure =3D uadk_crypto_pmd_config, > + .dev_start =3D uadk_crypto_pmd_start, > + .dev_stop =3D uadk_crypto_pmd_stop, > + .dev_close =3D uadk_crypto_pmd_close, > + .stats_get =3D uadk_crypto_pmd_stats_get, > + .stats_reset =3D uadk_crypto_pmd_stats_reset, > + .dev_infos_get =3D uadk_crypto_pmd_info_get, > + .queue_pair_setup =3D uadk_crypto_pmd_qp_setup, > + .queue_pair_release =3D uadk_crypto_pmd_qp_release, > + .sym_session_get_size =3D uadk_crypto_sym_session_get_size, > + .sym_session_configure =3D uadk_crypto_sym_session_configure, > + .sym_session_clear =3D uadk_crypto_sym_session_clear, > +}; > + > +static uint16_t > +uadk_crypto_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops, > + uint16_t nb_ops) > +{ > + struct uadk_qp *qp =3D queue_pair; > + struct uadk_crypto_session *sess =3D NULL; > + struct rte_crypto_op *op; > + uint16_t enqd =3D 0; > + int i, ret; > + > + for (i =3D 0; i < nb_ops; i++) { > + op =3D ops[i]; > + op->status =3D RTE_CRYPTO_OP_STATUS_NOT_PROCESSED; > + > + if (op->sess_type =3D=3D RTE_CRYPTO_OP_WITH_SESSION) { > + if (likely(op->sym->session !=3D NULL)) > + sess =3D (struct uadk_crypto_session *) > + get_sym_session_private_data( > + op->sym->session, > + uadk_cryptodev_driver_id); > + } > + > + switch (sess->chain_order) { > + default: > + op->status =3D RTE_CRYPTO_OP_STATUS_ERROR; > + break; > + } > + > + if (op->status =3D=3D RTE_CRYPTO_OP_STATUS_NOT_PROCESSED) > + op->status =3D RTE_CRYPTO_OP_STATUS_SUCCESS; > + > + if (op->status !=3D RTE_CRYPTO_OP_STATUS_ERROR) { > + ret =3D rte_ring_enqueue(qp->processed_pkts, (void > *)op); > + if (ret < 0) > + goto enqueue_err; > + qp->qp_stats.enqueued_count++; > + enqd++; > + } else { > + /* increment count if failed to enqueue op */ > + qp->qp_stats.enqueue_err_count++; > + } > + } > + > + return enqd; > + > +enqueue_err: > + qp->qp_stats.enqueue_err_count++; > + return enqd; > +} > + > +static uint16_t > +uadk_crypto_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops, > + uint16_t nb_ops) > +{ > + struct uadk_qp *qp =3D queue_pair; > + unsigned int nb_dequeued; > + > + nb_dequeued =3D rte_ring_dequeue_burst(qp->processed_pkts, > + (void **)ops, nb_ops, NULL); > + qp->qp_stats.dequeued_count +=3D nb_dequeued; > + > + return nb_dequeued; > +} > + > +static int > +uadk_cryptodev_probe(struct rte_vdev_device *vdev) > +{ > + struct rte_cryptodev_pmd_init_params init_params =3D { > + .name =3D "", > + .private_data_size =3D sizeof(struct uadk_crypto_priv), > + .max_nb_queue_pairs =3D > + > RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS, > + }; > + enum uadk_crypto_version version =3D UADK_CRYPTO_V2; > + struct uadk_crypto_priv *priv; > + struct rte_cryptodev *dev; > + struct uacce_dev *udev; > + const char *name; > + > + udev =3D wd_get_accel_dev("cipher"); > + if (!udev) > + return -ENODEV; > + > + if (!strcmp(udev->api, "hisi_qm_v2")) > + version =3D UADK_CRYPTO_V2; > + > + free(udev); > + > + name =3D rte_vdev_device_name(vdev); > + if (name =3D=3D NULL) > + return -EINVAL; > + > + dev =3D rte_cryptodev_pmd_create(name, &vdev->device, &init_params); > + if (dev =3D=3D NULL) { > + UADK_LOG(ERR, "driver %s: create failed", init_params.name); > + return -ENODEV; > + } > + > + dev->dev_ops =3D &uadk_crypto_pmd_ops; > + dev->driver_id =3D uadk_cryptodev_driver_id; > + dev->dequeue_burst =3D uadk_crypto_dequeue_burst; > + dev->enqueue_burst =3D uadk_crypto_enqueue_burst; > + dev->feature_flags =3D RTE_CRYPTODEV_FF_HW_ACCELERATED | > + RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO | > + RTE_CRYPTODEV_FF_SYM_SESSIONLESS; > + priv =3D dev->data->dev_private; > + priv->version =3D version; > + > + rte_cryptodev_pmd_probing_finish(dev); > + > + return 0; > +} > + > +static int > +uadk_cryptodev_remove(struct rte_vdev_device *vdev) > +{ > + struct rte_cryptodev *cryptodev; > + const char *name; > + > + name =3D rte_vdev_device_name(vdev); > + if (name =3D=3D NULL) > + return -EINVAL; > + > + cryptodev =3D rte_cryptodev_pmd_get_named_dev(name); > + if (cryptodev =3D=3D NULL) > + return -ENODEV; > + > + return rte_cryptodev_pmd_destroy(cryptodev); > +} > + > +static struct rte_vdev_driver uadk_crypto_pmd =3D { > + .probe =3D uadk_cryptodev_probe, > + .remove =3D uadk_cryptodev_remove, > +}; > + > +static struct cryptodev_driver uadk_crypto_drv; > + > +#define UADK_CRYPTO_DRIVER_NAME crypto_uadk > +RTE_PMD_REGISTER_VDEV(UADK_CRYPTO_DRIVER_NAME, > uadk_crypto_pmd); > +RTE_PMD_REGISTER_CRYPTO_DRIVER(uadk_crypto_drv, > uadk_crypto_pmd.driver, > + uadk_cryptodev_driver_id); > diff --git a/drivers/crypto/uadk/version.map b/drivers/crypto/uadk/versio= n.map > new file mode 100644 > index 0000000000..c2e0723b4c > --- /dev/null > +++ b/drivers/crypto/uadk/version.map > @@ -0,0 +1,3 @@ > +DPDK_22 { > + local: *; > +}; > -- > 2.36.1