Commit 5be703ef authored by Jim Harris's avatar Jim Harris Committed by Tomasz Zawadzki
Browse files

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: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: Ie585c8252d63c15c6e6884d60f8a064c3f0ab94f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14684


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 1eb35ac7
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -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;
+15 −3
Original line number Diff line number Diff line
@@ -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
+6 −2
Original line number Diff line number Diff line
@@ -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,
+18 −13
Original line number Diff line number Diff line
@@ -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,