[v4,03/11] crypto/nitrox: create Nitrox symmetric cryptodev
Checks
Commit Message
Add Nitrox symmetric cryptodev with no operations. Cryptodev
operations will be added in the next set of patches. Also, registered
nitrox log type.
Signed-off-by: Nagadheeraj Rottela <rnagadheeraj@marvell.com>
---
drivers/crypto/nitrox/Makefile | 2 +
drivers/crypto/nitrox/meson.build | 2 +
drivers/crypto/nitrox/nitrox_device.c | 9 ++++
drivers/crypto/nitrox/nitrox_device.h | 6 +++
drivers/crypto/nitrox/nitrox_logs.c | 14 ++++++
drivers/crypto/nitrox/nitrox_logs.h | 16 +++++++
drivers/crypto/nitrox/nitrox_sym.c | 83 +++++++++++++++++++++++++++++++++++
drivers/crypto/nitrox/nitrox_sym.h | 13 ++++++
8 files changed, 145 insertions(+)
create mode 100644 drivers/crypto/nitrox/nitrox_logs.c
create mode 100644 drivers/crypto/nitrox/nitrox_logs.h
create mode 100644 drivers/crypto/nitrox/nitrox_sym.c
create mode 100644 drivers/crypto/nitrox/nitrox_sym.h
Comments
Hi Nagadheeraj,
>
> Add Nitrox symmetric cryptodev with no operations. Cryptodev
> operations will be added in the next set of patches. Also, registered
> nitrox log type.
>
> Signed-off-by: Nagadheeraj Rottela <rnagadheeraj@marvell.com>
> ---
> drivers/crypto/nitrox/Makefile | 2 +
> drivers/crypto/nitrox/meson.build | 2 +
> drivers/crypto/nitrox/nitrox_device.c | 9 ++++
> drivers/crypto/nitrox/nitrox_device.h | 6 +++
> drivers/crypto/nitrox/nitrox_logs.c | 14 ++++++
> drivers/crypto/nitrox/nitrox_logs.h | 16 +++++++
> drivers/crypto/nitrox/nitrox_sym.c | 83
> +++++++++++++++++++++++++++++++++++
> drivers/crypto/nitrox/nitrox_sym.h | 13 ++++++
> 8 files changed, 145 insertions(+)
> create mode 100644 drivers/crypto/nitrox/nitrox_logs.c
> create mode 100644 drivers/crypto/nitrox/nitrox_logs.h
> create mode 100644 drivers/crypto/nitrox/nitrox_sym.c
> create mode 100644 drivers/crypto/nitrox/nitrox_sym.h
>
> diff --git a/drivers/crypto/nitrox/Makefile b/drivers/crypto/nitrox/Makefile
> index bc0220964..06c96ccd7 100644
> --- a/drivers/crypto/nitrox/Makefile
> +++ b/drivers/crypto/nitrox/Makefile
> @@ -25,5 +25,7 @@ LDLIBS += -lrte_cryptodev
> # library source files
> SRCS-$(CONFIG_RTE_LIBRTE_PMD_NITROX) += nitrox_device.c
> SRCS-$(CONFIG_RTE_LIBRTE_PMD_NITROX) += nitrox_hal.c
> +SRCS-$(CONFIG_RTE_LIBRTE_PMD_NITROX) += nitrox_logs.c
> +SRCS-$(CONFIG_RTE_LIBRTE_PMD_NITROX) += nitrox_sym.c
>
> include $(RTE_SDK)/mk/rte.lib.mk
> diff --git a/drivers/crypto/nitrox/meson.build
> b/drivers/crypto/nitrox/meson.build
> index f1c96b84d..1277cf58e 100644
> --- a/drivers/crypto/nitrox/meson.build
> +++ b/drivers/crypto/nitrox/meson.build
> @@ -11,4 +11,6 @@ allow_experimental_apis = true
> sources = files(
> 'nitrox_device.c',
> 'nitrox_hal.c',
> + 'nitrox_logs.c',
> + 'nitrox_sym.c',
> )
> diff --git a/drivers/crypto/nitrox/nitrox_device.c
> b/drivers/crypto/nitrox/nitrox_device.c
> index 5628c6d8b..ec2aae588 100644
> --- a/drivers/crypto/nitrox/nitrox_device.c
> +++ b/drivers/crypto/nitrox/nitrox_device.c
> @@ -6,6 +6,7 @@
>
> #include "nitrox_device.h"
> #include "nitrox_hal.h"
> +#include "nitrox_sym.h"
>
> TAILQ_HEAD(ndev_list, nitrox_device);
> static struct ndev_list ndev_list = TAILQ_HEAD_INITIALIZER(ndev_list);
> @@ -63,6 +64,7 @@ nitrox_pci_probe(struct rte_pci_driver *pci_drv
> __rte_unused,
> struct rte_pci_device *pdev)
> {
> struct nitrox_device *ndev;
> + int err;
>
> /* Nitrox CSR space */
> if (!pdev->mem_resource[0].addr)
> @@ -73,6 +75,12 @@ nitrox_pci_probe(struct rte_pci_driver *pci_drv
> __rte_unused,
> return -ENOMEM;
>
> ndev_init(ndev, pdev);
> + err = nitrox_sym_pmd_create(ndev);
> + if (err) {
> + ndev_release(ndev);
> + return err;
> + }
> +
> return 0;
> }
>
> @@ -85,6 +93,7 @@ nitrox_pci_remove(struct rte_pci_device *pdev)
> if (!ndev)
> return -ENODEV;
>
> + nitrox_sym_pmd_destroy(ndev);
Return values not checked. Return type of nitrox_sym_pmd_destroy is not void.
> ndev_release(ndev);
> return 0;
> }
> diff --git a/drivers/crypto/nitrox/nitrox_device.h
> b/drivers/crypto/nitrox/nitrox_device.h
> index 0d0167de2..82ba8b4e4 100644
> --- a/drivers/crypto/nitrox/nitrox_device.h
> +++ b/drivers/crypto/nitrox/nitrox_device.h
> @@ -8,10 +8,16 @@
> #include <rte_bus_pci.h>
> #include <rte_cryptodev.h>
>
> +#define NITROX_DEV_NAME_MAX_LEN RTE_CRYPTODEV_NAME_MAX_LEN
Why do you need a wrapper over RTE_CRYPTODEV_NAME_MAX_LEN
> +
> +struct nitrox_sym_device;
> +
> struct nitrox_device {
> TAILQ_ENTRY(nitrox_device) next;
> struct rte_pci_device *pdev;
> uint8_t *bar_addr;
> + struct nitrox_sym_device *sym_dev;
> + struct rte_device rte_sym_dev;
> uint16_t nr_queues;
> };
>
> diff --git a/drivers/crypto/nitrox/nitrox_logs.c
> b/drivers/crypto/nitrox/nitrox_logs.c
> new file mode 100644
> index 000000000..007056cb4
> --- /dev/null
> +++ b/drivers/crypto/nitrox/nitrox_logs.c
> @@ -0,0 +1,14 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright(C) 2019 Marvell International Ltd.
> + */
> +
> +#include <rte_log.h>
> +
> +int nitrox_logtype;
> +
> +RTE_INIT(nitrox_init_log)
> +{
> + nitrox_logtype = rte_log_register("pmd.crypto.nitrox");
> + if (nitrox_logtype >= 0)
> + rte_log_set_level(nitrox_logtype, RTE_LOG_NOTICE);
> +}
Logs can be squashed in your first patch.
Let this patch be specifically to initialize/create the Nitrox symmetric cryptodev
> diff --git a/drivers/crypto/nitrox/nitrox_logs.h
> b/drivers/crypto/nitrox/nitrox_logs.h
> new file mode 100644
> index 000000000..06fd21a95
> --- /dev/null
> +++ b/drivers/crypto/nitrox/nitrox_logs.h
> @@ -0,0 +1,16 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright(C) 2019 Marvell International Ltd.
> + */
> +
> +#ifndef _NITROX_LOGS_H_
> +#define _NITROX_LOGS_H_
> +
> +#define LOG_PREFIX "NITROX: "
> +
> +extern int nitrox_logtype;
> +
> +#define NITROX_LOG(level, fmt, args...)
> \
> + rte_log(RTE_LOG_ ## level, nitrox_logtype, \
> + LOG_PREFIX "%s:%d " fmt, __func__, __LINE__, ## args)
> +
> +#endif /* _NITROX_LOGS_H_ */
> diff --git a/drivers/crypto/nitrox/nitrox_sym.c
> b/drivers/crypto/nitrox/nitrox_sym.c
> new file mode 100644
> index 000000000..c72016dd0
> --- /dev/null
> +++ b/drivers/crypto/nitrox/nitrox_sym.c
> @@ -0,0 +1,83 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright(C) 2019 Marvell International Ltd.
> + */
> +
> +#include <stdbool.h>
> +
> +#include <rte_cryptodev_pmd.h>
> +#include <rte_crypto.h>
> +
> +#include "nitrox_sym.h"
> +#include "nitrox_device.h"
> +#include "nitrox_logs.h"
> +
> +#define CRYPTODEV_NAME_NITROX_PMD crypto_nitrox
In your previous patch, I could see that crypto_nitrox was used without the macro while doing malloc.
> +
> +struct nitrox_sym_device {
> + struct rte_cryptodev *cdev;
> + struct nitrox_device *ndev;
> +};
> +
> +uint8_t nitrox_sym_drv_id;
> +static const char nitrox_sym_drv_name[] =
> RTE_STR(CRYPTODEV_NAME_NITROX_PMD);
> +static const struct rte_driver nitrox_rte_sym_drv = {
> + .name = nitrox_sym_drv_name,
> + .alias = nitrox_sym_drv_name
> +};
> +
> +int
> +nitrox_sym_pmd_create(struct nitrox_device *ndev)
> +{
> + char name[NITROX_DEV_NAME_MAX_LEN];
> + struct rte_cryptodev_pmd_init_params init_params = {
> + .name = "",
> + .socket_id = ndev->pdev->device.numa_node,
> + .private_data_size = sizeof(struct nitrox_sym_device)
> + };
> + struct rte_cryptodev *cdev;
> +
> + rte_pci_device_name(&ndev->pdev->addr, name, sizeof(name));
> + snprintf(name + strlen(name), NITROX_DEV_NAME_MAX_LEN,
> "_n5sym");
> + ndev->rte_sym_dev.driver = &nitrox_rte_sym_drv;
> + ndev->rte_sym_dev.numa_node = ndev->pdev->device.numa_node;
> + ndev->rte_sym_dev.devargs = NULL;
> + cdev = rte_cryptodev_pmd_create(name, &ndev->rte_sym_dev,
> + &init_params);
> + if (!cdev) {
> + NITROX_LOG(ERR, "Cryptodev '%s' creation failed\n", name);
> + return -ENODEV;
> + }
> +
> + ndev->rte_sym_dev.name = cdev->data->name;
> + cdev->driver_id = nitrox_sym_drv_id;
> + cdev->dev_ops = NULL;
> + cdev->enqueue_burst = NULL;
> + cdev->dequeue_burst = NULL;
> + cdev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
> + RTE_CRYPTODEV_FF_HW_ACCELERATED |
> + RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
> + RTE_CRYPTODEV_FF_IN_PLACE_SGL |
> + RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT |
> + RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT |
> + RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT |
> + RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT;
Do you support all these features in this patchset?
I believe these should be added where they are supported along with the features.ini changes.
Regards,
Akhil
@@ -25,5 +25,7 @@ LDLIBS += -lrte_cryptodev
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_PMD_NITROX) += nitrox_device.c
SRCS-$(CONFIG_RTE_LIBRTE_PMD_NITROX) += nitrox_hal.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_NITROX) += nitrox_logs.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_NITROX) += nitrox_sym.c
include $(RTE_SDK)/mk/rte.lib.mk
@@ -11,4 +11,6 @@ allow_experimental_apis = true
sources = files(
'nitrox_device.c',
'nitrox_hal.c',
+ 'nitrox_logs.c',
+ 'nitrox_sym.c',
)
@@ -6,6 +6,7 @@
#include "nitrox_device.h"
#include "nitrox_hal.h"
+#include "nitrox_sym.h"
TAILQ_HEAD(ndev_list, nitrox_device);
static struct ndev_list ndev_list = TAILQ_HEAD_INITIALIZER(ndev_list);
@@ -63,6 +64,7 @@ nitrox_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
struct rte_pci_device *pdev)
{
struct nitrox_device *ndev;
+ int err;
/* Nitrox CSR space */
if (!pdev->mem_resource[0].addr)
@@ -73,6 +75,12 @@ nitrox_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
return -ENOMEM;
ndev_init(ndev, pdev);
+ err = nitrox_sym_pmd_create(ndev);
+ if (err) {
+ ndev_release(ndev);
+ return err;
+ }
+
return 0;
}
@@ -85,6 +93,7 @@ nitrox_pci_remove(struct rte_pci_device *pdev)
if (!ndev)
return -ENODEV;
+ nitrox_sym_pmd_destroy(ndev);
ndev_release(ndev);
return 0;
}
@@ -8,10 +8,16 @@
#include <rte_bus_pci.h>
#include <rte_cryptodev.h>
+#define NITROX_DEV_NAME_MAX_LEN RTE_CRYPTODEV_NAME_MAX_LEN
+
+struct nitrox_sym_device;
+
struct nitrox_device {
TAILQ_ENTRY(nitrox_device) next;
struct rte_pci_device *pdev;
uint8_t *bar_addr;
+ struct nitrox_sym_device *sym_dev;
+ struct rte_device rte_sym_dev;
uint16_t nr_queues;
};
new file mode 100644
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2019 Marvell International Ltd.
+ */
+
+#include <rte_log.h>
+
+int nitrox_logtype;
+
+RTE_INIT(nitrox_init_log)
+{
+ nitrox_logtype = rte_log_register("pmd.crypto.nitrox");
+ if (nitrox_logtype >= 0)
+ rte_log_set_level(nitrox_logtype, RTE_LOG_NOTICE);
+}
new file mode 100644
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2019 Marvell International Ltd.
+ */
+
+#ifndef _NITROX_LOGS_H_
+#define _NITROX_LOGS_H_
+
+#define LOG_PREFIX "NITROX: "
+
+extern int nitrox_logtype;
+
+#define NITROX_LOG(level, fmt, args...) \
+ rte_log(RTE_LOG_ ## level, nitrox_logtype, \
+ LOG_PREFIX "%s:%d " fmt, __func__, __LINE__, ## args)
+
+#endif /* _NITROX_LOGS_H_ */
new file mode 100644
@@ -0,0 +1,83 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2019 Marvell International Ltd.
+ */
+
+#include <stdbool.h>
+
+#include <rte_cryptodev_pmd.h>
+#include <rte_crypto.h>
+
+#include "nitrox_sym.h"
+#include "nitrox_device.h"
+#include "nitrox_logs.h"
+
+#define CRYPTODEV_NAME_NITROX_PMD crypto_nitrox
+
+struct nitrox_sym_device {
+ struct rte_cryptodev *cdev;
+ struct nitrox_device *ndev;
+};
+
+uint8_t nitrox_sym_drv_id;
+static const char nitrox_sym_drv_name[] = RTE_STR(CRYPTODEV_NAME_NITROX_PMD);
+static const struct rte_driver nitrox_rte_sym_drv = {
+ .name = nitrox_sym_drv_name,
+ .alias = nitrox_sym_drv_name
+};
+
+int
+nitrox_sym_pmd_create(struct nitrox_device *ndev)
+{
+ char name[NITROX_DEV_NAME_MAX_LEN];
+ struct rte_cryptodev_pmd_init_params init_params = {
+ .name = "",
+ .socket_id = ndev->pdev->device.numa_node,
+ .private_data_size = sizeof(struct nitrox_sym_device)
+ };
+ struct rte_cryptodev *cdev;
+
+ rte_pci_device_name(&ndev->pdev->addr, name, sizeof(name));
+ snprintf(name + strlen(name), NITROX_DEV_NAME_MAX_LEN, "_n5sym");
+ ndev->rte_sym_dev.driver = &nitrox_rte_sym_drv;
+ ndev->rte_sym_dev.numa_node = ndev->pdev->device.numa_node;
+ ndev->rte_sym_dev.devargs = NULL;
+ cdev = rte_cryptodev_pmd_create(name, &ndev->rte_sym_dev,
+ &init_params);
+ if (!cdev) {
+ NITROX_LOG(ERR, "Cryptodev '%s' creation failed\n", name);
+ return -ENODEV;
+ }
+
+ ndev->rte_sym_dev.name = cdev->data->name;
+ cdev->driver_id = nitrox_sym_drv_id;
+ cdev->dev_ops = NULL;
+ cdev->enqueue_burst = NULL;
+ cdev->dequeue_burst = NULL;
+ cdev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
+ RTE_CRYPTODEV_FF_HW_ACCELERATED |
+ RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
+ RTE_CRYPTODEV_FF_IN_PLACE_SGL |
+ RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT |
+ RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT |
+ RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT |
+ RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT;
+
+ ndev->sym_dev = cdev->data->dev_private;
+ ndev->sym_dev->cdev = cdev;
+ ndev->sym_dev->ndev = ndev;
+ NITROX_LOG(DEBUG, "Created cryptodev '%s', dev_id %d, drv_id %d\n",
+ cdev->data->name, cdev->data->dev_id, nitrox_sym_drv_id);
+ return 0;
+}
+
+int
+nitrox_sym_pmd_destroy(struct nitrox_device *ndev)
+{
+ rte_cryptodev_pmd_destroy(ndev->sym_dev->cdev);
+ return 0;
+}
+
+static struct cryptodev_driver nitrox_crypto_drv;
+RTE_PMD_REGISTER_CRYPTO_DRIVER(nitrox_crypto_drv,
+ nitrox_rte_sym_drv,
+ nitrox_sym_drv_id);
new file mode 100644
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2019 Marvell International Ltd.
+ */
+
+#ifndef _NITROX_SYM_H_
+#define _NITROX_SYM_H_
+
+struct nitrox_device;
+
+int nitrox_sym_pmd_create(struct nitrox_device *ndev);
+int nitrox_sym_pmd_destroy(struct nitrox_device *ndev);
+
+#endif /* _NITROX_SYM_H_ */