All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nipun Gupta <nipun.gupta@nxp.com>
To: thomas@monjalon.net, hemant.agrawal@nxp.com, shreyansh.jain@nxp.com
Cc: dev@dpdk.org, Nipun Gupta <nipun.gupta@nxp.com>
Subject: [PATCH v4 4/7] raw/dpaa2_cmdif: introduce DPAA2 command interface driver
Date: Wed,  2 May 2018 22:45:26 +0530	[thread overview]
Message-ID: <1525281329-27984-5-git-send-email-nipun.gupta@nxp.com> (raw)
In-Reply-To: <1525281329-27984-1-git-send-email-nipun.gupta@nxp.com>

Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
---
 MAINTAINERS                                        |   4 +
 config/common_base                                 |   5 +
 config/common_linuxapp                             |   1 +
 drivers/raw/Makefile                               |   1 +
 drivers/raw/dpaa2_cmdif/Makefile                   |  33 +++++
 drivers/raw/dpaa2_cmdif/dpaa2_cmdif.c              | 139 +++++++++++++++++++++
 drivers/raw/dpaa2_cmdif/dpaa2_cmdif_logs.h         |  35 ++++++
 drivers/raw/dpaa2_cmdif/meson.build                |   7 ++
 .../dpaa2_cmdif/rte_pmd_dpaa2_cmdif_version.map    |   4 +
 drivers/raw/meson.build                            |   2 +-
 mk/rte.app.mk                                      |   1 +
 11 files changed, 231 insertions(+), 1 deletion(-)
 create mode 100644 drivers/raw/dpaa2_cmdif/Makefile
 create mode 100644 drivers/raw/dpaa2_cmdif/dpaa2_cmdif.c
 create mode 100644 drivers/raw/dpaa2_cmdif/dpaa2_cmdif_logs.h
 create mode 100644 drivers/raw/dpaa2_cmdif/meson.build
 create mode 100644 drivers/raw/dpaa2_cmdif/rte_pmd_dpaa2_cmdif_version.map

diff --git a/MAINTAINERS b/MAINTAINERS
index 3fc4a2c..5255143 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -813,6 +813,10 @@ M: Nipun Gupta <nipun.gupta@nxp.com>
 F: drivers/raw/dpaa2_qdma/
 F: doc/guides/rawdevs/dpaa2_qdma.rst
 
+DPAA2 CMDIF
+M: Nipun Gupta <nipun.gupta@nxp.com>
+F: drivers/raw/dpaa2_cmdif/
+
 
 Eventdev Drivers
 ----------------
diff --git a/config/common_base b/config/common_base
index 9b48bcb..0d181ac 100644
--- a/config/common_base
+++ b/config/common_base
@@ -618,6 +618,11 @@ CONFIG_RTE_RAWDEV_MAX_DEVS=10
 CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV=y
 
 #
+# Compile PMD for NXP DPAA2 CMDIF raw device
+#
+CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
+
+#
 # Compile PMD for NXP DPAA2 QDMA raw device
 #
 CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV=n
diff --git a/config/common_linuxapp b/config/common_linuxapp
index 21b3fe3..5c68cc0 100644
--- a/config/common_linuxapp
+++ b/config/common_linuxapp
@@ -38,4 +38,5 @@ CONFIG_RTE_LIBRTE_DPAA2_MEMPOOL=y
 CONFIG_RTE_LIBRTE_DPAA2_PMD=y
 CONFIG_RTE_LIBRTE_PMD_DPAA2_EVENTDEV=y
 CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=y
+CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=y
 CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV=y
diff --git a/drivers/raw/Makefile b/drivers/raw/Makefile
index 0f2b076..2eb2787 100644
--- a/drivers/raw/Makefile
+++ b/drivers/raw/Makefile
@@ -6,6 +6,7 @@ include $(RTE_SDK)/mk/rte.vars.mk
 # DIRS-$(<configuration>) += <directory>
 DIRS-$(CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV) += skeleton_rawdev
 ifeq ($(CONFIG_RTE_EAL_VFIO)$(CONFIG_RTE_LIBRTE_FSLMC_BUS),yy)
+DIRS-$(CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV) += dpaa2_cmdif
 DIRS-$(CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV) += dpaa2_qdma
 endif
 
diff --git a/drivers/raw/dpaa2_cmdif/Makefile b/drivers/raw/dpaa2_cmdif/Makefile
new file mode 100644
index 0000000..66f9c0e
--- /dev/null
+++ b/drivers/raw/dpaa2_cmdif/Makefile
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2018 NXP
+
+include $(RTE_SDK)/mk/rte.vars.mk
+
+#
+# library name
+#
+LIB = librte_pmd_dpaa2_cmdif.a
+
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+CFLAGS += -O3
+CFLAGS += $(WERROR_FLAGS)
+
+CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc
+CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc/qbman/include
+
+LDLIBS += -lrte_bus_fslmc
+LDLIBS += -lrte_eal
+LDLIBS += -lrte_rawdev
+LDLIBS += -lrte_bus_vdev
+LDLIBS += -lrte_kvargs
+
+EXPORT_MAP := rte_pmd_dpaa2_cmdif_version.map
+
+LIBABIVER := 1
+
+#
+# all source are stored in SRCS-y
+#
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV) += dpaa2_cmdif.c
+
+include $(RTE_SDK)/mk/rte.lib.mk
diff --git a/drivers/raw/dpaa2_cmdif/dpaa2_cmdif.c b/drivers/raw/dpaa2_cmdif/dpaa2_cmdif.c
new file mode 100644
index 0000000..e3e2b64
--- /dev/null
+++ b/drivers/raw/dpaa2_cmdif/dpaa2_cmdif.c
@@ -0,0 +1,139 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2018 NXP
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdint.h>
+
+#include <rte_bus_vdev.h>
+#include <rte_atomic.h>
+#include <rte_interrupts.h>
+#include <rte_branch_prediction.h>
+#include <rte_lcore.h>
+
+#include <rte_rawdev.h>
+#include <rte_rawdev_pmd.h>
+
+#include <portal/dpaa2_hw_pvt.h>
+#include <portal/dpaa2_hw_dpio.h>
+#include "rte_pmd_dpaa2_cmdif.h"
+#include "dpaa2_cmdif_logs.h"
+
+/* Dynamic log type identifier */
+int dpaa2_cmdif_logtype;
+
+/* CMDIF driver name */
+#define DPAA2_CMDIF_PMD_NAME dpaa2_dpci
+
+/* CMDIF driver object */
+static struct rte_vdev_driver dpaa2_cmdif_drv;
+
+static const struct rte_rawdev_ops dpaa2_cmdif_ops = {
+};
+
+static int
+dpaa2_cmdif_create(const char *name,
+		   struct rte_vdev_device *vdev,
+		   int socket_id)
+{
+	struct rte_rawdev *rawdev;
+	struct dpaa2_dpci_dev *cidev;
+
+	/* Allocate device structure */
+	rawdev = rte_rawdev_pmd_allocate(name, sizeof(struct dpaa2_dpci_dev),
+					 socket_id);
+	if (!rawdev) {
+		DPAA2_CMDIF_ERR("Unable to allocate rawdevice");
+		return -EINVAL;
+	}
+
+	rawdev->dev_ops = &dpaa2_cmdif_ops;
+	rawdev->device = &vdev->device;
+	rawdev->driver_name = vdev->device.driver->name;
+
+	/* For secondary processes, the primary has done all the work */
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		return 0;
+
+	cidev = rte_dpaa2_alloc_dpci_dev();
+	if (!cidev) {
+		DPAA2_CMDIF_ERR("Unable to allocate CI device");
+		rte_rawdev_pmd_release(rawdev);
+		return -ENODEV;
+	}
+
+	rawdev->dev_private = cidev;
+
+	return 0;
+}
+
+static int
+dpaa2_cmdif_destroy(const char *name)
+{
+	int ret;
+	struct rte_rawdev *rdev;
+
+	rdev = rte_rawdev_pmd_get_named_dev(name);
+	if (!rdev) {
+		DPAA2_CMDIF_ERR("Invalid device name (%s)", name);
+		return -EINVAL;
+	}
+
+	/* The primary process will only free the DPCI device */
+	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
+		rte_dpaa2_free_dpci_dev(rdev->dev_private);
+
+	ret = rte_rawdev_pmd_release(rdev);
+	if (ret)
+		DPAA2_CMDIF_DEBUG("Device cleanup failed");
+
+	return 0;
+}
+
+static int
+dpaa2_cmdif_probe(struct rte_vdev_device *vdev)
+{
+	const char *name;
+	int ret = 0;
+
+	name = rte_vdev_device_name(vdev);
+
+	DPAA2_CMDIF_INFO("Init %s on NUMA node %d", name, rte_socket_id());
+
+	ret = dpaa2_cmdif_create(name, vdev, rte_socket_id());
+
+	return ret;
+}
+
+static int
+dpaa2_cmdif_remove(struct rte_vdev_device *vdev)
+{
+	const char *name;
+	int ret;
+
+	name = rte_vdev_device_name(vdev);
+
+	DPAA2_CMDIF_INFO("Closing %s on NUMA node %d", name, rte_socket_id());
+
+	ret = dpaa2_cmdif_destroy(name);
+
+	return ret;
+}
+
+static struct rte_vdev_driver dpaa2_cmdif_drv = {
+	.probe = dpaa2_cmdif_probe,
+	.remove = dpaa2_cmdif_remove
+};
+
+RTE_PMD_REGISTER_VDEV(DPAA2_CMDIF_PMD_NAME, dpaa2_cmdif_drv);
+
+RTE_INIT(dpaa2_cmdif_init_log);
+
+static void
+dpaa2_cmdif_init_log(void)
+{
+	dpaa2_cmdif_logtype = rte_log_register("pmd.raw.dpaa2.qdma");
+	if (dpaa2_cmdif_logtype >= 0)
+		rte_log_set_level(dpaa2_cmdif_logtype, RTE_LOG_INFO);
+}
diff --git a/drivers/raw/dpaa2_cmdif/dpaa2_cmdif_logs.h b/drivers/raw/dpaa2_cmdif/dpaa2_cmdif_logs.h
new file mode 100644
index 0000000..5eb0885
--- /dev/null
+++ b/drivers/raw/dpaa2_cmdif/dpaa2_cmdif_logs.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2018 NXP
+ */
+
+#ifndef __DPAA2_CMDIF_LOGS_H__
+#define __DPAA2_CMDIF_LOGS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rte_rawdev.h>
+
+extern int dpaa2_cmdif_logtype;
+
+#define DPAA2_CMDIF_LOG(level, fmt, args...) \
+	rte_log(RTE_LOG_ ## level, dpaa2_cmdif_logtype, "%s(): " fmt "\n", \
+		__func__, ##args)
+
+#define DPAA2_CMDIF_FUNC_TRACE() DPAA2_CMDIF_LOG(DEBUG, ">>")
+
+#define DPAA2_CMDIF_DEBUG(fmt, args...) \
+	DPAA2_CMDIF_LOG(DEBUG, fmt, ## args)
+#define DPAA2_CMDIF_INFO(fmt, args...) \
+	DPAA2_CMDIF_LOG(INFO, fmt, ## args)
+#define DPAA2_CMDIF_ERR(fmt, args...) \
+	DPAA2_CMDIF_LOG(ERR, fmt, ## args)
+#define DPAA2_CMDIF_WARN(fmt, args...) \
+	DPAA2_CMDIF_LOG(WARNING, fmt, ## args)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DPAA2_CMDIF_LOGS_H__ */
diff --git a/drivers/raw/dpaa2_cmdif/meson.build b/drivers/raw/dpaa2_cmdif/meson.build
new file mode 100644
index 0000000..dd40b7e
--- /dev/null
+++ b/drivers/raw/dpaa2_cmdif/meson.build
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2018 NXP
+
+deps += ['rawdev', 'mempool_dpaa2', 'bus_vdev']
+sources = files('dpaa2_cmdif.c')
+
+allow_experimental_apis = true
diff --git a/drivers/raw/dpaa2_cmdif/rte_pmd_dpaa2_cmdif_version.map b/drivers/raw/dpaa2_cmdif/rte_pmd_dpaa2_cmdif_version.map
new file mode 100644
index 0000000..9b9ab1a
--- /dev/null
+++ b/drivers/raw/dpaa2_cmdif/rte_pmd_dpaa2_cmdif_version.map
@@ -0,0 +1,4 @@
+DPDK_18.05 {
+
+	local: *;
+};
diff --git a/drivers/raw/meson.build b/drivers/raw/meson.build
index 1b298f8..34dfac4 100644
--- a/drivers/raw/meson.build
+++ b/drivers/raw/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
-drivers = ['skeleton_rawdev', 'dpaa2_qdma']
+drivers = ['skeleton_rawdev', 'dpaa2_cmdif', 'dpaa2_qdma']
 std_deps = ['rawdev']
 config_flag_fmt = 'RTE_LIBRTE_PMD_@0@_RAWDEV'
 driver_name_fmt = 'rte_pmd_@0@'
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 26a6b0c..26f3563 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -252,6 +252,7 @@ endif # CONFIG_RTE_LIBRTE_EVENTDEV
 ifeq ($(CONFIG_RTE_LIBRTE_RAWDEV),y)
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV) += -lrte_pmd_skeleton_rawdev
 ifeq ($(CONFIG_RTE_EAL_VFIO)$(CONFIG_RTE_LIBRTE_FSLMC_BUS),yy)
+_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV) += -lrte_pmd_dpaa2_cmdif
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV) += -lrte_pmd_dpaa2_qdma
 endif # CONFIG_RTE_LIBRTE_FSLMC_BUS
 endif # CONFIG_RTE_LIBRTE_RAWDEV
-- 
1.9.1

  parent reply	other threads:[~2018-05-02 17:16 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-22  9:34 [PATCH 0/9] Introduce DPAA2 Command Interface raw driver Nipun Gupta
2018-02-22  9:34 ` [PATCH 1/9] mempool/dpaa2: add functions exposed to DPDK applications Nipun Gupta
2018-02-22  9:34 ` [PATCH 2/9] bus/fslmc: expose API to free dpci device Nipun Gupta
2018-02-22  9:34 ` [PATCH 3/9] bus/fslmc: keep Tx queues information for DPCI devices too Nipun Gupta
2018-02-22  9:34 ` [PATCH 4/9] bus/fslmc: add preprocessors to get flc and frc from fd Nipun Gupta
2018-02-22  9:34 ` [PATCH 5/9] raw/dpaa2_cmdif: introduce DPAA2 command interface driver Nipun Gupta
2018-02-22 13:12   ` Shreyansh Jain
2018-02-23  6:35     ` Nipun Gupta
2018-02-22 14:31   ` Jerin Jacob
2018-02-23  6:35     ` Nipun Gupta
2018-02-22  9:34 ` [PATCH 6/9] raw/dpaa2_cmdif: add attribute get functionality Nipun Gupta
2018-02-22  9:34 ` [PATCH 7/9] raw/dpaa2_cmdif: support enqueue dequeue operations Nipun Gupta
2018-02-22  9:34 ` [PATCH 8/9] doc: add DPAA2 CMDIF rawdev guide Nipun Gupta
2018-02-22  9:34 ` [PATCH 9/9] doc: add dpaa2 command interface rawdev to release notes Nipun Gupta
2018-04-07 14:33 ` [PATCH v2 0/9] Introduce DPAA2 Command Interface raw driver Nipun Gupta
2018-04-07 14:33   ` [PATCH v2 1/9] mempool/dpaa2: add functions exposed to DPDK applications Nipun Gupta
2018-04-07 14:33   ` [PATCH v2 2/9] bus/fslmc: expose API to free dpci device Nipun Gupta
2018-04-07 14:33   ` [PATCH v2 3/9] bus/fslmc: keep Tx queues information for DPCI devices too Nipun Gupta
2018-04-25  1:47     ` Shreyansh Jain
2018-04-25  3:53     ` Shreyansh Jain
2018-04-07 14:34   ` [PATCH v2 4/9] bus/fslmc: add preprocessors to get flc and frc from fd Nipun Gupta
2018-04-07 14:34   ` [PATCH v2 5/9] raw/dpaa2_cmdif: introduce DPAA2 command interface driver Nipun Gupta
2018-04-25  4:18     ` Shreyansh Jain
2018-04-07 14:34   ` [PATCH v2 6/9] raw/dpaa2_cmdif: add attribute get functionality Nipun Gupta
2018-04-07 14:34   ` [PATCH v2 7/9] raw/dpaa2_cmdif: support enqueue dequeue operations Nipun Gupta
2018-04-07 14:34   ` [PATCH v2 8/9] doc: add DPAA2 CMDIF rawdev guide Nipun Gupta
2018-04-16 12:40     ` Hemant Agrawal
2018-04-07 14:34   ` [PATCH v2 9/9] doc: add dpaa2 command interface rawdev to release notes Nipun Gupta
2018-04-23 12:23     ` Kovacevic, Marko
2018-04-25  1:50     ` Shreyansh Jain
2018-04-07 14:43   ` [PATCH v2 0/9] Introduce DPAA2 Command Interface raw driver Nipun Gupta
2018-04-26 10:14   ` [PATCH 0/7 v3] " Nipun Gupta
2018-04-26 10:14     ` [PATCH 1/7 v3] mempool/dpaa2: add functions exposed to DPDK applications Nipun Gupta
2018-04-26 10:14     ` [PATCH 2/7 v3] bus/fslmc: expose API to free dpci device Nipun Gupta
2018-05-01  9:45       ` Shreyansh Jain
2018-04-26 10:14     ` [PATCH 3/7 v3] bus/fslmc: keep Tx queues information for DPCI devices too Nipun Gupta
2018-04-26 10:14     ` [PATCH 4/7 v3] raw/dpaa2_cmdif: introduce DPAA2 command interface driver Nipun Gupta
2018-04-26 10:14     ` [PATCH 5/7 v3] raw/dpaa2_cmdif: add attribute get functionality Nipun Gupta
2018-04-26 10:14     ` [PATCH 6/7 v3] raw/dpaa2_cmdif: support enqueue dequeue operations Nipun Gupta
2018-04-26 10:14     ` [PATCH 7/7 v3] doc: add DPAA2 CMDIF rawdev guide Nipun Gupta
2018-05-01  9:45     ` [PATCH 0/7 v3] Introduce DPAA2 Command Interface raw driver Shreyansh Jain
2018-05-02 17:15     ` [PATCH v4 0/7] " Nipun Gupta
2018-05-02 17:15       ` [PATCH v4 1/7] mempool/dpaa2: add functions exposed to DPDK applications Nipun Gupta
2018-05-03 13:49         ` Shreyansh Jain
2018-05-02 17:15       ` [PATCH v4 2/7] bus/fslmc: expose API to free dpci device Nipun Gupta
2018-05-02 17:15       ` [PATCH v4 3/7] bus/fslmc: keep Tx queues information for DPCI devices too Nipun Gupta
2018-05-02 17:15       ` Nipun Gupta [this message]
2018-05-03 14:10         ` [PATCH v4 4/7] raw/dpaa2_cmdif: introduce DPAA2 command interface driver Shreyansh Jain
2018-05-02 17:15       ` [PATCH v4 5/7] raw/dpaa2_cmdif: add attribute get functionality Nipun Gupta
2018-05-02 17:15       ` [PATCH v4 6/7] raw/dpaa2_cmdif: support enqueue dequeue operations Nipun Gupta
2018-05-02 17:15       ` [PATCH v4 7/7] doc: add DPAA2 CMDIF rawdev guide Nipun Gupta
2018-05-03 16:33       ` [PATCH v5 0/7] Introduce DPAA2 Command Interface raw driver Nipun Gupta
2018-05-03 16:33         ` [PATCH v5 1/7] mempool/dpaa2: add functions exposed to DPDK applications Nipun Gupta
2018-05-03 16:33         ` [PATCH v5 2/7] bus/fslmc: expose API to free dpci device Nipun Gupta
2018-05-03 16:33         ` [PATCH v5 3/7] bus/fslmc: keep Tx queues information for DPCI devices too Nipun Gupta
2018-05-03 16:33         ` [PATCH v5 4/7] raw/dpaa2_cmdif: introduce DPAA2 command interface driver Nipun Gupta
2018-05-03 16:33         ` [PATCH v5 5/7] raw/dpaa2_cmdif: add attribute get functionality Nipun Gupta
2018-05-03 16:33         ` [PATCH v5 6/7] raw/dpaa2_cmdif: support enqueue dequeue operations Nipun Gupta
2018-05-03 16:33         ` [PATCH v5 7/7] doc: add DPAA2 CMDIF rawdev guide Nipun Gupta
2018-05-04  7:15         ` [PATCH v5 0/7] Introduce DPAA2 Command Interface raw driver Nipun Gupta
2018-05-04 10:11         ` [PATCH v6 " Nipun Gupta
2018-05-04 10:11           ` [PATCH v6 1/7] mempool/dpaa2: add functions exposed to DPDK applications Nipun Gupta
2018-05-04 10:11           ` [PATCH v6 2/7] bus/fslmc: expose API to free dpci device Nipun Gupta
2018-05-04 10:11           ` [PATCH v6 3/7] bus/fslmc: keep Tx queues information for DPCI devices too Nipun Gupta
2018-05-04 10:11           ` [PATCH v6 4/7] raw/dpaa2_cmdif: introduce DPAA2 command interface driver Nipun Gupta
2018-05-04 10:11           ` [PATCH v6 5/7] raw/dpaa2_cmdif: add attribute get functionality Nipun Gupta
2018-05-04 10:11           ` [PATCH v6 6/7] raw/dpaa2_cmdif: support enqueue dequeue operations Nipun Gupta
2018-05-04 10:11           ` [PATCH v6 7/7] doc: add DPAA2 CMDIF rawdev guide Nipun Gupta
2018-05-08 12:08             ` Thomas Monjalon
2018-05-05 18:44           ` [PATCH v6 0/7] Introduce DPAA2 Command Interface raw driver Shreyansh Jain
2018-05-08 12:27             ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1525281329-27984-5-git-send-email-nipun.gupta@nxp.com \
    --to=nipun.gupta@nxp.com \
    --cc=dev@dpdk.org \
    --cc=hemant.agrawal@nxp.com \
    --cc=shreyansh.jain@nxp.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.