xref: /dpdk/drivers/crypto/ionic/ionic_crypto_ops.c (revision dddfb0d98841378161155c8afbf7b55e2f5e256c)
1*dddfb0d9SAndrew Boyer /* SPDX-License-Identifier: BSD-3-Clause
2*dddfb0d9SAndrew Boyer  * Copyright 2021-2024 Advanced Micro Devices, Inc.
3*dddfb0d9SAndrew Boyer  */
4*dddfb0d9SAndrew Boyer 
5*dddfb0d9SAndrew Boyer #include <rte_cryptodev.h>
6*dddfb0d9SAndrew Boyer #include <cryptodev_pmd.h>
7*dddfb0d9SAndrew Boyer #include <rte_errno.h>
8*dddfb0d9SAndrew Boyer #include <rte_malloc.h>
9*dddfb0d9SAndrew Boyer #include <rte_mempool.h>
10*dddfb0d9SAndrew Boyer 
11*dddfb0d9SAndrew Boyer #include "ionic_crypto.h"
12*dddfb0d9SAndrew Boyer 
13*dddfb0d9SAndrew Boyer static int
14*dddfb0d9SAndrew Boyer iocpt_op_config(struct rte_cryptodev *cdev,
15*dddfb0d9SAndrew Boyer 		struct rte_cryptodev_config *config __rte_unused)
16*dddfb0d9SAndrew Boyer {
17*dddfb0d9SAndrew Boyer 	struct iocpt_dev *dev = cdev->data->dev_private;
18*dddfb0d9SAndrew Boyer 
19*dddfb0d9SAndrew Boyer 	iocpt_configure(dev);
20*dddfb0d9SAndrew Boyer 
21*dddfb0d9SAndrew Boyer 	return 0;
22*dddfb0d9SAndrew Boyer }
23*dddfb0d9SAndrew Boyer 
24*dddfb0d9SAndrew Boyer static int
25*dddfb0d9SAndrew Boyer iocpt_op_close(struct rte_cryptodev *cdev)
26*dddfb0d9SAndrew Boyer {
27*dddfb0d9SAndrew Boyer 	struct iocpt_dev *dev = cdev->data->dev_private;
28*dddfb0d9SAndrew Boyer 
29*dddfb0d9SAndrew Boyer 	iocpt_deinit(dev);
30*dddfb0d9SAndrew Boyer 
31*dddfb0d9SAndrew Boyer 	return 0;
32*dddfb0d9SAndrew Boyer }
33*dddfb0d9SAndrew Boyer 
34*dddfb0d9SAndrew Boyer static void
35*dddfb0d9SAndrew Boyer iocpt_op_info_get(struct rte_cryptodev *cdev, struct rte_cryptodev_info *info)
36*dddfb0d9SAndrew Boyer {
37*dddfb0d9SAndrew Boyer 	struct iocpt_dev *dev = cdev->data->dev_private;
38*dddfb0d9SAndrew Boyer 
39*dddfb0d9SAndrew Boyer 	if (info == NULL)
40*dddfb0d9SAndrew Boyer 		return;
41*dddfb0d9SAndrew Boyer 
42*dddfb0d9SAndrew Boyer 	info->max_nb_queue_pairs = dev->max_qps;
43*dddfb0d9SAndrew Boyer 	info->feature_flags = dev->features;
44*dddfb0d9SAndrew Boyer 	info->capabilities = iocpt_get_caps(info->feature_flags);
45*dddfb0d9SAndrew Boyer 	info->sym.max_nb_sessions = dev->max_sessions;
46*dddfb0d9SAndrew Boyer 	info->driver_id = dev->driver_id;
47*dddfb0d9SAndrew Boyer 	info->min_mbuf_headroom_req = 0;
48*dddfb0d9SAndrew Boyer 	info->min_mbuf_tailroom_req = 0;
49*dddfb0d9SAndrew Boyer }
50*dddfb0d9SAndrew Boyer 
51*dddfb0d9SAndrew Boyer static struct rte_cryptodev_ops iocpt_ops = {
52*dddfb0d9SAndrew Boyer 	.dev_configure = iocpt_op_config,
53*dddfb0d9SAndrew Boyer 	.dev_close = iocpt_op_close,
54*dddfb0d9SAndrew Boyer 	.dev_infos_get = iocpt_op_info_get,
55*dddfb0d9SAndrew Boyer };
56*dddfb0d9SAndrew Boyer 
57*dddfb0d9SAndrew Boyer int
58*dddfb0d9SAndrew Boyer iocpt_assign_ops(struct rte_cryptodev *cdev)
59*dddfb0d9SAndrew Boyer {
60*dddfb0d9SAndrew Boyer 	struct iocpt_dev *dev = cdev->data->dev_private;
61*dddfb0d9SAndrew Boyer 
62*dddfb0d9SAndrew Boyer 	cdev->dev_ops = &iocpt_ops;
63*dddfb0d9SAndrew Boyer 	cdev->feature_flags = dev->features;
64*dddfb0d9SAndrew Boyer 
65*dddfb0d9SAndrew Boyer 	return 0;
66*dddfb0d9SAndrew Boyer }
67