env_dpdk: break up dpdk_pci_device_copy_identifiers

Break this function up into three APIs instead:

* dpdk_pci_device_get_addr
* dpdk_pci_device_get_id
* dpdk_pci_device_get_numa_node

This more clearly delineates the requirements we
have from the DPDK PCI device/driver APIs.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Ie585c8252d63c15c6e6884d60f8a064c3f0ab94f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14684
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
This commit is contained in:
Jim Harris 2022-09-26 19:32:29 +00:00 committed by Tomasz Zawadzki
parent 1eb35ac7e3
commit 5be703ef35
4 changed files with 56 additions and 19 deletions

View File

@ -8,6 +8,7 @@
#include <rte_alarm.h>
#include <rte_devargs.h>
#include <rte_pci.h>
#include "spdk/env.h"
#include "spdk/log.h"
#include "spdk/string.h"
@ -351,6 +352,8 @@ pci_device_init(struct rte_pci_driver *_drv,
{
struct spdk_pci_driver *driver = (struct spdk_pci_driver *)_drv;
struct spdk_pci_device *dev;
struct rte_pci_addr *addr;
struct rte_pci_id *id;
int rc;
dev = calloc(1, sizeof(*dev));
@ -360,7 +363,20 @@ pci_device_init(struct rte_pci_driver *_drv,
dev->dev_handle = _dev;
dpdk_pci_device_copy_identifiers(_dev, dev);
addr = dpdk_pci_device_get_addr(_dev);
dev->addr.domain = addr->domain;
dev->addr.bus = addr->bus;
dev->addr.dev = addr->devid;
dev->addr.func = addr->function;
id = dpdk_pci_device_get_id(_dev);
dev->id.class_id = id->class_id;
dev->id.vendor_id = id->vendor_id;
dev->id.device_id = id->device_id;
dev->id.subvendor_id = id->subsystem_vendor_id;
dev->id.subdevice_id = id->subsystem_device_id;
dev->socket_id = dpdk_pci_device_get_numa_node(_dev);
dev->type = "pci";
dev->map_bar = map_bar_rte;

View File

@ -61,10 +61,22 @@ dpdk_pci_device_get_devargs(struct rte_pci_device *rte_dev)
return g_dpdk_fn_table->pci_device_get_devargs(rte_dev);
}
void
dpdk_pci_device_copy_identifiers(struct rte_pci_device *_dev, struct spdk_pci_device *dev)
struct rte_pci_addr *
dpdk_pci_device_get_addr(struct rte_pci_device *rte_dev)
{
g_dpdk_fn_table->pci_device_copy_identifiers(_dev, dev);
return g_dpdk_fn_table->pci_device_get_addr(rte_dev);
}
struct rte_pci_id *
dpdk_pci_device_get_id(struct rte_pci_device *rte_dev)
{
return g_dpdk_fn_table->pci_device_get_id(rte_dev);
}
int
dpdk_pci_device_get_numa_node(struct rte_pci_device *_dev)
{
return g_dpdk_fn_table->pci_device_get_numa_node(_dev);
}
int

View File

@ -29,7 +29,9 @@ struct dpdk_fn_table {
uint64_t (*pci_device_vtophys)(struct rte_pci_device *dev, uint64_t vaddr, size_t len);
const char *(*pci_device_get_name)(struct rte_pci_device *);
struct rte_devargs *(*pci_device_get_devargs)(struct rte_pci_device *);
void (*pci_device_copy_identifiers)(struct rte_pci_device *_dev, struct spdk_pci_device *dev);
struct rte_pci_addr *(*pci_device_get_addr)(struct rte_pci_device *);
struct rte_pci_id *(*pci_device_get_id)(struct rte_pci_device *);
int (*pci_device_get_numa_node)(struct rte_pci_device *_dev);
int (*pci_device_map_bar)(struct rte_pci_device *dev, uint32_t bar,
void **mapped_addr, uint64_t *phys_addr, uint64_t *size);
int (*pci_device_read_config)(struct rte_pci_device *dev, void *value, uint32_t len,
@ -55,7 +57,9 @@ int dpdk_pci_init(void);
uint64_t dpdk_pci_device_vtophys(struct rte_pci_device *dev, uint64_t vaddr, size_t len);
const char *dpdk_pci_device_get_name(struct rte_pci_device *);
struct rte_devargs *dpdk_pci_device_get_devargs(struct rte_pci_device *);
void dpdk_pci_device_copy_identifiers(struct rte_pci_device *_dev, struct spdk_pci_device *dev);
struct rte_pci_addr *dpdk_pci_device_get_addr(struct rte_pci_device *);
struct rte_pci_id *dpdk_pci_device_get_id(struct rte_pci_device *);
int dpdk_pci_device_get_numa_node(struct rte_pci_device *_dev);
int dpdk_pci_device_map_bar(struct rte_pci_device *dev, uint32_t bar,
void **mapped_addr, uint64_t *phys_addr, uint64_t *size);
int dpdk_pci_device_read_config(struct rte_pci_device *dev, void *value, uint32_t len,

View File

@ -59,19 +59,22 @@ pci_device_get_devargs_2207(struct rte_pci_device *rte_dev)
return rte_dev->device.devargs;
}
static void
pci_device_copy_identifiers_2207(struct rte_pci_device *_dev, struct spdk_pci_device *dev)
static struct rte_pci_addr *
pci_device_get_addr_2207(struct rte_pci_device *_dev)
{
dev->addr.domain = _dev->addr.domain;
dev->addr.bus = _dev->addr.bus;
dev->addr.dev = _dev->addr.devid;
dev->addr.func = _dev->addr.function;
dev->id.class_id = _dev->id.class_id;
dev->id.vendor_id = _dev->id.vendor_id;
dev->id.device_id = _dev->id.device_id;
dev->id.subvendor_id = _dev->id.subsystem_vendor_id;
dev->id.subdevice_id = _dev->id.subsystem_device_id;
dev->socket_id = _dev->device.numa_node;
return &_dev->addr;
}
static struct rte_pci_id *
pci_device_get_id_2207(struct rte_pci_device *_dev)
{
return &_dev->id;
}
static int
pci_device_get_numa_node_2207(struct rte_pci_device *_dev)
{
return _dev->device.numa_node;
}
static int
@ -243,7 +246,9 @@ struct dpdk_fn_table fn_table_2207 = {
.pci_device_vtophys = pci_device_vtophys_2207,
.pci_device_get_name = pci_device_get_name_2207,
.pci_device_get_devargs = pci_device_get_devargs_2207,
.pci_device_copy_identifiers = pci_device_copy_identifiers_2207,
.pci_device_get_addr = pci_device_get_addr_2207,
.pci_device_get_id = pci_device_get_id_2207,
.pci_device_get_numa_node = pci_device_get_numa_node_2207,
.pci_device_map_bar = pci_device_map_bar_2207,
.pci_device_read_config = pci_device_read_config_2207,
.pci_device_write_config = pci_device_write_config_2207,