get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 133345,
    "url": "https://patches.dpdk.org/api/patches/133345/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20231026064324.177531-6-chaoyong.he@corigine.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20231026064324.177531-6-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231026064324.177531-6-chaoyong.he@corigine.com",
    "date": "2023-10-26T06:43:04",
    "name": "[v3,05/25] net/nfp: extract the cap data field",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "7490fb984ca18abd0057c9307b74ae54ff967df4",
    "submitter": {
        "id": 2554,
        "url": "https://patches.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20231026064324.177531-6-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 29991,
            "url": "https://patches.dpdk.org/api/series/29991/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=29991",
            "date": "2023-10-26T06:42:59",
            "name": "add the NFP vDPA PMD",
            "version": 3,
            "mbox": "https://patches.dpdk.org/series/29991/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/133345/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/133345/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 163F343204;\n\tThu, 26 Oct 2023 08:44:32 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1102D427E6;\n\tThu, 26 Oct 2023 08:44:01 +0200 (CEST)",
            "from NAM12-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam12on2098.outbound.protection.outlook.com [40.107.244.98])\n by mails.dpdk.org (Postfix) with ESMTP id 8D4B040DCE\n for <dev@dpdk.org>; Thu, 26 Oct 2023 08:43:55 +0200 (CEST)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by SJ0PR13MB5965.namprd13.prod.outlook.com (2603:10b6:a03:43d::10)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6907.33; Thu, 26 Oct\n 2023 06:43:53 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.6933.022; Thu, 26 Oct 2023\n 06:43:53 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=eu5KH3KAn2cydj4luWn1nKSUL/CN9EfYKuetZsjLFLJFCzc6Diw/dCkhOoL+OYjD7pCEnxNd03fj7XFEx3kjTNapsDShafh3k9Ew25T4wmC0mvSYoOSITw88T/c5Ur5JfJGdqCi1/V5AeVGFX0iMScab1mgrpnOfwj2SXa9KXA09MvTUcAFc8iNvYfSi/5FXwG2Ipj3aC8yfmjCWdInBHDfAPkPhA1e3YBWNsegrXlc5heLqUGnIzXFSCucGV6Z6dSl54qMT2f8H1kvI+D8ejxxYKXIlXi8o401Z2wY2CNl3tRA0uEOOIvBQqhaabjrCTH1qP69/JTzaLO4bOiQQlg==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=3QXwIG/Tzg1MQePm65MtZHJed7p8BFPj4TtvJaABFwI=;\n b=KvlOFGlVwXSxHls3oXrsSgKky4KBEHri9OXZpwFIDRIwjd/FcdCZplwhGtnNnLJfttNyvtpnbpDAdk1AZE6htljJRIa1fX0FXNoEC0215+zBn5YeKqT5x47wy2xJDiKFx7sE27oQjoZi/8T+V69MzKHHTV4A2msGjfRl0FU79kxNfSyKpc7EW2g3p2GgW4yUXZ9Litg5ru46NnYcIukudpsETZBcdlnYZqD8TM/9NZA20/82UnMmqnPHfcetC89xSjUDn9jGk9m6Eh4IA6eHJ4AA/OJXfKXqd0x1pqdGRuKDjaB3KWa7Ab/dilH5+PUP9vHqdqSWj1fJ47gQaOT71w==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com;\n dkim=pass header.d=corigine.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=3QXwIG/Tzg1MQePm65MtZHJed7p8BFPj4TtvJaABFwI=;\n b=FsUh7siTpwQrD7EeXiQ4236bm+qIAMfKzL9CGKM9n7ToaJyILyACxFnjNMj89YtbHdaAhlv7a1SZCuWPA5N5vX9Xt9F12HblorY8z7MyJ2L6Ki33kc7vXI9VrduUHLQotUL+EHOC07DebaDjY4P7R/Jx70wfavp8cefmw5apwtA=",
        "Authentication-Results": "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=corigine.com;",
        "From": "Chaoyong He <chaoyong.he@corigine.com>",
        "To": "dev@dpdk.org",
        "Cc": "oss-drivers@corigine.com, Chaoyong He <chaoyong.he@corigine.com>,\n Long Wu <long.wu@corigine.com>, Peng Zhang <peng.zhang@corigine.com>",
        "Subject": "[PATCH v3 05/25] net/nfp: extract the cap data field",
        "Date": "Thu, 26 Oct 2023 14:43:04 +0800",
        "Message-Id": "<20231026064324.177531-6-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "In-Reply-To": "<20231026064324.177531-1-chaoyong.he@corigine.com>",
        "References": "<20231024022849.3092506-1-chaoyong.he@corigine.com>\n <20231026064324.177531-1-chaoyong.he@corigine.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "BYAPR07CA0034.namprd07.prod.outlook.com\n (2603:10b6:a02:bc::47) To SJ0PR13MB5545.namprd13.prod.outlook.com\n (2603:10b6:a03:424::5)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "SJ0PR13MB5545:EE_|SJ0PR13MB5965:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "9405dd12-ea7c-43e1-ab7a-08dbd5eeeb80",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n m7m4wfICJeT5D0PEfaBerWUxHS9kmxEj0KCLJaQbeF4s+OZMDwRy3X6h0T9EsxVyqIOpBlbOhTzb/vH+Uj5JQAiGkLCsi/1nHTpoIcwF6i5+va7P10vslNgc6O/4SuM6WKIaHHlNPMOK5HfsZahHaCE6GzpPioU2JtFD6kiklyAoDSXvcn6Y3TEh6HXiTryxgxTIbKxkFl6hTzaXhVpNgdsEVxwxEbtuZeJWSIZPAdaqFFC9+139Ika3U+wOGNhWSbYdZ0P3N3RJElx2i1ByjxbcxB55eFJMGrP0pZFZvlhMPtoKX8clHwPccphrmby/CFrAvw2Q308X6sVOc5GYyNVxSSldABhT+fMfmA+Sg0TVavFHxR7GPdiW6av99hvsYw9PH+Qq5aS6sapWcJCxh+yKo5APDECSWFFwJ3JlPkIN3hS346MDONJRyVOE7aHPir3ggusFz9++Tl+GK021bWSFyxMzkwfYn+1VQ2Yg/+kVmhOMDv1gC+jh0+XWgrJdc84nkx6y/BImevzi0TGNd+v00o0NAi/AaeKSYAN+7EcTY4z1qgfuHVhuz/azjrWEcp1Na92IA8hIPQMyUVCw7x4dMZiUkJizUHxi4k0t4QF0ktAgtkQfRsqmUuLL9B++uPfiUqDOOL6AExaypuOIvFauY0Lu8TkQMe4dZqFtFiw=",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230031)(346002)(39830400003)(136003)(366004)(376002)(396003)(230922051799003)(64100799003)(186009)(1800799009)(451199024)(6512007)(478600001)(6506007)(52116002)(2616005)(8676002)(83380400001)(107886003)(30864003)(41300700001)(26005)(1076003)(6486002)(5660300002)(6666004)(44832011)(6916009)(316002)(66556008)(54906003)(66476007)(66946007)(2906002)(4326008)(8936002)(38350700005)(38100700002)(86362001)(36756003);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n vtBg6isgm98Xca4N1VKDEHSIW8xK5VTBFmNo7HGSD0oiT87/ZGu2Ef7mpfitW6yDTde8hG9CzEmBXjOhB5cFyHFv2Ijn/w0ln8ety6Oy+hzOhTg7DnzLVupn/JG7OqKLaSADzm+CB8u0aZjKhNdsYF6Sla6c9m05hqdJuMgUKhUjWPjpqG7sLAS12bXCzvWuYRPd6oGaSgLMSaa8+C/AyO9P5aMrCUt7dyfWGo8xGXnPrnvMfMvTxId92G6bz3jdOfSDZUATbW5+v2J3JYh3ZmmcbC6FUwk4lGu1CZ1FNiw823I0waZ7hgTOirM9PEWafeXEVYvR5SH2c8f3nbsh/HzpsJYn1M7doQmjOUi79XInIgWEFl9ttPovFCZQc5RGBlPImw5W7ewrEIlYemMyoNWtYYAcRzCtNp9U6zH5QYLIHxcl4Vg9mhchxTO7nf8ED85KEh6FR0bV01MXPQhcadVtT5OSjIZbKG4DlHSDPx/2/5pDwR8+07RmRTKA9jluB/TzNLWY9XOyXylTNxeo1S2rbIuS2GMO7fWVecQAxm/8grlqKeYL6USW4jNlEaEhHifsEyF4JofXpNIutie6qvBeuyIacnqAFQbGLe53gA4lSsB0t2GXLFBIRyuR9oapiBwphld96FMDlk/qH//O0/G7MvM8YB/TVVXdRhknydcAjccHAEghmuzALDSjyK82SxniF37V+WbvMWT8YKTFELUbRT8vq2OPuSUklsJhemE2rNpVB4z0kAX4Ys1Rp6IbH+YDKmRQaXWCHd7z+rNVHhQcvRrN/bmByYwBwUcn414+JW/yKq7EX7Qe4mtnA+iASSQyCXaUxuiHdBmndvOYV9bwHp6IP4E/7lIHfyw+NolTu8AY9ZtNfEMJkb1j5Yg07JLZKH5RshT4mUKIDQluSvM2vvxp0gXyUck9wwyKc5snjGQHUBNvt/qVoAhV/vGw0pfLBZfzPR4Q9UeETrzVzScjd3MuYaT66fa2E44Qwe2Ct5h6ai0EfNXETB6ddJBJVZrC+7q7a54Xo1ccycChkqbSQMjnBWzoZlKnYamq6799rfCH+sB5xQKMoS9Yd9CRPnUndKjr/nHc1AQD2V/OBXt7hjvws07kcP7+hCE1EZlD6KWmVpJwmPJLnB+aXcis0cepAOUx9EFuAgw4peBVHgzYdWKm6Fx+3EMLZFo+4O0B7XuNKbPvKXFSei36SIifNuJQwOqypBoYe5BslRjQE22o2szRv7cfoIHatJSyz3vS5NkOu37LzKBsSbI+0tx1Mt0+Y+kJrf/NYKeHZ7q9qdlGNEg133s0fnzAgVEqI9FKeDOUzrnSWzeVcCwC5IwSoZjWZlO91h0dd5VwqJcWHMz2FuC+j3JsGFfEhcdhzUdpQ1tMC8mwheVykdGUM6tJKmmrT9TbDNXxGJ0j1Iv4gI+EVnFXumRRk5ATLPEsuwR+KfR2Sm4Ug8ibad018evj8opO3GMwljT/GOoea9UelOoFSL1H8js6AvdpPno+0qqCVJdK3llXYzrMCmusSlE1knBxYQ3qncGQbH9L+SZtyZDYKvCDoLHR7aizdbO880xpocVVuGUAlKOad3d7g8PNrlGRXYh40korWTofYzVKTg==",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 9405dd12-ea7c-43e1-ab7a-08dbd5eeeb80",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "26 Oct 2023 06:43:53.5740 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "fe128f2c-073b-4c20-818e-7246a585940c",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n 8d0GAYwclyDIOvbVM+B2kRLMBvajmAcFm+IiEb5X2q/hCzG2/QcPEUK2KoNfUZIdu1yA/fpiaQdnJbBEGfHv3mUAy9to/0aB3OiHLFBfwcU=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SJ0PR13MB5965",
        "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": "Extract the 'cap' and 'cap_ext' data field into the super class, ready\nfor the upcoming common library.\n\nSigned-off-by: Chaoyong He <chaoyong.he@corigine.com>\nReviewed-by: Long Wu <long.wu@corigine.com>\nReviewed-by: Peng Zhang <peng.zhang@corigine.com>\n---\n drivers/net/nfp/flower/nfp_flower.c |  6 +-\n drivers/net/nfp/nfd3/nfp_nfd3_dp.c  | 12 ++--\n drivers/net/nfp/nfdk/nfp_nfdk_dp.c  | 14 ++---\n drivers/net/nfp/nfp_ethdev.c        | 14 ++---\n drivers/net/nfp/nfp_ethdev_vf.c     | 10 +--\n drivers/net/nfp/nfp_ipsec.c         |  4 +-\n drivers/net/nfp/nfp_net_common.c    | 98 +++++++++++++++--------------\n drivers/net/nfp/nfp_net_common.h    | 10 ++-\n drivers/net/nfp/nfp_rxtx.c          |  2 +-\n 9 files changed, 89 insertions(+), 81 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c\nindex 60d843451e..453080f521 100644\n--- a/drivers/net/nfp/flower/nfp_flower.c\n+++ b/drivers/net/nfp/flower/nfp_flower.c\n@@ -65,7 +65,7 @@ nfp_pf_repr_disable_queues(struct rte_eth_dev *dev)\n \tupdate = NFP_NET_CFG_UPDATE_GEN | NFP_NET_CFG_UPDATE_RING |\n \t\t\tNFP_NET_CFG_UPDATE_MSIX;\n \n-\tif (hw->cap & NFP_NET_CFG_CTRL_RINGCFG)\n+\tif (hw->super.cap & NFP_NET_CFG_CTRL_RINGCFG)\n \t\tnew_ctrl &= ~NFP_NET_CFG_CTRL_RINGCFG;\n \n \t/* If an error when reconfig we avoid to change hw state */\n@@ -101,7 +101,7 @@ nfp_flower_pf_start(struct rte_eth_dev *dev)\n \n \tupdate |= NFP_NET_CFG_UPDATE_RSS;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_RSS2) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RSS2) != 0)\n \t\tnew_ctrl |= NFP_NET_CFG_CTRL_RSS2;\n \telse\n \t\tnew_ctrl |= NFP_NET_CFG_CTRL_RSS;\n@@ -111,7 +111,7 @@ nfp_flower_pf_start(struct rte_eth_dev *dev)\n \n \tupdate |= NFP_NET_CFG_UPDATE_GEN | NFP_NET_CFG_UPDATE_RING;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_RINGCFG) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RINGCFG) != 0)\n \t\tnew_ctrl |= NFP_NET_CFG_CTRL_RINGCFG;\n \n \tnn_cfg_writel(hw, NFP_NET_CFG_CTRL, new_ctrl);\ndiff --git a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c\nindex b64dbaca0d..bbf4530ae9 100644\n--- a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c\n+++ b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c\n@@ -30,7 +30,7 @@ nfp_net_nfd3_tx_tso(struct nfp_net_txq *txq,\n \tuint64_t ol_flags;\n \tstruct nfp_net_hw *hw = txq->hw;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO_ANY) == 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LSO_ANY) == 0)\n \t\tgoto clean_txd;\n \n \tol_flags = mb->ol_flags;\n@@ -69,7 +69,7 @@ nfp_net_nfd3_tx_cksum(struct nfp_net_txq *txq,\n \tuint64_t ol_flags;\n \tstruct nfp_net_hw *hw = txq->hw;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_TXCSUM) == 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_TXCSUM) == 0)\n \t\treturn;\n \n \tol_flags = mb->ol_flags;\n@@ -127,8 +127,8 @@ nfp_net_nfd3_tx_vlan(struct nfp_net_txq *txq,\n {\n \tstruct nfp_net_hw *hw = txq->hw;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_TXVLAN_V2) != 0 ||\n-\t\t\t(hw->cap & NFP_NET_CFG_CTRL_TXVLAN) == 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_TXVLAN_V2) != 0 ||\n+\t\t\t(hw->super.cap & NFP_NET_CFG_CTRL_TXVLAN) == 0)\n \t\treturn;\n \n \tif ((mb->ol_flags & RTE_MBUF_F_TX_VLAN) != 0) {\n@@ -151,7 +151,7 @@ nfp_net_nfd3_set_meta_data(struct nfp_net_meta_raw *meta_data,\n \tuint8_t ipsec_layer = 0;\n \n \thw = txq->hw;\n-\tcap_extend = hw->cap_ext;\n+\tcap_extend = hw->super.cap_ext;\n \n \tif ((pkt->ol_flags & RTE_MBUF_F_TX_VLAN) != 0 &&\n \t\t\t(hw->ctrl & NFP_NET_CFG_CTRL_TXVLAN_V2) != 0) {\n@@ -278,7 +278,7 @@ nfp_net_nfd3_xmit_pkts_common(void *tx_queue,\n \t\t}\n \n \t\tif (unlikely(pkt->nb_segs > 1 &&\n-\t\t\t\t(hw->cap & NFP_NET_CFG_CTRL_GATHER) == 0)) {\n+\t\t\t\t(hw->super.cap & NFP_NET_CFG_CTRL_GATHER) == 0)) {\n \t\t\tPMD_TX_LOG(ERR, \"Multisegment packet not supported\");\n \t\t\tgoto xmit_end;\n \t\t}\ndiff --git a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c\nindex 259039964a..807666686f 100644\n--- a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c\n+++ b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c\n@@ -23,7 +23,7 @@ nfp_net_nfdk_tx_cksum(struct nfp_net_txq *txq,\n \tuint64_t ol_flags;\n \tstruct nfp_net_hw *hw = txq->hw;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_TXCSUM) == 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_TXCSUM) == 0)\n \t\treturn flags;\n \n \tol_flags = mb->ol_flags;\n@@ -57,7 +57,7 @@ nfp_net_nfdk_tx_tso(struct nfp_net_txq *txq,\n \n \ttxd.raw = 0;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO_ANY) == 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LSO_ANY) == 0)\n \t\treturn txd.raw;\n \n \tol_flags = mb->ol_flags;\n@@ -146,7 +146,7 @@ nfp_net_nfdk_tx_maybe_close_block(struct nfp_net_txq *txq,\n \t\treturn -EINVAL;\n \n \t/* Count TSO descriptor */\n-\tif ((txq->hw->cap & NFP_NET_CFG_CTRL_LSO_ANY) != 0 &&\n+\tif ((txq->hw->super.cap & NFP_NET_CFG_CTRL_LSO_ANY) != 0 &&\n \t\t\t(pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG) != 0)\n \t\tn_descs++;\n \n@@ -184,7 +184,7 @@ nfp_net_nfdk_set_meta_data(struct rte_mbuf *pkt,\n \n \tmemset(&meta_data, 0, sizeof(meta_data));\n \thw = txq->hw;\n-\tcap_extend = hw->cap_ext;\n+\tcap_extend = hw->super.cap_ext;\n \n \tif ((pkt->ol_flags & RTE_MBUF_F_TX_VLAN) != 0 &&\n \t\t\t(hw->ctrl & NFP_NET_CFG_CTRL_TXVLAN_V2) != 0) {\n@@ -322,7 +322,7 @@ nfp_net_nfdk_xmit_pkts_common(void *tx_queue,\n \t\t\tnfp_net_nfdk_set_meta_data(pkt, txq, &metadata);\n \n \t\tif (unlikely(pkt->nb_segs > 1 &&\n-\t\t\t\t(hw->cap & NFP_NET_CFG_CTRL_GATHER) == 0)) {\n+\t\t\t\t(hw->super.cap & NFP_NET_CFG_CTRL_GATHER) == 0)) {\n \t\t\tPMD_TX_LOG(ERR, \"Multisegment packet not supported\");\n \t\t\tgoto xmit_end;\n \t\t}\n@@ -332,7 +332,7 @@ nfp_net_nfdk_xmit_pkts_common(void *tx_queue,\n \t\t * multisegment packet, but TSO info needs to be in all of them.\n \t\t */\n \t\tdma_len = pkt->data_len;\n-\t\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO_ANY) != 0 &&\n+\t\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LSO_ANY) != 0 &&\n \t\t\t\t(pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG) != 0) {\n \t\t\ttype = NFDK_DESC_TX_TYPE_TSO;\n \t\t} else if (pkt->next == NULL && dma_len <= NFDK_TX_MAX_DATA_PER_HEAD) {\n@@ -405,7 +405,7 @@ nfp_net_nfdk_xmit_pkts_common(void *tx_queue,\n \t\tktxds->raw = rte_cpu_to_le_64(nfp_net_nfdk_tx_cksum(txq, temp_pkt, metadata));\n \t\tktxds++;\n \n-\t\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO_ANY) != 0 &&\n+\t\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LSO_ANY) != 0 &&\n \t\t\t\t(temp_pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG) != 0) {\n \t\t\tktxds->raw = rte_cpu_to_le_64(nfp_net_nfdk_tx_tso(txq, temp_pkt));\n \t\t\tktxds++;\ndiff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c\nindex d32a82210c..8ac2acea7b 100644\n--- a/drivers/net/nfp/nfp_ethdev.c\n+++ b/drivers/net/nfp/nfp_ethdev.c\n@@ -119,7 +119,7 @@ nfp_net_start(struct rte_eth_dev *dev)\n \tif ((rxmode->mq_mode & RTE_ETH_MQ_RX_RSS) != 0) {\n \t\tnfp_net_rss_config_default(dev);\n \t\tupdate |= NFP_NET_CFG_UPDATE_RSS;\n-\t\tnew_ctrl |= nfp_net_cfg_ctrl_rss(hw->cap);\n+\t\tnew_ctrl |= nfp_net_cfg_ctrl_rss(hw->super.cap);\n \t}\n \n \t/* Enable device */\n@@ -128,19 +128,19 @@ nfp_net_start(struct rte_eth_dev *dev)\n \tupdate |= NFP_NET_CFG_UPDATE_GEN | NFP_NET_CFG_UPDATE_RING;\n \n \t/* Enable vxlan */\n-\tif ((hw->cap & NFP_NET_CFG_CTRL_VXLAN) != 0) {\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_VXLAN) != 0) {\n \t\tnew_ctrl |= NFP_NET_CFG_CTRL_VXLAN;\n \t\tupdate |= NFP_NET_CFG_UPDATE_VXLAN;\n \t}\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_RINGCFG) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RINGCFG) != 0)\n \t\tnew_ctrl |= NFP_NET_CFG_CTRL_RINGCFG;\n \n \tif (nfp_net_reconfig(hw, new_ctrl, update) != 0)\n \t\treturn -EIO;\n \n \t/* Enable packet type offload by extend ctrl word1. */\n-\tcap_extend = hw->cap_ext;\n+\tcap_extend = hw->super.cap_ext;\n \tif ((cap_extend & NFP_NET_CFG_CTRL_PKT_TYPE) != 0)\n \t\tctrl_extend = NFP_NET_CFG_CTRL_PKT_TYPE;\n \n@@ -579,8 +579,8 @@ nfp_net_init(struct rte_eth_dev *eth_dev)\n \thw->mtu = RTE_ETHER_MTU;\n \n \t/* VLAN insertion is incompatible with LSOv2 */\n-\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO2) != 0)\n-\t\thw->cap &= ~NFP_NET_CFG_CTRL_TXVLAN;\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LSO2) != 0)\n+\t\thw->super.cap &= ~NFP_NET_CFG_CTRL_TXVLAN;\n \n \tnfp_net_log_device_information(hw);\n \n@@ -608,7 +608,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev)\n \t/* Copying mac address to DPDK eth_dev struct */\n \trte_ether_addr_copy(&hw->mac_addr, eth_dev->data->mac_addrs);\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR) == 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LIVE_ADDR) == 0)\n \t\teth_dev->data->dev_flags |= RTE_ETH_DEV_NOLIVE_MAC_ADDR;\n \n \teth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;\ndiff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c\nindex 51c474275e..293d1ed53c 100644\n--- a/drivers/net/nfp/nfp_ethdev_vf.c\n+++ b/drivers/net/nfp/nfp_ethdev_vf.c\n@@ -86,7 +86,7 @@ nfp_netvf_start(struct rte_eth_dev *dev)\n \tif ((rxmode->mq_mode & RTE_ETH_MQ_RX_RSS) != 0) {\n \t\tnfp_net_rss_config_default(dev);\n \t\tupdate |= NFP_NET_CFG_UPDATE_RSS;\n-\t\tnew_ctrl |= nfp_net_cfg_ctrl_rss(hw->cap);\n+\t\tnew_ctrl |= nfp_net_cfg_ctrl_rss(hw->super.cap);\n \t}\n \n \t/* Enable device */\n@@ -94,7 +94,7 @@ nfp_netvf_start(struct rte_eth_dev *dev)\n \n \tupdate |= NFP_NET_CFG_UPDATE_GEN | NFP_NET_CFG_UPDATE_RING;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_RINGCFG) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RINGCFG) != 0)\n \t\tnew_ctrl |= NFP_NET_CFG_CTRL_RINGCFG;\n \n \tnn_cfg_writel(hw, NFP_NET_CFG_CTRL, new_ctrl);\n@@ -314,8 +314,8 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev)\n \thw->mtu = RTE_ETHER_MTU;\n \n \t/* VLAN insertion is incompatible with LSOv2 */\n-\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO2) != 0)\n-\t\thw->cap &= ~NFP_NET_CFG_CTRL_TXVLAN;\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LSO2) != 0)\n+\t\thw->super.cap &= ~NFP_NET_CFG_CTRL_TXVLAN;\n \n \tnfp_net_log_device_information(hw);\n \n@@ -341,7 +341,7 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev)\n \t/* Copying mac address to DPDK eth_dev struct */\n \trte_ether_addr_copy(&hw->mac_addr, eth_dev->data->mac_addrs);\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR) == 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LIVE_ADDR) == 0)\n \t\teth_dev->data->dev_flags |= RTE_ETH_DEV_NOLIVE_MAC_ADDR;\n \n \teth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;\ndiff --git a/drivers/net/nfp/nfp_ipsec.c b/drivers/net/nfp/nfp_ipsec.c\nindex af85e8575c..e080e71db2 100644\n--- a/drivers/net/nfp/nfp_ipsec.c\n+++ b/drivers/net/nfp/nfp_ipsec.c\n@@ -1382,7 +1382,7 @@ nfp_ipsec_init(struct rte_eth_dev *dev)\n \n \thw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \n-\tcap_extend = hw->cap_ext;\n+\tcap_extend = hw->super.cap_ext;\n \tif ((cap_extend & NFP_NET_CFG_CTRL_IPSEC) == 0) {\n \t\tPMD_INIT_LOG(INFO, \"Unsupported IPsec extend capability\");\n \t\treturn 0;\n@@ -1429,7 +1429,7 @@ nfp_ipsec_uninit(struct rte_eth_dev *dev)\n \n \thw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \n-\tcap_extend = hw->cap_ext;\n+\tcap_extend = hw->super.cap_ext;\n \tif ((cap_extend & NFP_NET_CFG_CTRL_IPSEC) == 0) {\n \t\tPMD_INIT_LOG(INFO, \"Unsupported IPsec extend capability\");\n \t\treturn;\ndiff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c\nindex 189f81bbb6..77c0652642 100644\n--- a/drivers/net/nfp/nfp_net_common.c\n+++ b/drivers/net/nfp/nfp_net_common.c\n@@ -408,7 +408,7 @@ nfp_net_configure(struct rte_eth_dev *dev)\n \n \t/* Checking RX mode */\n \tif ((rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) != 0 &&\n-\t\t\t(hw->cap & NFP_NET_CFG_CTRL_RSS_ANY) == 0) {\n+\t\t\t(hw->super.cap & NFP_NET_CFG_CTRL_RSS_ANY) == 0) {\n \t\tPMD_DRV_LOG(ERR, \"RSS not supported\");\n \t\treturn -EINVAL;\n \t}\n@@ -426,27 +426,29 @@ nfp_net_configure(struct rte_eth_dev *dev)\n void\n nfp_net_log_device_information(const struct nfp_net_hw *hw)\n {\n+\tuint32_t cap = hw->super.cap;\n+\n \tPMD_INIT_LOG(INFO, \"VER: %u.%u, Maximum supported MTU: %d\",\n \t\t\thw->ver.major, hw->ver.minor, hw->max_mtu);\n \n-\tPMD_INIT_LOG(INFO, \"CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\", hw->cap,\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_PROMISC   ? \"PROMISC \"   : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_L2BC      ? \"L2BCFILT \"  : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_L2MC      ? \"L2MCFILT \"  : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_RXCSUM    ? \"RXCSUM \"    : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_TXCSUM    ? \"TXCSUM \"    : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_RXVLAN    ? \"RXVLAN \"    : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_TXVLAN    ? \"TXVLAN \"    : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_RXVLAN_V2 ? \"RXVLANv2 \"  : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_TXVLAN_V2 ? \"TXVLANv2 \"  : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_RXQINQ    ? \"RXQINQ \"    : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_SCATTER   ? \"SCATTER \"   : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_GATHER    ? \"GATHER \"    : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR ? \"LIVE_ADDR \" : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_LSO       ? \"TSO \"       : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_LSO2      ? \"TSOv2 \"     : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_RSS       ? \"RSS \"       : \"\",\n-\t\t\thw->cap & NFP_NET_CFG_CTRL_RSS2      ? \"RSSv2 \"     : \"\");\n+\tPMD_INIT_LOG(INFO, \"CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\", cap,\n+\t\t\tcap & NFP_NET_CFG_CTRL_PROMISC   ? \"PROMISC \"   : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_L2BC      ? \"L2BCFILT \"  : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_L2MC      ? \"L2MCFILT \"  : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_RXCSUM    ? \"RXCSUM \"    : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_TXCSUM    ? \"TXCSUM \"    : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_RXVLAN    ? \"RXVLAN \"    : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_TXVLAN    ? \"TXVLAN \"    : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_RXVLAN_V2 ? \"RXVLANv2 \"  : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_TXVLAN_V2 ? \"TXVLANv2 \"  : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_RXQINQ    ? \"RXQINQ \"    : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_SCATTER   ? \"SCATTER \"   : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_GATHER    ? \"GATHER \"    : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_LIVE_ADDR ? \"LIVE_ADDR \" : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_LSO       ? \"TSO \"       : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_LSO2      ? \"TSOv2 \"     : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_RSS       ? \"RSS \"       : \"\",\n+\t\t\tcap & NFP_NET_CFG_CTRL_RSS2      ? \"RSSv2 \"     : \"\");\n \n \tPMD_INIT_LOG(INFO, \"max_rx_queues: %u, max_tx_queues: %u\",\n \t\t\thw->max_rx_queues, hw->max_tx_queues);\n@@ -456,9 +458,9 @@ static inline void\n nfp_net_enable_rxvlan_cap(struct nfp_net_hw *hw,\n \t\tuint32_t *ctrl)\n {\n-\tif ((hw->cap & NFP_NET_CFG_CTRL_RXVLAN_V2) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RXVLAN_V2) != 0)\n \t\t*ctrl |= NFP_NET_CFG_CTRL_RXVLAN_V2;\n-\telse if ((hw->cap & NFP_NET_CFG_CTRL_RXVLAN) != 0)\n+\telse if ((hw->super.cap & NFP_NET_CFG_CTRL_RXVLAN) != 0)\n \t\t*ctrl |= NFP_NET_CFG_CTRL_RXVLAN;\n }\n \n@@ -503,7 +505,7 @@ nfp_net_disable_queues(struct rte_eth_dev *dev)\n \t\t\tNFP_NET_CFG_UPDATE_RING |\n \t\t\tNFP_NET_CFG_UPDATE_MSIX;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_RINGCFG) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RINGCFG) != 0)\n \t\tnew_ctrl &= ~NFP_NET_CFG_CTRL_RINGCFG;\n \n \t/* If an error when reconfig we avoid to change hw state */\n@@ -552,7 +554,7 @@ nfp_net_set_mac_addr(struct rte_eth_dev *dev,\n \n \thw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \tif ((hw->ctrl & NFP_NET_CFG_CTRL_ENABLE) != 0 &&\n-\t\t\t(hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR) == 0) {\n+\t\t\t(hw->super.cap & NFP_NET_CFG_CTRL_LIVE_ADDR) == 0) {\n \t\tPMD_DRV_LOG(ERR, \"MAC address unable to change when port enabled\");\n \t\treturn -EBUSY;\n \t}\n@@ -563,7 +565,7 @@ nfp_net_set_mac_addr(struct rte_eth_dev *dev,\n \tupdate = NFP_NET_CFG_UPDATE_MACADDR;\n \tctrl = hw->ctrl;\n \tif ((hw->ctrl & NFP_NET_CFG_CTRL_ENABLE) != 0 &&\n-\t\t\t(hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR) != 0)\n+\t\t\t(hw->super.cap & NFP_NET_CFG_CTRL_LIVE_ADDR) != 0)\n \t\tctrl |= NFP_NET_CFG_CTRL_LIVE_ADDR;\n \n \t/* Signal the NIC about the change */\n@@ -631,7 +633,7 @@ nfp_check_offloads(struct rte_eth_dev *dev)\n \ttx_offload = dev_conf->txmode.offloads;\n \n \tif ((rx_offload & RTE_ETH_RX_OFFLOAD_IPV4_CKSUM) != 0) {\n-\t\tif ((hw->cap & NFP_NET_CFG_CTRL_RXCSUM) != 0)\n+\t\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RXCSUM) != 0)\n \t\t\tctrl |= NFP_NET_CFG_CTRL_RXCSUM;\n \t}\n \n@@ -639,25 +641,25 @@ nfp_check_offloads(struct rte_eth_dev *dev)\n \t\tnfp_net_enable_rxvlan_cap(hw, &ctrl);\n \n \tif ((rx_offload & RTE_ETH_RX_OFFLOAD_QINQ_STRIP) != 0) {\n-\t\tif ((hw->cap & NFP_NET_CFG_CTRL_RXQINQ) != 0)\n+\t\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RXQINQ) != 0)\n \t\t\tctrl |= NFP_NET_CFG_CTRL_RXQINQ;\n \t}\n \n \thw->mtu = dev->data->mtu;\n \n \tif ((tx_offload & RTE_ETH_TX_OFFLOAD_VLAN_INSERT) != 0) {\n-\t\tif ((hw->cap & NFP_NET_CFG_CTRL_TXVLAN_V2) != 0)\n+\t\tif ((hw->super.cap & NFP_NET_CFG_CTRL_TXVLAN_V2) != 0)\n \t\t\tctrl |= NFP_NET_CFG_CTRL_TXVLAN_V2;\n-\t\telse if ((hw->cap & NFP_NET_CFG_CTRL_TXVLAN) != 0)\n+\t\telse if ((hw->super.cap & NFP_NET_CFG_CTRL_TXVLAN) != 0)\n \t\t\tctrl |= NFP_NET_CFG_CTRL_TXVLAN;\n \t}\n \n \t/* L2 broadcast */\n-\tif ((hw->cap & NFP_NET_CFG_CTRL_L2BC) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_L2BC) != 0)\n \t\tctrl |= NFP_NET_CFG_CTRL_L2BC;\n \n \t/* L2 multicast */\n-\tif ((hw->cap & NFP_NET_CFG_CTRL_L2MC) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_L2MC) != 0)\n \t\tctrl |= NFP_NET_CFG_CTRL_L2MC;\n \n \t/* TX checksum offload */\n@@ -669,7 +671,7 @@ nfp_check_offloads(struct rte_eth_dev *dev)\n \t/* LSO offload */\n \tif ((tx_offload & RTE_ETH_TX_OFFLOAD_TCP_TSO) != 0 ||\n \t\t\t(tx_offload & RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO) != 0) {\n-\t\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO) != 0)\n+\t\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LSO) != 0)\n \t\t\tctrl |= NFP_NET_CFG_CTRL_LSO;\n \t\telse\n \t\t\tctrl |= NFP_NET_CFG_CTRL_LSO2;\n@@ -698,7 +700,7 @@ nfp_net_promisc_enable(struct rte_eth_dev *dev)\n \t\thw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \t}\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_PROMISC) == 0) {\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_PROMISC) == 0) {\n \t\tPMD_DRV_LOG(ERR, \"Promiscuous mode not supported\");\n \t\treturn -ENOTSUP;\n \t}\n@@ -1213,35 +1215,35 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \t/* Next should change when PF support is implemented */\n \tdev_info->max_mac_addrs = 1;\n \n-\tif ((hw->cap & (NFP_NET_CFG_CTRL_RXVLAN | NFP_NET_CFG_CTRL_RXVLAN_V2)) != 0)\n+\tif ((hw->super.cap & (NFP_NET_CFG_CTRL_RXVLAN | NFP_NET_CFG_CTRL_RXVLAN_V2)) != 0)\n \t\tdev_info->rx_offload_capa = RTE_ETH_RX_OFFLOAD_VLAN_STRIP;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_RXQINQ) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RXQINQ) != 0)\n \t\tdev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_QINQ_STRIP;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_RXCSUM) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RXCSUM) != 0)\n \t\tdev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_IPV4_CKSUM |\n \t\t\t\tRTE_ETH_RX_OFFLOAD_UDP_CKSUM |\n \t\t\t\tRTE_ETH_RX_OFFLOAD_TCP_CKSUM;\n \n-\tif ((hw->cap & (NFP_NET_CFG_CTRL_TXVLAN | NFP_NET_CFG_CTRL_TXVLAN_V2)) != 0)\n+\tif ((hw->super.cap & (NFP_NET_CFG_CTRL_TXVLAN | NFP_NET_CFG_CTRL_TXVLAN_V2)) != 0)\n \t\tdev_info->tx_offload_capa = RTE_ETH_TX_OFFLOAD_VLAN_INSERT;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_TXCSUM) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_TXCSUM) != 0)\n \t\tdev_info->tx_offload_capa |= RTE_ETH_TX_OFFLOAD_IPV4_CKSUM |\n \t\t\t\tRTE_ETH_TX_OFFLOAD_UDP_CKSUM |\n \t\t\t\tRTE_ETH_TX_OFFLOAD_TCP_CKSUM;\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO_ANY) != 0) {\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_LSO_ANY) != 0) {\n \t\tdev_info->tx_offload_capa |= RTE_ETH_TX_OFFLOAD_TCP_TSO;\n-\t\tif ((hw->cap & NFP_NET_CFG_CTRL_VXLAN) != 0)\n+\t\tif ((hw->super.cap & NFP_NET_CFG_CTRL_VXLAN) != 0)\n \t\t\tdev_info->tx_offload_capa |= RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO;\n \t}\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_GATHER) != 0)\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_GATHER) != 0)\n \t\tdev_info->tx_offload_capa |= RTE_ETH_TX_OFFLOAD_MULTI_SEGS;\n \n-\tcap_extend = hw->cap_ext;\n+\tcap_extend = hw->super.cap_ext;\n \tif ((cap_extend & NFP_NET_CFG_CTRL_IPSEC) != 0) {\n \t\tdev_info->tx_offload_capa |= RTE_ETH_TX_OFFLOAD_SECURITY;\n \t\tdev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_SECURITY;\n@@ -1281,7 +1283,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \t\t.nb_mtu_seg_max = NFP_TX_MAX_MTU_SEG,\n \t};\n \n-\tif ((hw->cap & NFP_NET_CFG_CTRL_RSS_ANY) != 0) {\n+\tif ((hw->super.cap & NFP_NET_CFG_CTRL_RSS_ANY) != 0) {\n \t\tdev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_RSS_HASH;\n \n \t\tdev_info->flow_type_rss_offloads = RTE_ETH_RSS_IPV4 |\n@@ -1334,8 +1336,8 @@ nfp_net_common_init(struct rte_pci_device *pci_dev,\n \t\treturn -ENODEV;\n \n \t/* Get some of the read-only fields from the config BAR */\n-\thw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP);\n-\thw->cap_ext = nn_cfg_readl(hw, NFP_NET_CFG_CAP_WORD1);\n+\thw->super.cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP);\n+\thw->super.cap_ext = nn_cfg_readl(hw, NFP_NET_CFG_CAP_WORD1);\n \thw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU);\n \thw->flbufsz = DEFAULT_FLBUF_SIZE;\n \n@@ -2025,14 +2027,14 @@ nfp_net_init_metadata_format(struct nfp_net_hw *hw)\n \t */\n \tif (hw->ver.major == 4) {\n \t\thw->meta_format = NFP_NET_METAFORMAT_CHAINED;\n-\t} else if ((hw->cap & NFP_NET_CFG_CTRL_CHAIN_META) != 0) {\n+\t} else if ((hw->super.cap & NFP_NET_CFG_CTRL_CHAIN_META) != 0) {\n \t\thw->meta_format = NFP_NET_METAFORMAT_CHAINED;\n \t\t/*\n-\t\t * RSS is incompatible with chained metadata. hw->cap just represents\n+\t\t * RSS is incompatible with chained metadata. hw->super.cap just represents\n \t\t * firmware's ability rather than the firmware's configuration. We decide\n-\t\t * to reduce the confusion to allow us can use hw->cap to identify RSS later.\n+\t\t * to reduce the confusion to allow us can use hw->super.cap to identify RSS later.\n \t\t */\n-\t\thw->cap &= ~NFP_NET_CFG_CTRL_RSS;\n+\t\thw->super.cap &= ~NFP_NET_CFG_CTRL_RSS;\n \t} else {\n \t\thw->meta_format = NFP_NET_METAFORMAT_SINGLE;\n \t}\ndiff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h\nindex 8a02911c45..7bcdd9295f 100644\n--- a/drivers/net/nfp/nfp_net_common.h\n+++ b/drivers/net/nfp/nfp_net_common.h\n@@ -112,7 +112,15 @@ struct nfp_app_fw_nic {\n \tuint8_t total_phyports;\n };\n \n+struct nfp_hw {\n+\tuint32_t cap;\n+\tuint32_t cap_ext;\n+};\n+\n struct nfp_net_hw {\n+\t/** The parent class */\n+\tstruct nfp_hw super;\n+\n \t/** Backpointer to the PF this port belongs to */\n \tstruct nfp_pf_dev *pf_dev;\n \n@@ -120,9 +128,7 @@ struct nfp_net_hw {\n \tstruct rte_eth_dev *eth_dev;\n \n \t/** Info from the firmware */\n-\tuint32_t cap_ext;\n \tstruct nfp_net_fw_ver ver;\n-\tuint32_t cap;\n \tuint32_t max_mtu;\n \tuint32_t mtu;\n \tuint32_t rx_offset;\ndiff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c\nindex efdca7fccf..a0c7e0e9b5 100644\n--- a/drivers/net/nfp/nfp_rxtx.c\n+++ b/drivers/net/nfp/nfp_rxtx.c\n@@ -386,7 +386,7 @@ nfp_net_parse_meta_qinq(const struct nfp_meta_parsed *meta,\n \tstruct nfp_net_hw *hw = rxq->hw;\n \n \tif ((hw->ctrl & NFP_NET_CFG_CTRL_RXQINQ) == 0 ||\n-\t\t\t(hw->cap & NFP_NET_CFG_CTRL_RXQINQ) == 0)\n+\t\t\t(hw->super.cap & NFP_NET_CFG_CTRL_RXQINQ) == 0)\n \t\treturn;\n \n \tif (meta->vlan_layer < NFP_META_MAX_VLANS)\n",
    "prefixes": [
        "v3",
        "05/25"
    ]
}