1*43e610bbSSunila Sahu /* SPDX-License-Identifier: BSD-3-Clause 2*43e610bbSSunila Sahu * Copyright(c) 2018 Cavium, Inc 3*43e610bbSSunila Sahu */ 4*43e610bbSSunila Sahu 5*43e610bbSSunila Sahu #include <string.h> 6*43e610bbSSunila Sahu 7*43e610bbSSunila Sahu #include <rte_byteorder.h> 8*43e610bbSSunila Sahu #include <rte_common.h> 9*43e610bbSSunila Sahu #include <rte_cpuflags.h> 10*43e610bbSSunila Sahu #include <rte_malloc.h> 11*43e610bbSSunila Sahu 12*43e610bbSSunila Sahu #include "otx_zip.h" 13*43e610bbSSunila Sahu 14*43e610bbSSunila Sahu struct rte_compressdev_ops octtx_zip_pmd_ops = { 15*43e610bbSSunila Sahu 16*43e610bbSSunila Sahu }; 17*43e610bbSSunila Sahu 18*43e610bbSSunila Sahu static int 19*43e610bbSSunila Sahu zip_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, 20*43e610bbSSunila Sahu struct rte_pci_device *pci_dev) 21*43e610bbSSunila Sahu { 22*43e610bbSSunila Sahu int ret = 0; 23*43e610bbSSunila Sahu char compressdev_name[RTE_COMPRESSDEV_NAME_MAX_LEN]; 24*43e610bbSSunila Sahu struct rte_compressdev *compressdev; 25*43e610bbSSunila Sahu struct rte_compressdev_pmd_init_params init_params = { 26*43e610bbSSunila Sahu "", 27*43e610bbSSunila Sahu rte_socket_id(), 28*43e610bbSSunila Sahu }; 29*43e610bbSSunila Sahu 30*43e610bbSSunila Sahu ZIP_PMD_INFO("vendor_id=0x%x device_id=0x%x", 31*43e610bbSSunila Sahu (unsigned int)pci_dev->id.vendor_id, 32*43e610bbSSunila Sahu (unsigned int)pci_dev->id.device_id); 33*43e610bbSSunila Sahu 34*43e610bbSSunila Sahu rte_pci_device_name(&pci_dev->addr, compressdev_name, 35*43e610bbSSunila Sahu sizeof(compressdev_name)); 36*43e610bbSSunila Sahu 37*43e610bbSSunila Sahu compressdev = rte_compressdev_pmd_create(compressdev_name, 38*43e610bbSSunila Sahu &pci_dev->device, sizeof(struct zip_vf), &init_params); 39*43e610bbSSunila Sahu if (compressdev == NULL) { 40*43e610bbSSunila Sahu ZIP_PMD_ERR("driver %s: create failed", init_params.name); 41*43e610bbSSunila Sahu return -ENODEV; 42*43e610bbSSunila Sahu } 43*43e610bbSSunila Sahu 44*43e610bbSSunila Sahu /* 45*43e610bbSSunila Sahu * create only if proc_type is primary. 46*43e610bbSSunila Sahu */ 47*43e610bbSSunila Sahu if (rte_eal_process_type() == RTE_PROC_PRIMARY) { 48*43e610bbSSunila Sahu /* create vf dev with given pmd dev id */ 49*43e610bbSSunila Sahu ret = zipvf_create(compressdev); 50*43e610bbSSunila Sahu if (ret < 0) { 51*43e610bbSSunila Sahu ZIP_PMD_ERR("Device creation failed"); 52*43e610bbSSunila Sahu rte_compressdev_pmd_destroy(compressdev); 53*43e610bbSSunila Sahu return ret; 54*43e610bbSSunila Sahu } 55*43e610bbSSunila Sahu } 56*43e610bbSSunila Sahu 57*43e610bbSSunila Sahu compressdev->dev_ops = &octtx_zip_pmd_ops; 58*43e610bbSSunila Sahu /* register rx/tx burst functions for data path */ 59*43e610bbSSunila Sahu compressdev->feature_flags = RTE_COMPDEV_FF_HW_ACCELERATED; 60*43e610bbSSunila Sahu return ret; 61*43e610bbSSunila Sahu } 62*43e610bbSSunila Sahu 63*43e610bbSSunila Sahu static int 64*43e610bbSSunila Sahu zip_pci_remove(struct rte_pci_device *pci_dev) 65*43e610bbSSunila Sahu { 66*43e610bbSSunila Sahu struct rte_compressdev *compressdev; 67*43e610bbSSunila Sahu char compressdev_name[RTE_COMPRESSDEV_NAME_MAX_LEN]; 68*43e610bbSSunila Sahu 69*43e610bbSSunila Sahu if (pci_dev == NULL) { 70*43e610bbSSunila Sahu ZIP_PMD_ERR(" Invalid PCI Device\n"); 71*43e610bbSSunila Sahu return -EINVAL; 72*43e610bbSSunila Sahu } 73*43e610bbSSunila Sahu rte_pci_device_name(&pci_dev->addr, compressdev_name, 74*43e610bbSSunila Sahu sizeof(compressdev_name)); 75*43e610bbSSunila Sahu 76*43e610bbSSunila Sahu compressdev = rte_compressdev_pmd_get_named_dev(compressdev_name); 77*43e610bbSSunila Sahu if (compressdev == NULL) 78*43e610bbSSunila Sahu return -ENODEV; 79*43e610bbSSunila Sahu 80*43e610bbSSunila Sahu if (rte_eal_process_type() == RTE_PROC_PRIMARY) { 81*43e610bbSSunila Sahu if (zipvf_destroy(compressdev) < 0) 82*43e610bbSSunila Sahu return -ENODEV; 83*43e610bbSSunila Sahu } 84*43e610bbSSunila Sahu return rte_compressdev_pmd_destroy(compressdev); 85*43e610bbSSunila Sahu } 86*43e610bbSSunila Sahu 87*43e610bbSSunila Sahu static struct rte_pci_id pci_id_octtx_zipvf_table[] = { 88*43e610bbSSunila Sahu { 89*43e610bbSSunila Sahu RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM, 90*43e610bbSSunila Sahu PCI_DEVICE_ID_OCTEONTX_ZIPVF), 91*43e610bbSSunila Sahu }, 92*43e610bbSSunila Sahu { 93*43e610bbSSunila Sahu .device_id = 0 94*43e610bbSSunila Sahu }, 95*43e610bbSSunila Sahu }; 96*43e610bbSSunila Sahu 97*43e610bbSSunila Sahu /** 98*43e610bbSSunila Sahu * Structure that represents a PCI driver 99*43e610bbSSunila Sahu */ 100*43e610bbSSunila Sahu static struct rte_pci_driver octtx_zip_pmd = { 101*43e610bbSSunila Sahu .id_table = pci_id_octtx_zipvf_table, 102*43e610bbSSunila Sahu .drv_flags = RTE_PCI_DRV_NEED_MAPPING, 103*43e610bbSSunila Sahu .probe = zip_pci_probe, 104*43e610bbSSunila Sahu .remove = zip_pci_remove, 105*43e610bbSSunila Sahu }; 106*43e610bbSSunila Sahu 107*43e610bbSSunila Sahu RTE_PMD_REGISTER_PCI(COMPRESSDEV_NAME_ZIP_PMD, octtx_zip_pmd); 108*43e610bbSSunila Sahu RTE_PMD_REGISTER_PCI_TABLE(COMPRESSDEV_NAME_ZIP_PMD, pci_id_octtx_zipvf_table); 109*43e610bbSSunila Sahu 110*43e610bbSSunila Sahu RTE_INIT(octtx_zip_init_log); 111*43e610bbSSunila Sahu 112*43e610bbSSunila Sahu static void 113*43e610bbSSunila Sahu octtx_zip_init_log(void) 114*43e610bbSSunila Sahu { 115*43e610bbSSunila Sahu octtx_zip_logtype_driver = rte_log_register("pmd.compress.octeontx"); 116*43e610bbSSunila Sahu if (octtx_zip_logtype_driver >= 0) 117*43e610bbSSunila Sahu rte_log_set_level(octtx_zip_logtype_driver, RTE_LOG_INFO); 118*43e610bbSSunila Sahu } 119