From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gaetan.rivet@6wind.com>
Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com
 [209.85.221.65]) by dpdk.org (Postfix) with ESMTP id 483E91B54B
 for <dev@dpdk.org>; Wed, 11 Jul 2018 23:46:09 +0200 (CEST)
Received: by mail-wr1-f65.google.com with SMTP id c4-v6so6929349wrs.12
 for <dev@dpdk.org>; Wed, 11 Jul 2018 14:46:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=6wind-com.20150623.gappssmtp.com; s=20150623;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=nCa7nVY2FNW5vFx1jeE7Leb1PIhUCyVTjw98wAhjztc=;
 b=Bs3i1v6YKkayiQaHAZsq23bLsnxowluLMEd6oD0IYgytGnH0Ufwk0O6VKz6DCX06uy
 llgh6d7n69lUAK1nkVASSPgrD2V5nbJbyM7PopznDsJk84ayGwGxKWefrHfXSbpfayc/
 vqY1gtnaJLBTbGsN9NPe/QnRLp3H28v1v4zW8yf/rM60ns3Ia7l9LR2vTA9n3TXlGhXu
 SdcZUWtafIe5F4FGvLXnAZ/lVn6osr5wGszhKWYYPczSLXqTUpl/boBlLMNnzIhYOTiT
 NlQ8sT/8QcjVGXB7LbHHPrugnKvz2CctY/IvJFDkV9bdmlhuOejBsLko2q+M9gbNpeQn
 FAYg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=nCa7nVY2FNW5vFx1jeE7Leb1PIhUCyVTjw98wAhjztc=;
 b=WEALIAbrp5Fu8ztjD73DBMwxMzSgOnfyz9xhqfYAcvfqEYCjRNRPyKMa2+IN1tMia2
 5B/Uqy6KE8JQuepwpyL4YDPHVJX2Z70ssIjcY9pVoMW5332BkYY3v37uwLDuS71Mcm8g
 kc7GrQl7ZNK93G923kW/yzL3ThdFHeVkxVdqZ5SvTm8xfrM7pr/NuD/ehcDbVtGTNRx+
 KyFRr91e4lMyYnRp4Kxirc2UFZS0AkdIh9bTqy0bl/b1DU7ATUpt8X5kodahLjJJks43
 9vsfFJDf1HAqKVWe6vvdB2PLpDuZ9yXH2o4sed/daxzXSoNsGZOSR6nrLk6qMjpBvLxb
 6/dg==
X-Gm-Message-State: AOUpUlEag7eEcifWtOYWITeEh4diVTLwZ4ZFujGrDC3h4SLP2zpzyWsO
 kgVXKry7ly1lyf3u+gbeoKcQO2/j
X-Google-Smtp-Source: AAOMgpea4mhMoRVcpvcV/gqXYUNwEJfbKBxvGG2XxPoKEk4OlCrJTHiEhq2I07DJpaye8smoacHSwA==
X-Received: by 2002:adf:f850:: with SMTP id
 d16-v6mr209657wrq.172.1531345568677; 
 Wed, 11 Jul 2018 14:46:08 -0700 (PDT)
Received: from bidouze.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com.
 [62.23.145.78])
 by smtp.gmail.com with ESMTPSA id h5-v6sm10550936wrr.19.2018.07.11.14.46.07
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 11 Jul 2018 14:46:07 -0700 (PDT)
From: Gaetan Rivet <gaetan.rivet@6wind.com>
To: dev@dpdk.org
Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
Date: Wed, 11 Jul 2018 23:45:15 +0200
Message-Id: <a1dbb4c3fc0df757c6604d77b8e4c9e901606a88.1531345404.git.gaetan.rivet@6wind.com>
X-Mailer: git-send-email 2.18.0
In-Reply-To: <cover.1531345404.git.gaetan.rivet@6wind.com>
References: <cover.1531345404.git.gaetan.rivet@6wind.com>
Subject: [dpdk-dev] [PATCH v11 25/25] eal: add generic dev parameter
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Wed, 11 Jul 2018 21:46:09 -0000

Add the --dev parameter to the EAL.
This new parameter takes a generic device declaration as argument.

It uses the new devargs parsing API.

Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
---
 lib/librte_eal/common/eal_common_devargs.c |  4 +++
 lib/librte_eal/common/eal_common_options.c | 36 +++++++++++++++++++---
 lib/librte_eal/common/eal_options.h        |  2 ++
 3 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c
index a22a2002e..22913b408 100644
--- a/lib/librte_eal/common/eal_common_devargs.c
+++ b/lib/librte_eal/common/eal_common_devargs.c
@@ -219,6 +219,10 @@ rte_devargs_parse(struct rte_devargs *da, const char *dev)
 	if (da == NULL)
 		return -EINVAL;
 
+	if (strncmp(dev, "bus=", 4) == 0 ||
+	    strncmp(dev, "class=", 6) == 0)
+		return rte_devargs_layers_parse(da, dev);
+
 	/* Retrieve eventual bus info */
 	do {
 		devname = dev;
diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
index ecebb2923..89d608180 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -54,6 +54,7 @@ const struct option
 eal_long_options[] = {
 	{OPT_BASE_VIRTADDR,     1, NULL, OPT_BASE_VIRTADDR_NUM    },
 	{OPT_CREATE_UIO_DEV,    0, NULL, OPT_CREATE_UIO_DEV_NUM   },
+	{OPT_DEV,               1, NULL, OPT_DEV_NUM              },
 	{OPT_FILE_PREFIX,       1, NULL, OPT_FILE_PREFIX_NUM      },
 	{OPT_HELP,              0, NULL, OPT_HELP_NUM             },
 	{OPT_HUGE_DIR,          1, NULL, OPT_HUGE_DIR_NUM         },
@@ -109,6 +110,7 @@ TAILQ_HEAD(device_option_list, device_option);
 struct device_option {
 	TAILQ_ENTRY(device_option) next;
 
+	int new;
 	enum rte_devtype type;
 	char arg[];
 };
@@ -121,7 +123,8 @@ static int mem_parsed;
 static int core_parsed;
 
 static int
-eal_option_device_add(enum rte_devtype type, const char *optarg)
+eal_option_device_add(enum rte_devtype type, const char *optarg,
+		      int new)
 {
 	struct device_option *devopt;
 	size_t optlen;
@@ -135,6 +138,7 @@ eal_option_device_add(enum rte_devtype type, const char *optarg)
 	}
 
 	devopt->type = type;
+	devopt->new = new;
 	ret = snprintf(devopt->arg, optlen, "%s", optarg);
 	if (ret < 0) {
 		RTE_LOG(ERR, EAL, "Unable to copy device option\n");
@@ -154,7 +158,22 @@ eal_option_device_parse(void)
 
 	TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) {
 		if (ret == 0) {
-			ret = rte_devargs_add(devopt->type, devopt->arg);
+			if (devopt->new) {
+				struct rte_devargs *da;
+
+				da = calloc(1, sizeof(*da));
+				ret = rte_devargs_parse(da, devopt->arg);
+				if (ret) {
+					free(da);
+				} else {
+					ret = rte_devargs_insert(da);
+					if (ret)
+						free(da);
+				}
+			} else {
+				ret = rte_devargs_add(devopt->type,
+						      devopt->arg);
+			}
 			if (ret)
 				RTE_LOG(ERR, EAL, "Unable to parse device '%s'\n",
 					devopt->arg);
@@ -1038,7 +1057,7 @@ eal_parse_common_option(int opt, const char *optarg,
 		if (w_used)
 			goto bw_used;
 		if (eal_option_device_add(RTE_DEVTYPE_BLACKLISTED_PCI,
-				optarg) < 0) {
+				optarg, 0) < 0) {
 			return -1;
 		}
 		b_used = 1;
@@ -1048,7 +1067,7 @@ eal_parse_common_option(int opt, const char *optarg,
 		if (b_used)
 			goto bw_used;
 		if (eal_option_device_add(RTE_DEVTYPE_WHITELISTED_PCI,
-				optarg) < 0) {
+				optarg, 0) < 0) {
 			return -1;
 		}
 		w_used = 1;
@@ -1177,9 +1196,16 @@ eal_parse_common_option(int opt, const char *optarg,
 		}
 		break;
 
+	case OPT_DEV_NUM:
+		if (eal_option_device_add(RTE_DEVTYPE_VIRTUAL,
+				optarg, 1) < 0) {
+			return -1;
+		}
+		break;
+
 	case OPT_VDEV_NUM:
 		if (eal_option_device_add(RTE_DEVTYPE_VIRTUAL,
-				optarg) < 0) {
+				optarg, 0) < 0) {
 			return -1;
 		}
 		break;
diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h
index 211ae06ae..b1851864f 100644
--- a/lib/librte_eal/common/eal_options.h
+++ b/lib/librte_eal/common/eal_options.h
@@ -21,6 +21,8 @@ enum {
 	OPT_BASE_VIRTADDR_NUM,
 #define OPT_CREATE_UIO_DEV    "create-uio-dev"
 	OPT_CREATE_UIO_DEV_NUM,
+#define OPT_DEV               "dev"
+	OPT_DEV_NUM,
 #define OPT_FILE_PREFIX       "file-prefix"
 	OPT_FILE_PREFIX_NUM,
 #define OPT_HUGE_DIR          "huge-dir"
-- 
2.18.0