net/mlx4: separate Rx/Tx definitions
authorAdrien Mazarguil <adrien.mazarguil@6wind.com>
Fri, 1 Sep 2017 08:06:56 +0000 (10:06 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 6 Oct 2017 00:49:48 +0000 (02:49 +0200)
Except for a minor documentation update on internal structure definitions
to make them more Doxygen-friendly, there is no impact on functionality.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
drivers/net/mlx4/mlx4.c
drivers/net/mlx4/mlx4.h
drivers/net/mlx4/mlx4_flow.c
drivers/net/mlx4/mlx4_intr.c
drivers/net/mlx4/mlx4_rxtx.h [new file with mode: 0644]

index 667ba2b..ba06075 100644 (file)
@@ -71,6 +71,7 @@
 /* PMD headers. */
 #include "mlx4.h"
 #include "mlx4_flow.h"
+#include "mlx4_rxtx.h"
 #include "mlx4_utils.h"
 
 /** Configuration structure for device arguments. */
index 6852c4c..edbece6 100644 (file)
@@ -85,73 +85,8 @@ enum {
 
 #define MLX4_DRIVER_NAME "net_mlx4"
 
-struct mlx4_rxq_stats {
-       unsigned int idx; /**< Mapping index. */
-       uint64_t ipackets; /**< Total of successfully received packets. */
-       uint64_t ibytes; /**< Total of successfully received bytes. */
-       uint64_t idropped; /**< Total of packets dropped when RX ring full. */
-       uint64_t rx_nombuf; /**< Total of RX mbuf allocation failures. */
-};
-
-/* RX element. */
-struct rxq_elt {
-       struct ibv_recv_wr wr; /* Work Request. */
-       struct ibv_sge sge; /* Scatter/Gather Element. */
-       struct rte_mbuf *buf; /**< Buffer. */
-};
-
-/* RX queue descriptor. */
-struct rxq {
-       struct priv *priv; /* Back pointer to private data. */
-       struct rte_mempool *mp; /* Memory Pool for allocations. */
-       struct ibv_mr *mr; /* Memory Region (for mp). */
-       struct ibv_cq *cq; /* Completion Queue. */
-       struct ibv_qp *qp; /* Queue Pair. */
-       struct ibv_comp_channel *channel;
-       unsigned int port_id; /* Port ID for incoming packets. */
-       unsigned int elts_n; /* (*elts)[] length. */
-       unsigned int elts_head; /* Current index in (*elts)[]. */
-       struct rxq_elt (*elts)[]; /* Rx elements. */
-       struct mlx4_rxq_stats stats; /* RX queue counters. */
-       unsigned int socket; /* CPU socket ID for allocations. */
-};
-
-/* TX element. */
-struct txq_elt {
-       struct ibv_send_wr wr; /* Work request. */
-       struct ibv_sge sge; /* Scatter/gather element. */
-       struct rte_mbuf *buf;
-};
-
-struct mlx4_txq_stats {
-       unsigned int idx; /**< Mapping index. */
-       uint64_t opackets; /**< Total of successfully sent packets. */
-       uint64_t obytes;   /**< Total of successfully sent bytes. */
-       uint64_t odropped; /**< Total of packets not sent when TX ring full. */
-};
-
-/* TX queue descriptor. */
-struct txq {
-       struct priv *priv; /* Back pointer to private data. */
-       struct {
-               const struct rte_mempool *mp; /* Cached Memory Pool. */
-               struct ibv_mr *mr; /* Memory Region (for mp). */
-               uint32_t lkey; /* mr->lkey */
-       } mp2mr[MLX4_PMD_TX_MP_CACHE]; /* MP to MR translation table. */
-       struct ibv_cq *cq; /* Completion Queue. */
-       struct ibv_qp *qp; /* Queue Pair. */
-       uint32_t max_inline; /* Max inline send size <= MLX4_PMD_MAX_INLINE. */
-       unsigned int elts_n; /* (*elts)[] length. */
-       struct txq_elt (*elts)[]; /* TX elements. */
-       unsigned int elts_head; /* Current index in (*elts)[]. */
-       unsigned int elts_tail; /* First element awaiting completion. */
-       unsigned int elts_comp; /* Number of completion requests. */
-       unsigned int elts_comp_cd; /* Countdown for next completion request. */
-       unsigned int elts_comp_cd_init; /* Initial value for countdown. */
-       struct mlx4_txq_stats stats; /* TX queue counters. */
-       unsigned int socket; /* CPU socket ID for allocations. */
-};
-
+struct rxq;
+struct txq;
 struct rte_flow;
 
 struct priv {
index 6f6f455..61455ce 100644 (file)
@@ -40,6 +40,7 @@
 /* PMD headers. */
 #include "mlx4.h"
 #include "mlx4_flow.h"
+#include "mlx4_rxtx.h"
 #include "mlx4_utils.h"
 
 /** Static initializer for items. */
index bcf4d59..76d2e01 100644 (file)
@@ -56,6 +56,7 @@
 #include <rte_interrupts.h>
 
 #include "mlx4.h"
+#include "mlx4_rxtx.h"
 #include "mlx4_utils.h"
 
 static void mlx4_link_status_alarm(struct priv *priv);
diff --git a/drivers/net/mlx4/mlx4_rxtx.h b/drivers/net/mlx4/mlx4_rxtx.h
new file mode 100644 (file)
index 0000000..ea55aed
--- /dev/null
@@ -0,0 +1,122 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright 2017 6WIND S.A.
+ *   Copyright 2017 Mellanox
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *     * Neither the name of 6WIND S.A. nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MLX4_RXTX_H_
+#define MLX4_RXTX_H_
+
+#include <stdint.h>
+
+/* Verbs headers do not support -pedantic. */
+#ifdef PEDANTIC
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+#include <infiniband/verbs.h>
+#ifdef PEDANTIC
+#pragma GCC diagnostic error "-Wpedantic"
+#endif
+
+#include <rte_mbuf.h>
+#include <rte_mempool.h>
+
+#include "mlx4.h"
+
+/** Rx queue counters. */
+struct mlx4_rxq_stats {
+       unsigned int idx; /**< Mapping index. */
+       uint64_t ipackets; /**< Total of successfully received packets. */
+       uint64_t ibytes; /**< Total of successfully received bytes. */
+       uint64_t idropped; /**< Total of packets dropped when Rx ring full. */
+       uint64_t rx_nombuf; /**< Total of Rx mbuf allocation failures. */
+};
+
+/** Rx element. */
+struct rxq_elt {
+       struct ibv_recv_wr wr; /**< Work request. */
+       struct ibv_sge sge; /**< Scatter/gather element. */
+       struct rte_mbuf *buf; /**< Buffer. */
+};
+
+/** Rx queue descriptor. */
+struct rxq {
+       struct priv *priv; /**< Back pointer to private data. */
+       struct rte_mempool *mp; /**< Memory pool for allocations. */
+       struct ibv_mr *mr; /**< Memory region (for mp). */
+       struct ibv_cq *cq; /**< Completion queue. */
+       struct ibv_qp *qp; /**< Queue pair. */
+       struct ibv_comp_channel *channel; /**< Rx completion channel. */
+       unsigned int port_id; /**< Port ID for incoming packets. */
+       unsigned int elts_n; /**< (*elts)[] length. */
+       unsigned int elts_head; /**< Current index in (*elts)[]. */
+       struct rxq_elt (*elts)[]; /**< Rx elements. */
+       struct mlx4_rxq_stats stats; /**< Rx queue counters. */
+       unsigned int socket; /**< CPU socket ID for allocations. */
+};
+
+/** Tx element. */
+struct txq_elt {
+       struct ibv_send_wr wr; /* Work request. */
+       struct ibv_sge sge; /* Scatter/gather element. */
+       struct rte_mbuf *buf; /**< Buffer. */
+};
+
+/** Rx queue counters. */
+struct mlx4_txq_stats {
+       unsigned int idx; /**< Mapping index. */
+       uint64_t opackets; /**< Total of successfully sent packets. */
+       uint64_t obytes; /**< Total of successfully sent bytes. */
+       uint64_t odropped; /**< Total of packets not sent when Tx ring full. */
+};
+
+/** Tx queue descriptor. */
+struct txq {
+       struct priv *priv; /**< Back pointer to private data. */
+       struct {
+               const struct rte_mempool *mp; /**< Cached memory pool. */
+               struct ibv_mr *mr; /**< Memory region (for mp). */
+               uint32_t lkey; /**< mr->lkey copy. */
+       } mp2mr[MLX4_PMD_TX_MP_CACHE]; /**< MP to MR translation table. */
+       struct ibv_cq *cq; /**< Completion queue. */
+       struct ibv_qp *qp; /**< Queue pair. */
+       uint32_t max_inline; /**< Max inline send size. */
+       unsigned int elts_n; /**< (*elts)[] length. */
+       struct txq_elt (*elts)[]; /**< Tx elements. */
+       unsigned int elts_head; /**< Current index in (*elts)[]. */
+       unsigned int elts_tail; /**< First element awaiting completion. */
+       unsigned int elts_comp; /**< Number of completion requests. */
+       unsigned int elts_comp_cd; /**< Countdown for next completion. */
+       unsigned int elts_comp_cd_init; /**< Initial value for countdown. */
+       struct mlx4_txq_stats stats; /**< Tx queue counters. */
+       unsigned int socket; /**< CPU socket ID for allocations. */
+};
+
+#endif /* MLX4_RXTX_H_ */