ethdev: change promiscuous callbacks to return status
[dpdk.git] / drivers / net / enetc / enetc_ethdev.c
index ffae8ae..1ec66d0 100644 (file)
@@ -144,7 +144,7 @@ enetc_hardware_init(struct enetc_eth_hw *hw)
        return 0;
 }
 
-static void
+static int
 enetc_dev_infos_get(struct rte_eth_dev *dev __rte_unused,
                    struct rte_eth_dev_info *dev_info)
 {
@@ -163,8 +163,13 @@ enetc_dev_infos_get(struct rte_eth_dev *dev __rte_unused,
        dev_info->max_tx_queues = MAX_TX_RINGS;
        dev_info->max_rx_pktlen = ENETC_MAC_MAXFRM_SIZE;
        dev_info->rx_offload_capa =
-               (DEV_RX_OFFLOAD_KEEP_CRC |
+               (DEV_RX_OFFLOAD_IPV4_CKSUM |
+                DEV_RX_OFFLOAD_UDP_CKSUM |
+                DEV_RX_OFFLOAD_TCP_CKSUM |
+                DEV_RX_OFFLOAD_KEEP_CRC |
                 DEV_RX_OFFLOAD_JUMBO_FRAME);
+
+       return 0;
 }
 
 static int
@@ -414,7 +419,7 @@ enetc_rx_queue_setup(struct rte_eth_dev *dev,
        }
 
        rx_ring->crc_len = (uint8_t)((rx_offloads & DEV_RX_OFFLOAD_KEEP_CRC) ?
-                                    ETHER_CRC_LEN : 0);
+                                    RTE_ETHER_CRC_LEN : 0);
 
        return 0;
 fail:
@@ -518,7 +523,7 @@ enetc_dev_close(struct rte_eth_dev *dev)
        dev->data->nb_tx_queues = 0;
 }
 
-static void
+static int
 enetc_promiscuous_enable(struct rte_eth_dev *dev)
 {
        struct enetc_eth_hw *hw =
@@ -532,9 +537,11 @@ enetc_promiscuous_enable(struct rte_eth_dev *dev)
        psipmr |= ENETC_PSIPMR_SET_UP(0) | ENETC_PSIPMR_SET_MP(0);
 
        enetc_port_wr(enetc_hw, ENETC_PSIPMR, psipmr);
+
+       return 0;
 }
 
-static void
+static int
 enetc_promiscuous_disable(struct rte_eth_dev *dev)
 {
        struct enetc_eth_hw *hw =
@@ -550,6 +557,8 @@ enetc_promiscuous_disable(struct rte_eth_dev *dev)
                psipmr &= (~ENETC_PSIPMR_SET_MP(0));
 
        enetc_port_wr(enetc_hw, ENETC_PSIPMR, psipmr);
+
+       return 0;
 }
 
 static void
@@ -592,7 +601,7 @@ enetc_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
        struct enetc_eth_hw *hw =
                ENETC_DEV_PRIVATE_TO_HW(dev->data->dev_private);
        struct enetc_hw *enetc_hw = &hw->hw;
-       uint32_t frame_size = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
+       uint32_t frame_size = mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
        /* check that mtu is within the allowed range */
        if (mtu < ENETC_MAC_MINFRM_SIZE || frame_size > ENETC_MAC_MAXFRM_SIZE)
@@ -609,7 +618,7 @@ enetc_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
                return -EINVAL;
        }
 
-       if (frame_size > ETHER_MAX_LEN)
+       if (frame_size > RTE_ETHER_MAX_LEN)
                dev->data->dev_conf.rxmode.offloads &=
                                                DEV_RX_OFFLOAD_JUMBO_FRAME;
        else
@@ -636,6 +645,7 @@ enetc_dev_configure(struct rte_eth_dev *dev)
        struct enetc_hw *enetc_hw = &hw->hw;
        struct rte_eth_conf *eth_conf = &dev->data->dev_conf;
        uint64_t rx_offloads = eth_conf->rxmode.offloads;
+       uint32_t checksum = L3_CKSUM | L4_CKSUM;
 
        PMD_INIT_FUNC_TRACE();
 
@@ -650,7 +660,8 @@ enetc_dev_configure(struct rte_eth_dev *dev)
                              ENETC_MAC_MAXFRM_SIZE);
                enetc_port_wr(enetc_hw, ENETC_PTXMBAR,
                              2 * ENETC_MAC_MAXFRM_SIZE);
-               dev->data->mtu = ETHER_MAX_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN;
+               dev->data->mtu = RTE_ETHER_MAX_LEN - RTE_ETHER_HDR_LEN -
+                       RTE_ETHER_CRC_LEN;
        }
 
        if (rx_offloads & DEV_RX_OFFLOAD_KEEP_CRC) {
@@ -661,6 +672,15 @@ enetc_dev_configure(struct rte_eth_dev *dev)
                enetc_port_wr(enetc_hw, ENETC_PM0_CMD_CFG, config);
        }
 
+       if (rx_offloads & DEV_RX_OFFLOAD_IPV4_CKSUM)
+               checksum &= ~L3_CKSUM;
+
+       if (rx_offloads & (DEV_RX_OFFLOAD_UDP_CKSUM | DEV_RX_OFFLOAD_TCP_CKSUM))
+               checksum &= ~L4_CKSUM;
+
+       enetc_port_wr(enetc_hw, ENETC_PAR_PORT_CFG, checksum);
+
+
        return 0;
 }
 
@@ -817,23 +837,25 @@ enetc_dev_init(struct rte_eth_dev *eth_dev)
        }
 
        /* Allocate memory for storing MAC addresses */
-       eth_dev->data->mac_addrs = rte_zmalloc("enetc_eth", ETHER_ADDR_LEN, 0);
+       eth_dev->data->mac_addrs = rte_zmalloc("enetc_eth",
+                                       RTE_ETHER_ADDR_LEN, 0);
        if (!eth_dev->data->mac_addrs) {
                ENETC_PMD_ERR("Failed to allocate %d bytes needed to "
                              "store MAC addresses",
-                             ETHER_ADDR_LEN * 1);
+                             RTE_ETHER_ADDR_LEN * 1);
                error = -ENOMEM;
                return -1;
        }
 
        /* Copy the permanent MAC address */
-       ether_addr_copy((struct ether_addr *)hw->mac.addr,
+       rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.addr,
                        &eth_dev->data->mac_addrs[0]);
 
        /* Set MTU */
        enetc_port_wr(&hw->hw, ENETC_PM0_MAXFRM,
-                     ENETC_SET_MAXFRM(ETHER_MAX_LEN));
-       eth_dev->data->mtu = ETHER_MAX_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN;
+                     ENETC_SET_MAXFRM(RTE_ETHER_MAX_LEN));
+       eth_dev->data->mtu = RTE_ETHER_MAX_LEN - RTE_ETHER_HDR_LEN -
+               RTE_ETHER_CRC_LEN;
 
        ENETC_PMD_DEBUG("port_id %d vendorID=0x%x deviceID=0x%x",
                        eth_dev->data->port_id, pci_dev->id.vendor_id,