a dump() function to print the state of a device to a file (e.g. sterr or stdout) is very useful for debugging drivers.
Signed-off-by: Bruce Richardson <bruce.richard...@intel.com> --- lib/dmadev/rte_dmadev.c | 17 +++++++++++++++++ lib/dmadev/rte_dmadev.h | 19 +++++++++++++++++++ lib/dmadev/rte_dmadev_pmd.h | 5 +++++ lib/dmadev/version.map | 1 + 4 files changed, 42 insertions(+) diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c index 855f4d272..ffd7c5b97 100644 --- a/lib/dmadev/rte_dmadev.c +++ b/lib/dmadev/rte_dmadev.c @@ -345,6 +345,23 @@ rte_dmadev_xstats_reset(uint16_t dev_id, const uint32_t ids[], uint32_t nb_ids) return (*dev->dev_ops->xstats_reset)(dev, ids, nb_ids); } +int +rte_dmadev_dump(uint16_t dev_id, FILE *f) +{ + struct rte_dmadev *dev = &rte_dmadevices[dev_id]; + + RTE_DMADEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL); + + fprintf(f, "DMA Dev %u, '%s' [%s]\n", dev->dev_id, dev->name, + dev->started ? "started" : "stopped"); + fprintf(f, " Driver: %s\n", dev->driver_name); + fprintf(f, " Socket Id: %d\n", dev->socket_id); + + if (dev->dev_ops->dump != NULL) + return (*dev->dev_ops->dump)(dev, f); + return 0; +} + int rte_dmadev_selftest(uint16_t dev_id) { diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h index 1659ceaf2..d64df17bd 100644 --- a/lib/dmadev/rte_dmadev.h +++ b/lib/dmadev/rte_dmadev.h @@ -357,6 +357,25 @@ __rte_experimental int rte_dmadev_close(uint16_t dev_id); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Dump DMA device info. + * + * @param dev_id + * The identifier of the device. + * + * @param f + * The file to write the output to. + * + * @return + * 0 on success. Non-zero otherwise. + */ +__rte_experimental +int +rte_dmadev_dump(uint16_t dev_id, FILE *f); + /** * @warning * @b EXPERIMENTAL: this API may change without prior notice. diff --git a/lib/dmadev/rte_dmadev_pmd.h b/lib/dmadev/rte_dmadev_pmd.h index ef03cf7cd..428ddc943 100644 --- a/lib/dmadev/rte_dmadev_pmd.h +++ b/lib/dmadev/rte_dmadev_pmd.h @@ -99,6 +99,9 @@ typedef int (*dmadev_close_t)(struct rte_dmadev *dev); typedef int (*dmadev_reset_t)(struct rte_dmadev *dev); /**< @internal Function used to reset a configured device. */ +typedef int (*dmadev_dump_t)(struct rte_dmadev *dev, FILE *f); +/**< @internal Function used to dump out the state of a device for debugging. */ + typedef int (*dmadev_queue_setup_t)(struct rte_dmadev *dev, const struct rte_dmadev_queue_conf *conf); /**< @internal Function used to allocate and set up a virt queue. */ @@ -147,6 +150,8 @@ struct rte_dmadev_ops { dmadev_close_t dev_close; /**< Reset device. */ dmadev_reset_t dev_reset; + /**< Dump device info for debugging */ + dmadev_dump_t dump; /**< Allocate and set up a virt queue. */ dmadev_queue_setup_t queue_setup; diff --git a/lib/dmadev/version.map b/lib/dmadev/version.map index a0a121f3a..ed051d54f 100644 --- a/lib/dmadev/version.map +++ b/lib/dmadev/version.map @@ -4,6 +4,7 @@ EXPERIMENTAL { rte_dmadevices; rte_dmadev_pmd_allocate; rte_dmadev_count; + rte_dmadev_dump; rte_dmadev_get_dev_id; rte_dmadev_socket_id; rte_dmadev_info_get; -- 2.30.2