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 1433E44183; Fri, 7 Jun 2024 16:29:11 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 43A5942DFF; Fri, 7 Jun 2024 16:28:30 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2050.outbound.protection.outlook.com [40.107.236.50]) by mails.dpdk.org (Postfix) with ESMTP id 83DDE42DEB for ; Fri, 7 Jun 2024 16:28:28 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Tn0YPQ4MnbR3GQJET3Dvd5uZzoQ2phF5grHkyu25di/dk+YyLaEgpyRbHGgz0SBNLe8Ynlh4EEnasqlLLVlMXjCPSNkZNfs55uozLwT2Z3fN17VT0OC8onrRe4nf0b3a11MbFOexXToAC5d+z2yDKHyKf19XKn8SIC5nwTL0SmgwIAYrT5FkvOC+UQAaTFagcP/2IUk3cZqVo48dW2klD2h//hjrVwUXoa8lQsoLj/Z4B8iyYexoiBkGrGhFEcT7mqR4642OcTfiMDC+tm4tbVkI2/JQsVpXTkFTFLoyMNuVTmHbMfm8wbk29DrjE7McF5m0eHYzU6PVV9aXJgqaaw== 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=KUDXNmt8IUyYgjXBaj9q47FsAq0/304BGF9yNmgxspo=; b=PoaIUaSCew5zwkEhLrfNiCgaAinZ5kii0N2u907mF/om+9aJdqzjZ1+Ksvt8qdKz4f+HhAOs7cxcdYQIzFZF7XVtqeRGDn5oNNBXrsa/bI5m24kQ4MOj2DNvXYVzU3ZvkB739k1I335noohCEyHCtI05tNuQh/szfwjCDx907h+X6f/rzYA7vETFKEJgf6ey5G7YEZ4k92qDLbky9Bvv57klVrAoOrHxsc6EnvXXdTm78VFIWcTikpSYs0f6yf6B96QehsxMROWLSsQeql8qrp7Sx3RBU4RbCKM5Ru7dd/uPObn6ImkQHeqhZmTD6EZVdvsTxuk76dmQKOg1sWrsRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=dpdk.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KUDXNmt8IUyYgjXBaj9q47FsAq0/304BGF9yNmgxspo=; b=ToOrhqjB2RsSvepgM5j/jdQAblYwTGlwhHY1mY9LuULjpLAukiKiML2JIFRhRmSQh0E1vlLeXYqDrgbCZs3lX1e3LhAJLzBzaiRWJIUnFtEk5Z3cHd0Jh1fKVgKLeeSa8l5sp3bJXfi2WgF9yV7O+iwIf29z4aKQtZ3lLCMHLL4= Received: from DM6PR01CA0017.prod.exchangelabs.com (2603:10b6:5:296::22) by PH8PR12MB6771.namprd12.prod.outlook.com (2603:10b6:510:1c6::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.34; Fri, 7 Jun 2024 14:28:23 +0000 Received: from DS2PEPF0000343A.namprd02.prod.outlook.com (2603:10b6:5:296:cafe::15) by DM6PR01CA0017.outlook.office365.com (2603:10b6:5:296::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7656.21 via Frontend Transport; Fri, 7 Jun 2024 14:28:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by DS2PEPF0000343A.mail.protection.outlook.com (10.167.18.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7633.15 via Frontend Transport; Fri, 7 Jun 2024 14:28:22 +0000 Received: from driver-dev1.pensando.io (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 7 Jun 2024 09:28:22 -0500 From: Andrew Boyer To: CC: Andrew Boyer Subject: [PATCH v3 6/9] crypto/ionic: add session support Date: Fri, 7 Jun 2024 07:27:37 -0700 Message-ID: <20240607142740.60175-7-andrew.boyer@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20240607142740.60175-1-andrew.boyer@amd.com> References: <20240430202144.49899-2-andrew.boyer@amd.com> <20240607142740.60175-1-andrew.boyer@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PEPF0000343A:EE_|PH8PR12MB6771:EE_ X-MS-Office365-Filtering-Correlation-Id: 2d474dd2-3a0c-49c2-230e-08dc86fe1620 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230031|82310400017|36860700004|376005|1800799015; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wvF6dUV0VaoUnrszF5c/wbAu8PZCozIylSqCJCcSIouWRHbw9bFgbyhwnZI3?= =?us-ascii?Q?hS9hjRWEZjuVWzezJtRhFrnxS7eYfwh1hw9usZhF46L19FyEiUJ+z/EholJg?= =?us-ascii?Q?QCYk34/udDOfxY1Qlf/nF8yYhsGDwlC82rYUesNk+49KhgKWgXS5aGKr8oT/?= =?us-ascii?Q?RsGvg5P7jcqLI0Kd1NloVHpRT3T0JHFzh/F0BbMwP3tnmpHHZzELl2Ne1dwr?= =?us-ascii?Q?qFWjSf/5j9qyukwIrYMw8OD/ZOj5TACU7mK+a+UMm8DrG2ynzk3Wj3SYu1xt?= =?us-ascii?Q?YeMYy+WLrW9tb7dAuxuZDeF3ONnk4vcg3bTRqvW3m6JHWiRMUZhisdgsW+5m?= =?us-ascii?Q?YR2wLuHrU9IBI9bNhJGebj6DQxX/j7fMjyCwn/ayZ75GQrz7w6mlh/SeeHoj?= =?us-ascii?Q?azJZ5HT+ggBVrZHJQFZfQM1NvMpk2Tbbs5BV8hFljJ0i20y2JnlJxyGGKTR8?= =?us-ascii?Q?t+MlLQ/6oF+ebJOSEaxtbokQudZNoS434XeYrk1uWRgjWgYYeF9xmzrfRgKg?= =?us-ascii?Q?MNlhuCu9DmPtHCwJcfby1caR/58CoXRZZxpuTCTyr2DUT0WL3yh14Av3RFT5?= =?us-ascii?Q?jFDRSq4KnYVtN0iVOMXp8SyBM9NZkzZ17sN52PTgVWqf9gnssIdKCqnQ+vWY?= =?us-ascii?Q?EE1oyJRjp0hnqYZng8HDlVtZMIZ2F5BRkj8Ncx/ja472kGU4b1ZI01uaS2ca?= =?us-ascii?Q?HHI8RFGVIOldhWePftbnR48EpcCbotAOmVcXuOD+b8FLEKr4ScdNIpbHrKcq?= =?us-ascii?Q?9O6gK8z6ukriBZl9cluZHwsxWEN87NMlaow1kqSoN49Pwk91oxx7w0D6VzeB?= =?us-ascii?Q?z8PiuHifl28EMn5cMnkdPzlOMASA5YwEb5uBPIl6o2pp0VUlcebMBeXSmw7J?= =?us-ascii?Q?CXgOvT7rTO4YSERZbMozvjqv0AEX+av/SZWdDsmzul4zCcha8M7JlklkPrt9?= =?us-ascii?Q?vbG1CzHvbtq7elf3zEeUUmUrAUfdTWBfy0rlrtpJpvO+EbVc2wBeNTHP1uN9?= =?us-ascii?Q?yMI36JSmHueGT3OqZNLeSzHd4rSDbj3XO64OvSIkaiHKNfJjRG9EizruZOEq?= =?us-ascii?Q?GnS1aelgRqC8lARsnYdS6e641WNcJutsCS8cuAZGMPHiRXWVeoIsG6DFkfJj?= =?us-ascii?Q?+2B1p1jO/Ej97Tq774hTRHrPylssU4Do6NLoNIO9XMeP3slBt0DAWt+SCRFK?= =?us-ascii?Q?VZhHmfR0eZSFOhy/qlgKwtXNMWy2DNhOxYZQs+abbJXPp73gbOP+5Pd2g3Yn?= =?us-ascii?Q?eVOYDSgwupkuhzkH53AtKHdm1MaKghD6JYix6Ac/8wKDGBvX9KoukKje9ZhD?= =?us-ascii?Q?tTh14CIaz9+JSXRtq8KEjNKX8zkFbED5asSc0QxWerxkgr4tAw8pXQso2dWq?= =?us-ascii?Q?w3ydiyqPyjvMMMMwazYi5RfqbaD6D6k82oQwsMlPL5wm+5Kb9Q=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230031)(82310400017)(36860700004)(376005)(1800799015); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jun 2024 14:28:22.9537 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2d474dd2-3a0c-49c2-230e-08dc86fe1620 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS2PEPF0000343A.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB6771 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 This defines the session object and related commands. Signed-off-by: Andrew Boyer --- drivers/crypto/ionic/ionic_crypto.h | 33 ++++++ drivers/crypto/ionic/ionic_crypto_main.c | 143 +++++++++++++++++++++++ drivers/crypto/ionic/ionic_crypto_ops.c | 123 +++++++++++++++++++ 3 files changed, 299 insertions(+) diff --git a/drivers/crypto/ionic/ionic_crypto.h b/drivers/crypto/ionic/ionic_crypto.h index f487768c10..f50c4b4291 100644 --- a/drivers/crypto/ionic/ionic_crypto.h +++ b/drivers/crypto/ionic/ionic_crypto.h @@ -14,6 +14,7 @@ #include #include #include +#include #include "ionic_common.h" #include "ionic_crypto_if.h" @@ -154,6 +155,32 @@ struct iocpt_admin_q { uint16_t flags; }; +#define IOCPT_S_F_INITED BIT(0) + +struct iocpt_session_priv { + struct iocpt_dev *dev; + + uint32_t index; + + uint16_t iv_offset; + uint16_t iv_length; + uint16_t digest_length; + uint16_t aad_length; + + uint8_t flags; + uint8_t op; + uint8_t type; + + uint16_t key_len; + uint8_t key[IOCPT_SESS_KEY_LEN_MAX_SYMM]; +}; + +static inline uint32_t +iocpt_session_size(void) +{ + return sizeof(struct iocpt_session_priv); +} + #define IOCPT_DEV_F_INITED BIT(0) #define IOCPT_DEV_F_UP BIT(1) #define IOCPT_DEV_F_FW_RESET BIT(2) @@ -186,6 +213,8 @@ struct iocpt_dev { struct iocpt_admin_q *adminq; + struct rte_bitmap *sess_bm; /* SET bit indicates index is free */ + uint64_t features; uint32_t hw_features; @@ -239,6 +268,10 @@ void iocpt_dev_reset(struct iocpt_dev *dev); int iocpt_adminq_post_wait(struct iocpt_dev *dev, struct iocpt_admin_ctx *ctx); +int iocpt_session_init(struct iocpt_session_priv *priv); +int iocpt_session_update(struct iocpt_session_priv *priv); +void iocpt_session_deinit(struct iocpt_session_priv *priv); + struct ionic_doorbell __iomem *iocpt_db_map(struct iocpt_dev *dev, struct iocpt_queue *q); diff --git a/drivers/crypto/ionic/ionic_crypto_main.c b/drivers/crypto/ionic/ionic_crypto_main.c index e95d2918d2..8e319b8830 100644 --- a/drivers/crypto/ionic/ionic_crypto_main.c +++ b/drivers/crypto/ionic/ionic_crypto_main.c @@ -112,6 +112,116 @@ iocpt_q_free(struct iocpt_queue *q) } } +static int +iocpt_session_write(struct iocpt_session_priv *priv, + enum iocpt_sess_control_oper oper) +{ + struct iocpt_dev *dev = priv->dev; + struct iocpt_admin_ctx ctx = { + .pending_work = true, + .cmd.sess_control = { + .opcode = IOCPT_CMD_SESS_CONTROL, + .type = priv->type, + .oper = oper, + .index = rte_cpu_to_le_32(priv->index), + .key_len = rte_cpu_to_le_16(priv->key_len), + .key_seg_len = (uint8_t)RTE_MIN(priv->key_len, + IOCPT_SESS_KEY_SEG_LEN), + }, + }; + struct iocpt_sess_control_cmd *cmd = &ctx.cmd.sess_control; + uint16_t key_offset; + uint8_t key_segs, seg; + int err; + + key_segs = ((priv->key_len - 1) >> IOCPT_SESS_KEY_SEG_SHFT) + 1; + + for (seg = 0; seg < key_segs; seg++) { + ctx.pending_work = true; + + key_offset = seg * cmd->key_seg_len; + memcpy(cmd->key, &priv->key[key_offset], + IOCPT_SESS_KEY_SEG_LEN); + cmd->key_seg_idx = seg; + + /* Mark final segment */ + if (seg + 1 == key_segs) + cmd->flags |= rte_cpu_to_le_16(IOCPT_SCTL_F_END); + + err = iocpt_adminq_post_wait(dev, &ctx); + if (err != 0) + return err; + } + + return 0; +} + +int +iocpt_session_init(struct iocpt_session_priv *priv) +{ + struct iocpt_dev *dev = priv->dev; + uint64_t bm_slab = 0; + uint32_t bm_pos = 0; + int err = 0; + + rte_spinlock_lock(&dev->adminq_lock); + + if (rte_bitmap_scan(dev->sess_bm, &bm_pos, &bm_slab) > 0) { + priv->index = bm_pos + rte_ctz64(bm_slab); + rte_bitmap_clear(dev->sess_bm, priv->index); + } else + err = -ENOSPC; + + rte_spinlock_unlock(&dev->adminq_lock); + + if (err != 0) { + IOCPT_PRINT(ERR, "session index space exhausted"); + return err; + } + + err = iocpt_session_write(priv, IOCPT_SESS_INIT); + if (err != 0) { + rte_spinlock_lock(&dev->adminq_lock); + rte_bitmap_set(dev->sess_bm, priv->index); + rte_spinlock_unlock(&dev->adminq_lock); + return err; + } + + priv->flags |= IOCPT_S_F_INITED; + + return 0; +} + +int +iocpt_session_update(struct iocpt_session_priv *priv) +{ + return iocpt_session_write(priv, IOCPT_SESS_UPDATE_KEY); +} + +void +iocpt_session_deinit(struct iocpt_session_priv *priv) +{ + struct iocpt_dev *dev = priv->dev; + struct iocpt_admin_ctx ctx = { + .pending_work = true, + .cmd.sess_control = { + .opcode = IOCPT_CMD_SESS_CONTROL, + .type = priv->type, + .oper = IOCPT_SESS_DISABLE, + .index = rte_cpu_to_le_32(priv->index), + .key_len = rte_cpu_to_le_16(priv->key_len), + }, + }; + + (void)iocpt_adminq_post_wait(dev, &ctx); + + rte_spinlock_lock(&dev->adminq_lock); + rte_bitmap_set(dev->sess_bm, priv->index); + rte_spinlock_unlock(&dev->adminq_lock); + + priv->flags &= ~IOCPT_S_F_INITED; +} + static const struct rte_memzone * iocpt_dma_zone_reserve(const char *type_name, uint16_t qid, size_t size, unsigned int align, int socket_id) @@ -305,6 +415,8 @@ iocpt_adminq_free(struct iocpt_admin_q *aq) static int iocpt_alloc_objs(struct iocpt_dev *dev) { + uint32_t bmsize, i; + uint8_t *bm; int err; IOCPT_PRINT(DEBUG, "Crypto: %s", dev->name); @@ -331,8 +443,33 @@ iocpt_alloc_objs(struct iocpt_dev *dev) dev->info = dev->info_z->addr; dev->info_pa = dev->info_z->iova; + bmsize = rte_bitmap_get_memory_footprint(dev->max_sessions); + bm = rte_malloc_socket("iocpt", bmsize, + RTE_CACHE_LINE_SIZE, dev->socket_id); + if (bm == NULL) { + IOCPT_PRINT(ERR, "Cannot allocate %uB bitmap memory", bmsize); + err = -ENOMEM; + goto err_free_dmazone; + } + + dev->sess_bm = rte_bitmap_init(dev->max_sessions, bm, bmsize); + if (dev->sess_bm == NULL) { + IOCPT_PRINT(ERR, "Cannot initialize bitmap"); + err = -EFAULT; + goto err_free_bm; + } + for (i = 0; i < dev->max_sessions; i++) + rte_bitmap_set(dev->sess_bm, i); + return 0; +err_free_bm: + rte_free(bm); +err_free_dmazone: + rte_memzone_free(dev->info_z); + dev->info_z = NULL; + dev->info = NULL; + dev->info_pa = 0; err_free_adminq: iocpt_adminq_free(dev->adminq); dev->adminq = NULL; @@ -383,6 +520,12 @@ iocpt_free_objs(struct iocpt_dev *dev) { IOCPT_PRINT_CALL(); + if (dev->sess_bm != NULL) { + rte_bitmap_free(dev->sess_bm); + rte_free(dev->sess_bm); + dev->sess_bm = NULL; + } + if (dev->adminq != NULL) { iocpt_adminq_free(dev->adminq); dev->adminq = NULL; diff --git a/drivers/crypto/ionic/ionic_crypto_ops.c b/drivers/crypto/ionic/ionic_crypto_ops.c index 74a6ce56ea..e6b3402b63 100644 --- a/drivers/crypto/ionic/ionic_crypto_ops.c +++ b/drivers/crypto/ionic/ionic_crypto_ops.c @@ -48,10 +48,133 @@ iocpt_op_info_get(struct rte_cryptodev *cdev, struct rte_cryptodev_info *info) info->min_mbuf_tailroom_req = 0; } +static unsigned int +iocpt_op_get_session_size(struct rte_cryptodev *cdev __rte_unused) +{ + return iocpt_session_size(); +} + +static inline int +iocpt_is_algo_supported(struct rte_crypto_sym_xform *xform) +{ + if (xform->next != NULL) { + IOCPT_PRINT(ERR, "chaining not supported"); + return -ENOTSUP; + } + + if (xform->type != RTE_CRYPTO_SYM_XFORM_AEAD) { + IOCPT_PRINT(ERR, "xform->type %d not supported", xform->type); + return -ENOTSUP; + } + + return 0; +} + +static __rte_always_inline int +iocpt_fill_sess_aead(struct rte_crypto_sym_xform *xform, + struct iocpt_session_priv *priv) +{ + struct rte_crypto_aead_xform *aead_form = &xform->aead; + + if (aead_form->algo != RTE_CRYPTO_AEAD_AES_GCM) { + IOCPT_PRINT(ERR, "Unknown algo"); + return -EINVAL; + } + if (aead_form->op == RTE_CRYPTO_AEAD_OP_ENCRYPT) { + priv->op = IOCPT_DESC_OPCODE_GCM_AEAD_ENCRYPT; + } else if (aead_form->op == RTE_CRYPTO_AEAD_OP_DECRYPT) { + priv->op = IOCPT_DESC_OPCODE_GCM_AEAD_DECRYPT; + } else { + IOCPT_PRINT(ERR, "Unknown cipher operations"); + return -1; + } + + if (aead_form->key.length < IOCPT_SESS_KEY_LEN_MIN || + aead_form->key.length > IOCPT_SESS_KEY_LEN_MAX_SYMM) { + IOCPT_PRINT(ERR, "Invalid cipher keylen %u", + aead_form->key.length); + return -1; + } + priv->key_len = aead_form->key.length; + memcpy(priv->key, aead_form->key.data, priv->key_len); + + priv->type = IOCPT_SESS_AEAD_AES_GCM; + priv->iv_offset = aead_form->iv.offset; + priv->iv_length = aead_form->iv.length; + priv->digest_length = aead_form->digest_length; + priv->aad_length = aead_form->aad_length; + + return 0; +} + +static int +iocpt_session_cfg(struct iocpt_dev *dev, + struct rte_crypto_sym_xform *xform, + struct rte_cryptodev_sym_session *sess) +{ + struct rte_crypto_sym_xform *chain; + struct iocpt_session_priv *priv = NULL; + + if (iocpt_is_algo_supported(xform) < 0) + return -ENOTSUP; + + if (unlikely(sess == NULL)) { + IOCPT_PRINT(ERR, "invalid session"); + return -EINVAL; + } + + priv = CRYPTODEV_GET_SYM_SESS_PRIV(sess); + priv->dev = dev; + + chain = xform; + while (chain) { + switch (chain->type) { + case RTE_CRYPTO_SYM_XFORM_AEAD: + if (iocpt_fill_sess_aead(chain, priv)) + return -EIO; + break; + default: + IOCPT_PRINT(ERR, "invalid crypto xform type %d", + chain->type); + return -ENOTSUP; + } + chain = chain->next; + } + + return iocpt_session_init(priv); +} + +static int +iocpt_op_session_cfg(struct rte_cryptodev *cdev, + struct rte_crypto_sym_xform *xform, + struct rte_cryptodev_sym_session *sess) +{ + struct iocpt_dev *dev = cdev->data->dev_private; + + return iocpt_session_cfg(dev, xform, sess); +} + +static void +iocpt_session_clear(struct rte_cryptodev_sym_session *sess) +{ + iocpt_session_deinit(CRYPTODEV_GET_SYM_SESS_PRIV(sess)); +} + +static void +iocpt_op_session_clear(struct rte_cryptodev *cdev __rte_unused, + struct rte_cryptodev_sym_session *sess) +{ + iocpt_session_clear(sess); +} + static struct rte_cryptodev_ops iocpt_ops = { .dev_configure = iocpt_op_config, .dev_close = iocpt_op_close, .dev_infos_get = iocpt_op_info_get, + + .sym_session_get_size = iocpt_op_get_session_size, + .sym_session_configure = iocpt_op_session_cfg, + .sym_session_clear = iocpt_op_session_clear, }; int -- 2.17.1