9fdef0cc23
Add Nitrox symmetric cryptodev with following operations, - dev_configure - dev_start - dev_stop - dev_close - dev_infos_get Signed-off-by: Nagadheeraj Rottela <rnagadheeraj@marvell.com> Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
125 lines
2.4 KiB
C
125 lines
2.4 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(C) 2019 Marvell International Ltd.
|
|
*/
|
|
|
|
#include <rte_malloc.h>
|
|
|
|
#include "nitrox_device.h"
|
|
#include "nitrox_hal.h"
|
|
#include "nitrox_sym.h"
|
|
|
|
#define PCI_VENDOR_ID_CAVIUM 0x177d
|
|
#define NITROX_V_PCI_VF_DEV_ID 0x13
|
|
|
|
TAILQ_HEAD(ndev_list, nitrox_device);
|
|
static struct ndev_list ndev_list = TAILQ_HEAD_INITIALIZER(ndev_list);
|
|
|
|
static struct nitrox_device *
|
|
ndev_allocate(struct rte_pci_device *pdev)
|
|
{
|
|
struct nitrox_device *ndev;
|
|
|
|
ndev = rte_zmalloc_socket("nitrox device", sizeof(*ndev),
|
|
RTE_CACHE_LINE_SIZE,
|
|
pdev->device.numa_node);
|
|
if (!ndev)
|
|
return NULL;
|
|
|
|
TAILQ_INSERT_TAIL(&ndev_list, ndev, next);
|
|
return ndev;
|
|
}
|
|
|
|
static void
|
|
ndev_init(struct nitrox_device *ndev, struct rte_pci_device *pdev)
|
|
{
|
|
enum nitrox_vf_mode vf_mode;
|
|
|
|
ndev->pdev = pdev;
|
|
ndev->bar_addr = pdev->mem_resource[0].addr;
|
|
vf_mode = vf_get_vf_config_mode(ndev->bar_addr);
|
|
ndev->nr_queues = vf_config_mode_to_nr_queues(vf_mode);
|
|
}
|
|
|
|
static struct nitrox_device *
|
|
find_ndev(struct rte_pci_device *pdev)
|
|
{
|
|
struct nitrox_device *ndev;
|
|
|
|
TAILQ_FOREACH(ndev, &ndev_list, next)
|
|
if (ndev->pdev == pdev)
|
|
return ndev;
|
|
|
|
return NULL;
|
|
}
|
|
|
|
static void
|
|
ndev_release(struct nitrox_device *ndev)
|
|
{
|
|
if (!ndev)
|
|
return;
|
|
|
|
TAILQ_REMOVE(&ndev_list, ndev, next);
|
|
rte_free(ndev);
|
|
}
|
|
|
|
static int
|
|
nitrox_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
|
|
struct rte_pci_device *pdev)
|
|
{
|
|
struct nitrox_device *ndev;
|
|
int err;
|
|
|
|
/* Nitrox CSR space */
|
|
if (!pdev->mem_resource[0].addr)
|
|
return -EINVAL;
|
|
|
|
ndev = ndev_allocate(pdev);
|
|
if (!ndev)
|
|
return -ENOMEM;
|
|
|
|
ndev_init(ndev, pdev);
|
|
err = nitrox_sym_pmd_create(ndev);
|
|
if (err) {
|
|
ndev_release(ndev);
|
|
return err;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
nitrox_pci_remove(struct rte_pci_device *pdev)
|
|
{
|
|
struct nitrox_device *ndev;
|
|
int err;
|
|
|
|
ndev = find_ndev(pdev);
|
|
if (!ndev)
|
|
return -ENODEV;
|
|
|
|
err = nitrox_sym_pmd_destroy(ndev);
|
|
if (err)
|
|
return err;
|
|
|
|
ndev_release(ndev);
|
|
return 0;
|
|
}
|
|
|
|
static struct rte_pci_id pci_id_nitrox_map[] = {
|
|
{
|
|
/* Nitrox 5 VF */
|
|
RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM, NITROX_V_PCI_VF_DEV_ID)
|
|
},
|
|
{.device_id = 0},
|
|
};
|
|
|
|
static struct rte_pci_driver nitrox_pmd = {
|
|
.id_table = pci_id_nitrox_map,
|
|
.drv_flags = RTE_PCI_DRV_NEED_MAPPING,
|
|
.probe = nitrox_pci_probe,
|
|
.remove = nitrox_pci_remove,
|
|
};
|
|
|
|
RTE_PMD_REGISTER_PCI(nitrox, nitrox_pmd);
|
|
RTE_PMD_REGISTER_PCI_TABLE(nitrox, pci_id_nitrox_map);
|