All of lore.kernel.org
 help / color / mirror / Atom feed
From: Allain Legacy <allain.legacy@windriver.com>
To: <ferruh.yigit@intel.com>
Cc: <dev@dpdk.org>, <ian.jolliffe@windriver.com>,
	<bruce.richardson@intel.com>, <john.mcnamara@intel.com>,
	<keith.wiles@intel.com>, <thomas.monjalon@6wind.com>,
	<vincent.jardin@6wind.com>, <jerin.jacob@caviumnetworks.com>,
	<stephen@networkplumber.org>, <3chas3@gmail.com>
Subject: [PATCH v5 05/14] net/avp: device initialization
Date: Thu, 23 Mar 2017 07:24:04 -0400	[thread overview]
Message-ID: <20170323112413.175202-6-allain.legacy@windriver.com> (raw)
In-Reply-To: <20170323112413.175202-1-allain.legacy@windriver.com>

Adds support for initialization newly probed AVP PCI devices.  Initial
queue translations are setup in preparation for device configuration.

Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
Signed-off-by: Matt Peters <matt.peters@windriver.com>
---
 drivers/net/avp/avp_ethdev.c | 315 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 315 insertions(+)

diff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c
index f5fa453..e937fb52 100644
--- a/drivers/net/avp/avp_ethdev.c
+++ b/drivers/net/avp/avp_ethdev.c
@@ -52,6 +52,7 @@
 #include <rte_dev.h>
 #include <rte_memory.h>
 #include <rte_eal.h>
+#include <rte_io.h>
 
 #include "rte_avp_common.h"
 #include "rte_avp_fifo.h"
@@ -98,6 +99,15 @@
 };
 
 
+/**@{ AVP device flags */
+#define AVP_F_PROMISC (1 << 1)
+#define AVP_F_CONFIGURED (1 << 2)
+#define AVP_F_LINKUP (1 << 3)
+/**@} */
+
+/* Ethernet device validation marker */
+#define AVP_ETHDEV_MAGIC 0x92972862
+
 /*
  * Defines the AVP device attributes which are attached to an RTE ethernet
  * device
@@ -142,18 +152,292 @@ struct avp_adapter {
 	struct avp_dev avp;
 } __rte_cache_aligned;
 
+
+/* 32-bit MMIO register write */
+#define AVP_WRITE32(_value, _addr) rte_write32_relaxed((_value), (_addr))
+
+/* 32-bit MMIO register read */
+#define AVP_READ32(_addr) rte_read32_relaxed((_addr))
+
 /* Macro to cast the ethernet device private data to a AVP object */
 #define AVP_DEV_PRIVATE_TO_HW(adapter) \
 	(&((struct avp_adapter *)adapter)->avp)
 
 /*
+ * Defines the structure of a AVP device queue for the purpose of handling the
+ * receive and transmit burst callback functions
+ */
+struct avp_queue {
+	struct rte_eth_dev_data *dev_data;
+	/**< Backpointer to ethernet device data */
+	struct avp_dev *avp; /**< Backpointer to AVP device */
+	uint16_t queue_id;
+	/**< Queue identifier used for indexing current queue */
+	uint16_t queue_base;
+	/**< Base queue identifier for queue servicing */
+	uint16_t queue_limit;
+	/**< Maximum queue identifier for queue servicing */
+
+	uint64_t packets;
+	uint64_t bytes;
+	uint64_t errors;
+};
+
+/* translate from host physical address to guest virtual address */
+static void *
+avp_dev_translate_address(struct rte_eth_dev *eth_dev,
+			  phys_addr_t host_phys_addr)
+{
+	struct rte_pci_device *pci_dev = AVP_DEV_TO_PCI(eth_dev);
+	struct rte_mem_resource *resource;
+	struct rte_avp_memmap_info *info;
+	struct rte_avp_memmap *map;
+	off_t offset;
+	void *addr;
+	unsigned int i;
+
+	addr = pci_dev->mem_resource[RTE_AVP_PCI_MEMORY_BAR].addr;
+	resource = &pci_dev->mem_resource[RTE_AVP_PCI_MEMMAP_BAR];
+	info = (struct rte_avp_memmap_info *)resource->addr;
+
+	offset = 0;
+	for (i = 0; i < info->nb_maps; i++) {
+		/* search all segments looking for a matching address */
+		map = &info->maps[i];
+
+		if ((host_phys_addr >= map->phys_addr) &&
+			(host_phys_addr < (map->phys_addr + map->length))) {
+			/* address is within this segment */
+			offset += (host_phys_addr - map->phys_addr);
+			addr = RTE_PTR_ADD(addr, offset);
+
+			PMD_DRV_LOG(DEBUG, "Translating host physical 0x%" PRIx64 " to guest virtual 0x%p\n",
+				    host_phys_addr, addr);
+
+			return addr;
+		}
+		offset += map->length;
+	}
+
+	return NULL;
+}
+
+/* verify that the incoming device version is compatible with our version */
+static int
+avp_dev_version_check(uint32_t version)
+{
+	uint32_t driver = RTE_AVP_STRIP_MINOR_VERSION(AVP_DPDK_DRIVER_VERSION);
+	uint32_t device = RTE_AVP_STRIP_MINOR_VERSION(version);
+
+	if (device <= driver) {
+		/* the host driver version is less than or equal to ours */
+		return 0;
+	}
+
+	return 1;
+}
+
+/* verify that memory regions have expected version and validation markers */
+static int
+avp_dev_check_regions(struct rte_eth_dev *eth_dev)
+{
+	struct rte_pci_device *pci_dev = AVP_DEV_TO_PCI(eth_dev);
+	struct rte_avp_memmap_info *memmap;
+	struct rte_avp_device_info *info;
+	struct rte_mem_resource *resource;
+	unsigned int i;
+
+	/* Dump resource info for debug */
+	for (i = 0; i < PCI_MAX_RESOURCE; i++) {
+		resource = &pci_dev->mem_resource[i];
+		if ((resource->phys_addr == 0) || (resource->len == 0))
+			continue;
+
+		PMD_DRV_LOG(DEBUG, "resource[%u]: phys=0x%" PRIx64 " len=%" PRIu64 " addr=%p\n",
+			    i, resource->phys_addr,
+			    resource->len, resource->addr);
+
+		switch (i) {
+		case RTE_AVP_PCI_MEMMAP_BAR:
+			memmap = (struct rte_avp_memmap_info *)resource->addr;
+			if ((memmap->magic != RTE_AVP_MEMMAP_MAGIC) ||
+			    (memmap->version != RTE_AVP_MEMMAP_VERSION)) {
+				PMD_DRV_LOG(ERR, "Invalid memmap magic 0x%08x and version %u\n",
+					    memmap->magic, memmap->version);
+				return -EINVAL;
+			}
+			break;
+
+		case RTE_AVP_PCI_DEVICE_BAR:
+			info = (struct rte_avp_device_info *)resource->addr;
+			if ((info->magic != RTE_AVP_DEVICE_MAGIC) ||
+			    avp_dev_version_check(info->version)) {
+				PMD_DRV_LOG(ERR, "Invalid device info magic 0x%08x or version 0x%08x > 0x%08x\n",
+					    info->magic, info->version,
+					    AVP_DPDK_DRIVER_VERSION);
+				return -EINVAL;
+			}
+			break;
+
+		case RTE_AVP_PCI_MEMORY_BAR:
+		case RTE_AVP_PCI_MMIO_BAR:
+			if (resource->addr == NULL) {
+				PMD_DRV_LOG(ERR, "Missing address space for BAR%u\n",
+					    i);
+				return -EINVAL;
+			}
+			break;
+
+		case RTE_AVP_PCI_MSIX_BAR:
+		default:
+			/* no validation required */
+			break;
+		}
+	}
+
+	return 0;
+}
+
+/*
+ * create a AVP device using the supplied device info by first translating it
+ * to guest address space(s).
+ */
+static int
+avp_dev_create(struct rte_pci_device *pci_dev,
+	       struct rte_eth_dev *eth_dev)
+{
+	struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
+	struct rte_avp_device_info *host_info;
+	struct rte_mem_resource *resource;
+	unsigned int i;
+
+	resource = &pci_dev->mem_resource[RTE_AVP_PCI_DEVICE_BAR];
+	if (resource->addr == NULL) {
+		PMD_DRV_LOG(ERR, "BAR%u is not mapped\n",
+			    RTE_AVP_PCI_DEVICE_BAR);
+		return -EFAULT;
+	}
+	host_info = (struct rte_avp_device_info *)resource->addr;
+
+	if ((host_info->magic != RTE_AVP_DEVICE_MAGIC) ||
+		avp_dev_version_check(host_info->version)) {
+		PMD_DRV_LOG(ERR, "Invalid AVP PCI device, magic 0x%08x version 0x%08x > 0x%08x\n",
+			    host_info->magic, host_info->version,
+			    AVP_DPDK_DRIVER_VERSION);
+		return -EINVAL;
+	}
+
+	PMD_DRV_LOG(DEBUG, "AVP host device is v%u.%u.%u\n",
+		    RTE_AVP_GET_RELEASE_VERSION(host_info->version),
+		    RTE_AVP_GET_MAJOR_VERSION(host_info->version),
+		    RTE_AVP_GET_MINOR_VERSION(host_info->version));
+
+	PMD_DRV_LOG(DEBUG, "AVP host supports %u to %u TX queue(s)\n",
+		    host_info->min_tx_queues, host_info->max_tx_queues);
+	PMD_DRV_LOG(DEBUG, "AVP host supports %u to %u RX queue(s)\n",
+		    host_info->min_rx_queues, host_info->max_rx_queues);
+	PMD_DRV_LOG(DEBUG, "AVP host supports features 0x%08x\n",
+		    host_info->features);
+
+	if (avp->magic != AVP_ETHDEV_MAGIC) {
+		/*
+		 * First time initialization (i.e., not during a VM
+		 * migration)
+		 */
+		memset(avp, 0, sizeof(*avp));
+		avp->magic = AVP_ETHDEV_MAGIC;
+		avp->dev_data = eth_dev->data;
+		avp->port_id = eth_dev->data->port_id;
+		avp->host_mbuf_size = host_info->mbuf_size;
+		avp->host_features = host_info->features;
+		memcpy(&avp->ethaddr.addr_bytes[0],
+		       host_info->ethaddr, ETHER_ADDR_LEN);
+		/* adjust max values to not exceed our max */
+		avp->max_tx_queues =
+			RTE_MIN(host_info->max_tx_queues, RTE_AVP_MAX_QUEUES);
+		avp->max_rx_queues =
+			RTE_MIN(host_info->max_rx_queues, RTE_AVP_MAX_QUEUES);
+	} else {
+		/* Re-attaching during migration */
+
+		/* TODO... requires validation of host values */
+		if ((host_info->features & avp->features) != avp->features) {
+			PMD_DRV_LOG(ERR, "AVP host features mismatched; 0x%08x, host=0x%08x\n",
+				    avp->features, host_info->features);
+			/* this should not be possible; continue for now */
+		}
+	}
+
+	/* the device id is allowed to change over migrations */
+	avp->device_id = host_info->device_id;
+
+	/* translate incoming host addresses to guest address space */
+	PMD_DRV_LOG(DEBUG, "AVP first host tx queue at 0x%" PRIx64 "\n",
+		    host_info->tx_phys);
+	PMD_DRV_LOG(DEBUG, "AVP first host alloc queue at 0x%" PRIx64 "\n",
+		    host_info->alloc_phys);
+	for (i = 0; i < avp->max_tx_queues; i++) {
+		avp->tx_q[i] = avp_dev_translate_address(eth_dev,
+			host_info->tx_phys + (i * host_info->tx_size));
+
+		avp->alloc_q[i] = avp_dev_translate_address(eth_dev,
+			host_info->alloc_phys + (i * host_info->alloc_size));
+	}
+
+	PMD_DRV_LOG(DEBUG, "AVP first host rx queue at 0x%" PRIx64 "\n",
+		    host_info->rx_phys);
+	PMD_DRV_LOG(DEBUG, "AVP first host free queue at 0x%" PRIx64 "\n",
+		    host_info->free_phys);
+	for (i = 0; i < avp->max_rx_queues; i++) {
+		avp->rx_q[i] = avp_dev_translate_address(eth_dev,
+			host_info->rx_phys + (i * host_info->rx_size));
+		avp->free_q[i] = avp_dev_translate_address(eth_dev,
+			host_info->free_phys + (i * host_info->free_size));
+	}
+
+	PMD_DRV_LOG(DEBUG, "AVP host request queue at 0x%" PRIx64 "\n",
+		    host_info->req_phys);
+	PMD_DRV_LOG(DEBUG, "AVP host response queue at 0x%" PRIx64 "\n",
+		    host_info->resp_phys);
+	PMD_DRV_LOG(DEBUG, "AVP host sync address at 0x%" PRIx64 "\n",
+		    host_info->sync_phys);
+	PMD_DRV_LOG(DEBUG, "AVP host mbuf address at 0x%" PRIx64 "\n",
+		    host_info->mbuf_phys);
+	avp->req_q = avp_dev_translate_address(eth_dev, host_info->req_phys);
+	avp->resp_q = avp_dev_translate_address(eth_dev, host_info->resp_phys);
+	avp->sync_addr =
+		avp_dev_translate_address(eth_dev, host_info->sync_phys);
+	avp->mbuf_addr =
+		avp_dev_translate_address(eth_dev, host_info->mbuf_phys);
+
+	/*
+	 * store the host mbuf virtual address so that we can calculate
+	 * relative offsets for each mbuf as they are processed
+	 */
+	avp->host_mbuf_addr = host_info->mbuf_va;
+	avp->host_sync_addr = host_info->sync_va;
+
+	/*
+	 * store the maximum packet length that is supported by the host.
+	 */
+	avp->max_rx_pkt_len = host_info->max_rx_pkt_len;
+	PMD_DRV_LOG(DEBUG, "AVP host max receive packet length is %u\n",
+				host_info->max_rx_pkt_len);
+
+	return 0;
+}
+
+/*
  * This function is based on probe() function in avp_pci.c
  * It returns 0 on success.
  */
 static int
 eth_avp_dev_init(struct rte_eth_dev *eth_dev)
 {
+	struct avp_dev *avp =
+		AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
 	struct rte_pci_device *pci_dev;
+	int ret;
 
 	pci_dev = AVP_DEV_TO_PCI(eth_dev);
 
@@ -171,6 +455,32 @@ struct avp_adapter {
 
 	eth_dev->data->dev_flags |= RTE_ETH_DEV_DETACHABLE;
 
+	/* Check BAR resources */
+	ret = avp_dev_check_regions(eth_dev);
+	if (ret < 0) {
+		PMD_DRV_LOG(ERR, "Failed to validate BAR resources, ret=%d\n",
+			    ret);
+		return ret;
+	}
+
+	/* Handle each subtype */
+	ret = avp_dev_create(pci_dev, eth_dev);
+	if (ret < 0) {
+		PMD_DRV_LOG(ERR, "Failed to create device, ret=%d\n", ret);
+		return ret;
+	}
+
+	/* Allocate memory for storing MAC addresses */
+	eth_dev->data->mac_addrs = rte_zmalloc("avp_ethdev", ETHER_ADDR_LEN, 0);
+	if (eth_dev->data->mac_addrs == NULL) {
+		PMD_DRV_LOG(ERR, "Failed to allocate %d bytes needed to store MAC addresses\n",
+			    ETHER_ADDR_LEN);
+		return -ENOMEM;
+	}
+
+	/* Get a mac from device config */
+	ether_addr_copy(&avp->ethaddr, &eth_dev->data->mac_addrs[0]);
+
 	return 0;
 }
 
@@ -183,6 +493,11 @@ struct avp_adapter {
 	if (eth_dev->data == NULL)
 		return 0;
 
+	if (eth_dev->data->mac_addrs != NULL) {
+		rte_free(eth_dev->data->mac_addrs);
+		eth_dev->data->mac_addrs = NULL;
+	}
+
 	return 0;
 }
 
-- 
1.8.3.1

  parent reply	other threads:[~2017-03-23 11:25 UTC|newest]

Thread overview: 172+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-25  1:22 [PATCH 00/16] Wind River Systems AVP PMD Allain Legacy
2017-02-25  1:23 ` [PATCH 01/16] config: adds attributes for the " Allain Legacy
2017-02-25  1:23 ` [PATCH 02/16] net/avp: public header files Allain Legacy
2017-02-25  1:23 ` [PATCH 03/16] maintainers: claim responsibility for AVP PMD Allain Legacy
2017-02-25  1:23 ` [PATCH 04/16] net/avp: add PMD version map file Allain Legacy
2017-02-25  1:23 ` [PATCH 05/16] net/avp: debug log macros Allain Legacy
2017-02-25  1:23 ` [PATCH 06/16] drivers/net: adds driver makefiles for AVP PMD Allain Legacy
2017-02-25  1:23 ` [PATCH 07/16] net/avp: driver registration Allain Legacy
2017-02-25  1:23 ` [PATCH 08/16] net/avp: device initialization Allain Legacy
2017-02-25  1:23 ` [PATCH 09/16] net/avp: device configuration Allain Legacy
2017-02-25  1:23 ` [PATCH 10/16] net/avp: queue setup and release Allain Legacy
2017-02-25  1:23 ` [PATCH 11/16] net/avp: packet receive functions Allain Legacy
2017-02-25  1:23 ` [PATCH 12/16] net/avp: packet transmit functions Allain Legacy
2017-02-25  1:23 ` [PATCH 13/16] net/avp: device statistics operations Allain Legacy
2017-02-25  1:23 ` [PATCH 14/16] net/avp: device promiscuous functions Allain Legacy
2017-02-25  1:23 ` [PATCH 15/16] net/avp: device start and stop operations Allain Legacy
2017-02-25  1:23 ` [PATCH 16/16] doc: adds information related to the AVP PMD Allain Legacy
2017-02-26 19:08 ` [PATCH v2 00/16] Wind River Systems " Allain Legacy
2017-02-26 19:08   ` [PATCH v2 01/15] config: adds attributes for the " Allain Legacy
2017-02-26 19:08   ` [PATCH v2 02/15] net/avp: public header files Allain Legacy
2017-02-28 11:49     ` Jerin Jacob
2017-03-01 13:25       ` Legacy, Allain
2017-02-26 19:08   ` [PATCH v2 03/15] maintainers: claim responsibility for AVP PMD Allain Legacy
2017-02-26 19:08   ` [PATCH v2 04/15] net/avp: add PMD version map file Allain Legacy
2017-02-26 19:08   ` [PATCH v2 05/15] net/avp: debug log macros Allain Legacy
2017-02-26 19:08   ` [PATCH v2 06/15] drivers/net: adds driver makefiles for AVP PMD Allain Legacy
2017-02-26 19:08   ` [PATCH v2 07/15] net/avp: driver registration Allain Legacy
2017-02-27 16:47     ` Stephen Hemminger
2017-02-27 17:10       ` Legacy, Allain
2017-02-27 16:53     ` Stephen Hemminger
2017-02-27 17:09       ` Legacy, Allain
2017-02-26 19:08   ` [PATCH v2 08/15] net/avp: device initialization Allain Legacy
2017-02-28 11:57     ` Jerin Jacob
2017-03-01 13:29       ` Legacy, Allain
2017-02-26 19:08   ` [PATCH v2 09/15] net/avp: device configuration Allain Legacy
2017-02-26 19:08   ` [PATCH v2 10/15] net/avp: queue setup and release Allain Legacy
2017-02-26 19:08   ` [PATCH v2 11/15] net/avp: packet receive functions Allain Legacy
2017-02-27 16:46     ` Stephen Hemminger
2017-02-27 17:06       ` Legacy, Allain
2017-02-28 10:27         ` Bruce Richardson
2017-03-01 13:23           ` Legacy, Allain
2017-03-01 14:14             ` Thomas Monjalon
2017-03-01 14:54               ` Legacy, Allain
2017-03-01 15:10               ` Stephen Hemminger
2017-03-01 15:40                 ` Legacy, Allain
2017-02-26 19:09   ` [PATCH v2 12/15] net/avp: packet transmit functions Allain Legacy
2017-02-26 22:18     ` Legacy, Allain
2017-02-26 19:09   ` [PATCH v2 13/15] net/avp: device promiscuous functions Allain Legacy
2017-02-26 19:09   ` [PATCH v2 14/15] net/avp: device start and stop operations Allain Legacy
2017-02-26 19:09   ` [PATCH v2 15/15] doc: adds information related to the AVP PMD Allain Legacy
2017-02-27 17:04     ` Mcnamara, John
2017-02-27 17:07       ` Legacy, Allain
2017-02-27  8:54   ` [PATCH v2 00/16] Wind River Systems " Vincent JARDIN
2017-02-27 12:15     ` Legacy, Allain
2017-02-27 15:17       ` Wiles, Keith
2017-03-02  0:19   ` [PATCH v3 " Allain Legacy
2017-03-02  0:19     ` [PATCH v3 01/16] config: adds attributes for the " Allain Legacy
2017-03-02  0:19     ` [PATCH v3 02/16] net/avp: public header files Allain Legacy
2017-03-03 14:37       ` Chas Williams
2017-03-03 15:35         ` Legacy, Allain
2017-03-02  0:19     ` [PATCH v3 03/16] maintainers: claim responsibility for AVP PMD Allain Legacy
2017-03-02  0:19     ` [PATCH v3 04/16] net/avp: add PMD version map file Allain Legacy
2017-03-02  0:19     ` [PATCH v3 05/16] net/avp: debug log macros Allain Legacy
2017-03-02  0:19     ` [PATCH v3 06/16] drivers/net: adds driver makefiles for AVP PMD Allain Legacy
2017-03-02  0:19     ` [PATCH v3 07/16] net/avp: driver registration Allain Legacy
2017-03-02  0:20     ` [PATCH v3 08/16] net/avp: device initialization Allain Legacy
2017-03-03 15:04       ` Chas Williams
2017-03-09 14:03         ` Legacy, Allain
2017-03-09 14:48         ` Legacy, Allain
2017-03-02  0:20     ` [PATCH v3 09/16] net/avp: device configuration Allain Legacy
2017-03-02  0:20     ` [PATCH v3 10/16] net/avp: queue setup and release Allain Legacy
2017-03-02  0:20     ` [PATCH v3 11/16] net/avp: packet receive functions Allain Legacy
2017-03-02  0:20     ` [PATCH v3 12/16] net/avp: packet transmit functions Allain Legacy
2017-03-02  0:20     ` [PATCH v3 13/16] net/avp: device statistics operations Allain Legacy
2017-03-02  0:35       ` Stephen Hemminger
2017-03-09 13:48         ` Legacy, Allain
2017-03-02  0:20     ` [PATCH v3 14/16] net/avp: device promiscuous functions Allain Legacy
2017-03-02  0:20     ` [PATCH v3 15/16] net/avp: device start and stop operations Allain Legacy
2017-03-02  0:37       ` Stephen Hemminger
2017-03-09 13:49         ` Legacy, Allain
2017-03-02  0:20     ` [PATCH v3 16/16] doc: adds information related to the AVP PMD Allain Legacy
2017-03-03 16:21       ` Vincent JARDIN
2017-03-13 19:17         ` Legacy, Allain
2017-03-13 19:16     ` [PATCH v4 00/17] Wind River Systems " Allain Legacy
2017-03-13 19:16       ` [PATCH v4 01/17] config: adds attributes for the " Allain Legacy
2017-03-13 19:16       ` [PATCH v4 02/17] net/avp: public header files Allain Legacy
2017-03-13 19:16       ` [PATCH v4 03/17] maintainers: claim responsibility for AVP PMD Allain Legacy
2017-03-13 19:16       ` [PATCH v4 04/17] net/avp: add PMD version map file Allain Legacy
2017-03-16 14:52         ` Ferruh Yigit
2017-03-16 15:33           ` Legacy, Allain
2017-03-13 19:16       ` [PATCH v4 05/17] net/avp: debug log macros Allain Legacy
2017-03-13 19:16       ` [PATCH v4 06/17] drivers/net: adds driver makefiles for AVP PMD Allain Legacy
2017-03-13 19:16       ` [PATCH v4 07/17] net/avp: driver registration Allain Legacy
2017-03-16 14:53         ` Ferruh Yigit
2017-03-16 15:37           ` Legacy, Allain
2017-03-13 19:16       ` [PATCH v4 08/17] net/avp: device initialization Allain Legacy
2017-03-13 19:16       ` [PATCH v4 09/17] net/avp: device configuration Allain Legacy
2017-03-13 19:16       ` [PATCH v4 10/17] net/avp: queue setup and release Allain Legacy
2017-03-13 19:16       ` [PATCH v4 11/17] net/avp: packet receive functions Allain Legacy
2017-03-13 19:16       ` [PATCH v4 12/17] net/avp: packet transmit functions Allain Legacy
2017-03-13 19:16       ` [PATCH v4 13/17] net/avp: device statistics operations Allain Legacy
2017-03-13 19:16       ` [PATCH v4 14/17] net/avp: device promiscuous functions Allain Legacy
2017-03-13 19:16       ` [PATCH v4 15/17] net/avp: device start and stop operations Allain Legacy
2017-03-13 19:16       ` [PATCH v4 16/17] net/avp: migration interrupt handling Allain Legacy
2017-03-13 19:16       ` [PATCH v4 17/17] doc: adds information related to the AVP PMD Allain Legacy
2017-03-16 14:53         ` Ferruh Yigit
2017-03-16 15:37           ` Legacy, Allain
2017-03-14 17:37       ` [PATCH v4 00/17] Wind River Systems AVP PMD vs virtio? Vincent JARDIN
2017-03-15  4:10         ` O'Driscoll, Tim
2017-03-15 10:55           ` Thomas Monjalon
2017-03-15 14:02             ` Vincent JARDIN
2017-03-16  3:18               ` O'Driscoll, Tim
2017-03-16  8:52                 ` Francois Ozog
2017-03-16  9:51                   ` Wiles, Keith
2017-03-16 10:32                 ` Chas Williams
2017-03-16 18:09                   ` Francois Ozog
2017-03-15 11:29           ` Ferruh Yigit
2017-03-15 14:08             ` Vincent JARDIN
2017-03-15 18:18               ` Ferruh Yigit
2017-03-15 14:02           ` Vincent JARDIN
2017-03-15 14:02           ` Vincent JARDIN
2017-03-15 20:19             ` Wiles, Keith
2017-03-16 23:17           ` Stephen Hemminger
2017-03-16 23:41             ` [PATCH v4 00/17] Wind River Systems AVP PMD vs virtio? - ivshmem is back Vincent JARDIN
2017-03-17  0:08               ` Wiles, Keith
2017-03-17  0:15                 ` O'Driscoll, Tim
2017-03-17  0:11               ` Wiles, Keith
2017-03-17  0:14                 ` Stephen Hemminger
2017-03-17  0:31                 ` Vincent JARDIN
2017-03-17  0:53                   ` Wiles, Keith
2017-03-17  8:48                     ` Thomas Monjalon
2017-03-17 10:15                       ` Legacy, Allain
2017-03-17 13:52                       ` Michael S. Tsirkin
2017-03-20 22:30                         ` Hobywan Kenoby
2017-03-21 11:06                           ` Thomas Monjalon
     [not found]                       ` <20170317093320.GA11116@stefanha-x1.localdomain>
2017-03-30  8:55                         ` Markus Armbruster
2017-03-23 11:23       ` [PATCH v5 00/14] Wind River Systems AVP PMD Allain Legacy
2017-03-23 11:24         ` [PATCH v5 01/14] drivers/net: adds AVP PMD base files Allain Legacy
2017-03-23 11:24         ` [PATCH v5 02/14] net/avp: public header files Allain Legacy
2017-03-23 11:24         ` [PATCH v5 03/14] net/avp: debug log macros Allain Legacy
2017-03-23 11:24         ` [PATCH v5 04/14] net/avp: driver registration Allain Legacy
2017-03-23 11:24         ` Allain Legacy [this message]
2017-03-23 11:24         ` [PATCH v5 06/14] net/avp: device configuration Allain Legacy
2017-03-23 11:24         ` [PATCH v5 07/14] net/avp: queue setup and release Allain Legacy
2017-03-23 11:24         ` [PATCH v5 08/14] net/avp: packet receive functions Allain Legacy
2017-03-23 11:24         ` [PATCH v5 09/14] net/avp: packet transmit functions Allain Legacy
2017-03-23 11:24         ` [PATCH v5 10/14] net/avp: device statistics operations Allain Legacy
2017-03-23 11:24         ` [PATCH v5 11/14] net/avp: device promiscuous functions Allain Legacy
2017-03-23 11:24         ` [PATCH v5 12/14] net/avp: device start and stop operations Allain Legacy
2017-03-23 11:24         ` [PATCH v5 13/14] net/avp: migration interrupt handling Allain Legacy
2017-03-23 11:24         ` [PATCH v5 14/14] doc: adds information related to the AVP PMD Allain Legacy
2017-03-23 14:18         ` [PATCH v5 00/14] Wind River Systems " Ferruh Yigit
2017-03-23 18:28           ` Legacy, Allain
2017-03-23 20:35             ` Vincent Jardin
2017-03-28 11:53         ` [PATCH v6 " Allain Legacy
2017-03-28 11:53           ` [PATCH v6 01/14] drivers/net: adds AVP PMD base files Allain Legacy
2017-03-28 11:53           ` [PATCH v6 02/14] net/avp: public header files Allain Legacy
2017-03-28 11:53           ` [PATCH v6 03/14] net/avp: debug log macros Allain Legacy
2017-03-28 11:53           ` [PATCH v6 04/14] net/avp: driver registration Allain Legacy
2017-03-28 11:54           ` [PATCH v6 05/14] net/avp: device initialization Allain Legacy
2017-03-28 11:54           ` [PATCH v6 06/14] net/avp: device configuration Allain Legacy
2017-03-29 10:28             ` Ferruh Yigit
2017-03-28 11:54           ` [PATCH v6 07/14] net/avp: queue setup and release Allain Legacy
2017-03-28 11:54           ` [PATCH v6 08/14] net/avp: packet receive functions Allain Legacy
2017-03-28 11:54           ` [PATCH v6 09/14] net/avp: packet transmit functions Allain Legacy
2017-03-28 11:54           ` [PATCH v6 10/14] net/avp: device statistics operations Allain Legacy
2017-03-28 11:54           ` [PATCH v6 11/14] net/avp: device promiscuous functions Allain Legacy
2017-03-28 11:54           ` [PATCH v6 12/14] net/avp: device start and stop operations Allain Legacy
2017-03-28 11:54           ` [PATCH v6 13/14] net/avp: migration interrupt handling Allain Legacy
2017-03-28 11:54           ` [PATCH v6 14/14] doc: adds information related to the AVP PMD Allain Legacy
2017-03-29 10:44           ` [PATCH v6 00/14] Wind River Systems " Vincent JARDIN
2017-03-29 11:05             ` Ferruh Yigit

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=20170323112413.175202-6-allain.legacy@windriver.com \
    --to=allain.legacy@windriver.com \
    --cc=3chas3@gmail.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=ian.jolliffe@windriver.com \
    --cc=jerin.jacob@caviumnetworks.com \
    --cc=john.mcnamara@intel.com \
    --cc=keith.wiles@intel.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas.monjalon@6wind.com \
    --cc=vincent.jardin@6wind.com \
    /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.