Add a new generic device declaration parameter:

   --dev=<device_declaration>

That allows to declare device from any bus. The format is as follows:

device_declaration := <bus><c><device>[,arg_list]

bus      := bus name
c        := arbitrary character separator
device   := device name (PCI location, virtual PMD name, ...)
arg_list := key value list: key1=val1[,key2=val2[,...]]

The bus name is mandatory. The character separator can be anything.
The device name is mandatory. The argument list is optional.

Examples:

    --dev=pci:0000:05:00.0,port=1
    --dev=vdev_net_ring0

Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com>
---
 lib/librte_eal/common/eal_common_options.c | 19 +++++++++++++++++++
 lib/librte_eal/common/eal_options.h        |  2 ++
 2 files changed, 21 insertions(+)

diff --git a/lib/librte_eal/common/eal_common_options.c 
b/lib/librte_eal/common/eal_common_options.c
index 603df27..b7591fd 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -95,6 +95,7 @@ eal_long_options[] = {
        {OPT_PROC_TYPE,         1, NULL, OPT_PROC_TYPE_NUM        },
        {OPT_SOCKET_MEM,        1, NULL, OPT_SOCKET_MEM_NUM       },
        {OPT_SYSLOG,            1, NULL, OPT_SYSLOG_NUM           },
+       {OPT_DEV,               1, NULL, OPT_DEV_NUM              },
        {OPT_VDEV,              1, NULL, OPT_VDEV_NUM             },
        {OPT_VFIO_INTR,         1, NULL, OPT_VFIO_INTR_NUM        },
        {OPT_VMWARE_TSC_MAP,    0, NULL, OPT_VMWARE_TSC_MAP_NUM   },
@@ -1120,6 +1121,21 @@ eal_parse_common_option(int opt, const char *optarg,
                }
                break;
 
+       case OPT_DEV_NUM: {
+               struct rte_devargs da;
+               int ret;
+
+               if (rte_eal_devargs_parse(&da, optarg) < 0)
+                       return -1;
+               ret = rte_bus_probe_mode_set(da.bus->name,
+                                       RTE_BUS_PROBE_WHITELIST);
+               if (ret < 0 && ret != -ENOTSUP)
+                       return -1;
+               if (eal_option_device_add(NULL, optarg) < 0)
+                       return -1;
+       }
+               break;
+
        case OPT_VDEV_NUM:
                if (eal_option_device_add("vdev", optarg) < 0)
                        return -1;
@@ -1271,6 +1287,9 @@ eal_common_usage(void)
               "  -n CHANNELS         Number of memory channels\n"
               "  -m MB               Memory to allocate (see also 
--"OPT_SOCKET_MEM")\n"
               "  -r RANKS            Force number of memory ranks (don't 
detect)\n"
+              "  --"OPT_DEV"         Declare a device.\n"
+              "                      The argument format is 
<bus><c><device>[,key=val,...]\n"
+              "                      ex: pci:00:00.0,key=val\n"
               "  -b, --"OPT_PCI_BLACKLIST" Add a PCI device in black list.\n"
               "                      Prevent EAL from using this PCI device. 
The argument\n"
               "                      format is <domain:bus:devid.func>.\n"
diff --git a/lib/librte_eal/common/eal_options.h 
b/lib/librte_eal/common/eal_options.h
index 30e6bb4..d50eff7 100644
--- a/lib/librte_eal/common/eal_options.h
+++ b/lib/librte_eal/common/eal_options.h
@@ -77,6 +77,8 @@ enum {
        OPT_SOCKET_MEM_NUM,
 #define OPT_SYSLOG            "syslog"
        OPT_SYSLOG_NUM,
+#define OPT_DEV               "dev"
+       OPT_DEV_NUM,
 #define OPT_VDEV              "vdev"
        OPT_VDEV_NUM,
 #define OPT_VFIO_INTR         "vfio-intr"
-- 
2.1.4

Reply via email to