compress/octeontx: introduce octeontx zip PMD
[dpdk.git] / drivers / compress / octeontx / otx_zip.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Cavium, Inc
3  */
4
5 #include "otx_zip.h"
6
7 uint64_t
8 zip_reg_read64(uint8_t *hw_addr, uint64_t offset)
9 {
10         uint8_t *base = hw_addr;
11         return *(volatile uint64_t *)(base + offset);
12 }
13
14 void
15 zip_reg_write64(uint8_t *hw_addr, uint64_t offset, uint64_t val)
16 {
17         uint8_t *base = hw_addr;
18         *(uint64_t *)(base + offset) = val;
19 }
20
21 int
22 zipvf_create(struct rte_compressdev *compressdev)
23 {
24         struct   rte_pci_device *pdev = RTE_DEV_TO_PCI(compressdev->device);
25         struct   zip_vf *zipvf = NULL;
26         char     *dev_name = compressdev->data->name;
27         void     *vbar0;
28         uint64_t reg;
29
30         if (pdev->mem_resource[0].phys_addr == 0ULL)
31                 return -EIO;
32
33         vbar0 = pdev->mem_resource[0].addr;
34         if (!vbar0) {
35                 ZIP_PMD_ERR("Failed to map BAR0 of %s", dev_name);
36                 return -ENODEV;
37         }
38
39         zipvf = (struct zip_vf *)(compressdev->data->dev_private);
40
41         if (!zipvf)
42                 return -ENOMEM;
43
44         zipvf->vbar0 = vbar0;
45         reg = zip_reg_read64(zipvf->vbar0, ZIP_VF_PF_MBOXX(0));
46         /* Storing domain in local to ZIP VF */
47         zipvf->dom_sdom = reg;
48         zipvf->pdev = pdev;
49         zipvf->max_nb_queue_pairs = ZIP_MAX_VF_QUEUE;
50         return 0;
51 }
52
53 int
54 zipvf_destroy(struct rte_compressdev *compressdev)
55 {
56         struct zip_vf *vf = (struct zip_vf *)(compressdev->data->dev_private);
57
58         /* Rewriting the domain_id in ZIP_VF_MBOX for app rerun */
59         zip_reg_write64(vf->vbar0, ZIP_VF_PF_MBOXX(0), vf->dom_sdom);
60
61         return 0;
62 }