xref: /dpdk/drivers/compress/zlib/zlib_pmd.c (revision 0c4e4c16b0049ef5d0d2a7bb49d4ab653f7f14b6)
1*0c4e4c16SAshish Gupta /* SPDX-License-Identifier: BSD-3-Clause
2*0c4e4c16SAshish Gupta  * Copyright(c) 2018 Cavium Networks
3*0c4e4c16SAshish Gupta  */
4*0c4e4c16SAshish Gupta 
5*0c4e4c16SAshish Gupta #include <rte_bus_vdev.h>
6*0c4e4c16SAshish Gupta #include <rte_common.h>
7*0c4e4c16SAshish Gupta 
8*0c4e4c16SAshish Gupta #include "zlib_pmd_private.h"
9*0c4e4c16SAshish Gupta 
10*0c4e4c16SAshish Gupta static int
11*0c4e4c16SAshish Gupta zlib_create(const char *name,
12*0c4e4c16SAshish Gupta 		struct rte_vdev_device *vdev,
13*0c4e4c16SAshish Gupta 		struct rte_compressdev_pmd_init_params *init_params)
14*0c4e4c16SAshish Gupta {
15*0c4e4c16SAshish Gupta 	struct rte_compressdev *dev;
16*0c4e4c16SAshish Gupta 
17*0c4e4c16SAshish Gupta 	dev = rte_compressdev_pmd_create(name, &vdev->device,
18*0c4e4c16SAshish Gupta 			sizeof(struct zlib_private), init_params);
19*0c4e4c16SAshish Gupta 	if (dev == NULL) {
20*0c4e4c16SAshish Gupta 		ZLIB_PMD_ERR("driver %s: create failed", init_params->name);
21*0c4e4c16SAshish Gupta 		return -ENODEV;
22*0c4e4c16SAshish Gupta 	}
23*0c4e4c16SAshish Gupta 
24*0c4e4c16SAshish Gupta 	return 0;
25*0c4e4c16SAshish Gupta }
26*0c4e4c16SAshish Gupta 
27*0c4e4c16SAshish Gupta static int
28*0c4e4c16SAshish Gupta zlib_probe(struct rte_vdev_device *vdev)
29*0c4e4c16SAshish Gupta {
30*0c4e4c16SAshish Gupta 	struct rte_compressdev_pmd_init_params init_params = {
31*0c4e4c16SAshish Gupta 		"",
32*0c4e4c16SAshish Gupta 		rte_socket_id()
33*0c4e4c16SAshish Gupta 	};
34*0c4e4c16SAshish Gupta 	const char *name;
35*0c4e4c16SAshish Gupta 	const char *input_args;
36*0c4e4c16SAshish Gupta 	int retval;
37*0c4e4c16SAshish Gupta 
38*0c4e4c16SAshish Gupta 	name = rte_vdev_device_name(vdev);
39*0c4e4c16SAshish Gupta 
40*0c4e4c16SAshish Gupta 	if (name == NULL)
41*0c4e4c16SAshish Gupta 		return -EINVAL;
42*0c4e4c16SAshish Gupta 
43*0c4e4c16SAshish Gupta 	input_args = rte_vdev_device_args(vdev);
44*0c4e4c16SAshish Gupta 
45*0c4e4c16SAshish Gupta 	retval = rte_compressdev_pmd_parse_input_args(&init_params, input_args);
46*0c4e4c16SAshish Gupta 	if (retval < 0) {
47*0c4e4c16SAshish Gupta 		ZLIB_PMD_LOG(ERR,
48*0c4e4c16SAshish Gupta 			"Failed to parse initialisation arguments[%s]\n",
49*0c4e4c16SAshish Gupta 			input_args);
50*0c4e4c16SAshish Gupta 		return -EINVAL;
51*0c4e4c16SAshish Gupta 	}
52*0c4e4c16SAshish Gupta 
53*0c4e4c16SAshish Gupta 	return zlib_create(name, vdev, &init_params);
54*0c4e4c16SAshish Gupta }
55*0c4e4c16SAshish Gupta 
56*0c4e4c16SAshish Gupta static int
57*0c4e4c16SAshish Gupta zlib_remove(struct rte_vdev_device *vdev)
58*0c4e4c16SAshish Gupta {
59*0c4e4c16SAshish Gupta 	struct rte_compressdev *compressdev;
60*0c4e4c16SAshish Gupta 	const char *name;
61*0c4e4c16SAshish Gupta 
62*0c4e4c16SAshish Gupta 	name = rte_vdev_device_name(vdev);
63*0c4e4c16SAshish Gupta 	if (name == NULL)
64*0c4e4c16SAshish Gupta 		return -EINVAL;
65*0c4e4c16SAshish Gupta 
66*0c4e4c16SAshish Gupta 	compressdev = rte_compressdev_pmd_get_named_dev(name);
67*0c4e4c16SAshish Gupta 	if (compressdev == NULL)
68*0c4e4c16SAshish Gupta 		return -ENODEV;
69*0c4e4c16SAshish Gupta 
70*0c4e4c16SAshish Gupta 	return rte_compressdev_pmd_destroy(compressdev);
71*0c4e4c16SAshish Gupta }
72*0c4e4c16SAshish Gupta 
73*0c4e4c16SAshish Gupta static struct rte_vdev_driver zlib_pmd_drv = {
74*0c4e4c16SAshish Gupta 	.probe = zlib_probe,
75*0c4e4c16SAshish Gupta 	.remove = zlib_remove
76*0c4e4c16SAshish Gupta };
77*0c4e4c16SAshish Gupta 
78*0c4e4c16SAshish Gupta RTE_PMD_REGISTER_VDEV(COMPRESSDEV_NAME_ZLIB_PMD, zlib_pmd_drv);
79*0c4e4c16SAshish Gupta RTE_INIT(zlib_init_log);
80*0c4e4c16SAshish Gupta 
81*0c4e4c16SAshish Gupta static void
82*0c4e4c16SAshish Gupta zlib_init_log(void)
83*0c4e4c16SAshish Gupta {
84*0c4e4c16SAshish Gupta 	zlib_logtype_driver = rte_log_register("pmd.compress.zlib");
85*0c4e4c16SAshish Gupta 	if (zlib_logtype_driver >= 0)
86*0c4e4c16SAshish Gupta 		rte_log_set_level(zlib_logtype_driver, RTE_LOG_INFO);
87*0c4e4c16SAshish Gupta }
88