xref: /dpdk/drivers/crypto/ipsec_mb/pmd_chacha_poly.c (revision 796de0616c326c4b6e9a9fd6b0a00584b366460d)
1f1666288SKai Ji /* SPDX-License-Identifier: BSD-3-Clause
2f1666288SKai Ji  * Copyright(c) 2021 Intel Corporation
3f1666288SKai Ji  */
4f1666288SKai Ji 
5f1666288SKai Ji #include "pmd_chacha_poly_priv.h"
6*796de061SBrian Dooley #include "pmd_aesni_mb_priv.h"
7f1666288SKai Ji 
8f1666288SKai Ji struct rte_cryptodev_ops chacha20_poly1305_pmd_ops = {
9f1666288SKai Ji 	.dev_configure = ipsec_mb_config,
10f1666288SKai Ji 	.dev_start = ipsec_mb_start,
11f1666288SKai Ji 	.dev_stop = ipsec_mb_stop,
12f1666288SKai Ji 	.dev_close = ipsec_mb_close,
13f1666288SKai Ji 
14f1666288SKai Ji 	.stats_get = ipsec_mb_stats_get,
15f1666288SKai Ji 	.stats_reset = ipsec_mb_stats_reset,
16f1666288SKai Ji 
17f1666288SKai Ji 	.dev_infos_get = ipsec_mb_info_get,
18f1666288SKai Ji 
19f1666288SKai Ji 	.queue_pair_setup = ipsec_mb_qp_setup,
20f1666288SKai Ji 	.queue_pair_release = ipsec_mb_qp_release,
21f1666288SKai Ji 
22f1666288SKai Ji 	.sym_session_get_size = ipsec_mb_sym_session_get_size,
23f1666288SKai Ji 	.sym_session_configure = ipsec_mb_sym_session_configure,
24f1666288SKai Ji 	.sym_session_clear = ipsec_mb_sym_session_clear
25f1666288SKai Ji };
26f1666288SKai Ji 
27f1666288SKai Ji struct rte_cryptodev_ops *rte_chacha20_poly1305_pmd_ops =
28f1666288SKai Ji 						&chacha20_poly1305_pmd_ops;
29f1666288SKai Ji 
30f1666288SKai Ji static int
chacha20_poly1305_probe(struct rte_vdev_device * vdev)31f1666288SKai Ji chacha20_poly1305_probe(struct rte_vdev_device *vdev)
32f1666288SKai Ji {
33f1666288SKai Ji 	return ipsec_mb_create(vdev, IPSEC_MB_PMD_TYPE_CHACHA20_POLY1305);
34f1666288SKai Ji }
35f1666288SKai Ji 
36f1666288SKai Ji static struct rte_vdev_driver cryptodev_chacha20_poly1305_pmd_drv = {
37f1666288SKai Ji 	.probe = chacha20_poly1305_probe,
38f1666288SKai Ji 	.remove = ipsec_mb_remove
39f1666288SKai Ji };
40f1666288SKai Ji 
41f1666288SKai Ji static struct cryptodev_driver chacha20_poly1305_crypto_drv;
42f1666288SKai Ji 
43f1666288SKai Ji RTE_PMD_REGISTER_VDEV(CRYPTODEV_NAME_CHACHA20_POLY1305_PMD,
44f1666288SKai Ji 					cryptodev_chacha20_poly1305_pmd_drv);
45f1666288SKai Ji RTE_PMD_REGISTER_ALIAS(CRYPTODEV_NAME_CHACHA20_POLY1305_PMD,
46f1666288SKai Ji 					cryptodev_chacha20_poly1305_pmd);
47f1666288SKai Ji RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_CHACHA20_POLY1305_PMD,
48f1666288SKai Ji 			       "max_nb_queue_pairs=<int> socket_id=<int>");
49f1666288SKai Ji RTE_PMD_REGISTER_CRYPTO_DRIVER(chacha20_poly1305_crypto_drv,
50f1666288SKai Ji 				cryptodev_chacha20_poly1305_pmd_drv.driver,
51f1666288SKai Ji 				pmd_driver_id_chacha20_poly1305);
52f1666288SKai Ji 
53f1666288SKai Ji /* Constructor function to register chacha20_poly1305 PMD */
RTE_INIT(ipsec_mb_register_chacha20_poly1305)54f1666288SKai Ji RTE_INIT(ipsec_mb_register_chacha20_poly1305)
55f1666288SKai Ji {
56f1666288SKai Ji 	struct ipsec_mb_internals *chacha_poly_data
57f1666288SKai Ji 		= &ipsec_mb_pmds[IPSEC_MB_PMD_TYPE_CHACHA20_POLY1305];
58f1666288SKai Ji 
59f1666288SKai Ji 	chacha_poly_data->caps = chacha20_poly1305_capabilities;
60*796de061SBrian Dooley 	chacha_poly_data->dequeue_burst = aesni_mb_dequeue_burst;
61f1666288SKai Ji 	chacha_poly_data->feature_flags =
62f1666288SKai Ji 		RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
63f1666288SKai Ji 		RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
64f1666288SKai Ji 		RTE_CRYPTODEV_FF_IN_PLACE_SGL |
65f1666288SKai Ji 		RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT |
66f1666288SKai Ji 		RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT |
67f1666288SKai Ji 		RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO |
68f1666288SKai Ji 		RTE_CRYPTODEV_FF_SYM_SESSIONLESS;
69f1666288SKai Ji 	chacha_poly_data->internals_priv_size = 0;
70f1666288SKai Ji 	chacha_poly_data->ops = &chacha20_poly1305_pmd_ops;
71*796de061SBrian Dooley 	chacha_poly_data->qp_priv_size = sizeof(struct aesni_mb_qp_data);
72*796de061SBrian Dooley 	chacha_poly_data->session_configure = aesni_mb_session_configure;
73*796de061SBrian Dooley 	chacha_poly_data->session_priv_size = sizeof(struct aesni_mb_session);
74f1666288SKai Ji }
75