[dpdk-dev] [vmxnet3 PATCH] pmd: support dpdk-1.3
Thomas Monjalon
thomas.monjalon at 6wind.com
Thu Jul 25 22:39:46 CEST 2013
API changes in DPDK 1.3:
- queue arrays are already allocated by rte_ethdev
- queue could be released for reconfiguration (not supported)
- queue struct becomes an opaque pointer
- vlan_filter_set can return an error
- bit-fields vlan_macip have moved
Signed-off-by: Thomas Monjalon <thomas.monjalon at 6wind.com>
---
pmd/vmxnet3.c | 43 ++++++++++++++++++++++++++++++++++++++++---
1 file changed, 40 insertions(+), 3 deletions(-)
diff --git a/pmd/vmxnet3.c b/pmd/vmxnet3.c
index 8dc1650..1718f8d 100644
--- a/pmd/vmxnet3.c
+++ b/pmd/vmxnet3.c
@@ -1,5 +1,5 @@
/*
- * Copyright 6WIND 2012-2013, All rights reserved.
+ * Copyright 2012-2013 6WIND S.A.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -47,13 +47,26 @@
/* Dependency over DPDK */
#include <rte_byteorder.h>
#include <rte_ethdev.h>
+#include <rte_version.h>
+
+#define DPDK_VERSION_BEFORE(x,y) RTE_VERSION < RTE_VERSION_NUM(x,y,0,0)
+#define DPDK_VERSION_SINCE(x,y) RTE_VERSION >= RTE_VERSION_NUM(x,y,0,0)
/* Local includes */
#include "vmxnet3_shm_shared.h"
#include "vmx_user.h"
+#if DPDK_VERSION_BEFORE(1,3)
+/* until dpdk-1.3, queue structs are igb ones */
typedef struct igb_tx_queue rte_txq_t;
typedef struct igb_rx_queue rte_rxq_t;
+/* until dpdk-1.3, bit-fields vlan_macip are flat in rte_pktmbuf */
+#define RTE_MBUF_VLAN_MAC_IP(m) (m)->pkt.vlan_tci
+#else /* since dpdk-1.3 */
+typedef void rte_txq_t;
+typedef void rte_rxq_t;
+#define RTE_MBUF_VLAN_MAC_IP(m) (m)->pkt.vlan_macip.f.vlan_tci
+#endif
#define VMXNET3_MAX_MAC_ADDRS 1
@@ -324,7 +337,7 @@ queue_rx_complete(struct vmxnet3_rx_queue *rq,
buf->pkt.data_len = rcd->len;
buf->pkt.in_port = rq->port_id;
buf->ol_flags = 0; // RSS - FDIR // Error
- buf->pkt.vlan_tci = 0;
+ RTE_MBUF_VLAN_MAC_IP(buf) = 0;
if (unlikely(rep == NULL)) {
/* Can't allocate replacement mbuf, drop packet and
@@ -734,7 +747,11 @@ vmxnet3_rss_configure(const struct rte_eth_dev *dev)
* Clear VLAN Filter table and declare VLAN filtering capability,
* so that we can enable VLAN filtering by simply adding entries in it.
*/
+#if DPDK_VERSION_SINCE(1,3)
+static int
+#else
static void
+#endif
vmxnet3_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
{
const struct vmxnet3_adapter *priv;
@@ -748,7 +765,11 @@ vmxnet3_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
if (!(devRead->misc.uptFeatures & UPT1_F_RXVLAN)) {
RTE_LOG(WARNING, PMD, "%s(): No VLAN enabled for device\n",
__func__);
+#if DPDK_VERSION_SINCE(1,3)
+ return -1;
+#else
return;
+#endif
}
if (on) {
@@ -756,6 +777,10 @@ vmxnet3_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
} else {
VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vlan_id);
}
+
+#if DPDK_VERSION_SINCE(1,3)
+ return 0;
+#endif
}
/* Exported Rx function after Rx Queue setup. */
@@ -976,6 +1001,7 @@ vmxnet3_dev_start(struct rte_eth_dev *dev)
return ret;
}
+#if DPDK_VERSION_BEFORE(1,3)
/* Allocate array of pointers to register queues */
static int
pointer_array_alloc(void **pointer_array, uint16_t *size, uint16_t new_size)
@@ -997,12 +1023,17 @@ pointer_array_alloc(void **pointer_array, uint16_t *size, uint16_t new_size)
static int
vmxnet3_dev_configure(struct rte_eth_dev *dev,
uint16_t nb_rx_q, uint16_t nb_tx_q)
+#else
+static int
+vmxnet3_dev_configure(struct rte_eth_dev *dev)
+#endif
{
const struct vmxnet3_adapter* priv;
struct Vmxnet3_DSDevRead *devRead;
unsigned int i;
u32 *vfTable;
+#if DPDK_VERSION_BEFORE(1,3)
int ret;
/* Allocate array of pointers to RX queues */
@@ -1020,6 +1051,7 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev,
rte_panic("%s(): port_id=%d: allocation of array "
"of %d pointers to TX queues failed\n",
__func__, dev->data->port_id, nb_tx_q);
+#endif
priv = (struct vmxnet3_adapter*)dev->data->dev_private;
@@ -1360,7 +1392,7 @@ vmxnet3_dev_tx_queue_setup(struct rte_eth_dev *dev,
tq->hthresh = tx_conf->tx_thresh.hthresh;
tq->wthresh = tx_conf->tx_thresh.wthresh;
- dev->data->tx_queues[queue_idx] = (struct igb_tx_queue*)tq;
+ dev->data->tx_queues[queue_idx] = (rte_txq_t*)tq;
dev->tx_pkt_burst = eth_tx_burst;
return 0;
@@ -1392,6 +1424,11 @@ static struct eth_dev_ops vmxnet3_eth_dev_ops = {
.vlan_filter_set = vmxnet3_vlan_filter_set,
.rx_queue_setup = vmxnet3_dev_rx_queue_setup,
.tx_queue_setup = vmxnet3_dev_tx_queue_setup,
+#if DPDK_VERSION_SINCE(1,3)
+ /* Reconfiguration not supported yet */
+ .rx_queue_release = NULL,
+ .tx_queue_release = NULL,
+#endif
.dev_led_on = NULL,
.dev_led_off = NULL,
.flow_ctrl_set = NULL,
--
1.7.10.4
More information about the dev
mailing list