diff --git a/lib/env_dpdk/pci.c b/lib/env_dpdk/pci.c index 14813704e46..d683005da8c 100644 --- a/lib/env_dpdk/pci.c +++ b/lib/env_dpdk/pci.c @@ -8,6 +8,7 @@ #include #include +#include #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; diff --git a/lib/env_dpdk/pci_dpdk.c b/lib/env_dpdk/pci_dpdk.c index 2ba855db275..fd60d274738 100644 --- a/lib/env_dpdk/pci_dpdk.c +++ b/lib/env_dpdk/pci_dpdk.c @@ -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) +{ + 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) { - g_dpdk_fn_table->pci_device_copy_identifiers(_dev, dev); + return g_dpdk_fn_table->pci_device_get_numa_node(_dev); } int diff --git a/lib/env_dpdk/pci_dpdk.h b/lib/env_dpdk/pci_dpdk.h index 300ccce2acf..d9f56af62bd 100644 --- a/lib/env_dpdk/pci_dpdk.h +++ b/lib/env_dpdk/pci_dpdk.h @@ -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, diff --git a/lib/env_dpdk/pci_dpdk_2207.c b/lib/env_dpdk/pci_dpdk_2207.c index ecb87754553..94088c047ca 100644 --- a/lib/env_dpdk/pci_dpdk_2207.c +++ b/lib/env_dpdk/pci_dpdk_2207.c @@ -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) +{ + 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) { - 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->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,