get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/81267/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 81267,
    "url": "http://patches.dpdk.org/api/patches/81267/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1603030152-13451-10-git-send-email-arybchenko@solarflare.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1603030152-13451-10-git-send-email-arybchenko@solarflare.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1603030152-13451-10-git-send-email-arybchenko@solarflare.com",
    "date": "2020-10-18T14:09:06",
    "name": "[09/14] ethdev: remove legacy HASH filter type support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "37ee3fff81f2e0e3fa0ea602f85772dc0f0e5023",
    "submitter": {
        "id": 607,
        "url": "http://patches.dpdk.org/api/people/607/?format=api",
        "name": "Andrew Rybchenko",
        "email": "arybchenko@solarflare.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1603030152-13451-10-git-send-email-arybchenko@solarflare.com/mbox/",
    "series": [
        {
            "id": 13082,
            "url": "http://patches.dpdk.org/api/series/13082/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=13082",
            "date": "2020-10-18T14:08:57",
            "name": "ethdev: remove legacy filter API",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/13082/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/81267/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/81267/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 464D5A04B0;\n\tSun, 18 Oct 2020 16:13:35 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 91C91E268;\n\tSun, 18 Oct 2020 16:09:45 +0200 (CEST)",
            "from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com\n [67.231.154.164]) by dpdk.org (Postfix) with ESMTP id 42539C8B2\n for <dev@dpdk.org>; Sun, 18 Oct 2020 16:09:30 +0200 (CEST)",
            "from mx1-us1.ppe-hosted.com (unknown [10.110.50.150])\n by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id\n D94652004F; Sun, 18 Oct 2020 14:09:28 +0000 (UTC)",
            "from us4-mdac16-44.at1.mdlocal (unknown [10.110.48.15])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id D778C800A3;\n Sun, 18 Oct 2020 14:09:28 +0000 (UTC)",
            "from mx1-us1.ppe-hosted.com (unknown [10.110.50.12])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n D6098100052;\n Sun, 18 Oct 2020 14:09:27 +0000 (UTC)",
            "from webmail.solarflare.com (uk.solarflare.com [193.34.186.16])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))\n (No client certificate requested)\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n 9C75D4005E;\n Sun, 18 Oct 2020 14:09:27 +0000 (UTC)",
            "from ukex01.SolarFlarecom.com (10.17.10.4) by\n ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id\n 15.0.1497.2; Sun, 18 Oct 2020 15:09:21 +0100",
            "from opal.uk.solarflarecom.com (10.17.10.1) by\n ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id\n 15.0.1497.2 via Frontend Transport; Sun, 18 Oct 2020 15:09:21 +0100",
            "from ukv-loginhost.uk.solarflarecom.com\n (ukv-loginhost.uk.solarflarecom.com [10.17.10.39])\n by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id 09IE9L7f002055;\n Sun, 18 Oct 2020 15:09:21 +0100",
            "from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1])\n by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id AF1F51613A9;\n Sun, 18 Oct 2020 15:09:21 +0100 (BST)"
        ],
        "X-Virus-Scanned": "Proofpoint Essentials engine",
        "From": "Andrew Rybchenko <arybchenko@solarflare.com>",
        "To": "Wenzhuo Lu <wenzhuo.lu@intel.com>, Beilei Xing <beilei.xing@intel.com>,\n Bernard Iremonger <bernard.iremonger@intel.com>, Ray Kinsella\n <mdr@ashroe.eu>, Neil Horman <nhorman@tuxdriver.com>, Jeff Guo\n <jia.guo@intel.com>, Rasesh Mody <rmody@marvell.com>, Shahed Shaikh\n <shshaikh@marvell.com>, Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,\n Thomas Monjalon <thomas@monjalon.net>, Ferruh Yigit <ferruh.yigit@intel.com>",
        "CC": "<dev@dpdk.org>",
        "Date": "Sun, 18 Oct 2020 15:09:06 +0100",
        "Message-ID": "<1603030152-13451-10-git-send-email-arybchenko@solarflare.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1603030152-13451-1-git-send-email-arybchenko@solarflare.com>",
        "References": "<1603030152-13451-1-git-send-email-arybchenko@solarflare.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-TM-AS-Product-Ver": "SMEX-12.5.0.1300-8.6.1012-25732.003",
        "X-TM-AS-Result": "No-9.081500-8.000000-10",
        "X-TMASE-MatchedRID": "FRs2vsuWi3BqUF8PySBXcqiUivh0j2PvY/L2/AZJAWSYkF7ZtFfCU4wW\n IRmLVWq5NNN0dk/lb45w5T4Iaj538mJZXQNDzktSGjzBgnFZvQ6nU+NxqV3DDTygo3tTd/ax1KG\n 8hyHCM65oj7nB4dv1WHQsWqqg7/Rh3WMxx3WjnrQqsMfMfrOZRbpxXRtX1WLzOdl/GMFVBFtSYP\n /YanAIfsopD30c+vdoT2xAtcKLZ59WeM2C2IocFE/+sbQfCqQYEjZJ2wHBh6rSvnSpS9gcQGjzC\n 5xMWsA17EfuvO/3+PIkC5AZv2h0wKiOHwlYzcGc6GyDR2ZB+cai8D/o42y/ShLf1vz7ecPH5etK\n 57ziLXiKWP5eRxzbsFSCmfT2v3teDD20H1S9BwiHZXNSWjgdU308MksGfqucR2YNIFh+clGGgE0\n qc4kdzffNndQFlnWv2hom6EaP1XcZagUy2as2F0RWpBb0G+2p+x+d6uPTzEMdXtyyzrIOt9lQtU\n Fiiij64uXUY9oObKfYlAhrLW5bRkhxZDLrVyH4+CjwEqX1p7nAmOfzKotTohS+f3d7BiKCPNePQ\n kIvZQsURB7MkIPtx17Qr3uDL0DCOpveZA740U79xyC38S1f/d740tDvjd+1gHhfJtGVOYSahugK\n owZiNZHTN7qI0mcePAbkc1sBhfqAXaIZA5v/TXT7rnt3EYkYAEfHuzEnemabKItl61J/yVE3WP5\n nX017SSluJg5SbDF5zdAzex5xZpL8Jtrc2BxZAqE2qJGUg41Rfkn/wq9e00Rd5RXGOeuWD6d8jE\n xNVjuUTGVAhB5EbQ==",
        "X-TM-AS-User-Approved-Sender": "Yes",
        "X-TM-AS-User-Blocked-Sender": "No",
        "X-TMASE-Result": "10--9.081500-8.000000",
        "X-TMASE-Version": "SMEX-12.5.0.1300-8.6.1012-25732.003",
        "X-MDID": "1603030168-S9yn0wmTwoXm",
        "X-PPE-DISP": "1603030168;S9yn0wmTwoXm",
        "Subject": "[dpdk-dev] [PATCH 09/14] ethdev: remove legacy HASH filter type\n\tsupport",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "RTE flow API should be used for filtering.\n\nPreserve RTE_ETH_FILTER_HASH since it is used in drivers\ninternally in RTE flow API support.\n\nSigned-off-by: Andrew Rybchenko <arybchenko@solarflare.com>\n---\n app/test-pmd/cmdline.c               | 434 ---------------------------\n doc/guides/rel_notes/deprecation.rst |   4 +-\n drivers/net/i40e/i40e_ethdev.c       | 268 -----------------\n drivers/net/qede/qede_filter.c       |   1 -\n drivers/net/sfc/sfc_ethdev.c         |   3 -\n lib/librte_ethdev/rte_eth_ctrl.h     |  57 ----\n 6 files changed, 2 insertions(+), 765 deletions(-)",
    "diff": "diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex f7169c7b9e..713e1cad83 100644\n--- a/app/test-pmd/cmdline.c\n+++ b/app/test-pmd/cmdline.c\n@@ -1048,34 +1048,6 @@ static void cmd_help_long_parsed(void *parsed_result,\n \t\t\t\" (raw|l2|l3|l4) (config)\\n\"\n \t\t\t\"    Configure flex payload selection.\\n\\n\"\n \n-\t\t\t\"get_sym_hash_ena_per_port (port_id)\\n\"\n-\t\t\t\"    get symmetric hash enable configuration per port.\\n\\n\"\n-\n-\t\t\t\"set_sym_hash_ena_per_port (port_id) (enable|disable)\\n\"\n-\t\t\t\"    set symmetric hash enable configuration per port\"\n-\t\t\t\" to enable or disable.\\n\\n\"\n-\n-\t\t\t\"get_hash_global_config (port_id)\\n\"\n-\t\t\t\"    Get the global configurations of hash filters.\\n\\n\"\n-\n-\t\t\t\"set_hash_global_config (port_id) (toeplitz|simple_xor|symmetric_toeplitz|default)\"\n-\t\t\t\" (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|\"\n-\t\t\t\"ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload)\"\n-\t\t\t\" (enable|disable)\\n\"\n-\t\t\t\"    Set the global configurations of hash filters.\\n\\n\"\n-\n-\t\t\t\"set_hash_input_set (port_id) (ipv4|ipv4-frag|\"\n-\t\t\t\"ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|\"\n-\t\t\t\"ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|\"\n-\t\t\t\"l2_payload|<flowtype_id>) (ovlan|ivlan|src-ipv4|dst-ipv4|\"\n-\t\t\t\"src-ipv6|dst-ipv6|ipv4-tos|ipv4-proto|ipv6-tc|\"\n-\t\t\t\"ipv6-next-header|udp-src-port|udp-dst-port|\"\n-\t\t\t\"tcp-src-port|tcp-dst-port|sctp-src-port|\"\n-\t\t\t\"sctp-dst-port|sctp-veri-tag|udp-key|gre-key|fld-1st|\"\n-\t\t\t\"fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th|\"\n-\t\t\t\"fld-8th|none) (select|add)\\n\"\n-\t\t\t\"    Set the input set for hash.\\n\\n\"\n-\n \t\t\t\"set_fdir_input_set (port_id) \"\n \t\t\t\"(ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|\"\n \t\t\t\"ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|\"\n@@ -11503,343 +11475,6 @@ cmdline_parse_inst_t cmd_set_flow_director_flex_payload = {\n extern cmdline_parse_inst_t cmd_flow;\n \n /* *** Classification Filters Control *** */\n-/* *** Get symmetric hash enable per port *** */\n-struct cmd_get_sym_hash_ena_per_port_result {\n-\tcmdline_fixed_string_t get_sym_hash_ena_per_port;\n-\tportid_t port_id;\n-};\n-\n-static void\n-cmd_get_sym_hash_per_port_parsed(void *parsed_result,\n-\t\t\t\t __rte_unused struct cmdline *cl,\n-\t\t\t\t __rte_unused void *data)\n-{\n-\tstruct cmd_get_sym_hash_ena_per_port_result *res = parsed_result;\n-\tstruct rte_eth_hash_filter_info info;\n-\tint ret;\n-\n-\tif (rte_eth_dev_filter_supported(res->port_id,\n-\t\t\t\tRTE_ETH_FILTER_HASH) < 0) {\n-\t\tprintf(\"RTE_ETH_FILTER_HASH not supported on port: %d\\n\",\n-\t\t\t\t\t\t\tres->port_id);\n-\t\treturn;\n-\t}\n-\n-\tmemset(&info, 0, sizeof(info));\n-\tinfo.info_type = RTE_ETH_HASH_FILTER_SYM_HASH_ENA_PER_PORT;\n-\tret = rte_eth_dev_filter_ctrl(res->port_id, RTE_ETH_FILTER_HASH,\n-\t\t\t\t\t\tRTE_ETH_FILTER_GET, &info);\n-\n-\tif (ret < 0) {\n-\t\tprintf(\"Cannot get symmetric hash enable per port \"\n-\t\t\t\t\t\"on port %u\\n\", res->port_id);\n-\t\treturn;\n-\t}\n-\n-\tprintf(\"Symmetric hash is %s on port %u\\n\", info.info.enable ?\n-\t\t\t\t\"enabled\" : \"disabled\", res->port_id);\n-}\n-\n-cmdline_parse_token_string_t cmd_get_sym_hash_ena_per_port_all =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_get_sym_hash_ena_per_port_result,\n-\t\tget_sym_hash_ena_per_port, \"get_sym_hash_ena_per_port\");\n-cmdline_parse_token_num_t cmd_get_sym_hash_ena_per_port_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_get_sym_hash_ena_per_port_result,\n-\t\tport_id, UINT16);\n-\n-cmdline_parse_inst_t cmd_get_sym_hash_ena_per_port = {\n-\t.f = cmd_get_sym_hash_per_port_parsed,\n-\t.data = NULL,\n-\t.help_str = \"get_sym_hash_ena_per_port <port_id>\",\n-\t.tokens = {\n-\t\t(void *)&cmd_get_sym_hash_ena_per_port_all,\n-\t\t(void *)&cmd_get_sym_hash_ena_per_port_port_id,\n-\t\tNULL,\n-\t},\n-};\n-\n-/* *** Set symmetric hash enable per port *** */\n-struct cmd_set_sym_hash_ena_per_port_result {\n-\tcmdline_fixed_string_t set_sym_hash_ena_per_port;\n-\tcmdline_fixed_string_t enable;\n-\tportid_t port_id;\n-};\n-\n-static void\n-cmd_set_sym_hash_per_port_parsed(void *parsed_result,\n-\t\t\t\t __rte_unused struct cmdline *cl,\n-\t\t\t\t __rte_unused void *data)\n-{\n-\tstruct cmd_set_sym_hash_ena_per_port_result *res = parsed_result;\n-\tstruct rte_eth_hash_filter_info info;\n-\tint ret;\n-\n-\tif (rte_eth_dev_filter_supported(res->port_id,\n-\t\t\t\tRTE_ETH_FILTER_HASH) < 0) {\n-\t\tprintf(\"RTE_ETH_FILTER_HASH not supported on port: %d\\n\",\n-\t\t\t\t\t\t\tres->port_id);\n-\t\treturn;\n-\t}\n-\n-\tmemset(&info, 0, sizeof(info));\n-\tinfo.info_type = RTE_ETH_HASH_FILTER_SYM_HASH_ENA_PER_PORT;\n-\tif (!strcmp(res->enable, \"enable\"))\n-\t\tinfo.info.enable = 1;\n-\tret = rte_eth_dev_filter_ctrl(res->port_id, RTE_ETH_FILTER_HASH,\n-\t\t\t\t\tRTE_ETH_FILTER_SET, &info);\n-\tif (ret < 0) {\n-\t\tprintf(\"Cannot set symmetric hash enable per port on \"\n-\t\t\t\t\t\"port %u\\n\", res->port_id);\n-\t\treturn;\n-\t}\n-\tprintf(\"Symmetric hash has been set to %s on port %u\\n\",\n-\t\t\t\t\tres->enable, res->port_id);\n-}\n-\n-cmdline_parse_token_string_t cmd_set_sym_hash_ena_per_port_all =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_sym_hash_ena_per_port_result,\n-\t\tset_sym_hash_ena_per_port, \"set_sym_hash_ena_per_port\");\n-cmdline_parse_token_num_t cmd_set_sym_hash_ena_per_port_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_set_sym_hash_ena_per_port_result,\n-\t\tport_id, UINT16);\n-cmdline_parse_token_string_t cmd_set_sym_hash_ena_per_port_enable =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_sym_hash_ena_per_port_result,\n-\t\tenable, \"enable#disable\");\n-\n-cmdline_parse_inst_t cmd_set_sym_hash_ena_per_port = {\n-\t.f = cmd_set_sym_hash_per_port_parsed,\n-\t.data = NULL,\n-\t.help_str = \"set_sym_hash_ena_per_port <port_id> enable|disable\",\n-\t.tokens = {\n-\t\t(void *)&cmd_set_sym_hash_ena_per_port_all,\n-\t\t(void *)&cmd_set_sym_hash_ena_per_port_port_id,\n-\t\t(void *)&cmd_set_sym_hash_ena_per_port_enable,\n-\t\tNULL,\n-\t},\n-};\n-\n-/* Get global config of hash function */\n-struct cmd_get_hash_global_config_result {\n-\tcmdline_fixed_string_t get_hash_global_config;\n-\tportid_t port_id;\n-};\n-\n-static char *\n-flowtype_to_str(uint16_t ftype)\n-{\n-\tuint16_t i;\n-\tstatic struct {\n-\t\tchar str[16];\n-\t\tuint16_t ftype;\n-\t} ftype_table[] = {\n-\t\t{\"ipv4\", RTE_ETH_FLOW_IPV4},\n-\t\t{\"ipv4-frag\", RTE_ETH_FLOW_FRAG_IPV4},\n-\t\t{\"ipv4-tcp\", RTE_ETH_FLOW_NONFRAG_IPV4_TCP},\n-\t\t{\"ipv4-udp\", RTE_ETH_FLOW_NONFRAG_IPV4_UDP},\n-\t\t{\"ipv4-sctp\", RTE_ETH_FLOW_NONFRAG_IPV4_SCTP},\n-\t\t{\"ipv4-other\", RTE_ETH_FLOW_NONFRAG_IPV4_OTHER},\n-\t\t{\"ipv6\", RTE_ETH_FLOW_IPV6},\n-\t\t{\"ipv6-frag\", RTE_ETH_FLOW_FRAG_IPV6},\n-\t\t{\"ipv6-tcp\", RTE_ETH_FLOW_NONFRAG_IPV6_TCP},\n-\t\t{\"ipv6-udp\", RTE_ETH_FLOW_NONFRAG_IPV6_UDP},\n-\t\t{\"ipv6-sctp\", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP},\n-\t\t{\"ipv6-other\", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER},\n-\t\t{\"l2_payload\", RTE_ETH_FLOW_L2_PAYLOAD},\n-\t\t{\"port\", RTE_ETH_FLOW_PORT},\n-\t\t{\"vxlan\", RTE_ETH_FLOW_VXLAN},\n-\t\t{\"geneve\", RTE_ETH_FLOW_GENEVE},\n-\t\t{\"nvgre\", RTE_ETH_FLOW_NVGRE},\n-\t\t{\"vxlan-gpe\", RTE_ETH_FLOW_VXLAN_GPE},\n-\t};\n-\n-\tfor (i = 0; i < RTE_DIM(ftype_table); i++) {\n-\t\tif (ftype_table[i].ftype == ftype)\n-\t\t\treturn ftype_table[i].str;\n-\t}\n-\n-\treturn NULL;\n-}\n-\n-static void\n-cmd_get_hash_global_config_parsed(void *parsed_result,\n-\t\t\t\t  __rte_unused struct cmdline *cl,\n-\t\t\t\t  __rte_unused void *data)\n-{\n-\tstruct cmd_get_hash_global_config_result *res = parsed_result;\n-\tstruct rte_eth_hash_filter_info info;\n-\tuint32_t idx, offset;\n-\tuint16_t i;\n-\tchar *str;\n-\tint ret;\n-\n-\tif (rte_eth_dev_filter_supported(res->port_id,\n-\t\t\tRTE_ETH_FILTER_HASH) < 0) {\n-\t\tprintf(\"RTE_ETH_FILTER_HASH not supported on port %d\\n\",\n-\t\t\t\t\t\t\tres->port_id);\n-\t\treturn;\n-\t}\n-\n-\tmemset(&info, 0, sizeof(info));\n-\tinfo.info_type = RTE_ETH_HASH_FILTER_GLOBAL_CONFIG;\n-\tret = rte_eth_dev_filter_ctrl(res->port_id, RTE_ETH_FILTER_HASH,\n-\t\t\t\t\tRTE_ETH_FILTER_GET, &info);\n-\tif (ret < 0) {\n-\t\tprintf(\"Cannot get hash global configurations by port %d\\n\",\n-\t\t\t\t\t\t\tres->port_id);\n-\t\treturn;\n-\t}\n-\n-\tswitch (info.info.global_conf.hash_func) {\n-\tcase RTE_ETH_HASH_FUNCTION_TOEPLITZ:\n-\t\tprintf(\"Hash function is Toeplitz\\n\");\n-\t\tbreak;\n-\tcase RTE_ETH_HASH_FUNCTION_SIMPLE_XOR:\n-\t\tprintf(\"Hash function is Simple XOR\\n\");\n-\t\tbreak;\n-\tcase RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ:\n-\t\tprintf(\"Hash function is Symmetric Toeplitz\\n\");\n-\t\tbreak;\n-\tdefault:\n-\t\tprintf(\"Unknown hash function\\n\");\n-\t\tbreak;\n-\t}\n-\n-\tfor (i = 0; i < RTE_ETH_FLOW_MAX; i++) {\n-\t\tidx = i / UINT64_BIT;\n-\t\toffset = i % UINT64_BIT;\n-\t\tif (!(info.info.global_conf.valid_bit_mask[idx] &\n-\t\t\t\t\t\t(1ULL << offset)))\n-\t\t\tcontinue;\n-\t\tstr = flowtype_to_str(i);\n-\t\tif (!str)\n-\t\t\tcontinue;\n-\t\tprintf(\"Symmetric hash is %s globally for flow type %s \"\n-\t\t\t\t\t\t\t\"by port %d\\n\",\n-\t\t\t((info.info.global_conf.sym_hash_enable_mask[idx] &\n-\t\t\t(1ULL << offset)) ? \"enabled\" : \"disabled\"), str,\n-\t\t\t\t\t\t\tres->port_id);\n-\t}\n-}\n-\n-cmdline_parse_token_string_t cmd_get_hash_global_config_all =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_get_hash_global_config_result,\n-\t\tget_hash_global_config, \"get_hash_global_config\");\n-cmdline_parse_token_num_t cmd_get_hash_global_config_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_get_hash_global_config_result,\n-\t\tport_id, UINT16);\n-\n-cmdline_parse_inst_t cmd_get_hash_global_config = {\n-\t.f = cmd_get_hash_global_config_parsed,\n-\t.data = NULL,\n-\t.help_str = \"get_hash_global_config <port_id>\",\n-\t.tokens = {\n-\t\t(void *)&cmd_get_hash_global_config_all,\n-\t\t(void *)&cmd_get_hash_global_config_port_id,\n-\t\tNULL,\n-\t},\n-};\n-\n-/* Set global config of hash function */\n-struct cmd_set_hash_global_config_result {\n-\tcmdline_fixed_string_t set_hash_global_config;\n-\tportid_t port_id;\n-\tcmdline_fixed_string_t hash_func;\n-\tcmdline_fixed_string_t flow_type;\n-\tcmdline_fixed_string_t enable;\n-};\n-\n-static void\n-cmd_set_hash_global_config_parsed(void *parsed_result,\n-\t\t\t\t  __rte_unused struct cmdline *cl,\n-\t\t\t\t  __rte_unused void *data)\n-{\n-\tstruct cmd_set_hash_global_config_result *res = parsed_result;\n-\tstruct rte_eth_hash_filter_info info;\n-\tuint32_t ftype, idx, offset;\n-\tint ret;\n-\n-\tif (rte_eth_dev_filter_supported(res->port_id,\n-\t\t\t\tRTE_ETH_FILTER_HASH) < 0) {\n-\t\tprintf(\"RTE_ETH_FILTER_HASH not supported on port %d\\n\",\n-\t\t\t\t\t\t\tres->port_id);\n-\t\treturn;\n-\t}\n-\tmemset(&info, 0, sizeof(info));\n-\tinfo.info_type = RTE_ETH_HASH_FILTER_GLOBAL_CONFIG;\n-\tif (!strcmp(res->hash_func, \"toeplitz\"))\n-\t\tinfo.info.global_conf.hash_func =\n-\t\t\tRTE_ETH_HASH_FUNCTION_TOEPLITZ;\n-\telse if (!strcmp(res->hash_func, \"simple_xor\"))\n-\t\tinfo.info.global_conf.hash_func =\n-\t\t\tRTE_ETH_HASH_FUNCTION_SIMPLE_XOR;\n-\telse if (!strcmp(res->hash_func, \"symmetric_toeplitz\"))\n-\t\tinfo.info.global_conf.hash_func =\n-\t\t\tRTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ;\n-\telse if (!strcmp(res->hash_func, \"default\"))\n-\t\tinfo.info.global_conf.hash_func =\n-\t\t\tRTE_ETH_HASH_FUNCTION_DEFAULT;\n-\n-\tftype = str2flowtype(res->flow_type);\n-\tidx = ftype / UINT64_BIT;\n-\toffset = ftype % UINT64_BIT;\n-\tinfo.info.global_conf.valid_bit_mask[idx] |= (1ULL << offset);\n-\tif (!strcmp(res->enable, \"enable\"))\n-\t\tinfo.info.global_conf.sym_hash_enable_mask[idx] |=\n-\t\t\t\t\t\t(1ULL << offset);\n-\tret = rte_eth_dev_filter_ctrl(res->port_id, RTE_ETH_FILTER_HASH,\n-\t\t\t\t\tRTE_ETH_FILTER_SET, &info);\n-\tif (ret < 0)\n-\t\tprintf(\"Cannot set global hash configurations by port %d\\n\",\n-\t\t\t\t\t\t\tres->port_id);\n-\telse\n-\t\tprintf(\"Global hash configurations have been set \"\n-\t\t\t\"successfully by port %d\\n\", res->port_id);\n-}\n-\n-cmdline_parse_token_string_t cmd_set_hash_global_config_all =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_hash_global_config_result,\n-\t\tset_hash_global_config, \"set_hash_global_config\");\n-cmdline_parse_token_num_t cmd_set_hash_global_config_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_set_hash_global_config_result,\n-\t\tport_id, UINT16);\n-cmdline_parse_token_string_t cmd_set_hash_global_config_hash_func =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_hash_global_config_result,\n-\t\thash_func, \"toeplitz#simple_xor#symmetric_toeplitz#default\");\n-cmdline_parse_token_string_t cmd_set_hash_global_config_flow_type =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_hash_global_config_result,\n-\t\tflow_type,\n-\t\t\"ipv4#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#ipv4-other#ipv6#\"\n-\t\t\"ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#ipv6-other#l2_payload\");\n-cmdline_parse_token_string_t cmd_set_hash_global_config_enable =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_hash_global_config_result,\n-\t\tenable, \"enable#disable\");\n-\n-cmdline_parse_inst_t cmd_set_hash_global_config = {\n-\t.f = cmd_set_hash_global_config_parsed,\n-\t.data = NULL,\n-\t.help_str = \"set_hash_global_config <port_id> \"\n-\t\t\"toeplitz|simple_xor|symmetric_toeplitz|default \"\n-\t\t\"ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|\"\n-\t\t\"ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|\"\n-\t\t\"l2_payload enable|disable\",\n-\t.tokens = {\n-\t\t(void *)&cmd_set_hash_global_config_all,\n-\t\t(void *)&cmd_set_hash_global_config_port_id,\n-\t\t(void *)&cmd_set_hash_global_config_hash_func,\n-\t\t(void *)&cmd_set_hash_global_config_flow_type,\n-\t\t(void *)&cmd_set_hash_global_config_enable,\n-\t\tNULL,\n-\t},\n-};\n-\n-/* Set hash input set */\n-struct cmd_set_hash_input_set_result {\n-\tcmdline_fixed_string_t set_hash_input_set;\n-\tportid_t port_id;\n-\tcmdline_fixed_string_t flow_type;\n-\tcmdline_fixed_string_t inset_field;\n-\tcmdline_fixed_string_t select;\n-};\n \n static enum rte_eth_input_set_field\n str2inset(char *string)\n@@ -11891,70 +11526,6 @@ str2inset(char *string)\n \treturn RTE_ETH_INPUT_SET_UNKNOWN;\n }\n \n-static void\n-cmd_set_hash_input_set_parsed(void *parsed_result,\n-\t\t\t      __rte_unused struct cmdline *cl,\n-\t\t\t      __rte_unused void *data)\n-{\n-\tstruct cmd_set_hash_input_set_result *res = parsed_result;\n-\tstruct rte_eth_hash_filter_info info;\n-\n-\tmemset(&info, 0, sizeof(info));\n-\tinfo.info_type = RTE_ETH_HASH_FILTER_INPUT_SET_SELECT;\n-\tinfo.info.input_set_conf.flow_type = str2flowtype(res->flow_type);\n-\tinfo.info.input_set_conf.field[0] = str2inset(res->inset_field);\n-\tinfo.info.input_set_conf.inset_size = 1;\n-\tif (!strcmp(res->select, \"select\"))\n-\t\tinfo.info.input_set_conf.op = RTE_ETH_INPUT_SET_SELECT;\n-\telse if (!strcmp(res->select, \"add\"))\n-\t\tinfo.info.input_set_conf.op = RTE_ETH_INPUT_SET_ADD;\n-\trte_eth_dev_filter_ctrl(res->port_id, RTE_ETH_FILTER_HASH,\n-\t\t\t\tRTE_ETH_FILTER_SET, &info);\n-}\n-\n-cmdline_parse_token_string_t cmd_set_hash_input_set_cmd =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_hash_input_set_result,\n-\t\tset_hash_input_set, \"set_hash_input_set\");\n-cmdline_parse_token_num_t cmd_set_hash_input_set_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_set_hash_input_set_result,\n-\t\tport_id, UINT16);\n-cmdline_parse_token_string_t cmd_set_hash_input_set_flow_type =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_hash_input_set_result,\n-\t\tflow_type, NULL);\n-cmdline_parse_token_string_t cmd_set_hash_input_set_field =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_hash_input_set_result,\n-\t\tinset_field,\n-\t\t\"ovlan#ivlan#src-ipv4#dst-ipv4#src-ipv6#dst-ipv6#\"\n-\t\t\"ipv4-tos#ipv4-proto#ipv6-tc#ipv6-next-header#udp-src-port#\"\n-\t\t\"udp-dst-port#tcp-src-port#tcp-dst-port#sctp-src-port#\"\n-\t\t\"sctp-dst-port#sctp-veri-tag#udp-key#gre-key#fld-1st#\"\n-\t\t\"fld-2nd#fld-3rd#fld-4th#fld-5th#fld-6th#fld-7th#\"\n-\t\t\"fld-8th#none\");\n-cmdline_parse_token_string_t cmd_set_hash_input_set_select =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_set_hash_input_set_result,\n-\t\tselect, \"select#add\");\n-\n-cmdline_parse_inst_t cmd_set_hash_input_set = {\n-\t.f = cmd_set_hash_input_set_parsed,\n-\t.data = NULL,\n-\t.help_str = \"set_hash_input_set <port_id> \"\n-\t\"ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|\"\n-\t\"ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload|<flowtype_id> \"\n-\t\"ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos|ipv4-proto|\"\n-\t\"ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port|tcp-src-port|\"\n-\t\"tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag|udp-key|\"\n-\t\"gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|\"\n-\t\"fld-7th|fld-8th|none select|add\",\n-\t.tokens = {\n-\t\t(void *)&cmd_set_hash_input_set_cmd,\n-\t\t(void *)&cmd_set_hash_input_set_port_id,\n-\t\t(void *)&cmd_set_hash_input_set_flow_type,\n-\t\t(void *)&cmd_set_hash_input_set_field,\n-\t\t(void *)&cmd_set_hash_input_set_select,\n-\t\tNULL,\n-\t},\n-};\n-\n /* Set flow director input set */\n struct cmd_set_fdir_input_set_result {\n \tcmdline_fixed_string_t set_fdir_input_set;\n@@ -19026,11 +18597,6 @@ cmdline_parse_ctx_t main_ctx[] = {\n \t(cmdline_parse_inst_t *)&cmd_set_flow_director_tunnel_mask,\n \t(cmdline_parse_inst_t *)&cmd_set_flow_director_flex_mask,\n \t(cmdline_parse_inst_t *)&cmd_set_flow_director_flex_payload,\n-\t(cmdline_parse_inst_t *)&cmd_get_sym_hash_ena_per_port,\n-\t(cmdline_parse_inst_t *)&cmd_set_sym_hash_ena_per_port,\n-\t(cmdline_parse_inst_t *)&cmd_get_hash_global_config,\n-\t(cmdline_parse_inst_t *)&cmd_set_hash_global_config,\n-\t(cmdline_parse_inst_t *)&cmd_set_hash_input_set,\n \t(cmdline_parse_inst_t *)&cmd_set_fdir_input_set,\n \t(cmdline_parse_inst_t *)&cmd_flow,\n \t(cmdline_parse_inst_t *)&cmd_show_port_meter_cap,\ndiff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst\nindex a807cb9ad9..e245d04bf4 100644\n--- a/doc/guides/rel_notes/deprecation.rst\n+++ b/doc/guides/rel_notes/deprecation.rst\n@@ -108,8 +108,8 @@ Deprecation Notices\n \n * ethdev: the legacy filter API, including\n   ``rte_eth_dev_filter_supported()``, ``rte_eth_dev_filter_ctrl()`` as well\n-  as filter types FDIR,\n-  HASH and L2_TUNNEL, is superseded by the generic flow API (rte_flow) in\n+  as filter types FDIR\n+  and L2_TUNNEL, is superseded by the generic flow API (rte_flow) in\n   PMDs that implement the latter.\n   The legacy API will be removed in DPDK 20.11.\n \ndiff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c\nindex 2badd024f1..cd57126aa5 100644\n--- a/drivers/net/i40e/i40e_ethdev.c\n+++ b/drivers/net/i40e/i40e_ethdev.c\n@@ -8950,15 +8950,6 @@ i40e_filter_ctrl_global_config(struct rte_eth_dev *dev,\n \treturn ret;\n }\n \n-/* Get the symmetric hash enable configurations per port */\n-static void\n-i40e_get_symmetric_hash_enable_per_port(struct i40e_hw *hw, uint8_t *enable)\n-{\n-\tuint32_t reg = i40e_read_rx_ctl(hw, I40E_PRTQF_CTL_0);\n-\n-\t*enable = reg & I40E_PRTQF_CTL_0_HSYM_ENA_MASK ? 1 : 0;\n-}\n-\n /* Set the symmetric hash enable configurations per port */\n static void\n i40e_set_symmetric_hash_enable_per_port(struct i40e_hw *hw, uint8_t enable)\n@@ -8984,170 +8975,6 @@ i40e_set_symmetric_hash_enable_per_port(struct i40e_hw *hw, uint8_t enable)\n \tI40E_WRITE_FLUSH(hw);\n }\n \n-/*\n- * Get global configurations of hash function type and symmetric hash enable\n- * per flow type (pctype). Note that global configuration means it affects all\n- * the ports on the same NIC.\n- */\n-static int\n-i40e_get_hash_filter_global_config(struct i40e_hw *hw,\n-\t\t\t\t   struct rte_eth_hash_global_conf *g_cfg)\n-{\n-\tstruct i40e_adapter *adapter = (struct i40e_adapter *)hw->back;\n-\tuint32_t reg;\n-\tuint16_t i, j;\n-\n-\tmemset(g_cfg, 0, sizeof(*g_cfg));\n-\treg = i40e_read_rx_ctl(hw, I40E_GLQF_CTL);\n-\tif (reg & I40E_GLQF_CTL_HTOEP_MASK)\n-\t\tg_cfg->hash_func = RTE_ETH_HASH_FUNCTION_TOEPLITZ;\n-\telse\n-\t\tg_cfg->hash_func = RTE_ETH_HASH_FUNCTION_SIMPLE_XOR;\n-\tPMD_DRV_LOG(DEBUG, \"Hash function is %s\",\n-\t\t(reg & I40E_GLQF_CTL_HTOEP_MASK) ? \"Toeplitz\" : \"Simple XOR\");\n-\n-\t/*\n-\t * As i40e supports less than 64 flow types, only first 64 bits need to\n-\t * be checked.\n-\t */\n-\tfor (i = 1; i < RTE_SYM_HASH_MASK_ARRAY_SIZE; i++) {\n-\t\tg_cfg->valid_bit_mask[i] = 0ULL;\n-\t\tg_cfg->sym_hash_enable_mask[i] = 0ULL;\n-\t}\n-\n-\tg_cfg->valid_bit_mask[0] = adapter->flow_types_mask;\n-\n-\tfor (i = RTE_ETH_FLOW_UNKNOWN + 1; i < UINT64_BIT; i++) {\n-\t\tif (!adapter->pctypes_tbl[i])\n-\t\t\tcontinue;\n-\t\tfor (j = I40E_FILTER_PCTYPE_INVALID + 1;\n-\t\t     j < I40E_FILTER_PCTYPE_MAX; j++) {\n-\t\t\tif (adapter->pctypes_tbl[i] & (1ULL << j)) {\n-\t\t\t\treg = i40e_read_rx_ctl(hw, I40E_GLQF_HSYM(j));\n-\t\t\t\tif (reg & I40E_GLQF_HSYM_SYMH_ENA_MASK) {\n-\t\t\t\t\tg_cfg->sym_hash_enable_mask[0] |=\n-\t\t\t\t\t\t\t\t(1ULL << i);\n-\t\t\t\t}\n-\t\t\t}\n-\t\t}\n-\t}\n-\n-\treturn 0;\n-}\n-\n-static int\n-i40e_hash_global_config_check(const struct i40e_adapter *adapter,\n-\t\t\t      const struct rte_eth_hash_global_conf *g_cfg)\n-{\n-\tuint32_t i;\n-\tuint64_t mask0, i40e_mask = adapter->flow_types_mask;\n-\n-\tif (g_cfg->hash_func != RTE_ETH_HASH_FUNCTION_TOEPLITZ &&\n-\t\tg_cfg->hash_func != RTE_ETH_HASH_FUNCTION_SIMPLE_XOR &&\n-\t\tg_cfg->hash_func != RTE_ETH_HASH_FUNCTION_DEFAULT) {\n-\t\tPMD_DRV_LOG(ERR, \"Unsupported hash function type %d\",\n-\t\t\t\t\t\tg_cfg->hash_func);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\t/*\n-\t * As i40e supports less than 64 flow types, only first 64 bits need to\n-\t * be checked.\n-\t */\n-\tmask0 = g_cfg->valid_bit_mask[0];\n-\tfor (i = 0; i < RTE_SYM_HASH_MASK_ARRAY_SIZE; i++) {\n-\t\tif (i == 0) {\n-\t\t\t/* Check if any unsupported flow type configured */\n-\t\t\tif ((mask0 | i40e_mask) ^ i40e_mask)\n-\t\t\t\tgoto mask_err;\n-\t\t} else {\n-\t\t\tif (g_cfg->valid_bit_mask[i])\n-\t\t\t\tgoto mask_err;\n-\t\t}\n-\t}\n-\n-\treturn 0;\n-\n-mask_err:\n-\tPMD_DRV_LOG(ERR, \"i40e unsupported flow type bit(s) configured\");\n-\n-\treturn -EINVAL;\n-}\n-\n-/*\n- * Set global configurations of hash function type and symmetric hash enable\n- * per flow type (pctype). Note any modifying global configuration will affect\n- * all the ports on the same NIC.\n- */\n-static int\n-i40e_set_hash_filter_global_config(struct i40e_hw *hw,\n-\t\t\t\t   struct rte_eth_hash_global_conf *g_cfg)\n-{\n-\tstruct i40e_adapter *adapter = (struct i40e_adapter *)hw->back;\n-\tstruct i40e_pf *pf = &((struct i40e_adapter *)hw->back)->pf;\n-\tint ret;\n-\tuint16_t i, j;\n-\tuint32_t reg;\n-\tuint64_t mask0 = g_cfg->valid_bit_mask[0] & adapter->flow_types_mask;\n-\n-\tif (pf->support_multi_driver) {\n-\t\tPMD_DRV_LOG(ERR, \"Hash global configuration is not supported.\");\n-\t\treturn -ENOTSUP;\n-\t}\n-\n-\t/* Check the input parameters */\n-\tret = i40e_hash_global_config_check(adapter, g_cfg);\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\t/*\n-\t * As i40e supports less than 64 flow types, only first 64 bits need to\n-\t * be configured.\n-\t */\n-\tfor (i = RTE_ETH_FLOW_UNKNOWN + 1; mask0 && i < UINT64_BIT; i++) {\n-\t\tif (mask0 & (1UL << i)) {\n-\t\t\treg = (g_cfg->sym_hash_enable_mask[0] & (1ULL << i)) ?\n-\t\t\t\t\tI40E_GLQF_HSYM_SYMH_ENA_MASK : 0;\n-\n-\t\t\tfor (j = I40E_FILTER_PCTYPE_INVALID + 1;\n-\t\t\t     j < I40E_FILTER_PCTYPE_MAX; j++) {\n-\t\t\t\tif (adapter->pctypes_tbl[i] & (1ULL << j))\n-\t\t\t\t\ti40e_write_global_rx_ctl(hw,\n-\t\t\t\t\t\t\t  I40E_GLQF_HSYM(j),\n-\t\t\t\t\t\t\t  reg);\n-\t\t\t}\n-\t\t}\n-\t}\n-\n-\treg = i40e_read_rx_ctl(hw, I40E_GLQF_CTL);\n-\tif (g_cfg->hash_func == RTE_ETH_HASH_FUNCTION_TOEPLITZ) {\n-\t\t/* Toeplitz */\n-\t\tif (reg & I40E_GLQF_CTL_HTOEP_MASK) {\n-\t\t\tPMD_DRV_LOG(DEBUG,\n-\t\t\t\t\"Hash function already set to Toeplitz\");\n-\t\t\tgoto out;\n-\t\t}\n-\t\treg |= I40E_GLQF_CTL_HTOEP_MASK;\n-\t} else if (g_cfg->hash_func == RTE_ETH_HASH_FUNCTION_SIMPLE_XOR) {\n-\t\t/* Simple XOR */\n-\t\tif (!(reg & I40E_GLQF_CTL_HTOEP_MASK)) {\n-\t\t\tPMD_DRV_LOG(DEBUG,\n-\t\t\t\t\"Hash function already set to Simple XOR\");\n-\t\t\tgoto out;\n-\t\t}\n-\t\treg &= ~I40E_GLQF_CTL_HTOEP_MASK;\n-\t} else\n-\t\t/* Use the default, and keep it as it is */\n-\t\tgoto out;\n-\n-\ti40e_write_global_rx_ctl(hw, I40E_GLQF_CTL, reg);\n-\n-out:\n-\tI40E_WRITE_FLUSH(hw);\n-\n-\treturn 0;\n-}\n-\n /**\n  * Valid input sets for hash and flow director filters per PCTYPE\n  */\n@@ -9982,98 +9809,6 @@ i40e_fdir_filter_inset_select(struct i40e_pf *pf,\n \treturn 0;\n }\n \n-static int\n-i40e_hash_filter_get(struct i40e_hw *hw, struct rte_eth_hash_filter_info *info)\n-{\n-\tint ret = 0;\n-\n-\tif (!hw || !info) {\n-\t\tPMD_DRV_LOG(ERR, \"Invalid pointer\");\n-\t\treturn -EFAULT;\n-\t}\n-\n-\tswitch (info->info_type) {\n-\tcase RTE_ETH_HASH_FILTER_SYM_HASH_ENA_PER_PORT:\n-\t\ti40e_get_symmetric_hash_enable_per_port(hw,\n-\t\t\t\t\t&(info->info.enable));\n-\t\tbreak;\n-\tcase RTE_ETH_HASH_FILTER_GLOBAL_CONFIG:\n-\t\tret = i40e_get_hash_filter_global_config(hw,\n-\t\t\t\t&(info->info.global_conf));\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"Hash filter info type (%d) not supported\",\n-\t\t\t\t\t\t\tinfo->info_type);\n-\t\tret = -EINVAL;\n-\t\tbreak;\n-\t}\n-\n-\treturn ret;\n-}\n-\n-static int\n-i40e_hash_filter_set(struct i40e_hw *hw, struct rte_eth_hash_filter_info *info)\n-{\n-\tint ret = 0;\n-\n-\tif (!hw || !info) {\n-\t\tPMD_DRV_LOG(ERR, \"Invalid pointer\");\n-\t\treturn -EFAULT;\n-\t}\n-\n-\tswitch (info->info_type) {\n-\tcase RTE_ETH_HASH_FILTER_SYM_HASH_ENA_PER_PORT:\n-\t\ti40e_set_symmetric_hash_enable_per_port(hw, info->info.enable);\n-\t\tbreak;\n-\tcase RTE_ETH_HASH_FILTER_GLOBAL_CONFIG:\n-\t\tret = i40e_set_hash_filter_global_config(hw,\n-\t\t\t\t&(info->info.global_conf));\n-\t\tbreak;\n-\tcase RTE_ETH_HASH_FILTER_INPUT_SET_SELECT:\n-\t\tret = i40e_hash_filter_inset_select(hw,\n-\t\t\t\t\t       &(info->info.input_set_conf));\n-\t\tbreak;\n-\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"Hash filter info type (%d) not supported\",\n-\t\t\t\t\t\t\tinfo->info_type);\n-\t\tret = -EINVAL;\n-\t\tbreak;\n-\t}\n-\n-\treturn ret;\n-}\n-\n-/* Operations for hash function */\n-static int\n-i40e_hash_filter_ctrl(struct rte_eth_dev *dev,\n-\t\t      enum rte_filter_op filter_op,\n-\t\t      void *arg)\n-{\n-\tstruct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n-\tint ret = 0;\n-\n-\tswitch (filter_op) {\n-\tcase RTE_ETH_FILTER_NOP:\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_GET:\n-\t\tret = i40e_hash_filter_get(hw,\n-\t\t\t(struct rte_eth_hash_filter_info *)arg);\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_SET:\n-\t\tret = i40e_hash_filter_set(hw,\n-\t\t\t(struct rte_eth_hash_filter_info *)arg);\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_DRV_LOG(WARNING, \"Filter operation (%d) not supported\",\n-\t\t\t\t\t\t\t\tfilter_op);\n-\t\tret = -ENOTSUP;\n-\t\tbreak;\n-\t}\n-\n-\treturn ret;\n-}\n-\n /* Convert ethertype filter structure */\n static int\n i40e_ethertype_filter_convert(const struct rte_eth_ethertype_filter *input,\n@@ -10255,9 +9990,6 @@ i40e_dev_filter_ctrl(struct rte_eth_dev *dev,\n \t\t/* For global configuration */\n \t\tret = i40e_filter_ctrl_global_config(dev, filter_op, arg);\n \t\tbreak;\n-\tcase RTE_ETH_FILTER_HASH:\n-\t\tret = i40e_hash_filter_ctrl(dev, filter_op, arg);\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_FDIR:\n \t\tret = i40e_fdir_ctrl_func(dev, filter_op, arg);\n \t\tbreak;\ndiff --git a/drivers/net/qede/qede_filter.c b/drivers/net/qede/qede_filter.c\nindex ba4e4d9e16..283e7322cb 100644\n--- a/drivers/net/qede/qede_filter.c\n+++ b/drivers/net/qede/qede_filter.c\n@@ -1241,7 +1241,6 @@ int qede_dev_filter_ctrl(struct rte_eth_dev *eth_dev,\n \n \t\t*(const void **)arg = &qede_flow_ops;\n \t\treturn 0;\n-\tcase RTE_ETH_FILTER_HASH:\n \tcase RTE_ETH_FILTER_L2_TUNNEL:\n \tcase RTE_ETH_FILTER_MAX:\n \tdefault:\ndiff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c\nindex 51d33f3710..c47f282450 100644\n--- a/drivers/net/sfc/sfc_ethdev.c\n+++ b/drivers/net/sfc/sfc_ethdev.c\n@@ -1751,9 +1751,6 @@ sfc_dev_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_type filter_type,\n \tcase RTE_ETH_FILTER_FDIR:\n \t\tsfc_err(sa, \"Flow Director filters not supported\");\n \t\tbreak;\n-\tcase RTE_ETH_FILTER_HASH:\n-\t\tsfc_err(sa, \"Hash filters not supported\");\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_GENERIC:\n \t\tif (filter_op != RTE_ETH_FILTER_GET) {\n \t\t\trc = EINVAL;\ndiff --git a/lib/librte_ethdev/rte_eth_ctrl.h b/lib/librte_ethdev/rte_eth_ctrl.h\nindex b4cc163e3e..4c9bd9b0fa 100644\n--- a/lib/librte_ethdev/rte_eth_ctrl.h\n+++ b/lib/librte_ethdev/rte_eth_ctrl.h\n@@ -616,63 +616,6 @@ struct rte_eth_fdir_filter_info {\n \t} info;\n };\n \n-/**\n- * Hash filter information types.\n- * - RTE_ETH_HASH_FILTER_SYM_HASH_ENA_PER_PORT is for getting/setting the\n- *   information/configuration of 'symmetric hash enable' per port.\n- * - RTE_ETH_HASH_FILTER_GLOBAL_CONFIG is for getting/setting the global\n- *   configurations of hash filters. Those global configurations are valid\n- *   for all ports of the same NIC.\n- * - RTE_ETH_HASH_FILTER_INPUT_SET_SELECT is for setting the global\n- *   hash input set fields\n- */\n-enum rte_eth_hash_filter_info_type {\n-\tRTE_ETH_HASH_FILTER_INFO_TYPE_UNKNOWN = 0,\n-\t/** Symmetric hash enable per port */\n-\tRTE_ETH_HASH_FILTER_SYM_HASH_ENA_PER_PORT,\n-\t/** Configure globally for hash filter */\n-\tRTE_ETH_HASH_FILTER_GLOBAL_CONFIG,\n-\t/** Global Hash filter input set configuration */\n-\tRTE_ETH_HASH_FILTER_INPUT_SET_SELECT,\n-\tRTE_ETH_HASH_FILTER_INFO_TYPE_MAX,\n-};\n-\n-#define RTE_SYM_HASH_MASK_ARRAY_SIZE \\\n-\t(RTE_ALIGN(RTE_ETH_FLOW_MAX, UINT64_BIT)/UINT64_BIT)\n-/**\n- * A structure used to set or get global hash function configurations which\n- * include symmetric hash enable per flow type and hash function type.\n- * Each bit in sym_hash_enable_mask[] indicates if the symmetric hash of the\n- * corresponding flow type is enabled or not.\n- * Each bit in valid_bit_mask[] indicates if the corresponding bit in\n- * sym_hash_enable_mask[] is valid or not. For the configurations gotten, it\n- * also means if the flow type is supported by hardware or not.\n- */\n-struct rte_eth_hash_global_conf {\n-\tenum rte_eth_hash_function hash_func; /**< Hash function type */\n-\t/** Bit mask for symmetric hash enable per flow type */\n-\tuint64_t sym_hash_enable_mask[RTE_SYM_HASH_MASK_ARRAY_SIZE];\n-\t/** Bit mask indicates if the corresponding bit is valid */\n-\tuint64_t valid_bit_mask[RTE_SYM_HASH_MASK_ARRAY_SIZE];\n-};\n-\n-/**\n- * A structure used to set or get hash filter information, to support filter\n- * type of 'RTE_ETH_FILTER_HASH' and its operations.\n- */\n-struct rte_eth_hash_filter_info {\n-\tenum rte_eth_hash_filter_info_type info_type; /**< Information type */\n-\t/** Details of hash filter information */\n-\tunion {\n-\t\t/** For RTE_ETH_HASH_FILTER_SYM_HASH_ENA_PER_PORT */\n-\t\tuint8_t enable;\n-\t\t/** Global configurations of hash filter */\n-\t\tstruct rte_eth_hash_global_conf global_conf;\n-\t\t/** Global configurations of hash filter input set */\n-\t\tstruct rte_eth_input_set_conf input_set_conf;\n-\t} info;\n-};\n-\n /**\n  * l2 tunnel configuration.\n  */\n",
    "prefixes": [
        "09/14"
    ]
}