From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <nelio.laranjeiro@6wind.com>
Received: from mail-lf0-f49.google.com (mail-lf0-f49.google.com
 [209.85.215.49]) by dpdk.org (Postfix) with ESMTP id 3C1E8C13A
 for <dev@dpdk.org>; Wed, 22 Jun 2016 11:06:22 +0200 (CEST)
Received: by mail-lf0-f49.google.com with SMTP id l188so66546608lfe.2
 for <dev@dpdk.org>; Wed, 22 Jun 2016 02:06:22 -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=Srfjm+xiWRUa/kl9Xr6qwxiTfBuX72oj4UCtzkvsO+k=;
 b=WV0tkE4+MSyeZj/wEHrUPacFHc1qjs3CvLvgHr5R2+P/IuujV2ZeTqMu3z8hTdXpt3
 ZnoE8SIuHbO/juHKstGo7WYSBzVyAo9aLd9Uj2D9jquqEj7nJb26MaoNwMwcbdjIiY/3
 pkJTs82Wry64RFmcCjULdE3ptifWbTNZco0IJJtuEGJIi7w/4gStb9tMdIonVhJvCB3M
 SasCmMUiK/5I8dMxb4GHZutt20h72dYgF+TcrIlsxmCGAhP/E821Vciul0sPDjp+gBpB
 n4Ks/BtzNV1GjVrdjIZlHTj+cREs9oSZ6WRcCTb71nUyYJldJ+B63g3gk4lVc/Wmcc7D
 KXIQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=Srfjm+xiWRUa/kl9Xr6qwxiTfBuX72oj4UCtzkvsO+k=;
 b=Ki9DBiVXwR1PBicMlU+MGSy/J//gOhUUVnyzhILBKsK8NfdqWOtkFoBXgzGkpCc46r
 /m7vHSyxW7vVrejvk/0N10fa21pFQBeVeTBVzB2tUEHvu8r8ZMbPWHnBbxUQSwuWWgHN
 quztT9JfOgMuxWtxvJOWTWHhUAOxCSDrV6L77yUi8t20xFdcjiIiKDVsLFxBOTu2lOgL
 3JdPoDoT+7tcRREpSgrZM0/lea2bHx0T9iJ4GudUwOs1ubjuJyOEv4i6+tHgsHBWkBOl
 qSMLDX7tLY8DINAZrnzO/Lme1baaKxkYkNROWVilBCqfILtR88yY6rmdA0AXqWVBN4v+
 wWnQ==
X-Gm-Message-State: ALyK8tIpBOkE7oLQ4vh+S0qs0ztO6r3a5ypt6sJUkwLT4i93l7G/z6yPjuWzBScdT8zTBmgN
X-Received: by 10.28.221.4 with SMTP id u4mr7437483wmg.32.1466586380706;
 Wed, 22 Jun 2016 02:06:20 -0700 (PDT)
Received: from ping.vm.6wind.com (guy78-3-82-239-227-177.fbx.proxad.net.
 [82.239.227.177])
 by smtp.gmail.com with ESMTPSA id z5sm7019178wme.5.2016.06.22.02.06.19
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
 Wed, 22 Jun 2016 02:06:20 -0700 (PDT)
From: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
To: dev@dpdk.org
Cc: Ferruh Yigit <ferruh.yigit@intel.com>,
 Adrien Mazarguil <adrien.mazarguil@6wind.com>
Date: Wed, 22 Jun 2016 11:05:41 +0200
Message-Id: <1466586355-30777-12-git-send-email-nelio.laranjeiro@6wind.com>
X-Mailer: git-send-email 2.1.4
In-Reply-To: <1466586355-30777-1-git-send-email-nelio.laranjeiro@6wind.com>
References: <1466493818-1877-1-git-send-email-nelio.laranjeiro@6wind.com>
 <1466586355-30777-1-git-send-email-nelio.laranjeiro@6wind.com>
Subject: [dpdk-dev] [PATCH v4 11/25] mlx5: add support for configuration
	through kvargs
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Wed, 22 Jun 2016 09:06:22 -0000

The intent is to replace the remaining compile-time options and environment
variables with a common mean of runtime configuration. This commit only
adds the kvargs handling code, subsequent commits will update the rest.

Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
---
 drivers/net/mlx5/mlx5.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 3f45d84..98884f7 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -37,6 +37,7 @@
 #include <assert.h>
 #include <stdint.h>
 #include <stdlib.h>
+#include <errno.h>
 #include <net/if.h>
 
 /* Verbs header. */
@@ -57,6 +58,7 @@
 #include <rte_ethdev.h>
 #include <rte_pci.h>
 #include <rte_common.h>
+#include <rte_kvargs.h>
 #ifdef PEDANTIC
 #pragma GCC diagnostic error "-pedantic"
 #endif
@@ -237,6 +239,70 @@ mlx5_dev_idx(struct rte_pci_addr *pci_addr)
 	return ret;
 }
 
+/**
+ * Verify and store value for device argument.
+ *
+ * @param[in] key
+ *   Key argument to verify.
+ * @param[in] val
+ *   Value associated with key.
+ * @param opaque
+ *   User data.
+ *
+ * @return
+ *   0 on success, negative errno value on failure.
+ */
+static int
+mlx5_args_check(const char *key, const char *val, void *opaque)
+{
+	struct priv *priv = opaque;
+
+	/* No parameters are expected at the moment. */
+	(void)priv;
+	(void)val;
+	WARN("%s: unknown parameter", key);
+	return -EINVAL;
+}
+
+/**
+ * Parse device parameters.
+ *
+ * @param priv
+ *   Pointer to private structure.
+ * @param devargs
+ *   Device arguments structure.
+ *
+ * @return
+ *   0 on success, errno value on failure.
+ */
+static int
+mlx5_args(struct priv *priv, struct rte_devargs *devargs)
+{
+	static const char *params[] = {
+		NULL,
+	};
+	struct rte_kvargs *kvlist;
+	int ret = 0;
+	int i;
+
+	if (devargs == NULL)
+		return 0;
+	kvlist = rte_kvargs_parse(devargs->args, params);
+	if (kvlist == NULL)
+		return 0;
+	/* Process parameters. */
+	for (i = 0; (i != RTE_DIM(params)); ++i) {
+		if (rte_kvargs_count(kvlist, params[i])) {
+			ret = rte_kvargs_process(kvlist, params[i],
+						 mlx5_args_check, priv);
+			if (ret != 0)
+				return ret;
+		}
+	}
+	rte_kvargs_free(kvlist);
+	return 0;
+}
+
 static struct eth_driver mlx5_driver;
 
 /**
@@ -408,6 +474,12 @@ mlx5_pci_devinit(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
 		priv->port = port;
 		priv->pd = pd;
 		priv->mtu = ETHER_MTU;
+		err = mlx5_args(priv, pci_dev->devargs);
+		if (err) {
+			ERROR("failed to process device arguments: %s",
+			      strerror(err));
+			goto port_error;
+		}
 		if (ibv_exp_query_device(ctx, &exp_device_attr)) {
 			ERROR("ibv_exp_query_device() failed");
 			goto port_error;
-- 
2.1.4