1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2016-2021 Intel Corporation
3 */
4
5 #include <bus_vdev_driver.h>
6 #include <rte_common.h>
7 #include <rte_cpuflags.h>
8 #include <rte_cryptodev.h>
9 #include <rte_hexdump.h>
10 #include <rte_malloc.h>
11
12 #include "pmd_kasumi_priv.h"
13 #include "pmd_aesni_mb_priv.h"
14
15 struct rte_cryptodev_ops kasumi_pmd_ops = {
16 .dev_configure = ipsec_mb_config,
17 .dev_start = ipsec_mb_start,
18 .dev_stop = ipsec_mb_stop,
19 .dev_close = ipsec_mb_close,
20
21 .stats_get = ipsec_mb_stats_get,
22 .stats_reset = ipsec_mb_stats_reset,
23
24 .dev_infos_get = ipsec_mb_info_get,
25
26 .queue_pair_setup = ipsec_mb_qp_setup,
27 .queue_pair_release = ipsec_mb_qp_release,
28
29 .sym_session_get_size = ipsec_mb_sym_session_get_size,
30 .sym_session_configure = ipsec_mb_sym_session_configure,
31 .sym_session_clear = ipsec_mb_sym_session_clear
32 };
33
34 struct rte_cryptodev_ops *rte_kasumi_pmd_ops = &kasumi_pmd_ops;
35
36 static int
kasumi_probe(struct rte_vdev_device * vdev)37 kasumi_probe(struct rte_vdev_device *vdev)
38 {
39 return ipsec_mb_create(vdev, IPSEC_MB_PMD_TYPE_KASUMI);
40 }
41
42 static struct rte_vdev_driver cryptodev_kasumi_pmd_drv = {
43 .probe = kasumi_probe,
44 .remove = ipsec_mb_remove
45 };
46
47 static struct cryptodev_driver kasumi_crypto_drv;
48
49 RTE_PMD_REGISTER_VDEV(CRYPTODEV_NAME_KASUMI_PMD, cryptodev_kasumi_pmd_drv);
50 RTE_PMD_REGISTER_ALIAS(CRYPTODEV_NAME_KASUMI_PMD, cryptodev_kasumi_pmd);
51 RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_KASUMI_PMD,
52 "max_nb_queue_pairs=<int> socket_id=<int>");
53 RTE_PMD_REGISTER_CRYPTO_DRIVER(kasumi_crypto_drv,
54 cryptodev_kasumi_pmd_drv.driver,
55 pmd_driver_id_kasumi);
56
57 /* Constructor function to register kasumi PMD */
RTE_INIT(ipsec_mb_register_kasumi)58 RTE_INIT(ipsec_mb_register_kasumi)
59 {
60 struct ipsec_mb_internals *kasumi_data
61 = &ipsec_mb_pmds[IPSEC_MB_PMD_TYPE_KASUMI];
62
63 kasumi_data->caps = kasumi_capabilities;
64 kasumi_data->dequeue_burst = aesni_mb_dequeue_burst;
65 kasumi_data->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO
66 | RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING
67 | RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA
68 | RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT
69 | RTE_CRYPTODEV_FF_SYM_SESSIONLESS
70 | RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT;
71 kasumi_data->internals_priv_size = 0;
72 kasumi_data->ops = &kasumi_pmd_ops;
73 kasumi_data->qp_priv_size = sizeof(struct aesni_mb_qp_data);
74 kasumi_data->session_configure = aesni_mb_session_configure;
75 kasumi_data->session_priv_size = sizeof(struct aesni_mb_session);
76 }
77