X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fdpaa2%2Fbase%2Fdpaa2_hw_dpni.c;h=641e7027f12e9ddd121923cfe8ba8a70d7082f4e;hb=b37ed6def36798342172f298516c5fc6d0d8e070;hp=87c893db5161aa9c4fa71862063f3eed0c13d7e6;hpb=df96fd0d73955bdc7ca3909e772ff2ad903249c6;p=dpdk.git diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c index 87c893db51..641e7027f1 100644 --- a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. - * Copyright 2016-2019 NXP + * Copyright 2016-2021 NXP * */ @@ -41,6 +41,17 @@ rte_pmd_dpaa2_set_custom_hash(uint16_t port_id, void *p_params; int ret, tc_index = 0; + if (!rte_eth_dev_is_valid_port(port_id)) { + DPAA2_PMD_WARN("Invalid port id %u", port_id); + return -EINVAL; + } + + if (strcmp(eth_dev->device->driver->name, + RTE_STR(NET_DPAA2_PMD_DRIVER_NAME))) { + DPAA2_PMD_WARN("Not a valid dpaa2 port"); + return -EINVAL; + } + p_params = rte_zmalloc( NULL, DIST_PARAM_IOVA_SIZE, RTE_CACHE_LINE_SIZE); if (!p_params) { @@ -194,14 +205,16 @@ dpaa2_distset_to_dpkg_profile_cfg( uint64_t req_dist_set, struct dpkg_profile_cfg *kg_cfg) { - uint32_t loop = 0, i = 0, dist_field = 0; + uint32_t loop = 0, i = 0; + uint64_t dist_field = 0; int l2_configured = 0, l3_configured = 0; int l4_configured = 0, sctp_configured = 0; + int mpls_configured = 0; memset(kg_cfg, 0, sizeof(struct dpkg_profile_cfg)); while (req_dist_set) { if (req_dist_set % 2 != 0) { - dist_field = 1U << loop; + dist_field = 1ULL << loop; switch (dist_field) { case ETH_RSS_L2_PAYLOAD: @@ -220,6 +233,43 @@ dpaa2_distset_to_dpkg_profile_cfg( i++; break; + case ETH_RSS_MPLS: + + if (mpls_configured) + break; + mpls_configured = 1; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_MPLS; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_MPLS_MPLSL_1; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_MPLS; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_MPLS_MPLSL_2; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_MPLS; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_MPLS_MPLSL_N; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + break; + case ETH_RSS_IPV4: case ETH_RSS_FRAG_IPV4: case ETH_RSS_NONFRAG_IPV4_OTHER: @@ -326,7 +376,7 @@ dpaa2_distset_to_dpkg_profile_cfg( default: DPAA2_PMD_WARN( - "Unsupported flow dist option %x", + "unsupported flow dist option 0x%" PRIx64, dist_field); return -EINVAL; }