1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2017-2018 NXP
10 #include <rte_byteorder.h>
11 #include <rte_common.h>
12 #include <rte_cryptodev_pmd.h>
13 #include <rte_crypto.h>
14 #include <rte_cryptodev.h>
15 #include <rte_bus_vdev.h>
16 #include <rte_malloc.h>
17 #include <rte_security_driver.h>
18 #include <rte_hexdump.h>
20 #include <caam_jr_log.h>
22 #define CRYPTODEV_NAME_CAAM_JR_PMD crypto_caam_jr
23 static uint8_t cryptodev_driver_id;
27 * @brief Release the resources used by the SEC user space driver.
29 * Reset and release SEC's job rings indicated by the User Application at
30 * init_job_ring() and free any memory allocated internally.
31 * Call once during application tear down.
33 * @note In case there are any descriptors in-flight (descriptors received by
34 * SEC driver for processing and for which no response was yet provided to UA),
35 * the descriptors are discarded without any notifications to User Application.
37 * @retval ::0 is returned for a successful execution
38 * @retval ::-1 is returned if SEC driver release is in progress
41 caam_jr_dev_uninit(struct rte_cryptodev *dev)
46 CAAM_JR_INFO("Closing crypto device %s", dev->data->name);
52 caam_jr_dev_init(const char *name,
53 struct rte_vdev_device *vdev,
54 struct rte_cryptodev_pmd_init_params *init_params)
56 struct rte_cryptodev *dev;
58 PMD_INIT_FUNC_TRACE();
60 dev = rte_cryptodev_pmd_create(name, &vdev->device, init_params);
62 CAAM_JR_ERR("failed to create cryptodev vdev");
66 dev->driver_id = cryptodev_driver_id;
69 /* For secondary processes, we don't initialise any further as primary
70 * has already done this work. Only check we don't need a different
73 if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
74 CAAM_JR_WARN("Device already init by primary process");
78 RTE_LOG(INFO, PMD, "%s cryptodev init\n", dev->data->name);
83 CAAM_JR_ERR("driver %s: cryptodev_caam_jr_create failed",
89 /** Initialise CAAM JR crypto device */
91 cryptodev_caam_jr_probe(struct rte_vdev_device *vdev)
93 struct rte_cryptodev_pmd_init_params init_params = {
97 RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS
100 const char *input_args;
102 name = rte_vdev_device_name(vdev);
106 input_args = rte_vdev_device_args(vdev);
107 rte_cryptodev_pmd_parse_input_args(&init_params, input_args);
109 return caam_jr_dev_init(name, vdev, &init_params);
112 /** Uninitialise CAAM JR crypto device */
114 cryptodev_caam_jr_remove(struct rte_vdev_device *vdev)
116 struct rte_cryptodev *cryptodev;
119 name = rte_vdev_device_name(vdev);
123 cryptodev = rte_cryptodev_pmd_get_named_dev(name);
124 if (cryptodev == NULL)
127 caam_jr_dev_uninit(cryptodev);
129 return rte_cryptodev_pmd_destroy(cryptodev);
132 static struct rte_vdev_driver cryptodev_caam_jr_drv = {
133 .probe = cryptodev_caam_jr_probe,
134 .remove = cryptodev_caam_jr_remove
137 static struct cryptodev_driver caam_jr_crypto_drv;
139 RTE_PMD_REGISTER_VDEV(CRYPTODEV_NAME_CAAM_JR_PMD, cryptodev_caam_jr_drv);
140 RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_CAAM_JR_PMD,
141 "max_nb_queue_pairs=<int>"
143 RTE_PMD_REGISTER_CRYPTO_DRIVER(caam_jr_crypto_drv, cryptodev_caam_jr_drv.driver,
144 cryptodev_driver_id);
146 RTE_INIT(caam_jr_init_log)
148 caam_jr_logtype = rte_log_register("pmd.crypto.caam");
149 if (caam_jr_logtype >= 0)
150 rte_log_set_level(caam_jr_logtype, RTE_LOG_NOTICE);