net/thunderx: query supported packet types
authorJerin Jacob <jerin.jacob@caviumnetworks.com>
Fri, 17 Jun 2016 13:29:48 +0000 (18:59 +0530)
committerBruce Richardson <bruce.richardson@intel.com>
Mon, 20 Jun 2016 15:21:54 +0000 (17:21 +0200)
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Signed-off-by: Maciej Czekaj <maciej.czekaj@caviumnetworks.com>
Signed-off-by: Kamil Rytarowski <kamil.rytarowski@caviumnetworks.com>
Signed-off-by: Zyta Szpak <zyta.szpak@semihalf.com>
Signed-off-by: Slawomir Rosek <slawomir.rosek@semihalf.com>
Signed-off-by: Radoslaw Biernacki <rad@semihalf.com>
drivers/net/thunderx/nicvf_ethdev.c

index c727ce0..46f0d7b 100644 (file)
@@ -260,6 +260,45 @@ nicvf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        stats->oerrors = port_stats.tx_drops;
 }
 
+static const uint32_t *
+nicvf_dev_supported_ptypes_get(struct rte_eth_dev *dev)
+{
+       size_t copied;
+       static uint32_t ptypes[32];
+       struct nicvf *nic = nicvf_pmd_priv(dev);
+       static const uint32_t ptypes_pass1[] = {
+               RTE_PTYPE_L3_IPV4,
+               RTE_PTYPE_L3_IPV4_EXT,
+               RTE_PTYPE_L3_IPV6,
+               RTE_PTYPE_L3_IPV6_EXT,
+               RTE_PTYPE_L4_TCP,
+               RTE_PTYPE_L4_UDP,
+               RTE_PTYPE_L4_FRAG,
+       };
+       static const uint32_t ptypes_pass2[] = {
+               RTE_PTYPE_TUNNEL_GRE,
+               RTE_PTYPE_TUNNEL_GENEVE,
+               RTE_PTYPE_TUNNEL_VXLAN,
+               RTE_PTYPE_TUNNEL_NVGRE,
+       };
+       static const uint32_t ptypes_end = RTE_PTYPE_UNKNOWN;
+
+       copied = sizeof(ptypes_pass1);
+       memcpy(ptypes, ptypes_pass1, copied);
+       if (nicvf_hw_version(nic) == NICVF_PASS2) {
+               memcpy((char *)ptypes + copied, ptypes_pass2,
+                       sizeof(ptypes_pass2));
+               copied += sizeof(ptypes_pass2);
+       }
+
+       memcpy((char *)ptypes + copied, &ptypes_end, sizeof(ptypes_end));
+       if (dev->rx_pkt_burst == nicvf_recv_pkts ||
+               dev->rx_pkt_burst == nicvf_recv_pkts_multiseg)
+               return ptypes;
+
+       return NULL;
+}
+
 static void
 nicvf_dev_stats_reset(struct rte_eth_dev *dev)
 {
@@ -888,6 +927,7 @@ static const struct eth_dev_ops nicvf_eth_dev_ops = {
        .stats_reset              = nicvf_dev_stats_reset,
        .promiscuous_enable       = nicvf_dev_promisc_enable,
        .dev_infos_get            = nicvf_dev_info_get,
+       .dev_supported_ptypes_get = nicvf_dev_supported_ptypes_get,
        .mtu_set                  = nicvf_dev_set_mtu,
        .reta_update              = nicvf_dev_reta_update,
        .reta_query               = nicvf_dev_reta_query,