xref: /dpdk/drivers/compress/octeontx/otx_zip_pmd.c (revision 43e610bb85658fca3b1d6ce00ef8a58c46336695)
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