devargs: make device representation generic
[dpdk.git] / lib / librte_eal / common / include / rte_devargs.h
index 996e180..35675fa 100644 (file)
@@ -50,7 +50,7 @@ extern "C" {
 
 #include <stdio.h>
 #include <sys/queue.h>
-#include <rte_pci.h>
+#include <rte_bus.h>
 
 /**
  * Type of generic device
@@ -76,19 +76,11 @@ struct rte_devargs {
        TAILQ_ENTRY(rte_devargs) next;
        /** Type of device. */
        enum rte_devtype type;
-       union {
-               /** Used if type is RTE_DEVTYPE_*_PCI. */
-               struct {
-                       /** PCI location. */
-                       struct rte_pci_addr addr;
-               } pci;
-               /** Used if type is RTE_DEVTYPE_VIRTUAL. */
-               struct {
-                       /** Driver name. */
-                       char drv_name[32];
-               } virtual;
-       };
-       /** Arguments string as given by user. */
+       /** Bus handle for the device. */
+       struct rte_bus *bus;
+       /** Name of the device. */
+       char name[RTE_DEV_NAME_MAX_LEN];
+       /** Arguments string as given by user or "" for no argument. */
        char *args;
 };
 
@@ -98,6 +90,34 @@ TAILQ_HEAD(rte_devargs_list, rte_devargs);
 /** Global list of user devices */
 extern struct rte_devargs_list devargs_list;
 
+/**
+ * Parse a devargs string.
+ *
+ * For PCI devices, the format of arguments string is "PCI_ADDR" or
+ * "PCI_ADDR,key=val,key2=val2,...". Examples: "08:00.1", "0000:5:00.0",
+ * "04:00.0,arg=val".
+ *
+ * For virtual devices, the format of arguments string is "DRIVER_NAME*"
+ * or "DRIVER_NAME*,key=val,key2=val2,...". Examples: "net_ring",
+ * "net_ring0", "net_pmdAnything,arg=0:arg2=1".
+ *
+ * The function parses the arguments string to get driver name and driver
+ * arguments.
+ *
+ * @param devargs_str
+ *   The arguments as given by the user.
+ * @param drvname
+ *   The pointer to the string to store parsed driver name.
+ * @param drvargs
+ *   The pointer to the string to store parsed driver arguments.
+ *
+ * @return
+ *   - 0 on success
+ *   - A negative value on error
+ */
+int rte_eal_parse_devargs_str(const char *devargs_str,
+                               char **drvname, char **drvargs);
+
 /**
  * Add a device to the user device list
  *
@@ -106,14 +126,14 @@ extern struct rte_devargs_list devargs_list;
  * "04:00.0,arg=val".
  *
  * For virtual devices, the format of arguments string is "DRIVER_NAME*"
- * or "DRIVER_NAME*,key=val,key2=val2,...". Examples: "eth_ring",
- * "eth_ring0", "eth_pmdAnything,arg=0:arg2=1". The validity of the
+ * or "DRIVER_NAME*,key=val,key2=val2,...". Examples: "net_ring",
+ * "net_ring0", "net_pmdAnything,arg=0:arg2=1". The validity of the
  * driver name is not checked by this function, it is done when probing
  * the drivers.
  *
  * @param devtype
  *   The type of the device.
- * @param devargs_list
+ * @param devargs_str
  *   The arguments as given by the user.
  *
  * @return