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