doc: support IPsec Multi-buffer lib v0.54
[dpdk.git] / drivers / net / dpaa / dpaa_ethdev.c
index 7b36cec..5f81968 100644 (file)
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: BSD-3-Clause
  *
  *   Copyright 2016 Freescale Semiconductor, Inc. All rights reserved.
- *   Copyright 2017 NXP
+ *   Copyright 2017-2019 NXP
  *
  */
 /* System headers */
@@ -56,7 +56,8 @@ static uint64_t dev_rx_offloads_nodis =
                DEV_RX_OFFLOAD_IPV4_CKSUM |
                DEV_RX_OFFLOAD_UDP_CKSUM |
                DEV_RX_OFFLOAD_TCP_CKSUM |
-               DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM;
+               DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
+               DEV_RX_OFFLOAD_RSS_HASH;
 
 /* Supported Tx offloads */
 static uint64_t dev_tx_offloads_sup =
@@ -173,7 +174,7 @@ dpaa_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
        }
 
        if (frame_size > RTE_ETHER_MAX_LEN)
-               dev->data->dev_conf.rxmode.offloads &=
+               dev->data->dev_conf.rxmode.offloads |=
                                                DEV_RX_OFFLOAD_JUMBO_FRAME;
        else
                dev->data->dev_conf.rxmode.offloads &=
@@ -335,7 +336,7 @@ static int dpaa_eth_dev_info(struct rte_eth_dev *dev,
 {
        struct dpaa_if *dpaa_intf = dev->data->dev_private;
 
-       PMD_INIT_FUNC_TRACE();
+       DPAA_PMD_DEBUG(": %s", dpaa_intf->name);
 
        dev_info->max_rx_queues = dpaa_intf->nb_rx_queues;
        dev_info->max_tx_queues = dpaa_intf->nb_tx_queues;
@@ -880,8 +881,8 @@ dpaa_dev_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id)
        PMD_INIT_FUNC_TRACE();
 
        if (qman_query_fq_frm_cnt(rxq, &frm_cnt) == 0) {
-               RTE_LOG(DEBUG, PMD, "RX frame count for q(%d) is %u\n",
-                       rx_queue_id, frm_cnt);
+               DPAA_PMD_DEBUG("RX frame count for q(%d) is %u",
+                              rx_queue_id, frm_cnt);
        }
        return frm_cnt;
 }
@@ -995,8 +996,7 @@ dpaa_dev_add_mac_addr(struct rte_eth_dev *dev,
        ret = fman_if_add_mac_addr(dpaa_intf->fif, addr->addr_bytes, index);
 
        if (ret)
-               RTE_LOG(ERR, PMD, "error: Adding the MAC ADDR failed:"
-                       " err = %d", ret);
+               DPAA_PMD_ERR("Adding the MAC ADDR failed: err = %d", ret);
        return 0;
 }
 
@@ -1022,11 +1022,45 @@ dpaa_dev_set_mac_addr(struct rte_eth_dev *dev,
 
        ret = fman_if_add_mac_addr(dpaa_intf->fif, addr->addr_bytes, 0);
        if (ret)
-               RTE_LOG(ERR, PMD, "error: Setting the MAC ADDR failed %d", ret);
+               DPAA_PMD_ERR("Setting the MAC ADDR failed %d", ret);
 
        return ret;
 }
 
+static int dpaa_dev_queue_intr_enable(struct rte_eth_dev *dev,
+                                     uint16_t queue_id)
+{
+       struct dpaa_if *dpaa_intf = dev->data->dev_private;
+       struct qman_fq *rxq = &dpaa_intf->rx_queues[queue_id];
+
+       if (!rxq->is_static)
+               return -EINVAL;
+
+       return qman_fq_portal_irqsource_add(rxq->qp, QM_PIRQ_DQRI);
+}
+
+static int dpaa_dev_queue_intr_disable(struct rte_eth_dev *dev,
+                                      uint16_t queue_id)
+{
+       struct dpaa_if *dpaa_intf = dev->data->dev_private;
+       struct qman_fq *rxq = &dpaa_intf->rx_queues[queue_id];
+       uint32_t temp;
+       ssize_t temp1;
+
+       if (!rxq->is_static)
+               return -EINVAL;
+
+       qman_fq_portal_irqsource_remove(rxq->qp, ~0);
+
+       temp1 = read(rxq->q_fd, &temp, sizeof(temp));
+       if (temp1 != sizeof(temp))
+               DPAA_EVENTDEV_ERR("irq read error");
+
+       qman_fq_portal_thread_irq(rxq->qp);
+
+       return 0;
+}
+
 static struct eth_dev_ops dpaa_devops = {
        .dev_configure            = dpaa_eth_dev_configure,
        .dev_start                = dpaa_eth_dev_start,
@@ -1064,6 +1098,9 @@ static struct eth_dev_ops dpaa_devops = {
        .mac_addr_set             = dpaa_dev_set_mac_addr,
 
        .fw_version_get           = dpaa_fw_version_get,
+
+       .rx_queue_intr_enable     = dpaa_dev_queue_intr_enable,
+       .rx_queue_intr_disable    = dpaa_dev_queue_intr_disable,
 };
 
 static bool
@@ -1149,8 +1186,6 @@ static int dpaa_rx_queue_init(struct qman_fq *fq, struct qman_cgr *cgr_rx,
                }
        };
 
-       PMD_INIT_FUNC_TRACE();
-
        if (fqid) {
                ret = qman_reserve_fqid(fqid);
                if (ret) {
@@ -1202,8 +1237,6 @@ static int dpaa_tx_queue_init(struct qman_fq *fq,
        struct qm_mcc_initfq opts = {0};
        int ret;
 
-       PMD_INIT_FUNC_TRACE();
-
        ret = qman_create_fq(0, QMAN_FQ_FLAG_DYNAMIC_FQID |
                             QMAN_FQ_FLAG_TO_DCPORTAL, fq);
        if (ret) {
@@ -1272,6 +1305,7 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev)
        struct fman_if *fman_intf;
        struct fman_if_bpool *bp, *tmp_bp;
        uint32_t cgrid[DPAA_MAX_NUM_PCD_QUEUES];
+       char eth_buf[RTE_ETHER_ADDR_FMT_SIZE];
 
        PMD_INIT_FUNC_TRACE();
 
@@ -1423,15 +1457,9 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev)
 
        /* copy the primary mac address */
        rte_ether_addr_copy(&fman_intf->mac_addr, &eth_dev->data->mac_addrs[0]);
+       rte_ether_format_addr(eth_buf, sizeof(eth_buf), &fman_intf->mac_addr);
 
-       RTE_LOG(INFO, PMD, "net: dpaa: %s: %02x:%02x:%02x:%02x:%02x:%02x\n",
-               dpaa_device->name,
-               fman_intf->mac_addr.addr_bytes[0],
-               fman_intf->mac_addr.addr_bytes[1],
-               fman_intf->mac_addr.addr_bytes[2],
-               fman_intf->mac_addr.addr_bytes[3],
-               fman_intf->mac_addr.addr_bytes[4],
-               fman_intf->mac_addr.addr_bytes[5]);
+       DPAA_PMD_INFO("net: dpaa: %s: %s", dpaa_device->name, eth_buf);
 
        /* Disable RX mode */
        fman_if_discard_rx_errors(fman_intf);
@@ -1543,23 +1571,8 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv __rte_unused,
        }
 
        if (!is_global_init && (rte_eal_process_type() == RTE_PROC_PRIMARY)) {
-               /* One time load of Qman/Bman drivers */
-               ret = qman_global_init();
-               if (ret) {
-                       DPAA_PMD_ERR("QMAN initialization failed: %d",
-                                    ret);
-                       return ret;
-               }
-               ret = bman_global_init();
-               if (ret) {
-                       DPAA_PMD_ERR("BMAN initialization failed: %d",
-                                    ret);
-                       return ret;
-               }
-
                if (access("/tmp/fmc.bin", F_OK) == -1) {
-                       RTE_LOG(INFO, PMD,
-                               "* FMC not configured.Enabling default mode\n");
+                       DPAA_PMD_INFO("* FMC not configured.Enabling default mode");
                        default_q = 1;
                }