| 1719 | } |
| 1720 | |
| 1721 | static int |
| 1722 | ifpga_vdev_parse_devargs(struct rte_devargs *devargs, |
| 1723 | struct ifpga_vdev_args *args) |
| 1724 | { |
| 1725 | struct rte_kvargs *kvlist; |
| 1726 | char *name = NULL; |
| 1727 | int port = 0; |
| 1728 | int ret = -EINVAL; |
| 1729 | |
| 1730 | if (!devargs || !args) |
| 1731 | return ret; |
| 1732 | |
| 1733 | kvlist = rte_kvargs_parse(devargs->args, valid_args); |
| 1734 | if (!kvlist) { |
| 1735 | IFPGA_RAWDEV_PMD_ERR("error when parsing devargs"); |
| 1736 | return ret; |
| 1737 | } |
| 1738 | |
| 1739 | if (rte_kvargs_count(kvlist, IFPGA_ARG_NAME) == 1) { |
| 1740 | if (rte_kvargs_process(kvlist, IFPGA_ARG_NAME, |
| 1741 | &ifpga_rawdev_get_string_arg, &name) < 0) { |
| 1742 | IFPGA_RAWDEV_PMD_ERR("error to parse %s", |
| 1743 | IFPGA_ARG_NAME); |
| 1744 | goto end; |
| 1745 | } else { |
| 1746 | strlcpy(args->bdf, name, sizeof(args->bdf)); |
| 1747 | rte_free(name); |
| 1748 | } |
| 1749 | } else { |
| 1750 | IFPGA_RAWDEV_PMD_ERR("arg %s is mandatory for ifpga bus", |
| 1751 | IFPGA_ARG_NAME); |
| 1752 | goto end; |
| 1753 | } |
| 1754 | |
| 1755 | if (rte_kvargs_count(kvlist, IFPGA_ARG_PORT) == 1) { |
| 1756 | if (rte_kvargs_process(kvlist, IFPGA_ARG_PORT, |
| 1757 | ifpga_get_integer32_arg, &port) < 0) { |
| 1758 | IFPGA_RAWDEV_PMD_ERR("error to parse %s", |
| 1759 | IFPGA_ARG_PORT); |
| 1760 | goto end; |
| 1761 | } else { |
| 1762 | args->port = port; |
| 1763 | } |
| 1764 | } else { |
| 1765 | IFPGA_RAWDEV_PMD_ERR("arg %s is mandatory for ifpga bus", |
| 1766 | IFPGA_ARG_PORT); |
| 1767 | goto end; |
| 1768 | } |
| 1769 | |
| 1770 | ret = 0; |
| 1771 | |
| 1772 | end: |
| 1773 | rte_kvargs_free(kvlist); |
| 1774 | |
| 1775 | return ret; |
| 1776 | } |
| 1777 | |
| 1778 | static int |
no test coverage detected