[dpdk-dev] [PATCH v4 6/9] raw/ioat: add device info function
From: Bruce Richardson <hidden>
Date: 2019-07-01 15:57:26
Subsystem:
the rest · Maintainer:
Linus Torvalds
Add in the "info_get" function to the driver, to allow us to query the
device. This allows us to have the unit test pick up the presence of
supported hardware or not.
Signed-off-by: Bruce Richardson <redacted>
Tested-by: Harry van Haaren <redacted>
---
V4: Use TEST_SUCCESS in place of 0, when returning from test case.
Minor documentation updates.
V2: Test case is placed in driver self-test routine
---
app/test/test_rawdev.c | 11 ++++++++++
doc/guides/rawdevs/ioat_rawdev.rst | 34 ++++++++++++++++++++++++++++++
drivers/raw/ioat/ioat_rawdev.c | 11 ++++++++++
drivers/raw/ioat/rte_ioat_rawdev.h | 11 ++++++++++
4 files changed, 67 insertions(+)
diff --git a/app/test/test_rawdev.c b/app/test/test_rawdev.c
index 88549fb61..623117af9 100644
--- a/app/test/test_rawdev.c
+++ b/app/test/test_rawdev.c@@ -29,6 +29,17 @@ REGISTER_TEST_COMMAND(rawdev_autotest, test_rawdev_selftest_skeleton); static int test_rawdev_selftest_ioat(void) { + const int count = rte_rawdev_count(); + int i; + + for (i = 0; i < count; i++) { + struct rte_rawdev_info info = { .dev_private = NULL }; + if (rte_rawdev_info_get(i, &info) == 0 && + strstr(info.driver_name, "ioat") != NULL) + return TEST_SUCCESS; + } + + printf("No IOAT rawdev found, skipping tests\n"); return TEST_SKIPPED; }
diff --git a/doc/guides/rawdevs/ioat_rawdev.rst b/doc/guides/rawdevs/ioat_rawdev.rst
index 4b7fe8a8f..efed9c64c 100644
--- a/doc/guides/rawdevs/ioat_rawdev.rst
+++ b/doc/guides/rawdevs/ioat_rawdev.rst@@ -83,3 +83,37 @@ parameters need to be passed to create or initialize the device. Once probed successfully, the device will appear as a ``rawdev``, that is a "raw device type" inside DPDK, and can be accessed using APIs from the ``rte_rawdev`` library. + +Using IOAT Rawdev Devices +-------------------------- + +To use the devices from an application, the rawdev API can be used, along +with definitions taken from the device-specific header file +``rte_ioat_rawdev.h``. This header is needed to get the definition of +structure parameters used by some of the rawdev APIs for IOAT rawdev +devices, as well as providing key functions for using the device for memory +copies. + +Getting Device Information +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Basic information about each rawdev device can be queried using the +``rte_rawdev_info_get()`` API. For most applications, this API will be +needed to verify that the rawdev in question is of the expected type. For +example, the following code snippet can be used to identify an IOAT +rawdev device for use by an application: + +.. code-block:: C + + for (i = 0; i < count && !found; i++) { + struct rte_rawdev_info info = { .dev_private = NULL }; + found = (rte_rawdev_info_get(i, &info) == 0 && + strcmp(info.driver_name, + IOAT_PMD_RAWDEV_NAME_STR) == 0); + } + +When calling the ``rte_rawdev_info_get()`` API for an IOAT rawdev device, +the ``dev_private`` field in the ``rte_rawdev_info`` struct should either +be NULL, or else be set to point to a structure of type +``rte_ioat_rawdev_config``, in which case the size of the configured device +input ring will be returned in that structure.
diff --git a/drivers/raw/ioat/ioat_rawdev.c b/drivers/raw/ioat/ioat_rawdev.c
index 86b5b2a77..2bfe2544d 100644
--- a/drivers/raw/ioat/ioat_rawdev.c
+++ b/drivers/raw/ioat/ioat_rawdev.c@@ -34,10 +34,21 @@ static struct rte_pci_driver ioat_pmd_drv; #define IOAT_PMD_ERR(fmt, args...) IOAT_PMD_LOG(ERR, fmt, ## args) #define IOAT_PMD_WARN(fmt, args...) IOAT_PMD_LOG(WARNING, fmt, ## args) +static void +ioat_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info) +{ + struct rte_ioat_rawdev_config *cfg = dev_info; + struct rte_ioat_rawdev *ioat = dev->dev_private; + + if (cfg != NULL) + cfg->ring_size = ioat->ring_size; +} + static int ioat_rawdev_create(const char *name, struct rte_pci_device *dev) { static const struct rte_rawdev_ops ioat_rawdev_ops = { + .dev_info_get = ioat_dev_info_get, }; struct rte_rawdev *rawdev = NULL;
diff --git a/drivers/raw/ioat/rte_ioat_rawdev.h b/drivers/raw/ioat/rte_ioat_rawdev.h
index f83d26ef0..1d0dbdd2e 100644
--- a/drivers/raw/ioat/rte_ioat_rawdev.h
+++ b/drivers/raw/ioat/rte_ioat_rawdev.h@@ -25,6 +25,17 @@ /** Name used to adjust the log level for this driver */ #define IOAT_PMD_LOG_NAME "rawdev.ioat" +/** + * Configuration structure for an ioat rawdev instance + * + * This structure is to be passed as the ".dev_private" parameter when + * calling the rte_rawdev_get_info() and rte_rawdev_configure() APIs on + * an ioat rawdev instance. + */ +struct rte_ioat_rawdev_config { + unsigned short ring_size; +}; + /** * @internal * Structure representing a device instance
--
2.21.0