net/mlx5: rearrange creation of WQ and CQ object
[dpdk.git] / drivers / net / ark / ark_ethdev_tx.c
index 57841df..a0e35af 100644 (file)
@@ -1,34 +1,5 @@
-/*-
- * BSD LICENSE
- *
- * Copyright (c) 2015-2017 Atomic Rules LLC
- * All rights reserved.
- *
- * 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 copyright holder 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.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2015-2018 Atomic Rules LLC
  */
 
 #include <unistd.h>
 #define ARK_TX_META_OFFSET (RTE_PKTMBUF_HEADROOM - ARK_TX_META_SIZE)
 #define ARK_TX_MAX_NOCHAIN (RTE_MBUF_DEFAULT_DATAROOM)
 
+#ifndef RTE_LIBRTE_ARK_MIN_TX_PKTLEN
+#define ARK_MIN_TX_PKTLEN 0
+#else
+#define ARK_MIN_TX_PKTLEN RTE_LIBRTE_ARK_MIN_TX_PKTLEN
+#endif
 
 /* ************************************************************************* */
 struct ark_tx_queue {
@@ -71,7 +47,7 @@ struct ark_tx_queue {
        uint32_t pad[1];
 
        /* second cache line - fields only used in slow path */
-       MARKER cacheline1 __rte_cache_min_aligned;
+       RTE_MARKER cacheline1 __rte_cache_min_aligned;
        uint32_t cons_index;            /* hw is done, can be freed */
 } __rte_cache_aligned;
 
@@ -93,8 +69,8 @@ eth_ark_tx_meta_from_mbuf(struct ark_tx_meta *meta,
                          const struct rte_mbuf *mbuf,
                          uint8_t flags)
 {
-       meta->physaddr = rte_mbuf_data_dma_addr(mbuf);
-       meta->delta_ns = 0;
+       meta->physaddr = rte_mbuf_data_iova(mbuf);
+       meta->user1 = (uint32_t)mbuf->udata64;
        meta->data_len = rte_pktmbuf_data_len(mbuf);
        meta->flags = flags;
 }
@@ -120,6 +96,7 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
        uint32_t prod_index_limit;
        int stat;
        uint16_t nb;
+       const uint32_t min_pkt_len = ARK_MIN_TX_PKTLEN;
 
        queue = (struct ark_tx_queue *)vtxq;
 
@@ -133,27 +110,26 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
             ++nb) {
                mbuf = tx_pkts[nb];
 
-               if (ARK_TX_PAD_TO_60) {
-                       if (unlikely(rte_pktmbuf_pkt_len(mbuf) < 60)) {
-                               /* this packet even if it is small can be split,
-                                * be sure to add to the end mbuf
+               if (min_pkt_len &&
+                   unlikely(rte_pktmbuf_pkt_len(mbuf) < min_pkt_len)) {
+                       /* this packet even if it is small can be split,
+                        * be sure to add to the end mbuf
+                        */
+                       uint16_t to_add = min_pkt_len -
+                               rte_pktmbuf_pkt_len(mbuf);
+                       char *appended =
+                               rte_pktmbuf_append(mbuf, to_add);
+
+                       if (appended == 0) {
+                               /* This packet is in error,
+                                * we cannot send it so just
+                                * count it and delete it.
                                 */
-                               uint16_t to_add =
-                                       60 - rte_pktmbuf_pkt_len(mbuf);
-                               char *appended =
-                                       rte_pktmbuf_append(mbuf, to_add);
-
-                               if (appended == 0) {
-                                       /* This packet is in error,
-                                        * we cannot send it so just
-                                        * count it and delete it.
-                                        */
-                                       queue->tx_errors += 1;
-                                       rte_pktmbuf_free(mbuf);
-                                       continue;
-                               }
-                               memset(appended, 0, to_add);
+                               queue->tx_errors += 1;
+                               rte_pktmbuf_free(mbuf);
+                               continue;
                        }
+                       memset(appended, 0, to_add);
                }
 
                if (unlikely(mbuf->nb_segs != 1)) {
@@ -172,8 +148,8 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
                }
        }
 
-       if (ARK_TX_DEBUG && (nb != nb_pkts)) {
-               PMD_TX_LOG(DEBUG, "TX: Failure to send:"
+       if (ARK_DEBUG_CORE && nb != nb_pkts) {
+               ARK_PMD_LOG(DEBUG, "TX: Failure to send:"
                           " req: %" PRIU32
                           " sent: %" PRIU32
                           " prod: %" PRIU32
@@ -236,16 +212,14 @@ eth_ark_tx_queue_setup(struct rte_eth_dev *dev,
                       unsigned int socket_id,
                       const struct rte_eth_txconf *tx_conf __rte_unused)
 {
-       struct ark_adapter *ark = (struct ark_adapter *)dev->data->dev_private;
+       struct ark_adapter *ark = dev->data->dev_private;
        struct ark_tx_queue *queue;
        int status;
 
-       /* Future: divide the Q's evenly with multi-ports */
-       int port = dev->data->port_id;
-       int qidx = port + queue_idx;
+       int qidx = queue_idx;
 
        if (!rte_is_power_of_2(nb_desc)) {
-               PMD_DRV_LOG(ERR,
+               ARK_PMD_LOG(ERR,
                            "DPDK Arkville configuration queue size"
                            " must be power of two %u (%s)\n",
                            nb_desc, __func__);
@@ -258,7 +232,7 @@ eth_ark_tx_queue_setup(struct rte_eth_dev *dev,
                                   64,
                                   socket_id);
        if (queue == 0) {
-               PMD_DRV_LOG(ERR, "Failed to allocate tx "
+               ARK_PMD_LOG(ERR, "Failed to allocate tx "
                            "queue memory in %s\n",
                            __func__);
                return -ENOMEM;
@@ -283,7 +257,7 @@ eth_ark_tx_queue_setup(struct rte_eth_dev *dev,
                                   socket_id);
 
        if (queue->meta_q == 0 || queue->bufs == 0) {
-               PMD_DRV_LOG(ERR, "Failed to allocate "
+               ARK_PMD_LOG(ERR, "Failed to allocate "
                            "queue memory in %s\n", __func__);
                rte_free(queue->meta_q);
                rte_free(queue->bufs);
@@ -310,7 +284,7 @@ eth_ark_tx_queue_setup(struct rte_eth_dev *dev,
 static int
 eth_ark_tx_hw_queue_config(struct ark_tx_queue *queue)
 {
-       phys_addr_t queue_base, ring_base, cons_index_addr;
+       rte_iova_t queue_base, ring_base, cons_index_addr;
        uint32_t write_interval_ns;
 
        /* Verify HW -- MPU */