net: add rte prefix to ether structures
[dpdk.git] / drivers / net / thunderx / nicvf_ethdev.c
index eba05fd..ec20879 100644 (file)
@@ -52,6 +52,8 @@ static void nicvf_dev_stop(struct rte_eth_dev *dev);
 static void nicvf_dev_stop_cleanup(struct rte_eth_dev *dev, bool cleanup);
 static void nicvf_vf_stop(struct rte_eth_dev *dev, struct nicvf *nic,
                          bool cleanup);
+static int nicvf_vlan_offload_config(struct rte_eth_dev *dev, int mask);
+static int nicvf_vlan_offload_set(struct rte_eth_dev *dev, int mask);
 
 RTE_INIT(nicvf_init_log)
 {
@@ -916,16 +918,21 @@ nicvf_set_rx_function(struct rte_eth_dev *dev)
 {
        struct nicvf *nic = nicvf_pmd_priv(dev);
 
-       const eth_rx_burst_t rx_burst_func[2][2] = {
-               /* [NORMAL/SCATTER] [NO_CKSUM/CKSUM] */
-               [0][0] = nicvf_recv_pkts_no_offload,
-               [0][1] = nicvf_recv_pkts_cksum,
-               [1][0] = nicvf_recv_pkts_multiseg_no_offload,
-               [1][1] = nicvf_recv_pkts_multiseg_cksum,
+       const eth_rx_burst_t rx_burst_func[2][2][2] = {
+       /* [NORMAL/SCATTER] [CKSUM/NO_CKSUM] [VLAN_STRIP/NO_VLAN_STRIP] */
+               [0][0][0] = nicvf_recv_pkts_no_offload,
+               [0][0][1] = nicvf_recv_pkts_vlan_strip,
+               [0][1][0] = nicvf_recv_pkts_cksum,
+               [0][1][1] = nicvf_recv_pkts_cksum_vlan_strip,
+               [1][0][0] = nicvf_recv_pkts_multiseg_no_offload,
+               [1][0][1] = nicvf_recv_pkts_multiseg_vlan_strip,
+               [1][1][0] = nicvf_recv_pkts_multiseg_cksum,
+               [1][1][1] = nicvf_recv_pkts_multiseg_cksum_vlan_strip,
        };
 
        dev->rx_pkt_burst =
-               rx_burst_func[dev->data->scattered_rx][nic->offload_cksum];
+               rx_burst_func[dev->data->scattered_rx]
+                       [nic->offload_cksum][nic->vlan_strip];
 }
 
 static int
@@ -1424,7 +1431,6 @@ nicvf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
        dev_info->default_rxconf = (struct rte_eth_rxconf) {
                .rx_free_thresh = NICVF_DEFAULT_RX_FREE_THRESH,
                .rx_drop_en = 0,
-               .offloads = DEV_RX_OFFLOAD_CRC_STRIP,
        };
 
        dev_info->default_txconf = (struct rte_eth_txconf) {
@@ -1473,7 +1479,7 @@ nicvf_vf_start(struct rte_eth_dev *dev, struct nicvf *nic, uint32_t rbdrsz)
        struct rte_mbuf *mbuf;
        uint16_t rx_start, rx_end;
        uint16_t tx_start, tx_end;
-       bool vlan_strip;
+       int mask;
 
        PMD_INIT_FUNC_TRACE();
 
@@ -1594,9 +1600,9 @@ nicvf_vf_start(struct rte_eth_dev *dev, struct nicvf *nic, uint32_t rbdrsz)
                     nic->rbdr->tail, nb_rbdr_desc, nic->vf_id);
 
        /* Configure VLAN Strip */
-       vlan_strip = !!(dev->data->dev_conf.rxmode.offloads &
-                       DEV_RX_OFFLOAD_VLAN_STRIP);
-       nicvf_vlan_hw_strip(nic, vlan_strip);
+       mask = ETH_VLAN_STRIP_MASK | ETH_VLAN_FILTER_MASK |
+               ETH_VLAN_EXTEND_MASK;
+       ret = nicvf_vlan_offload_config(dev, mask);
 
        /* Based on the packet type(IPv4 or IPv6), the nicvf HW aligns L3 data
         * to the 64bit memory address.
@@ -1909,14 +1915,6 @@ nicvf_dev_configure(struct rte_eth_dev *dev)
                return -EINVAL;
        }
 
-       /* KEEP_CRC offload flag is not supported by PMD
-        * can remove the below block when DEV_RX_OFFLOAD_CRC_STRIP removed
-        */
-       if (rte_eth_dev_must_keep_crc(rxmode->offloads)) {
-               PMD_INIT_LOG(NOTICE, "Can't disable hw crc strip");
-               rxmode->offloads |= DEV_RX_OFFLOAD_CRC_STRIP;
-       }
-
        if (txmode->mq_mode) {
                PMD_INIT_LOG(INFO, "Tx mq_mode DCB or VMDq not supported");
                return -EINVAL;
@@ -1990,6 +1988,7 @@ static const struct eth_dev_ops nicvf_eth_dev_ops = {
        .dev_infos_get            = nicvf_dev_info_get,
        .dev_supported_ptypes_get = nicvf_dev_supported_ptypes_get,
        .mtu_set                  = nicvf_dev_set_mtu,
+       .vlan_offload_set         = nicvf_vlan_offload_set,
        .reta_update              = nicvf_dev_reta_update,
        .reta_query               = nicvf_dev_reta_query,
        .rss_hash_update          = nicvf_dev_rss_hash_update,
@@ -2006,6 +2005,30 @@ static const struct eth_dev_ops nicvf_eth_dev_ops = {
        .get_reg                  = nicvf_dev_get_regs,
 };
 
+static int
+nicvf_vlan_offload_config(struct rte_eth_dev *dev, int mask)
+{
+       struct rte_eth_rxmode *rxmode;
+       struct nicvf *nic = nicvf_pmd_priv(dev);
+       rxmode = &dev->data->dev_conf.rxmode;
+       if (mask & ETH_VLAN_STRIP_MASK) {
+               if (rxmode->offloads & DEV_RX_OFFLOAD_VLAN_STRIP)
+                       nicvf_vlan_hw_strip(nic, true);
+               else
+                       nicvf_vlan_hw_strip(nic, false);
+       }
+
+       return 0;
+}
+
+static int
+nicvf_vlan_offload_set(struct rte_eth_dev *dev, int mask)
+{
+       nicvf_vlan_offload_config(dev, mask);
+
+       return 0;
+}
+
 static inline int
 nicvf_set_first_skip(struct rte_eth_dev *dev)
 {
@@ -2156,10 +2179,10 @@ nicvf_eth_dev_init(struct rte_eth_dev *eth_dev)
                ret = -ENOMEM;
                goto alarm_fail;
        }
-       if (is_zero_ether_addr((struct ether_addr *)nic->mac_addr))
+       if (is_zero_ether_addr((struct rte_ether_addr *)nic->mac_addr))
                eth_random_addr(&nic->mac_addr[0]);
 
-       ether_addr_copy((struct ether_addr *)nic->mac_addr,
+       ether_addr_copy((struct rte_ether_addr *)nic->mac_addr,
                        &eth_dev->data->mac_addrs[0]);
 
        ret = nicvf_mbox_set_mac_addr(nic, nic->mac_addr);