get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 115835,
    "url": "http://patches.dpdk.org/api/patches/115835/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220905083540.2506490-5-david.marchand@redhat.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": "<20220905083540.2506490-5-david.marchand@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220905083540.2506490-5-david.marchand@redhat.com",
    "date": "2022-09-05T08:35:17",
    "name": "[v5,04/27] app/testpmd: drop PCI register commands",
    "commit_ref": null,
    "pull_url": null,
    "state": "not-applicable",
    "archived": true,
    "hash": "9217c72a386256374a344f3c36d52035a499b7f0",
    "submitter": {
        "id": 1173,
        "url": "http://patches.dpdk.org/api/people/1173/?format=api",
        "name": "David Marchand",
        "email": "david.marchand@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20220905083540.2506490-5-david.marchand@redhat.com/mbox/",
    "series": [
        {
            "id": 24530,
            "url": "http://patches.dpdk.org/api/series/24530/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=24530",
            "date": "2022-09-05T08:35:13",
            "name": "Bus and device cleanup for 22.11",
            "version": 5,
            "mbox": "http://patches.dpdk.org/series/24530/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/115835/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/115835/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 1914DA0547;\n\tMon,  5 Sep 2022 10:36:16 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 71EF2427F1;\n\tMon,  5 Sep 2022 10:36:06 +0200 (CEST)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by mails.dpdk.org (Postfix) with ESMTP id 3C9EB427F6\n for <dev@dpdk.org>; Mon,  5 Sep 2022 10:36:04 +0200 (CEST)",
            "from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com\n [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n us-mta-640-0pFiEYUHNV-poY0ph9Nu6w-1; Mon, 05 Sep 2022 04:36:00 -0400",
            "from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com\n [10.11.54.6])\n (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n (No client certificate requested)\n by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1ABCB85A589;\n Mon,  5 Sep 2022 08:36:00 +0000 (UTC)",
            "from fchome.redhat.com (unknown [10.40.193.251])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 8D81E2166B26;\n Mon,  5 Sep 2022 08:35:58 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1662366963;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=YKSGSxB5cINiiWOCBCte+SiCLNhgvQZYypOgd5gxVqQ=;\n b=dyBMtiGkqvTPQIM7oMszhFo+6c6T2L2uK+pu7MrwUlrFDr/YTbgHGdNxschmtQ64W55/c4\n vZHXNnNTImwxT2DacNpvmTu2G/deNWiT67zXpucbgbTE9R9iIEkAtPhSiSk795B14Zb67P\n Xnar5tM86M0X4mEfnr6G9oHX5CBWhNI=",
        "X-MC-Unique": "0pFiEYUHNV-poY0ph9Nu6w-1",
        "From": "David Marchand <david.marchand@redhat.com>",
        "To": "dev@dpdk.org",
        "Cc": "thomas@monjalon.net, bruce.richardson@intel.com,\n Aman Singh <aman.deep.singh@intel.com>,\n Yuying Zhang <yuying.zhang@intel.com>",
        "Subject": "[PATCH v5 04/27] app/testpmd: drop PCI register commands",
        "Date": "Mon,  5 Sep 2022 10:35:17 +0200",
        "Message-Id": "<20220905083540.2506490-5-david.marchand@redhat.com>",
        "In-Reply-To": "<20220905083540.2506490-1-david.marchand@redhat.com>",
        "References": "<20220628144643.1213026-1-david.marchand@redhat.com>\n <20220905083540.2506490-1-david.marchand@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 2.78 on 10.11.54.6",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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"
    },
    "content": "Those commands date back to the early stages of DPDK when only PCI\ndevices were supported.\nAt the time, developers may have used those commands to help in\ndebugging their buggy^Wwork in progress drivers.\n\nRemoving them, we can drop the dependency on the PCI bus and library and\nmake testpmd bus agnostic.\n\nSigned-off-by: David Marchand <david.marchand@redhat.com>\nAcked-by: Bruce Richardson <bruce.richardson@intel.com>\n---\n app/test-pmd/cmdline.c                      | 339 +-------------------\n app/test-pmd/config.c                       | 195 -----------\n app/test-pmd/csumonly.c                     |   1 -\n app/test-pmd/flowgen.c                      |   1 -\n app/test-pmd/iofwd.c                        |   1 -\n app/test-pmd/macfwd.c                       |   1 -\n app/test-pmd/macswap.c                      |   1 -\n app/test-pmd/meson.build                    |   2 +-\n app/test-pmd/parameters.c                   |   1 -\n app/test-pmd/rxonly.c                       |   1 -\n app/test-pmd/testpmd.c                      |   1 -\n app/test-pmd/testpmd.h                      |  72 +----\n app/test-pmd/txonly.c                       |   1 -\n doc/guides/testpmd_app_ug/testpmd_funcs.rst |  81 -----\n 14 files changed, 4 insertions(+), 694 deletions(-)",
    "diff": "diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex b4fe9dfb17..4697b7c494 100644\n--- a/app/test-pmd/cmdline.c\n+++ b/app/test-pmd/cmdline.c\n@@ -28,7 +28,6 @@\n #include <rte_ring.h>\n #include <rte_mempool.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_string_fns.h>\n@@ -89,7 +88,6 @@ static void cmd_help_brief_parsed(__rte_unused void *parsed_result,\n \t\t\"information.\\n\"\n \t\t\"    help config                     : Configuration information.\\n\"\n \t\t\"    help ports                      : Configuring ports.\\n\"\n-\t\t\"    help registers                  : Reading and setting port registers.\\n\"\n \t\t\"    help filters                    : Filters configuration help.\\n\"\n \t\t\"    help traffic_management         : Traffic Management commands.\\n\"\n \t\t\"    help devices                    : Device related commands.\\n\"\n@@ -799,34 +797,6 @@ static void cmd_help_long_parsed(void *parsed_result,\n \t\t);\n \t}\n \n-\tif (show_all || !strcmp(res->section, \"registers\")) {\n-\n-\t\tcmdline_printf(\n-\t\t\tcl,\n-\t\t\t\"\\n\"\n-\t\t\t\"Registers:\\n\"\n-\t\t\t\"----------\\n\\n\"\n-\n-\t\t\t\"read reg (port_id) (address)\\n\"\n-\t\t\t\"    Display value of a port register.\\n\\n\"\n-\n-\t\t\t\"read regfield (port_id) (address) (bit_x) (bit_y)\\n\"\n-\t\t\t\"    Display a port register bit field.\\n\\n\"\n-\n-\t\t\t\"read regbit (port_id) (address) (bit_x)\\n\"\n-\t\t\t\"    Display a single port register bit.\\n\\n\"\n-\n-\t\t\t\"write reg (port_id) (address) (value)\\n\"\n-\t\t\t\"    Set value of a port register.\\n\\n\"\n-\n-\t\t\t\"write regfield (port_id) (address) (bit_x) (bit_y)\"\n-\t\t\t\" (value)\\n\"\n-\t\t\t\"    Set bit field of a port register.\\n\\n\"\n-\n-\t\t\t\"write regbit (port_id) (address) (bit_x) (value)\\n\"\n-\t\t\t\"    Set single bit value of a port register.\\n\\n\"\n-\t\t);\n-\t}\n \tif (show_all || !strcmp(res->section, \"filters\")) {\n \n \t\tcmdline_printf(\n@@ -1077,13 +1047,13 @@ static cmdline_parse_token_string_t cmd_help_long_help =\n \n static cmdline_parse_token_string_t cmd_help_long_section =\n \tTOKEN_STRING_INITIALIZER(struct cmd_help_long_result, section,\n-\t\t\"all#control#display#config#ports#registers#\"\n+\t\t\"all#control#display#config#ports#\"\n \t\t\"filters#traffic_management#devices#drivers\");\n \n static cmdline_parse_inst_t cmd_help_long = {\n \t.f = cmd_help_long_parsed,\n \t.data = NULL,\n-\t.help_str = \"help all|control|display|config|ports|register|\"\n+\t.help_str = \"help all|control|display|config|ports|\"\n \t\t\"filters|traffic_management|devices|drivers: \"\n \t\t\"Show help\",\n \t.tokens = {\n@@ -7390,305 +7360,6 @@ static cmdline_parse_inst_t cmd_showfwdall = {\n \t},\n };\n \n-/* *** READ PORT REGISTER *** */\n-struct cmd_read_reg_result {\n-\tcmdline_fixed_string_t read;\n-\tcmdline_fixed_string_t reg;\n-\tportid_t port_id;\n-\tuint32_t reg_off;\n-};\n-\n-static void\n-cmd_read_reg_parsed(void *parsed_result,\n-\t\t    __rte_unused struct cmdline *cl,\n-\t\t    __rte_unused void *data)\n-{\n-\tstruct cmd_read_reg_result *res = parsed_result;\n-\tport_reg_display(res->port_id, res->reg_off);\n-}\n-\n-static cmdline_parse_token_string_t cmd_read_reg_read =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_read_reg_result, read, \"read\");\n-static cmdline_parse_token_string_t cmd_read_reg_reg =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_read_reg_result, reg, \"reg\");\n-static cmdline_parse_token_num_t cmd_read_reg_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_read_reg_result, port_id, RTE_UINT16);\n-static cmdline_parse_token_num_t cmd_read_reg_reg_off =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_read_reg_result, reg_off, RTE_UINT32);\n-\n-static cmdline_parse_inst_t cmd_read_reg = {\n-\t.f = cmd_read_reg_parsed,\n-\t.data = NULL,\n-\t.help_str = \"read reg <port_id> <reg_off>\",\n-\t.tokens = {\n-\t\t(void *)&cmd_read_reg_read,\n-\t\t(void *)&cmd_read_reg_reg,\n-\t\t(void *)&cmd_read_reg_port_id,\n-\t\t(void *)&cmd_read_reg_reg_off,\n-\t\tNULL,\n-\t},\n-};\n-\n-/* *** READ PORT REGISTER BIT FIELD *** */\n-struct cmd_read_reg_bit_field_result {\n-\tcmdline_fixed_string_t read;\n-\tcmdline_fixed_string_t regfield;\n-\tportid_t port_id;\n-\tuint32_t reg_off;\n-\tuint8_t bit1_pos;\n-\tuint8_t bit2_pos;\n-};\n-\n-static void\n-cmd_read_reg_bit_field_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_read_reg_bit_field_result *res = parsed_result;\n-\tport_reg_bit_field_display(res->port_id, res->reg_off,\n-\t\t\t\t   res->bit1_pos, res->bit2_pos);\n-}\n-\n-static cmdline_parse_token_string_t cmd_read_reg_bit_field_read =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_read_reg_bit_field_result, read,\n-\t\t\t\t \"read\");\n-static cmdline_parse_token_string_t cmd_read_reg_bit_field_regfield =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_read_reg_bit_field_result,\n-\t\t\t\t regfield, \"regfield\");\n-static cmdline_parse_token_num_t cmd_read_reg_bit_field_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_read_reg_bit_field_result, port_id,\n-\t\t\t      RTE_UINT16);\n-static cmdline_parse_token_num_t cmd_read_reg_bit_field_reg_off =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_read_reg_bit_field_result, reg_off,\n-\t\t\t      RTE_UINT32);\n-static cmdline_parse_token_num_t cmd_read_reg_bit_field_bit1_pos =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_read_reg_bit_field_result, bit1_pos,\n-\t\t\t      RTE_UINT8);\n-static cmdline_parse_token_num_t cmd_read_reg_bit_field_bit2_pos =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_read_reg_bit_field_result, bit2_pos,\n-\t\t\t      RTE_UINT8);\n-\n-static cmdline_parse_inst_t cmd_read_reg_bit_field = {\n-\t.f = cmd_read_reg_bit_field_parsed,\n-\t.data = NULL,\n-\t.help_str = \"read regfield <port_id> <reg_off> <bit_x> <bit_y>: \"\n-\t\"Read register bit field between bit_x and bit_y included\",\n-\t.tokens = {\n-\t\t(void *)&cmd_read_reg_bit_field_read,\n-\t\t(void *)&cmd_read_reg_bit_field_regfield,\n-\t\t(void *)&cmd_read_reg_bit_field_port_id,\n-\t\t(void *)&cmd_read_reg_bit_field_reg_off,\n-\t\t(void *)&cmd_read_reg_bit_field_bit1_pos,\n-\t\t(void *)&cmd_read_reg_bit_field_bit2_pos,\n-\t\tNULL,\n-\t},\n-};\n-\n-/* *** READ PORT REGISTER BIT *** */\n-struct cmd_read_reg_bit_result {\n-\tcmdline_fixed_string_t read;\n-\tcmdline_fixed_string_t regbit;\n-\tportid_t port_id;\n-\tuint32_t reg_off;\n-\tuint8_t bit_pos;\n-};\n-\n-static void\n-cmd_read_reg_bit_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_read_reg_bit_result *res = parsed_result;\n-\tport_reg_bit_display(res->port_id, res->reg_off, res->bit_pos);\n-}\n-\n-static cmdline_parse_token_string_t cmd_read_reg_bit_read =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_read_reg_bit_result, read, \"read\");\n-static cmdline_parse_token_string_t cmd_read_reg_bit_regbit =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_read_reg_bit_result,\n-\t\t\t\t regbit, \"regbit\");\n-static cmdline_parse_token_num_t cmd_read_reg_bit_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_read_reg_bit_result, port_id,\n-\t\t\t\t RTE_UINT16);\n-static cmdline_parse_token_num_t cmd_read_reg_bit_reg_off =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_read_reg_bit_result, reg_off,\n-\t\t\t\t RTE_UINT32);\n-static cmdline_parse_token_num_t cmd_read_reg_bit_bit_pos =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_read_reg_bit_result, bit_pos,\n-\t\t\t\t RTE_UINT8);\n-\n-static cmdline_parse_inst_t cmd_read_reg_bit = {\n-\t.f = cmd_read_reg_bit_parsed,\n-\t.data = NULL,\n-\t.help_str = \"read regbit <port_id> <reg_off> <bit_x>: 0 <= bit_x <= 31\",\n-\t.tokens = {\n-\t\t(void *)&cmd_read_reg_bit_read,\n-\t\t(void *)&cmd_read_reg_bit_regbit,\n-\t\t(void *)&cmd_read_reg_bit_port_id,\n-\t\t(void *)&cmd_read_reg_bit_reg_off,\n-\t\t(void *)&cmd_read_reg_bit_bit_pos,\n-\t\tNULL,\n-\t},\n-};\n-\n-/* *** WRITE PORT REGISTER *** */\n-struct cmd_write_reg_result {\n-\tcmdline_fixed_string_t write;\n-\tcmdline_fixed_string_t reg;\n-\tportid_t port_id;\n-\tuint32_t reg_off;\n-\tuint32_t value;\n-};\n-\n-static void\n-cmd_write_reg_parsed(void *parsed_result,\n-\t\t     __rte_unused struct cmdline *cl,\n-\t\t     __rte_unused void *data)\n-{\n-\tstruct cmd_write_reg_result *res = parsed_result;\n-\tport_reg_set(res->port_id, res->reg_off, res->value);\n-}\n-\n-static cmdline_parse_token_string_t cmd_write_reg_write =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_write_reg_result, write, \"write\");\n-static cmdline_parse_token_string_t cmd_write_reg_reg =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_write_reg_result, reg, \"reg\");\n-static cmdline_parse_token_num_t cmd_write_reg_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_result, port_id, RTE_UINT16);\n-static cmdline_parse_token_num_t cmd_write_reg_reg_off =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_result, reg_off, RTE_UINT32);\n-static cmdline_parse_token_num_t cmd_write_reg_value =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_result, value, RTE_UINT32);\n-\n-static cmdline_parse_inst_t cmd_write_reg = {\n-\t.f = cmd_write_reg_parsed,\n-\t.data = NULL,\n-\t.help_str = \"write reg <port_id> <reg_off> <reg_value>\",\n-\t.tokens = {\n-\t\t(void *)&cmd_write_reg_write,\n-\t\t(void *)&cmd_write_reg_reg,\n-\t\t(void *)&cmd_write_reg_port_id,\n-\t\t(void *)&cmd_write_reg_reg_off,\n-\t\t(void *)&cmd_write_reg_value,\n-\t\tNULL,\n-\t},\n-};\n-\n-/* *** WRITE PORT REGISTER BIT FIELD *** */\n-struct cmd_write_reg_bit_field_result {\n-\tcmdline_fixed_string_t write;\n-\tcmdline_fixed_string_t regfield;\n-\tportid_t port_id;\n-\tuint32_t reg_off;\n-\tuint8_t bit1_pos;\n-\tuint8_t bit2_pos;\n-\tuint32_t value;\n-};\n-\n-static void\n-cmd_write_reg_bit_field_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_write_reg_bit_field_result *res = parsed_result;\n-\tport_reg_bit_field_set(res->port_id, res->reg_off,\n-\t\t\t  res->bit1_pos, res->bit2_pos, res->value);\n-}\n-\n-static cmdline_parse_token_string_t cmd_write_reg_bit_field_write =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_write_reg_bit_field_result, write,\n-\t\t\t\t \"write\");\n-static cmdline_parse_token_string_t cmd_write_reg_bit_field_regfield =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_write_reg_bit_field_result,\n-\t\t\t\t regfield, \"regfield\");\n-static cmdline_parse_token_num_t cmd_write_reg_bit_field_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_bit_field_result, port_id,\n-\t\t\t      RTE_UINT16);\n-static cmdline_parse_token_num_t cmd_write_reg_bit_field_reg_off =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_bit_field_result, reg_off,\n-\t\t\t      RTE_UINT32);\n-static cmdline_parse_token_num_t cmd_write_reg_bit_field_bit1_pos =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_bit_field_result, bit1_pos,\n-\t\t\t      RTE_UINT8);\n-static cmdline_parse_token_num_t cmd_write_reg_bit_field_bit2_pos =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_bit_field_result, bit2_pos,\n-\t\t\t      RTE_UINT8);\n-static cmdline_parse_token_num_t cmd_write_reg_bit_field_value =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_bit_field_result, value,\n-\t\t\t      RTE_UINT32);\n-\n-static cmdline_parse_inst_t cmd_write_reg_bit_field = {\n-\t.f = cmd_write_reg_bit_field_parsed,\n-\t.data = NULL,\n-\t.help_str = \"write regfield <port_id> <reg_off> <bit_x> <bit_y> \"\n-\t\t\"<reg_value>: \"\n-\t\t\"Set register bit field between bit_x and bit_y included\",\n-\t.tokens = {\n-\t\t(void *)&cmd_write_reg_bit_field_write,\n-\t\t(void *)&cmd_write_reg_bit_field_regfield,\n-\t\t(void *)&cmd_write_reg_bit_field_port_id,\n-\t\t(void *)&cmd_write_reg_bit_field_reg_off,\n-\t\t(void *)&cmd_write_reg_bit_field_bit1_pos,\n-\t\t(void *)&cmd_write_reg_bit_field_bit2_pos,\n-\t\t(void *)&cmd_write_reg_bit_field_value,\n-\t\tNULL,\n-\t},\n-};\n-\n-/* *** WRITE PORT REGISTER BIT *** */\n-struct cmd_write_reg_bit_result {\n-\tcmdline_fixed_string_t write;\n-\tcmdline_fixed_string_t regbit;\n-\tportid_t port_id;\n-\tuint32_t reg_off;\n-\tuint8_t bit_pos;\n-\tuint8_t value;\n-};\n-\n-static void\n-cmd_write_reg_bit_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_write_reg_bit_result *res = parsed_result;\n-\tport_reg_bit_set(res->port_id, res->reg_off, res->bit_pos, res->value);\n-}\n-\n-static cmdline_parse_token_string_t cmd_write_reg_bit_write =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_write_reg_bit_result, write,\n-\t\t\t\t \"write\");\n-static cmdline_parse_token_string_t cmd_write_reg_bit_regbit =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_write_reg_bit_result,\n-\t\t\t\t regbit, \"regbit\");\n-static cmdline_parse_token_num_t cmd_write_reg_bit_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_bit_result, port_id,\n-\t\t\t\t RTE_UINT16);\n-static cmdline_parse_token_num_t cmd_write_reg_bit_reg_off =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_bit_result, reg_off,\n-\t\t\t\t RTE_UINT32);\n-static cmdline_parse_token_num_t cmd_write_reg_bit_bit_pos =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_bit_result, bit_pos,\n-\t\t\t\t RTE_UINT8);\n-static cmdline_parse_token_num_t cmd_write_reg_bit_value =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_write_reg_bit_result, value,\n-\t\t\t\t RTE_UINT8);\n-\n-static cmdline_parse_inst_t cmd_write_reg_bit = {\n-\t.f = cmd_write_reg_bit_parsed,\n-\t.data = NULL,\n-\t.help_str = \"write regbit <port_id> <reg_off> <bit_x> 0|1: \"\n-\t\t\"0 <= bit_x <= 31\",\n-\t.tokens = {\n-\t\t(void *)&cmd_write_reg_bit_write,\n-\t\t(void *)&cmd_write_reg_bit_regbit,\n-\t\t(void *)&cmd_write_reg_bit_port_id,\n-\t\t(void *)&cmd_write_reg_bit_reg_off,\n-\t\t(void *)&cmd_write_reg_bit_bit_pos,\n-\t\t(void *)&cmd_write_reg_bit_value,\n-\t\tNULL,\n-\t},\n-};\n-\n /* *** READ A RING DESCRIPTOR OF A PORT RX/TX QUEUE *** */\n struct cmd_read_rxd_txd_result {\n \tcmdline_fixed_string_t read;\n@@ -14222,12 +13893,6 @@ static cmdline_parse_ctx_t builtin_ctx[] = {\n \t(cmdline_parse_inst_t *)&cmd_priority_flow_control_set,\n \t(cmdline_parse_inst_t *)&cmd_queue_priority_flow_control_set,\n \t(cmdline_parse_inst_t *)&cmd_config_dcb,\n-\t(cmdline_parse_inst_t *)&cmd_read_reg,\n-\t(cmdline_parse_inst_t *)&cmd_read_reg_bit_field,\n-\t(cmdline_parse_inst_t *)&cmd_read_reg_bit,\n-\t(cmdline_parse_inst_t *)&cmd_write_reg,\n-\t(cmdline_parse_inst_t *)&cmd_write_reg_bit_field,\n-\t(cmdline_parse_inst_t *)&cmd_write_reg_bit,\n \t(cmdline_parse_inst_t *)&cmd_read_rxd_txd,\n \t(cmdline_parse_inst_t *)&cmd_stop,\n \t(cmdline_parse_inst_t *)&cmd_mac_addr,\ndiff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex a2939867c4..3a53b616d8 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -31,7 +31,6 @@\n #include <rte_mempool.h>\n #include <rte_mbuf.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_string_fns.h>\n@@ -1138,200 +1137,6 @@ vlan_id_is_invalid(uint16_t vlan_id)\n \treturn 1;\n }\n \n-static int\n-port_reg_off_is_invalid(portid_t port_id, uint32_t reg_off)\n-{\n-\tconst struct rte_pci_device *pci_dev;\n-\tconst struct rte_bus *bus;\n-\tuint64_t pci_len;\n-\n-\tif (reg_off & 0x3) {\n-\t\tfprintf(stderr,\n-\t\t\t\"Port register offset 0x%X not aligned on a 4-byte boundary\\n\",\n-\t\t\t(unsigned int)reg_off);\n-\t\treturn 1;\n-\t}\n-\n-\tif (!ports[port_id].dev_info.device) {\n-\t\tfprintf(stderr, \"Invalid device\\n\");\n-\t\treturn 0;\n-\t}\n-\n-\tbus = rte_bus_find_by_device(ports[port_id].dev_info.device);\n-\tif (bus && !strcmp(bus->name, \"pci\")) {\n-\t\tpci_dev = RTE_DEV_TO_PCI(ports[port_id].dev_info.device);\n-\t} else {\n-\t\tfprintf(stderr, \"Not a PCI device\\n\");\n-\t\treturn 1;\n-\t}\n-\n-\tpci_len = pci_dev->mem_resource[0].len;\n-\tif (reg_off >= pci_len) {\n-\t\tfprintf(stderr,\n-\t\t\t\"Port %d: register offset %u (0x%X) out of port PCI resource (length=%\"PRIu64\")\\n\",\n-\t\t\tport_id, (unsigned int)reg_off, (unsigned int)reg_off,\n-\t\t\tpci_len);\n-\t\treturn 1;\n-\t}\n-\treturn 0;\n-}\n-\n-static int\n-reg_bit_pos_is_invalid(uint8_t bit_pos)\n-{\n-\tif (bit_pos <= 31)\n-\t\treturn 0;\n-\tfprintf(stderr, \"Invalid bit position %d (must be <= 31)\\n\", bit_pos);\n-\treturn 1;\n-}\n-\n-#define display_port_and_reg_off(port_id, reg_off) \\\n-\tprintf(\"port %d PCI register at offset 0x%X: \", (port_id), (reg_off))\n-\n-static inline void\n-display_port_reg_value(portid_t port_id, uint32_t reg_off, uint32_t reg_v)\n-{\n-\tdisplay_port_and_reg_off(port_id, (unsigned)reg_off);\n-\tprintf(\"0x%08X (%u)\\n\", (unsigned)reg_v, (unsigned)reg_v);\n-}\n-\n-void\n-port_reg_bit_display(portid_t port_id, uint32_t reg_off, uint8_t bit_x)\n-{\n-\tuint32_t reg_v;\n-\n-\n-\tif (port_id_is_invalid(port_id, ENABLED_WARN))\n-\t\treturn;\n-\tif (port_reg_off_is_invalid(port_id, reg_off))\n-\t\treturn;\n-\tif (reg_bit_pos_is_invalid(bit_x))\n-\t\treturn;\n-\treg_v = port_id_pci_reg_read(port_id, reg_off);\n-\tdisplay_port_and_reg_off(port_id, (unsigned)reg_off);\n-\tprintf(\"bit %d=%d\\n\", bit_x, (int) ((reg_v & (1 << bit_x)) >> bit_x));\n-}\n-\n-void\n-port_reg_bit_field_display(portid_t port_id, uint32_t reg_off,\n-\t\t\t   uint8_t bit1_pos, uint8_t bit2_pos)\n-{\n-\tuint32_t reg_v;\n-\tuint8_t  l_bit;\n-\tuint8_t  h_bit;\n-\n-\tif (port_id_is_invalid(port_id, ENABLED_WARN))\n-\t\treturn;\n-\tif (port_reg_off_is_invalid(port_id, reg_off))\n-\t\treturn;\n-\tif (reg_bit_pos_is_invalid(bit1_pos))\n-\t\treturn;\n-\tif (reg_bit_pos_is_invalid(bit2_pos))\n-\t\treturn;\n-\tif (bit1_pos > bit2_pos)\n-\t\tl_bit = bit2_pos, h_bit = bit1_pos;\n-\telse\n-\t\tl_bit = bit1_pos, h_bit = bit2_pos;\n-\n-\treg_v = port_id_pci_reg_read(port_id, reg_off);\n-\treg_v >>= l_bit;\n-\tif (h_bit < 31)\n-\t\treg_v &= ((1 << (h_bit - l_bit + 1)) - 1);\n-\tdisplay_port_and_reg_off(port_id, (unsigned)reg_off);\n-\tprintf(\"bits[%d, %d]=0x%0*X (%u)\\n\", l_bit, h_bit,\n-\t       ((h_bit - l_bit) / 4) + 1, (unsigned)reg_v, (unsigned)reg_v);\n-}\n-\n-void\n-port_reg_display(portid_t port_id, uint32_t reg_off)\n-{\n-\tuint32_t reg_v;\n-\n-\tif (port_id_is_invalid(port_id, ENABLED_WARN))\n-\t\treturn;\n-\tif (port_reg_off_is_invalid(port_id, reg_off))\n-\t\treturn;\n-\treg_v = port_id_pci_reg_read(port_id, reg_off);\n-\tdisplay_port_reg_value(port_id, reg_off, reg_v);\n-}\n-\n-void\n-port_reg_bit_set(portid_t port_id, uint32_t reg_off, uint8_t bit_pos,\n-\t\t uint8_t bit_v)\n-{\n-\tuint32_t reg_v;\n-\n-\tif (port_id_is_invalid(port_id, ENABLED_WARN))\n-\t\treturn;\n-\tif (port_reg_off_is_invalid(port_id, reg_off))\n-\t\treturn;\n-\tif (reg_bit_pos_is_invalid(bit_pos))\n-\t\treturn;\n-\tif (bit_v > 1) {\n-\t\tfprintf(stderr, \"Invalid bit value %d (must be 0 or 1)\\n\",\n-\t\t\t(int) bit_v);\n-\t\treturn;\n-\t}\n-\treg_v = port_id_pci_reg_read(port_id, reg_off);\n-\tif (bit_v == 0)\n-\t\treg_v &= ~(1 << bit_pos);\n-\telse\n-\t\treg_v |= (1 << bit_pos);\n-\tport_id_pci_reg_write(port_id, reg_off, reg_v);\n-\tdisplay_port_reg_value(port_id, reg_off, reg_v);\n-}\n-\n-void\n-port_reg_bit_field_set(portid_t port_id, uint32_t reg_off,\n-\t\t       uint8_t bit1_pos, uint8_t bit2_pos, uint32_t value)\n-{\n-\tuint32_t max_v;\n-\tuint32_t reg_v;\n-\tuint8_t  l_bit;\n-\tuint8_t  h_bit;\n-\n-\tif (port_id_is_invalid(port_id, ENABLED_WARN))\n-\t\treturn;\n-\tif (port_reg_off_is_invalid(port_id, reg_off))\n-\t\treturn;\n-\tif (reg_bit_pos_is_invalid(bit1_pos))\n-\t\treturn;\n-\tif (reg_bit_pos_is_invalid(bit2_pos))\n-\t\treturn;\n-\tif (bit1_pos > bit2_pos)\n-\t\tl_bit = bit2_pos, h_bit = bit1_pos;\n-\telse\n-\t\tl_bit = bit1_pos, h_bit = bit2_pos;\n-\n-\tif ((h_bit - l_bit) < 31)\n-\t\tmax_v = (1 << (h_bit - l_bit + 1)) - 1;\n-\telse\n-\t\tmax_v = 0xFFFFFFFF;\n-\n-\tif (value > max_v) {\n-\t\tfprintf(stderr, \"Invalid value %u (0x%x) must be < %u (0x%x)\\n\",\n-\t\t\t\t(unsigned)value, (unsigned)value,\n-\t\t\t\t(unsigned)max_v, (unsigned)max_v);\n-\t\treturn;\n-\t}\n-\treg_v = port_id_pci_reg_read(port_id, reg_off);\n-\treg_v &= ~(max_v << l_bit); /* Keep unchanged bits */\n-\treg_v |= (value << l_bit); /* Set changed bits */\n-\tport_id_pci_reg_write(port_id, reg_off, reg_v);\n-\tdisplay_port_reg_value(port_id, reg_off, reg_v);\n-}\n-\n-void\n-port_reg_set(portid_t port_id, uint32_t reg_off, uint32_t reg_v)\n-{\n-\tif (port_id_is_invalid(port_id, ENABLED_WARN))\n-\t\treturn;\n-\tif (port_reg_off_is_invalid(port_id, reg_off))\n-\t\treturn;\n-\tport_id_pci_reg_write(port_id, reg_off, reg_v);\n-\tdisplay_port_reg_value(port_id, reg_off, reg_v);\n-}\n-\n static uint32_t\n eth_dev_get_overhead_len(uint32_t max_rx_pktlen, uint16_t max_mtu)\n {\ndiff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c\nindex 1a3fd9ce8a..144f28819c 100644\n--- a/app/test-pmd/csumonly.c\n+++ b/app/test-pmd/csumonly.c\n@@ -28,7 +28,6 @@\n #include <rte_mempool.h>\n #include <rte_mbuf.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_ip.h>\ndiff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c\nindex 1e01120ae9..fd6abc0f41 100644\n--- a/app/test-pmd/flowgen.c\n+++ b/app/test-pmd/flowgen.c\n@@ -28,7 +28,6 @@\n #include <rte_mempool.h>\n #include <rte_mbuf.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_ip.h>\ndiff --git a/app/test-pmd/iofwd.c b/app/test-pmd/iofwd.c\nindex 71849aaf96..8fafdec548 100644\n--- a/app/test-pmd/iofwd.c\n+++ b/app/test-pmd/iofwd.c\n@@ -28,7 +28,6 @@\n #include <rte_mempool.h>\n #include <rte_mbuf.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_string_fns.h>\ndiff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c\nindex 79c9241d00..beb220fbb4 100644\n--- a/app/test-pmd/macfwd.c\n+++ b/app/test-pmd/macfwd.c\n@@ -28,7 +28,6 @@\n #include <rte_mempool.h>\n #include <rte_mbuf.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_ip.h>\ndiff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c\nindex acb0fd7fb4..4f8deb3382 100644\n--- a/app/test-pmd/macswap.c\n+++ b/app/test-pmd/macswap.c\n@@ -28,7 +28,6 @@\n #include <rte_mempool.h>\n #include <rte_mbuf.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_ip.h>\ndiff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build\nindex 74399178dd..8488efc138 100644\n--- a/app/test-pmd/meson.build\n+++ b/app/test-pmd/meson.build\n@@ -32,7 +32,7 @@ if dpdk_conf.has('RTE_HAS_JANSSON')\n     ext_deps += jansson_dep\n endif\n \n-deps += ['ethdev', 'cmdline', 'bus_pci']\n+deps += ['ethdev', 'cmdline']\n if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')\n     deps += 'crypto_scheduler'\n endif\ndiff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c\nindex e3c9757f3f..c77624302f 100644\n--- a/app/test-pmd/parameters.c\n+++ b/app/test-pmd/parameters.c\n@@ -33,7 +33,6 @@\n #include <rte_branch_prediction.h>\n #include <rte_mempool.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_string_fns.h>\ndiff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c\nindex 04457010f4..d528d4f34e 100644\n--- a/app/test-pmd/rxonly.c\n+++ b/app/test-pmd/rxonly.c\n@@ -28,7 +28,6 @@\n #include <rte_mempool.h>\n #include <rte_mbuf.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_string_fns.h>\ndiff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c\nindex addcbcac85..ee686393c5 100644\n--- a/app/test-pmd/testpmd.c\n+++ b/app/test-pmd/testpmd.c\n@@ -42,7 +42,6 @@\n #include <rte_mbuf.h>\n #include <rte_mbuf_pool_ops.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_dev.h>\ndiff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h\nindex fb2f5195d3..e4ba7147a3 100644\n--- a/app/test-pmd/testpmd.h\n+++ b/app/test-pmd/testpmd.h\n@@ -7,8 +7,6 @@\n \n #include <stdbool.h>\n \n-#include <rte_pci.h>\n-#include <rte_bus_pci.h>\n #ifdef RTE_LIB_GRO\n #include <rte_gro.h>\n #endif\n@@ -267,7 +265,7 @@ struct port_txqueue {\n  * The data structure associated with each port.\n  */\n struct rte_port {\n-\tstruct rte_eth_dev_info dev_info;   /**< PCI info + driver name */\n+\tstruct rte_eth_dev_info dev_info;   /**< Device info + driver name */\n \tstruct rte_eth_conf     dev_conf;   /**< Port configuration. */\n \tstruct rte_ether_addr       eth_addr;   /**< Port ethernet address */\n \tstruct rte_eth_stats    stats;      /**< Last port statistics */\n@@ -801,65 +799,6 @@ mbuf_pool_find(unsigned int sock_id, uint16_t idx)\n \treturn rte_mempool_lookup((const char *)pool_name);\n }\n \n-/**\n- * Read/Write operations on a PCI register of a port.\n- */\n-static inline uint32_t\n-port_pci_reg_read(struct rte_port *port, uint32_t reg_off)\n-{\n-\tconst struct rte_pci_device *pci_dev;\n-\tconst struct rte_bus *bus;\n-\tvoid *reg_addr;\n-\tuint32_t reg_v;\n-\n-\tif (!port->dev_info.device) {\n-\t\tfprintf(stderr, \"Invalid device\\n\");\n-\t\treturn 0;\n-\t}\n-\n-\tbus = rte_bus_find_by_device(port->dev_info.device);\n-\tif (bus && !strcmp(bus->name, \"pci\")) {\n-\t\tpci_dev = RTE_DEV_TO_PCI(port->dev_info.device);\n-\t} else {\n-\t\tfprintf(stderr, \"Not a PCI device\\n\");\n-\t\treturn 0;\n-\t}\n-\n-\treg_addr = ((char *)pci_dev->mem_resource[0].addr + reg_off);\n-\treg_v = *((volatile uint32_t *)reg_addr);\n-\treturn rte_le_to_cpu_32(reg_v);\n-}\n-\n-#define port_id_pci_reg_read(pt_id, reg_off) \\\n-\tport_pci_reg_read(&ports[(pt_id)], (reg_off))\n-\n-static inline void\n-port_pci_reg_write(struct rte_port *port, uint32_t reg_off, uint32_t reg_v)\n-{\n-\tconst struct rte_pci_device *pci_dev;\n-\tconst struct rte_bus *bus;\n-\tvoid *reg_addr;\n-\n-\tif (!port->dev_info.device) {\n-\t\tfprintf(stderr, \"Invalid device\\n\");\n-\t\treturn;\n-\t}\n-\n-\tbus = rte_bus_find_by_device(port->dev_info.device);\n-\tif (bus && !strcmp(bus->name, \"pci\")) {\n-\t\tpci_dev = RTE_DEV_TO_PCI(port->dev_info.device);\n-\t} else {\n-\t\tfprintf(stderr, \"Not a PCI device\\n\");\n-\t\treturn;\n-\t}\n-\n-\treg_addr = ((char *)pci_dev->mem_resource[0].addr + reg_off);\n-\t*((volatile uint32_t *)reg_addr) = rte_cpu_to_le_32(reg_v);\n-}\n-\n-#define port_id_pci_reg_write(pt_id, reg_off, reg_value) \\\n-\tport_pci_reg_write(&ports[(pt_id)], (reg_off), (reg_value))\n-\n static inline void\n get_start_cycles(uint64_t *start_tsc)\n {\n@@ -922,15 +861,6 @@ void update_fwd_ports(portid_t new_pid);\n void set_fwd_eth_peer(portid_t port_id, char *peer_addr);\n \n void port_mtu_set(portid_t port_id, uint16_t mtu);\n-void port_reg_bit_display(portid_t port_id, uint32_t reg_off, uint8_t bit_pos);\n-void port_reg_bit_set(portid_t port_id, uint32_t reg_off, uint8_t bit_pos,\n-\t\t      uint8_t bit_v);\n-void port_reg_bit_field_display(portid_t port_id, uint32_t reg_off,\n-\t\t\t\tuint8_t bit1_pos, uint8_t bit2_pos);\n-void port_reg_bit_field_set(portid_t port_id, uint32_t reg_off,\n-\t\t\t    uint8_t bit1_pos, uint8_t bit2_pos, uint32_t value);\n-void port_reg_display(portid_t port_id, uint32_t reg_off);\n-void port_reg_set(portid_t port_id, uint32_t reg_off, uint32_t value);\n int port_action_handle_create(portid_t port_id, uint32_t id,\n \t\t\t      const struct rte_flow_indir_action_conf *conf,\n \t\t\t      const struct rte_flow_action *action);\ndiff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c\nindex e1bc78b73d..021624952d 100644\n--- a/app/test-pmd/txonly.c\n+++ b/app/test-pmd/txonly.c\n@@ -28,7 +28,6 @@\n #include <rte_mempool.h>\n #include <rte_mbuf.h>\n #include <rte_interrupts.h>\n-#include <rte_pci.h>\n #include <rte_ether.h>\n #include <rte_ethdev.h>\n #include <rte_ip.h>\ndiff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\nindex 330e34427d..7dacd6fb04 100644\n--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n@@ -55,7 +55,6 @@ These are divided into sections and can be accessed using help, help section or\n            help display                    : Displaying port, stats and config information.\n            help config                     : Configuration information.\n            help ports                      : Configuring ports.\n-           help registers                  : Reading and setting port registers.\n            help filters                    : Filters configuration help.\n            help traffic_management         : Traffic Management commands.\n            help devices                    : Device related commands.\n@@ -2356,86 +2355,6 @@ manage link bonding devices from within testpmd interactive prompt.\n \n See :doc:`../prog_guide/link_bonding_poll_mode_drv_lib` for more information.\n \n-Register Functions\n-------------------\n-\n-The Register Functions can be used to read from and write to registers on the network card referenced by a port number.\n-This is mainly useful for debugging purposes.\n-Reference should be made to the appropriate datasheet for the network card for details on the register addresses\n-and fields that can be accessed.\n-\n-read reg\n-~~~~~~~~\n-\n-Display the value of a port register::\n-\n-   testpmd> read reg (port_id) (address)\n-\n-For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller::\n-\n-   testpmd> read reg 0 0xEE00\n-   port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)\n-\n-read regfield\n-~~~~~~~~~~~~~\n-\n-Display a port register bit field::\n-\n-   testpmd> read regfield (port_id) (address) (bit_x) (bit_y)\n-\n-For example, reading the lowest two bits from the register in the example above::\n-\n-   testpmd> read regfield 0 0xEE00 0 1\n-   port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)\n-\n-read regbit\n-~~~~~~~~~~~\n-\n-Display a single port register bit::\n-\n-   testpmd> read regbit (port_id) (address) (bit_x)\n-\n-For example, reading the lowest bit from the register in the example above::\n-\n-   testpmd> read regbit 0 0xEE00 0\n-   port 0 PCI register at offset 0xEE00: bit 0=1\n-\n-write reg\n-~~~~~~~~~\n-\n-Set the value of a port register::\n-\n-   testpmd> write reg (port_id) (address) (value)\n-\n-For example, to clear a register::\n-\n-   testpmd> write reg 0 0xEE00 0x0\n-   port 0 PCI register at offset 0xEE00: 0x00000000 (0)\n-\n-write regfield\n-~~~~~~~~~~~~~~\n-\n-Set bit field of a port register::\n-\n-   testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)\n-\n-For example, writing to the register cleared in the example above::\n-\n-   testpmd> write regfield 0 0xEE00 0 1 2\n-   port 0 PCI register at offset 0xEE00: 0x00000002 (2)\n-\n-write regbit\n-~~~~~~~~~~~~\n-\n-Set single bit value of a port register::\n-\n-   testpmd> write regbit (port_id) (address) (bit_x) (value)\n-\n-For example, to set the high bit in the register from the example above::\n-\n-   testpmd> write regbit 0 0xEE00 31 1\n-   port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)\n-\n Traffic Metering and Policing\n -----------------------------\n \n",
    "prefixes": [
        "v5",
        "04/27"
    ]
}