get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 131497,
    "url": "http://patches.dpdk.org/api/patches/131497/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230915091551.1459606-23-chaoyong.he@corigine.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": "<20230915091551.1459606-23-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230915091551.1459606-23-chaoyong.he@corigine.com",
    "date": "2023-09-15T09:15:46",
    "name": "[v3,22/27] net/nfp: add the dev module",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "6dd12742ce8641fffea0ecfaffdc368353ca9d8e",
    "submitter": {
        "id": 2554,
        "url": "http://patches.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.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/20230915091551.1459606-23-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 29520,
            "url": "http://patches.dpdk.org/api/series/29520/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=29520",
            "date": "2023-09-15T09:15:24",
            "name": "refact the nfpcore module",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/29520/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/131497/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/131497/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 71679425A3;\n\tFri, 15 Sep 2023 11:19:14 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id CC13E42D6B;\n\tFri, 15 Sep 2023 11:17:06 +0200 (CEST)",
            "from NAM12-BN8-obe.outbound.protection.outlook.com\n (mail-bn8nam12on2091.outbound.protection.outlook.com [40.107.237.91])\n by mails.dpdk.org (Postfix) with ESMTP id 80CAA42D97\n for <dev@dpdk.org>; Fri, 15 Sep 2023 11:17:04 +0200 (CEST)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by CO1PR13MB4773.namprd13.prod.outlook.com (2603:10b6:303:fb::6) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.21; Fri, 15 Sep\n 2023 09:17:02 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::c05c:6915:1628:70c4]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::c05c:6915:1628:70c4%7]) with mapi id 15.20.6768.029; Fri, 15 Sep 2023\n 09:17:02 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=HD2Oc/zIyfQVEirTAvVboXeileEQW/rt0wwExbCAXP+7AzhRGBe43IQ+ZMDuiqBrNNOXO4KGzwk7Wi96W6x5p7ktdM/ggwh9daLA9gg2AsUnQxaNIqTaJqTqCepxj2958xt+U4xfjOv/RQkJY3XusnkvjxCl0QfG/3baqj5dJFn5bs9YoLdrgil565yxKWi0tE7RahWJvnNj9mbUz6GHkSwhxDB5VcYZgWZxwBIicDwmxSHJN2Ag1XNsRwtC+Vn4UCOqlpIDBJF23HQGNflDnK3ywk5QlG2TFwvNtgfmYFLr7lgO95Yh0s+RzDFDFKZBK//v4SQOzRK2cWG02HGIlg==",
        "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=a5yHR0shQCwWitEv0o8kfjuogvwPSxeofUrE/ZqUHwc=;\n b=VBDwxBhKxbOvA/Dc7hN1tYcjaXlkjebZymt1+A/Cqw2MPeNmhCXuUQpi3g4ZnE9FRMPFWGAUQxNCPZS63JMzbkpSACiFdLvyrSvyDRiMd404kibVK5FCVX9vao+R4wc5Gy24W9tnfMpgRlkGM6jHBr1st2wSFtoeylXUMBcLm6Hfh9vV7z2fldBmmC+PzZtqBvdBFd0dfXrXLad4/EYiYZ8EYXD7OPvZ5m8WYMmMJZ5mPGMt2G7m/I1B1KY5WuHCq7laI1OWJ+5Rc5harprbLJuGECYS2k0aiOrT3fGlenzidvWtbZBM6M1cOPu6wST6278HlxF37KQxj5/Ngr/6+A==",
        "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=a5yHR0shQCwWitEv0o8kfjuogvwPSxeofUrE/ZqUHwc=;\n b=P9HVOO746so04NmukDvLZnKSJnlYbDFjNcFtLENjf2xJQG92WkI+RbvfB5e9aLaLndx5sg1xdJ9u7izL4IEnMiQXPm4RCY77e8WzHIo/gCQzD32IVOFEGQYLG5Bs7Bv2Iz/nRjkKSSxRlJNKBYTdSiYynX0WnIotcvF7+Tyu/SE=",
        "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\t=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@corigine.com>",
        "Subject": "[PATCH v3 22/27] net/nfp: add the dev module",
        "Date": "Fri, 15 Sep 2023 17:15:46 +0800",
        "Message-Id": "<20230915091551.1459606-23-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "In-Reply-To": "<20230915091551.1459606-1-chaoyong.he@corigine.com>",
        "References": "<20230830021457.2064750-1-chaoyong.he@corigine.com>\n <20230915091551.1459606-1-chaoyong.he@corigine.com>",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-ClientProxiedBy": "PH7PR10CA0017.namprd10.prod.outlook.com\n (2603:10b6:510:23d::10) 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_|CO1PR13MB4773:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "d344ca06-b4af-41ca-9027-08dbb5cc857b",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n A5lT/8n8H+01W1jd2hXI38zVKrEuaNjwUg4+XWO8g/IZQw7zE1c/YZlsstjHKT5sMSk0dOhjGT8TyjciRsAzg1OdNnLcaMVnyDn0uP5epvoc39LJCd3pvr6gU9R5CRHgoH5MHGXUKnRdI6496p4L5bZLYq7lVYmYeq44xkNKpm3VL5+Cwu2dRj46KghnAnRk7jiOi9W5bKPRgNCncNi4EOWrXtW2y/Vt7d9UsCbWQw12kF1Co54JVXgrULrtJ4G7KwpkKDSeSwZN3npd1GKN3JFApfuqPtte6EX+TE/qtEmWr/J8fr4RFaFTfTD6GOMg7aMSqFsHUP1YKDBYtHFNrYvkOiLHx6znw6i5jrLjDfuDmTN53HNKeysTp4+HCovEEvfVJLgo2y1OKRTh5gB/oEGeAFwPSZlUaV6yCNhNNAtEzR2a4GUD8Ue368Q+chxhbKgMA44/AlidATKhm4ONqSSe2TnxeBLsPkcyw/eKSORIBPmGmYscVjT/SxQOdkRg5av22xYag679GlvHFIlhx2i6pdMHPPmgoy84oYvwH8slfoNOqH6x5+h9WqSiQZzTUuJX3A4rYmoxFt3Z+tvqJxPwOq/UzUVD/Ap6cu4k72cK2ZtNvL2hzhLMwV3rGPAOdvDdqP9LoPS41nwIw/02ZN2OCbZB4P6lCdFPh0YyOQw=",
        "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)(39840400004)(346002)(136003)(376002)(396003)(366004)(451199024)(186009)(1800799009)(6512007)(107886003)(1076003)(2616005)(6666004)(52116002)(6506007)(6486002)(66946007)(26005)(316002)(41300700001)(66476007)(66556008)(6916009)(54906003)(5660300002)(4326008)(8676002)(38350700002)(8936002)(38100700002)(478600001)(66574015)(83380400001)(36756003)(44832011)(30864003)(86362001)(2906002);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?KFn3nmWFsxBYiKMrvUMINF0+unsD?=\n\t=?utf-8?q?sTkljlSzU3YTWSc/gembAHYgk/TuBReNDe6T+S6+6jrojU/a8cZUmxcaW88209jBu?=\n\t=?utf-8?q?LrRVospdBI15jHgD5VzMwJ2vAXS/dFIesa3/WvMozHfHeARgPcK3gw8uu9UHX8mD+?=\n\t=?utf-8?q?q6YGhlQXnlb+W1FUJpMPuAy9TCQN10nMSvNXVL68Vr4MaNJqolD+ssC50smuxJbA4?=\n\t=?utf-8?q?8N8/KWx1JewE0El8VubA3XmX/kn2NVd27xkbiO08Mv+Sae7JtC2XrUm6nvquCYkR/?=\n\t=?utf-8?q?MyDx5jaKyLuYNrzJFtXM0KxUKYu3DZuLTpUWYhEIBamLhYqrbq5ejq/0xGaG+FKrk?=\n\t=?utf-8?q?iIh1YYS1emIzAFQYOiCx0HgFtBxL1GgZud2SPfbTifHuJHOubJgorgVcb0aTezdry?=\n\t=?utf-8?q?lBU9IFFjFxLzG7Z9454ky9gLkacQHrAwnnf8CJd7t/5/F8gVBnzdrdRUiiP1SwFiz?=\n\t=?utf-8?q?CXsD6rCMqn5ZZLaxOKaTkyM7g52U57oQyAND/Nheoz0WK9gFJOXf+NKJ3uP2VCBRe?=\n\t=?utf-8?q?8grNjwoBokBrnVVtGcn0A0jIApEqI2/I3q/hI4m4tiBdtDGJfR/vWICmfUAwUCien?=\n\t=?utf-8?q?JpHCdl4ZOe21TAabECkunG+0WKgXiwNX1UZfqOjc8MaN+cWCEoFZdhTnDyAJvjWym?=\n\t=?utf-8?q?mrpU7CXxYOiysj29H7NpBGyUcW1940dmywHvE74LAihmzqrmUqltI9zvvChfHruqh?=\n\t=?utf-8?q?CGh95pQpquhYv4ebyCkQJZjywketD1wcI7zPUvAxZLGqC7botjURTH3q2iJw3mPMA?=\n\t=?utf-8?q?Ov6m4SDLbvVLV6I11XKAOwMKjSMd7qL1h545bJR5cgUG1otcZCnbI+rHoofCWYbkZ?=\n\t=?utf-8?q?ivs6wu8oYOp5rf0CGIkWlhY/6X1kguYhSgNHT406m6UKhlUaKPl7KFYHgzc+0F16Z?=\n\t=?utf-8?q?ZgUE2GFGHrQNSId7TmLH2tkl72U4KuXJbNpBlVagYQOEQse2r4CdNCajoq5XAOySf?=\n\t=?utf-8?q?Q4h+I71n8VLVAEpjMDIShpaRg/ZDwjgz+jGBnKQ8vuLOzK8FTBsPj2HEtlIrhQneJ?=\n\t=?utf-8?q?UtqKIayqGbFFQjw8WA0Ouoecw2zlDdsOtv2tSIdNawlzB39hgQ3P260qNZ943ghm0?=\n\t=?utf-8?q?zlsDU6ChB/F2XDAEUC1EnEcy/iosx4k2SHMbSb2JZg90IGXlIxIpCJ1kS4Mcut0qp?=\n\t=?utf-8?q?EPmw3C9h8vQEn7F1bY2U0FOEm6Uxg5EWU8rTuCOrQbeBcGYf2WkRPBbsOZVuGnITJ?=\n\t=?utf-8?q?gxcsccrjRhQfLSUZLCur5Rbb/X3JLs53Q8Py+zkkrp43M4AVMP+gkkqnyJ8qx+V+N?=\n\t=?utf-8?q?Kp4B3Y49og+lh0OOIPQ3DWkRvNZoE+/dobPBl+idwIe31zM1D8/3Z5lvU9PHSDdhm?=\n\t=?utf-8?q?ACV1Y7wSsnIDGymUr1kK2EscYypGUgnQv4ZIDZ447NnZxuQj5in+J5xCCmJYh+gVA?=\n\t=?utf-8?q?K2caPnA0h4NdLVHrPBRfDGtF2PdteecwsBjERIHHxezlWvAhLPzfSOoYo2NpMmRjm?=\n\t=?utf-8?q?nE7zJpXyRmubyHXpkBmYU21Bgi1vNCLCTLNG16FoKx58V705WmkCAuLbmZN0YW12u?=\n\t=?utf-8?q?c1DGExYGLNPyJQI6E4WaAiIFeFQa07Lx5g=3D=3D?=",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n d344ca06-b4af-41ca-9027-08dbb5cc857b",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "15 Sep 2023 09:17:02.3405 (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 7lOm5jtxIPWPOfVrcz7VclqtWJnFc9Ifcx9NjaHGtU918mx6Z8wVFwNN53Q8HZFcs10p/0l9AZJi7eO1gRbOBUsBJt7HzDkE7yj5GWv2Abs=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CO1PR13MB4773",
        "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": "Add the nfp_dev module to simplify the logic.\n\nThe data structure we import can gather and replace several macro\nwhich scatter everywhere. Which also make the logic of choose value\nfor different devices unnecessary and so eliminate such logic.\n\nSigned-off-by: Chaoyong He <chaoyong.he@corigine.com>\nReviewed-by: Niklas Söderlund <niklas.soderlund@corigine.com>\n---\n drivers/net/nfp/flower/nfp_flower.c           |  6 +-\n .../net/nfp/flower/nfp_flower_representor.c   |  6 +-\n drivers/net/nfp/meson.build                   |  1 +\n drivers/net/nfp/nfd3/nfp_nfd3_dp.c            |  5 +-\n drivers/net/nfp/nfdk/nfp_nfdk_dp.c            |  5 +-\n drivers/net/nfp/nfp_common.c                  | 50 ++----------\n drivers/net/nfp/nfp_common.h                  | 48 +++--------\n drivers/net/nfp/nfp_ethdev.c                  | 63 ++++++---------\n drivers/net/nfp/nfp_ethdev_vf.c               | 17 +---\n drivers/net/nfp/nfp_rxtx.c                    |  5 +-\n drivers/net/nfp/nfp_rxtx.h                    | 12 ---\n drivers/net/nfp/nfpcore/nfp_dev.c             | 81 +++++++++++++++++++\n drivers/net/nfp/nfpcore/nfp_dev.h             | 44 ++++++++++\n 13 files changed, 185 insertions(+), 158 deletions(-)\n create mode 100644 drivers/net/nfp/nfpcore/nfp_dev.c\n create mode 100644 drivers/net/nfp/nfpcore/nfp_dev.h",
    "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c\nindex 24a6878149..43263531c5 100644\n--- a/drivers/net/nfp/flower/nfp_flower.c\n+++ b/drivers/net/nfp/flower/nfp_flower.c\n@@ -503,7 +503,8 @@ nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw)\n \t\t * resizing in later calls to the queue setup function.\n \t\t */\n \t\ttz = rte_eth_dma_zone_reserve(eth_dev, \"ctrl_rx_ring\", i,\n-\t\t\t\tsizeof(struct nfp_net_rx_desc) * NFP_NET_MAX_RX_DESC,\n+\t\t\t\tsizeof(struct nfp_net_rx_desc) *\n+\t\t\t\tpf_dev->dev_info->max_qc_size,\n \t\t\t\tNFP_MEMZONE_ALIGN, numa_node);\n \t\tif (tz == NULL) {\n \t\t\tPMD_DRV_LOG(ERR, \"Error allocating rx dma\");\n@@ -558,7 +559,8 @@ nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw)\n \t\t * resizing in later calls to the queue setup function.\n \t\t */\n \t\ttz = rte_eth_dma_zone_reserve(eth_dev, \"ctrl_tx_ring\", i,\n-\t\t\t\tsizeof(struct nfp_net_nfd3_tx_desc) * NFP_NET_MAX_TX_DESC,\n+\t\t\t\tsizeof(struct nfp_net_nfd3_tx_desc) *\n+\t\t\t\tpf_dev->dev_info->max_qc_size,\n \t\t\t\tNFP_MEMZONE_ALIGN, numa_node);\n \t\tif (tz == NULL) {\n \t\t\tPMD_DRV_LOG(ERR, \"Error allocating tx dma\");\ndiff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c\nindex 5f94d20f1b..dc6a2c7a9a 100644\n--- a/drivers/net/nfp/flower/nfp_flower_representor.c\n+++ b/drivers/net/nfp/flower/nfp_flower_representor.c\n@@ -67,7 +67,8 @@ nfp_pf_repr_rx_queue_setup(struct rte_eth_dev *dev,\n \t * resizing in later calls to the queue setup function.\n \t */\n \ttz = rte_eth_dma_zone_reserve(dev, \"rx_ring\", queue_idx,\n-\t\t\tsizeof(struct nfp_net_rx_desc) * NFP_NET_MAX_RX_DESC,\n+\t\t\tsizeof(struct nfp_net_rx_desc) *\n+\t\t\thw->pf_dev->dev_info->max_qc_size,\n \t\t\tNFP_MEMZONE_ALIGN, socket_id);\n \tif (tz == NULL) {\n \t\tPMD_DRV_LOG(ERR, \"Error allocating rx dma\");\n@@ -140,7 +141,8 @@ nfp_pf_repr_tx_queue_setup(struct rte_eth_dev *dev,\n \t * resizing in later calls to the queue setup function.\n \t */\n \ttz = rte_eth_dma_zone_reserve(dev, \"tx_ring\", queue_idx,\n-\t\t\tsizeof(struct nfp_net_nfd3_tx_desc) * NFP_NET_MAX_TX_DESC,\n+\t\t\tsizeof(struct nfp_net_nfd3_tx_desc) *\n+\t\t\thw->pf_dev->dev_info->max_qc_size,\n \t\t\tNFP_MEMZONE_ALIGN, socket_id);\n \tif (tz == NULL) {\n \t\tPMD_DRV_LOG(ERR, \"Error allocating tx dma\");\ndiff --git a/drivers/net/nfp/meson.build b/drivers/net/nfp/meson.build\nindex 93c708959c..580a478cd6 100644\n--- a/drivers/net/nfp/meson.build\n+++ b/drivers/net/nfp/meson.build\n@@ -21,6 +21,7 @@ sources = files(\n         'nfpcore/nfp_rtsym.c',\n         'nfpcore/nfp_nsp_cmds.c',\n         'nfpcore/nfp_crc.c',\n+        'nfpcore/nfp_dev.c',\n         'nfpcore/nfp_mutex.c',\n         'nfpcore/nfp_nsp_eth.c',\n         'nfpcore/nfp_hwinfo.c',\ndiff --git a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c\nindex ee39686329..79e1e1041c 100644\n--- a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c\n+++ b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c\n@@ -262,7 +262,6 @@ nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev,\n \t\tunsigned int socket_id,\n \t\tconst struct rte_eth_txconf *tx_conf)\n {\n-\tint ret;\n \tsize_t size;\n \tuint32_t tx_desc_sz;\n \tuint16_t min_tx_desc;\n@@ -276,9 +275,7 @@ nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev,\n \n \tPMD_INIT_FUNC_TRACE();\n \n-\tret = nfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc);\n-\tif (ret != 0)\n-\t\treturn ret;\n+\tnfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc);\n \n \t/* Validating number of descriptors */\n \ttx_desc_sz = nb_desc * sizeof(struct nfp_net_nfd3_tx_desc);\ndiff --git a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c\nindex f66802211f..48a74d109a 100644\n--- a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c\n+++ b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c\n@@ -357,7 +357,6 @@ nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,\n \t\tunsigned int socket_id,\n \t\tconst struct rte_eth_txconf *tx_conf)\n {\n-\tint ret;\n \tsize_t size;\n \tuint32_t tx_desc_sz;\n \tuint16_t min_tx_desc;\n@@ -371,9 +370,7 @@ nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,\n \n \tPMD_INIT_FUNC_TRACE();\n \n-\tret = nfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc);\n-\tif (ret != 0)\n-\t\treturn ret;\n+\tnfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc);\n \n \t/* Validating number of descriptors */\n \ttx_desc_sz = nb_desc * sizeof(struct nfp_net_nfdk_tx_desc);\ndiff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c\nindex 5092e5869d..d6ff4f17ae 100644\n--- a/drivers/net/nfp/nfp_common.c\n+++ b/drivers/net/nfp/nfp_common.c\n@@ -1146,30 +1146,16 @@ nfp_net_xstats_reset(struct rte_eth_dev *dev)\n \treturn nfp_net_stats_reset(dev);\n }\n \n-int\n+void\n nfp_net_rx_desc_limits(struct nfp_net_hw *hw,\n \t\tuint16_t *min_rx_desc,\n \t\tuint16_t *max_rx_desc)\n {\n-\t*max_rx_desc = NFP_NET_MAX_RX_DESC;\n-\n-\tswitch (hw->device_id) {\n-\tcase PCI_DEVICE_ID_NFP3800_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP3800_VF_NIC:\n-\t\t*min_rx_desc = NFP3800_NET_MIN_RX_DESC;\n-\t\treturn 0;\n-\tcase PCI_DEVICE_ID_NFP4000_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP6000_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP6000_VF_NIC:\n-\t\t*min_rx_desc = NFP_NET_MIN_RX_DESC;\n-\t\treturn 0;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"Unknown NFP device id.\");\n-\t\treturn -EINVAL;\n-\t}\n+\t*max_rx_desc = hw->pf_dev->dev_info->max_qc_size;\n+\t*min_rx_desc = hw->pf_dev->dev_info->min_qc_size;\n }\n \n-int\n+void\n nfp_net_tx_desc_limits(struct nfp_net_hw *hw,\n \t\tuint16_t *min_tx_desc,\n \t\tuint16_t *max_tx_desc)\n@@ -1181,28 +1167,13 @@ nfp_net_tx_desc_limits(struct nfp_net_hw *hw,\n \telse\n \t\ttx_dpp = NFDK_TX_DESC_PER_SIMPLE_PKT;\n \n-\t*max_tx_desc = NFP_NET_MAX_TX_DESC / tx_dpp;\n-\n-\tswitch (hw->device_id) {\n-\tcase PCI_DEVICE_ID_NFP3800_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP3800_VF_NIC:\n-\t\t*min_tx_desc = NFP3800_NET_MIN_TX_DESC / tx_dpp;\n-\t\treturn 0;\n-\tcase PCI_DEVICE_ID_NFP4000_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP6000_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP6000_VF_NIC:\n-\t\t*min_tx_desc = NFP_NET_MIN_TX_DESC / tx_dpp;\n-\t\treturn 0;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"Unknown NFP device id.\");\n-\t\treturn -EINVAL;\n-\t}\n+\t*max_tx_desc = hw->pf_dev->dev_info->max_qc_size / tx_dpp;\n+\t*min_tx_desc = hw->pf_dev->dev_info->min_qc_size / tx_dpp;\n }\n \n int\n nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n {\n-\tint ret;\n \tuint16_t min_rx_desc;\n \tuint16_t max_rx_desc;\n \tuint16_t min_tx_desc;\n@@ -1211,13 +1182,8 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \n \thw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \n-\tret = nfp_net_rx_desc_limits(hw, &min_rx_desc, &max_rx_desc);\n-\tif (ret != 0)\n-\t\treturn ret;\n-\n-\tret = nfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc);\n-\tif (ret != 0)\n-\t\treturn ret;\n+\tnfp_net_rx_desc_limits(hw, &min_rx_desc, &max_rx_desc);\n+\tnfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc);\n \n \tdev_info->max_rx_queues = (uint16_t)hw->max_rx_queues;\n \tdev_info->max_tx_queues = (uint16_t)hw->max_tx_queues;\ndiff --git a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h\nindex 86c4e10040..5fc9f0ccda 100644\n--- a/drivers/net/nfp/nfp_common.h\n+++ b/drivers/net/nfp/nfp_common.h\n@@ -7,16 +7,9 @@\n #define _NFP_COMMON_H_\n \n #include \"nfp_ctrl.h\"\n+#include \"nfpcore/nfp_dev.h\"\n \n #define NFP_NET_PMD_VERSION \"0.1\"\n-#define PCI_VENDOR_ID_NETRONOME         0x19ee\n-#define PCI_VENDOR_ID_CORIGINE          0x1da8\n-\n-#define PCI_DEVICE_ID_NFP3800_PF_NIC    0x3800\n-#define PCI_DEVICE_ID_NFP3800_VF_NIC    0x3803\n-#define PCI_DEVICE_ID_NFP4000_PF_NIC    0x4000\n-#define PCI_DEVICE_ID_NFP6000_PF_NIC    0x6000\n-#define PCI_DEVICE_ID_NFP6000_VF_NIC    0x6003  /* Include NFP4000VF */\n \n /* Forward declaration */\n struct nfp_net_adapter;\n@@ -28,7 +21,6 @@ struct nfp_net_adapter;\n #define NFP_NET_CRTL_BAR        0\n #define NFP_NET_TX_BAR          2\n #define NFP_NET_RX_BAR          2\n-#define NFP_QCP_QUEUE_AREA_SZ\t\t\t0x80000\n \n /* Macros for accessing the Queue Controller Peripheral 'CSRs' */\n #define NFP_QCP_QUEUE_OFF(_x)                 ((_x) * 0x800)\n@@ -39,17 +31,6 @@ struct nfp_net_adapter;\n #define NFP_QCP_QUEUE_STS_HI                    0x000c\n #define NFP_QCP_QUEUE_STS_HI_WRITEPTR_mask    (0x3ffff)\n \n-#define NFP_PCIE_QCP_NFP3800_OFFSET            0x400000\n-#define NFP_PCIE_QCP_NFP6000_OFFSET            0x80000\n-#define NFP_PCIE_QUEUE_NFP3800_MASK            0x1ff\n-#define NFP_PCIE_QUEUE_NFP6000_MASK            0xff\n-#define NFP_PCIE_QCP_PF_OFFSET                 0x0\n-#define NFP_PCIE_QCP_VF_OFFSET                 0x0\n-\n-/* The offset of the queue controller queues in the PCIe Target */\n-#define NFP_PCIE_QUEUE(_offset, _q, _mask)    \\\n-\t\t((_offset) + (NFP_QCP_QUEUE_ADDR_SZ * ((_q) & (_mask))))\n-\n /* Interrupt definitions */\n #define NFP_NET_IRQ_LSC_IDX             0\n \n@@ -111,6 +92,9 @@ struct nfp_pf_dev {\n \t/* Backpointer to associated pci device */\n \tstruct rte_pci_device *pci_dev;\n \n+\t/** NFP ASIC params */\n+\tconst struct nfp_dev_info *dev_info;\n+\n \tenum nfp_app_fw_id app_fw_id;\n \n \t/* Pointer to the app running on the PF */\n@@ -352,23 +336,11 @@ nfp_qcp_read(uint8_t *q, enum nfp_qcp_ptr ptr)\n }\n \n static inline uint32_t\n-nfp_pci_queue(struct rte_pci_device *pdev, uint16_t queue)\n+nfp_qcp_queue_offset(const struct nfp_dev_info *dev_info,\n+\t\tuint16_t queue)\n {\n-\tswitch (pdev->id.device_id) {\n-\tcase PCI_DEVICE_ID_NFP4000_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP6000_PF_NIC:\n-\t\treturn NFP_PCIE_QUEUE(NFP_PCIE_QCP_PF_OFFSET, queue,\n-\t\t\t\tNFP_PCIE_QUEUE_NFP6000_MASK);\n-\tcase PCI_DEVICE_ID_NFP3800_VF_NIC:\n-\t\treturn NFP_PCIE_QUEUE(NFP_PCIE_QCP_VF_OFFSET, queue,\n-\t\t\t\tNFP_PCIE_QUEUE_NFP3800_MASK);\n-\tcase PCI_DEVICE_ID_NFP6000_VF_NIC:\n-\t\treturn NFP_PCIE_QUEUE(NFP_PCIE_QCP_VF_OFFSET, queue,\n-\t\t\t\tNFP_PCIE_QUEUE_NFP6000_MASK);\n-\tdefault:\n-\t\treturn NFP_PCIE_QUEUE(NFP_PCIE_QCP_PF_OFFSET, queue,\n-\t\t\t\tNFP_PCIE_QUEUE_NFP3800_MASK);\n-\t}\n+\treturn dev_info->qc_addr_offset + NFP_QCP_QUEUE_ADDR_SZ *\n+\t\t\t(queue & dev_info->qc_idx_mask);\n }\n \n /* Prototypes for common NFP functions */\n@@ -434,10 +406,10 @@ void nfp_net_close_rx_queue(struct rte_eth_dev *dev);\n void nfp_net_stop_tx_queue(struct rte_eth_dev *dev);\n void nfp_net_close_tx_queue(struct rte_eth_dev *dev);\n int nfp_net_set_vxlan_port(struct nfp_net_hw *hw, size_t idx, uint16_t port);\n-int nfp_net_rx_desc_limits(struct nfp_net_hw *hw,\n+void nfp_net_rx_desc_limits(struct nfp_net_hw *hw,\n \t\tuint16_t *min_rx_desc,\n \t\tuint16_t *max_rx_desc);\n-int nfp_net_tx_desc_limits(struct nfp_net_hw *hw,\n+void nfp_net_tx_desc_limits(struct nfp_net_hw *hw,\n \t\tuint16_t *min_tx_desc,\n \t\tuint16_t *max_tx_desc);\n int nfp_net_check_dma_mask(struct nfp_net_hw *hw, char *name);\ndiff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c\nindex 3f5375deb9..c37d8a1449 100644\n--- a/drivers/net/nfp/nfp_ethdev.c\n+++ b/drivers/net/nfp/nfp_ethdev.c\n@@ -496,9 +496,8 @@ nfp_net_init(struct rte_eth_dev *eth_dev)\n \tstruct nfp_app_fw_nic *app_fw_nic;\n \tstruct nfp_net_hw *hw;\n \tstruct rte_ether_addr *tmp_ether_addr;\n-\tuint64_t rx_bar_off = 0;\n-\tuint64_t tx_bar_off = 0;\n-\tuint32_t start_q;\n+\tuint64_t rx_base;\n+\tuint64_t tx_base;\n \tint port = 0;\n \tint err;\n \n@@ -576,25 +575,14 @@ nfp_net_init(struct rte_eth_dev *eth_dev)\n \n \n \t/* Work out where in the BAR the queues start. */\n-\tswitch (pci_dev->id.device_id) {\n-\tcase PCI_DEVICE_ID_NFP3800_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP4000_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP6000_PF_NIC:\n-\t\tstart_q = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ);\n-\t\ttx_bar_off = nfp_pci_queue(pci_dev, start_q);\n-\t\tstart_q = nn_cfg_readl(hw, NFP_NET_CFG_START_RXQ);\n-\t\trx_bar_off = nfp_pci_queue(pci_dev, start_q);\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"nfp_net: no device ID matching\");\n-\t\treturn -ENODEV;\n-\t}\n+\ttx_base = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ);\n+\trx_base = nn_cfg_readl(hw, NFP_NET_CFG_START_RXQ);\n \n-\tPMD_INIT_LOG(DEBUG, \"tx_bar_off: 0x%\" PRIx64 \"\", tx_bar_off);\n-\tPMD_INIT_LOG(DEBUG, \"rx_bar_off: 0x%\" PRIx64 \"\", rx_bar_off);\n+\tPMD_INIT_LOG(DEBUG, \"tx_base: 0x%\" PRIx64 \"\", tx_base);\n+\tPMD_INIT_LOG(DEBUG, \"rx_base: 0x%\" PRIx64 \"\", rx_base);\n \n-\thw->tx_bar = pf_dev->qc_bar + tx_bar_off;\n-\thw->rx_bar = pf_dev->qc_bar + rx_bar_off;\n+\thw->tx_bar = pf_dev->qc_bar + tx_base * NFP_QCP_QUEUE_ADDR_SZ;\n+\thw->rx_bar = pf_dev->qc_bar + rx_base * NFP_QCP_QUEUE_ADDR_SZ;\n \teth_dev->data->dev_private = hw;\n \n \tPMD_INIT_LOG(DEBUG, \"ctrl_bar: %p, tx_bar: %p, rx_bar: %p\",\n@@ -902,10 +890,17 @@ nfp_pf_init(struct rte_pci_device *pci_dev)\n \tchar name[RTE_ETH_NAME_MAX_LEN];\n \tstruct nfp_rtsym_table *sym_tbl;\n \tstruct nfp_eth_table *nfp_eth_table;\n+\tconst struct nfp_dev_info *dev_info;\n \n \tif (pci_dev == NULL)\n \t\treturn -ENODEV;\n \n+\tdev_info = nfp_dev_info_get(pci_dev->id.device_id);\n+\tif (dev_info == NULL) {\n+\t\tPMD_INIT_LOG(ERR, \"Not supported device ID\");\n+\t\treturn -ENODEV;\n+\t}\n+\n \t/*\n \t * When device bound to UIO, the device could be used, by mistake,\n \t * by two DPDK apps, and the UIO driver does not avoid it. This\n@@ -976,27 +971,14 @@ nfp_pf_init(struct rte_pci_device *pci_dev)\n \tpf_dev->sym_tbl = sym_tbl;\n \tpf_dev->pci_dev = pci_dev;\n \tpf_dev->nfp_eth_table = nfp_eth_table;\n+\tpf_dev->dev_info = dev_info;\n \n \t/* configure access to tx/rx vNIC BARs */\n-\tswitch (pci_dev->id.device_id) {\n-\tcase PCI_DEVICE_ID_NFP3800_PF_NIC:\n-\t\taddr = NFP_PCIE_QUEUE(NFP_PCIE_QCP_NFP3800_OFFSET,\n-\t\t\t\t\t0, NFP_PCIE_QUEUE_NFP3800_MASK);\n-\t\tbreak;\n-\tcase PCI_DEVICE_ID_NFP4000_PF_NIC:\n-\tcase PCI_DEVICE_ID_NFP6000_PF_NIC:\n-\t\taddr = NFP_PCIE_QUEUE(NFP_PCIE_QCP_NFP6000_OFFSET,\n-\t\t\t\t\t0, NFP_PCIE_QUEUE_NFP6000_MASK);\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_INIT_LOG(ERR, \"nfp_net: no device ID matching\");\n-\t\tret = -ENODEV;\n-\t\tgoto pf_cleanup;\n-\t}\n-\n+\taddr = nfp_qcp_queue_offset(pf_dev->dev_info, 0);\n \tcpp_id = NFP_CPP_ISLAND_ID(0, NFP_CPP_ACTION_RW, 0, 0);\n+\n \tpf_dev->qc_bar = nfp_cpp_map_area(pf_dev->cpp, cpp_id,\n-\t\t\taddr, NFP_QCP_QUEUE_AREA_SZ,\n+\t\t\taddr, pf_dev->dev_info->qc_area_sz,\n \t\t\t&pf_dev->qc_area);\n \tif (pf_dev->qc_bar == NULL) {\n \t\tPMD_INIT_LOG(ERR, \"nfp_rtsym_map fails for net.qc\");\n@@ -1111,10 +1093,17 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev)\n \tstruct nfp_cpp *cpp;\n \tenum nfp_app_fw_id app_fw_id;\n \tstruct nfp_rtsym_table *sym_tbl;\n+\tconst struct nfp_dev_info *dev_info;\n \n \tif (pci_dev == NULL)\n \t\treturn -ENODEV;\n \n+\tdev_info = nfp_dev_info_get(pci_dev->id.device_id);\n+\tif (dev_info == NULL) {\n+\t\tPMD_INIT_LOG(ERR, \"Not supported device ID\");\n+\t\treturn -ENODEV;\n+\t}\n+\n \t/*\n \t * When device bound to UIO, the device could be used, by mistake,\n \t * by two DPDK apps, and the UIO driver does not avoid it. This\ndiff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c\nindex eaf815d06d..cf60e56c28 100644\n--- a/drivers/net/nfp/nfp_ethdev_vf.c\n+++ b/drivers/net/nfp/nfp_ethdev_vf.c\n@@ -305,19 +305,10 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev)\n \t}\n \n \t/* Work out where in the BAR the queues start. */\n-\tswitch (pci_dev->id.device_id) {\n-\tcase PCI_DEVICE_ID_NFP3800_VF_NIC:\n-\tcase PCI_DEVICE_ID_NFP6000_VF_NIC:\n-\t\tstart_q = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ);\n-\t\ttx_bar_off = nfp_pci_queue(pci_dev, start_q);\n-\t\tstart_q = nn_cfg_readl(hw, NFP_NET_CFG_START_RXQ);\n-\t\trx_bar_off = nfp_pci_queue(pci_dev, start_q);\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"nfp_net: no device ID matching\");\n-\t\terr = -ENODEV;\n-\t\tgoto dev_err_ctrl_map;\n-\t}\n+\tstart_q = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ);\n+\ttx_bar_off = nfp_qcp_queue_offset(hw->pf_dev->dev_info, start_q);\n+\tstart_q = nn_cfg_readl(hw, NFP_NET_CFG_START_RXQ);\n+\trx_bar_off = nfp_qcp_queue_offset(hw->pf_dev->dev_info, start_q);\n \n \tPMD_INIT_LOG(DEBUG, \"tx_bar_off: 0x%\" PRIx64 \"\", tx_bar_off);\n \tPMD_INIT_LOG(DEBUG, \"rx_bar_off: 0x%\" PRIx64 \"\", rx_bar_off);\ndiff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c\nindex f0c371ea2b..1b8bb3471d 100644\n--- a/drivers/net/nfp/nfp_rxtx.c\n+++ b/drivers/net/nfp/nfp_rxtx.c\n@@ -677,7 +677,6 @@ nfp_net_rx_queue_setup(struct rte_eth_dev *dev,\n \t\t       const struct rte_eth_rxconf *rx_conf,\n \t\t       struct rte_mempool *mp)\n {\n-\tint ret;\n \tuint16_t min_rx_desc;\n \tuint16_t max_rx_desc;\n \tconst struct rte_memzone *tz;\n@@ -689,9 +688,7 @@ nfp_net_rx_queue_setup(struct rte_eth_dev *dev,\n \n \tPMD_INIT_FUNC_TRACE();\n \n-\tret = nfp_net_rx_desc_limits(hw, &min_rx_desc, &max_rx_desc);\n-\tif (ret != 0)\n-\t\treturn ret;\n+\tnfp_net_rx_desc_limits(hw, &min_rx_desc, &max_rx_desc);\n \n \t/* Validating number of descriptors */\n \trx_desc_sz = nb_desc * sizeof(struct nfp_net_rx_desc);\ndiff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h\nindex 48e548b02d..6d1c8e4605 100644\n--- a/drivers/net/nfp/nfp_rxtx.h\n+++ b/drivers/net/nfp/nfp_rxtx.h\n@@ -74,18 +74,6 @@ struct nfp_meta_parsed {\n \t} vlan[NFP_META_MAX_VLANS];\n };\n \n-/*\n- * The maximum number of descriptors is limited by design as\n- * DPDK uses uint16_t variables for these values\n- */\n-#define NFP_NET_MAX_TX_DESC (32 * 1024)\n-#define NFP_NET_MIN_TX_DESC 256\n-#define NFP3800_NET_MIN_TX_DESC 512\n-\n-#define NFP_NET_MAX_RX_DESC (32 * 1024)\n-#define NFP_NET_MIN_RX_DESC 256\n-#define NFP3800_NET_MIN_RX_DESC 512\n-\n /* Descriptor alignment */\n #define NFP_ALIGN_RING_DESC 128\n \ndiff --git a/drivers/net/nfp/nfpcore/nfp_dev.c b/drivers/net/nfp/nfpcore/nfp_dev.c\nnew file mode 100644\nindex 0000000000..7799fa699a\n--- /dev/null\n+++ b/drivers/net/nfp/nfpcore/nfp_dev.c\n@@ -0,0 +1,81 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2023 Corigine, Inc.\n+ * All rights reserved.\n+ */\n+\n+#include \"nfp_dev.h\"\n+\n+#include <rte_bitops.h>\n+\n+#include \"nfp_platform.h\"\n+\n+/*\n+ * Note: The value of 'max_qc_size' is different from kernel driver,\n+ * because DPDK use 'uint16_t' as the data type.\n+ */\n+const struct nfp_dev_info nfp_dev_info[NFP_DEV_CNT] = {\n+\t[NFP_DEV_NFP3800] = {\n+\t\t.qc_idx_mask            = GENMASK(8, 0),\n+\t\t.qc_addr_offset         = 0x400000,\n+\t\t.min_qc_size            = 512,\n+\t\t.max_qc_size            = RTE_BIT32(15),    /**< 32K */\n+\n+\t\t.chip_names             = \"NFP3800\",\n+\t\t.pcie_cfg_expbar_offset = 0x0a00,\n+\t\t.qc_area_sz             = 0x100000,\n+\t\t.pf_num_per_unit        = 4,\n+\t},\n+\t[NFP_DEV_NFP3800_VF] = {\n+\t\t.qc_idx_mask            = GENMASK(8, 0),\n+\t\t.qc_addr_offset         = 0,\n+\t\t.min_qc_size            = 512,\n+\t\t.max_qc_size            = RTE_BIT32(15),    /**< 32K */\n+\t},\n+\t[NFP_DEV_NFP6000] = {\n+\t\t.qc_idx_mask            = GENMASK(7, 0),\n+\t\t.qc_addr_offset         = 0x80000,\n+\t\t.min_qc_size            = 256,\n+\t\t.max_qc_size            = RTE_BIT32(15),    /**< 32K */\n+\n+\t\t.chip_names             = \"NFP4000/NFP6000\",\n+\t\t.pcie_cfg_expbar_offset = 0x0400,\n+\t\t.qc_area_sz             = 0x80000,\n+\t\t.pf_num_per_unit        = 1,\n+\t},\n+\t[NFP_DEV_NFP6000_VF] = {\n+\t\t.qc_idx_mask            = GENMASK(7, 0),\n+\t\t.qc_addr_offset         = 0,\n+\t\t.min_qc_size            = 256,\n+\t\t.max_qc_size            = RTE_BIT32(15),    /**< 32K */\n+\t},\n+};\n+\n+const struct nfp_dev_info *\n+nfp_dev_info_get(uint16_t device_id)\n+{\n+\tenum nfp_dev_id id;\n+\n+\tswitch (device_id) {\n+\tcase PCI_DEVICE_ID_NFP3800_PF_NIC:\n+\t\tid = NFP_DEV_NFP3800;\n+\t\tbreak;\n+\tcase PCI_DEVICE_ID_NFP3800_VF_NIC:\n+\t\tid = NFP_DEV_NFP3800_VF;\n+\t\tbreak;\n+\tcase PCI_DEVICE_ID_NFP4000_PF_NIC:\n+\tcase PCI_DEVICE_ID_NFP6000_PF_NIC:\n+\t\tid = NFP_DEV_NFP6000;\n+\t\tbreak;\n+\tcase PCI_DEVICE_ID_NFP6000_VF_NIC:\n+\t\tid = NFP_DEV_NFP6000_VF;\n+\t\tbreak;\n+\tdefault:\n+\t\tid = NFP_DEV_CNT;\n+\t\tbreak;\n+\t}\n+\n+\tif (id >= NFP_DEV_CNT)\n+\t\treturn NULL;\n+\n+\treturn &nfp_dev_info[id];\n+}\ndiff --git a/drivers/net/nfp/nfpcore/nfp_dev.h b/drivers/net/nfp/nfpcore/nfp_dev.h\nnew file mode 100644\nindex 0000000000..b0fffff619\n--- /dev/null\n+++ b/drivers/net/nfp/nfpcore/nfp_dev.h\n@@ -0,0 +1,44 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2023 Corigine, Inc.\n+ * All rights reserved.\n+ */\n+\n+#ifndef __NFP_DEV_H__\n+#define __NFP_DEV_H__\n+\n+#include <stdint.h>\n+\n+#define PCI_VENDOR_ID_NETRONOME         0x19ee\n+#define PCI_VENDOR_ID_CORIGINE          0x1da8\n+\n+#define PCI_DEVICE_ID_NFP3800_PF_NIC    0x3800\n+#define PCI_DEVICE_ID_NFP3800_VF_NIC    0x3803\n+#define PCI_DEVICE_ID_NFP4000_PF_NIC    0x4000\n+#define PCI_DEVICE_ID_NFP6000_PF_NIC    0x6000\n+#define PCI_DEVICE_ID_NFP6000_VF_NIC    0x6003  /* Include NFP4000VF */\n+\n+enum nfp_dev_id {\n+\tNFP_DEV_NFP3800,\n+\tNFP_DEV_NFP3800_VF,\n+\tNFP_DEV_NFP6000,\n+\tNFP_DEV_NFP6000_VF,\n+\tNFP_DEV_CNT,\n+};\n+\n+struct nfp_dev_info {\n+\t/* Required fields */\n+\tuint32_t qc_idx_mask;\n+\tuint32_t qc_addr_offset;\n+\tuint32_t min_qc_size;\n+\tuint32_t max_qc_size;\n+\n+\t/* PF-only fields */\n+\tconst char *chip_names;\n+\tuint32_t pcie_cfg_expbar_offset;\n+\tuint32_t qc_area_sz;\n+\tuint8_t pf_num_per_unit;\n+};\n+\n+const struct nfp_dev_info *nfp_dev_info_get(uint16_t device_id);\n+\n+#endif /* __NFP_DEV_H__ */\n",
    "prefixes": [
        "v3",
        "22/27"
    ]
}