get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 75645,
    "url": "http://patches.dpdk.org/api/patches/75645/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1597791894-37041-2-git-send-email-nicolas.chautru@intel.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": "<1597791894-37041-2-git-send-email-nicolas.chautru@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1597791894-37041-2-git-send-email-nicolas.chautru@intel.com",
    "date": "2020-08-18T23:04:44",
    "name": "[v2,01/11] drivers/baseband: add PMD for ACC100",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "cb1718be85998182366fc5ce38dc41f954438bf6",
    "submitter": {
        "id": 1314,
        "url": "http://patches.dpdk.org/api/people/1314/?format=api",
        "name": "Chautru, Nicolas",
        "email": "nicolas.chautru@intel.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1597791894-37041-2-git-send-email-nicolas.chautru@intel.com/mbox/",
    "series": [
        {
            "id": 11695,
            "url": "http://patches.dpdk.org/api/series/11695/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=11695",
            "date": "2020-08-18T23:04:43",
            "name": "bbdev PMD ACC100",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/11695/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/75645/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/75645/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 9206FA04AF;\n\tWed, 19 Aug 2020 01:06:57 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id AE17D1C014;\n\tWed, 19 Aug 2020 01:06:47 +0200 (CEST)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n by dpdk.org (Postfix) with ESMTP id 5B7ABAAB7\n for <dev@dpdk.org>; Wed, 19 Aug 2020 01:06:45 +0200 (CEST)",
            "from orsmga004.jf.intel.com ([10.7.209.38])\n by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 18 Aug 2020 16:06:43 -0700",
            "from skx-5gnr-sc12-4.sc.intel.com ([172.25.69.210])\n by orsmga004.jf.intel.com with ESMTP; 18 Aug 2020 16:06:43 -0700"
        ],
        "IronPort-SDR": [
            "\n eRTS+X9TsjMtyAaT2qWG8wqps58tTLku775kaLlkuLW0zGt/UOZG9p2M2nMMstOXVTiLXbINQW\n PCguhZL0ivzQ==",
            "\n 1tfMLiOboEw5LjnVst1veHuX3/Bb3lkhAgATXZGwSDNxpFfAf1W3Js2Hv5OLn3ArWm01qUz79Q\n 9Y8VR//mLD9g=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9717\"; a=\"154281354\"",
            "E=Sophos;i=\"5.76,329,1592895600\"; d=\"scan'208\";a=\"154281354\"",
            "E=Sophos;i=\"5.76,329,1592895600\"; d=\"scan'208\";a=\"441400688\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Nicolas Chautru <nicolas.chautru@intel.com>",
        "To": "dev@dpdk.org,\n\takhil.goyal@nxp.com",
        "Cc": "bruce.richardson@intel.com,\n\tNicolas Chautru <nicolas.chautru@intel.com>",
        "Date": "Tue, 18 Aug 2020 16:04:44 -0700",
        "Message-Id": "<1597791894-37041-2-git-send-email-nicolas.chautru@intel.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1597791894-37041-1-git-send-email-nicolas.chautru@intel.com>",
        "References": "<1597791894-37041-1-git-send-email-nicolas.chautru@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v2 01/11] drivers/baseband: add PMD for ACC100",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Add stubs for the ACC100 PMD\n\nSigned-off-by: Nicolas Chautru <nicolas.chautru@intel.com>\n---\n config/common_base                                 |   4 +\n doc/guides/bbdevs/acc100.rst                       | 233 +++++++++++++++++++++\n doc/guides/bbdevs/index.rst                        |   1 +\n doc/guides/rel_notes/release_20_11.rst             |   6 +\n drivers/baseband/Makefile                          |   2 +\n drivers/baseband/acc100/Makefile                   |  25 +++\n drivers/baseband/acc100/meson.build                |   6 +\n drivers/baseband/acc100/rte_acc100_pmd.c           | 175 ++++++++++++++++\n drivers/baseband/acc100/rte_acc100_pmd.h           |  37 ++++\n .../acc100/rte_pmd_bbdev_acc100_version.map        |   3 +\n drivers/baseband/meson.build                       |   2 +-\n mk/rte.app.mk                                      |   1 +\n 12 files changed, 494 insertions(+), 1 deletion(-)\n create mode 100644 doc/guides/bbdevs/acc100.rst\n create mode 100644 drivers/baseband/acc100/Makefile\n create mode 100644 drivers/baseband/acc100/meson.build\n create mode 100644 drivers/baseband/acc100/rte_acc100_pmd.c\n create mode 100644 drivers/baseband/acc100/rte_acc100_pmd.h\n create mode 100644 drivers/baseband/acc100/rte_pmd_bbdev_acc100_version.map",
    "diff": "diff --git a/config/common_base b/config/common_base\nindex fbf0ee7..218ab16 100644\n--- a/config/common_base\n+++ b/config/common_base\n@@ -584,6 +584,10 @@ CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=y\n #\n CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=y\n \n+# Compile PMD for ACC100 bbdev device\n+#\n+CONFIG_RTE_LIBRTE_PMD_BBDEV_ACC100=y\n+\n #\n # Compile PMD for Intel FPGA LTE FEC bbdev device\n #\ndiff --git a/doc/guides/bbdevs/acc100.rst b/doc/guides/bbdevs/acc100.rst\nnew file mode 100644\nindex 0000000..f87ee09\n--- /dev/null\n+++ b/doc/guides/bbdevs/acc100.rst\n@@ -0,0 +1,233 @@\n+..  SPDX-License-Identifier: BSD-3-Clause\n+    Copyright(c) 2020 Intel Corporation\n+\n+Intel(R) ACC100 5G/4G FEC Poll Mode Driver\n+==========================================\n+\n+The BBDEV ACC100 5G/4G FEC poll mode driver (PMD) supports an\n+implementation of a VRAN FEC wireless acceleration function.\n+This device is also known as Mount Bryce.\n+\n+Features\n+--------\n+\n+ACC100 5G/4G FEC PMD supports the following features:\n+\n+- LDPC Encode in the DL (5GNR)\n+- LDPC Decode in the UL (5GNR)\n+- Turbo Encode in the DL (4G)\n+- Turbo Decode in the UL (4G)\n+- 16 VFs per PF (physical device)\n+- Maximum of 128 queues per VF\n+- PCIe Gen-3 x16 Interface\n+- MSI\n+- SR-IOV\n+\n+ACC100 5G/4G FEC PMD supports the following BBDEV capabilities:\n+\n+* For the LDPC encode operation:\n+   - ``RTE_BBDEV_LDPC_CRC_24B_ATTACH`` :  set to attach CRC24B to CB(s)\n+   - ``RTE_BBDEV_LDPC_RATE_MATCH`` :  if set then do not do Rate Match bypass\n+   - ``RTE_BBDEV_LDPC_INTERLEAVER_BYPASS`` : if set then bypass interleaver\n+\n+* For the LDPC decode operation:\n+   - ``RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK`` :  check CRC24B from CB(s)\n+   - ``RTE_BBDEV_LDPC_ITERATION_STOP_ENABLE`` :  disable early termination\n+   - ``RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP`` :  drops CRC24B bits appended while decoding\n+   - ``RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE`` :  provides an input for HARQ combining\n+   - ``RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE`` :  provides an input for HARQ combining\n+   - ``RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_IN_ENABLE`` :  HARQ memory input is internal\n+   - ``RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_OUT_ENABLE`` :  HARQ memory output is internal\n+   - ``RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_LOOPBACK`` :  loopback data to/from HARQ memory\n+   - ``RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_FILLERS`` :  HARQ memory includes the fillers bits\n+   - ``RTE_BBDEV_LDPC_DEC_SCATTER_GATHER`` :  supports scatter-gather for input/output data\n+   - ``RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION`` :  supports compression of the HARQ input/output\n+   - ``RTE_BBDEV_LDPC_LLR_COMPRESSION`` :  supports LLR input compression\n+\n+* For the turbo encode operation:\n+   - ``RTE_BBDEV_TURBO_CRC_24B_ATTACH`` :  set to attach CRC24B to CB(s)\n+   - ``RTE_BBDEV_TURBO_RATE_MATCH`` :  if set then do not do Rate Match bypass\n+   - ``RTE_BBDEV_TURBO_ENC_INTERRUPTS`` :  set for encoder dequeue interrupts\n+   - ``RTE_BBDEV_TURBO_RV_INDEX_BYPASS`` :  set to bypass RV index\n+   - ``RTE_BBDEV_TURBO_ENC_SCATTER_GATHER`` :  supports scatter-gather for input/output data\n+\n+* For the turbo decode operation:\n+   - ``RTE_BBDEV_TURBO_CRC_TYPE_24B`` :  check CRC24B from CB(s)\n+   - ``RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE`` :  perform subblock de-interleave\n+   - ``RTE_BBDEV_TURBO_DEC_INTERRUPTS`` :  set for decoder dequeue interrupts\n+   - ``RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN`` :  set if negative LLR encoder i/p is supported\n+   - ``RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN`` :  set if positive LLR encoder i/p is supported\n+   - ``RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP`` :  keep CRC24B bits appended while decoding\n+   - ``RTE_BBDEV_TURBO_EARLY_TERMINATION`` :  set early early termination feature\n+   - ``RTE_BBDEV_TURBO_DEC_SCATTER_GATHER`` :  supports scatter-gather for input/output data\n+   - ``RTE_BBDEV_TURBO_HALF_ITERATION_EVEN`` :  set half iteration granularity\n+\n+Installation\n+------------\n+\n+Section 3 of the DPDK manual provides instuctions on installing and compiling DPDK. The\n+default set of bbdev compile flags may be found in config/common_base, where for example\n+the flag to build the ACC100 5G/4G FEC device, ``CONFIG_RTE_LIBRTE_PMD_BBDEV_ACC100``,\n+is already set.\n+\n+DPDK requires hugepages to be configured as detailed in section 2 of the DPDK manual.\n+The bbdev test application has been tested with a configuration 40 x 1GB hugepages. The\n+hugepage configuration of a server may be examined using:\n+\n+.. code-block:: console\n+\n+   grep Huge* /proc/meminfo\n+\n+\n+Initialization\n+--------------\n+\n+When the device first powers up, its PCI Physical Functions (PF) can be listed through this command:\n+\n+.. code-block:: console\n+\n+  sudo lspci -vd8086:0d5c\n+\n+The physical and virtual functions are compatible with Linux UIO drivers:\n+``vfio`` and ``igb_uio``. However, in order to work the ACC100 5G/4G\n+FEC device firstly needs to be bound to one of these linux drivers through DPDK.\n+\n+\n+Bind PF UIO driver(s)\n+~~~~~~~~~~~~~~~~~~~~~\n+\n+Install the DPDK igb_uio driver, bind it with the PF PCI device ID and use\n+``lspci`` to confirm the PF device is under use by ``igb_uio`` DPDK UIO driver.\n+\n+The igb_uio driver may be bound to the PF PCI device using one of three methods:\n+\n+\n+1. PCI functions (physical or virtual, depending on the use case) can be bound to\n+the UIO driver by repeating this command for every function.\n+\n+.. code-block:: console\n+\n+  cd <dpdk-top-level-directory>\n+  insmod ./build/kmod/igb_uio.ko\n+  echo \"8086 0d5c\" > /sys/bus/pci/drivers/igb_uio/new_id\n+  lspci -vd8086:0d5c\n+\n+\n+2. Another way to bind PF with DPDK UIO driver is by using the ``dpdk-devbind.py`` tool\n+\n+.. code-block:: console\n+\n+  cd <dpdk-top-level-directory>\n+  ./usertools/dpdk-devbind.py -b igb_uio 0000:06:00.0\n+\n+where the PCI device ID (example: 0000:06:00.0) is obtained using lspci -vd8086:0d5c\n+\n+\n+3. A third way to bind is to use ``dpdk-setup.sh`` tool\n+\n+.. code-block:: console\n+\n+  cd <dpdk-top-level-directory>\n+  ./usertools/dpdk-setup.sh\n+\n+  select 'Bind Ethernet/Crypto/Baseband device to IGB UIO module'\n+  or\n+  select 'Bind Ethernet/Crypto/Baseband device to VFIO module' depending on driver required\n+  enter PCI device ID\n+  select 'Display current Ethernet/Crypto/Baseband device settings' to confirm binding\n+\n+\n+In the same way the ACC100 5G/4G FEC PF can be bound with vfio, but vfio driver does not\n+support SR-IOV configuration right out of the box, so it will need to be patched.\n+\n+\n+Enable Virtual Functions\n+~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+Now, it should be visible in the printouts that PCI PF is under igb_uio control\n+\"``Kernel driver in use: igb_uio``\"\n+\n+To show the number of available VFs on the device, read ``sriov_totalvfs`` file..\n+\n+.. code-block:: console\n+\n+  cat /sys/bus/pci/devices/0000\\:<b>\\:<d>.<f>/sriov_totalvfs\n+\n+  where 0000\\:<b>\\:<d>.<f> is the PCI device ID\n+\n+\n+To enable VFs via igb_uio, echo the number of virtual functions intended to\n+enable to ``max_vfs`` file..\n+\n+.. code-block:: console\n+\n+  echo <num-of-vfs> > /sys/bus/pci/devices/0000\\:<b>\\:<d>.<f>/max_vfs\n+\n+\n+Afterwards, all VFs must be bound to appropriate UIO drivers as required, same\n+way it was done with the physical function previously.\n+\n+Enabling SR-IOV via vfio driver is pretty much the same, except that the file\n+name is different:\n+\n+.. code-block:: console\n+\n+  echo <num-of-vfs> > /sys/bus/pci/devices/0000\\:<b>\\:<d>.<f>/sriov_numvfs\n+\n+\n+Configure the VFs through PF\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The PCI virtual functions must be configured before working or getting assigned\n+to VMs/Containers. The configuration involves allocating the number of hardware\n+queues, priorities, load balance, bandwidth and other settings necessary for the\n+device to perform FEC functions.\n+\n+This configuration needs to be executed at least once after reboot or PCI FLR and can\n+be achieved by using the function ``acc100_configure()``, which sets up the\n+parameters defined in ``acc100_conf`` structure.\n+\n+Test Application\n+----------------\n+\n+BBDEV provides a test application, ``test-bbdev.py`` and range of test data for testing\n+the functionality of ACC100 5G/4G FEC encode and decode, depending on the device's\n+capabilities. The test application is located under app->test-bbdev folder and has the\n+following options:\n+\n+.. code-block:: console\n+\n+  \"-p\", \"--testapp-path\": specifies path to the bbdev test app.\n+  \"-e\", \"--eal-params\"\t: EAL arguments which are passed to the test app.\n+  \"-t\", \"--timeout\"\t: Timeout in seconds (default=300).\n+  \"-c\", \"--test-cases\"\t: Defines test cases to run. Run all if not specified.\n+  \"-v\", \"--test-vector\"\t: Test vector path (default=dpdk_path+/app/test-bbdev/test_vectors/bbdev_null.data).\n+  \"-n\", \"--num-ops\"\t: Number of operations to process on device (default=32).\n+  \"-b\", \"--burst-size\"\t: Operations enqueue/dequeue burst size (default=32).\n+  \"-s\", \"--snr\"\t\t: SNR in dB used when generating LLRs for bler tests.\n+  \"-s\", \"--iter_max\"\t: Number of iterations for LDPC decoder.\n+  \"-l\", \"--num-lcores\"\t: Number of lcores to run (default=16).\n+  \"-i\", \"--init-device\" : Initialise PF device with default values.\n+\n+\n+To execute the test application tool using simple decode or encode data,\n+type one of the following:\n+\n+.. code-block:: console\n+\n+  ./test-bbdev.py -c validation -n 64 -b 1 -v ./ldpc_dec_default.data\n+  ./test-bbdev.py -c validation -n 64 -b 1 -v ./ldpc_enc_default.data\n+\n+\n+The test application ``test-bbdev.py``, supports the ability to configure the PF device with\n+a default set of values, if the \"-i\" or \"- -init-device\" option is included. The default values\n+are defined in test_bbdev_perf.c.\n+\n+\n+Test Vectors\n+~~~~~~~~~~~~\n+\n+In addition to the simple LDPC decoder and LDPC encoder tests, bbdev also provides\n+a range of additional tests under the test_vectors folder, which may be useful. The results\n+of these tests will depend on the ACC100 5G/4G FEC capabilities which may cause some\n+testcases to be skipped, but no failure should be reported.\ndiff --git a/doc/guides/bbdevs/index.rst b/doc/guides/bbdevs/index.rst\nindex a8092dd..4445cbd 100644\n--- a/doc/guides/bbdevs/index.rst\n+++ b/doc/guides/bbdevs/index.rst\n@@ -13,3 +13,4 @@ Baseband Device Drivers\n     turbo_sw\n     fpga_lte_fec\n     fpga_5gnr_fec\n+    acc100\ndiff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst\nindex df227a1..b3ab614 100644\n--- a/doc/guides/rel_notes/release_20_11.rst\n+++ b/doc/guides/rel_notes/release_20_11.rst\n@@ -55,6 +55,12 @@ New Features\n      Also, make sure to start the actual text at the margin.\n      =======================================================\n \n+* **Added Intel ACC100 bbdev PMD.**\n+\n+  Added a new ``acc100`` bbdev driver for the Intel\\ |reg| ACC100 accelerator\n+  also known as Mount Bryce.  See the\n+  :doc:`../bbdevs/acc100` BBDEV guide for more details on this new driver.\n+\n \n Removed Items\n -------------\ndiff --git a/drivers/baseband/Makefile b/drivers/baseband/Makefile\nindex dcc0969..b640294 100644\n--- a/drivers/baseband/Makefile\n+++ b/drivers/baseband/Makefile\n@@ -10,6 +10,8 @@ DIRS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL) += null\n DEPDIRS-null = $(core-libs)\n DIRS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW) += turbo_sw\n DEPDIRS-turbo_sw = $(core-libs)\n+DIRS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_ACC100) += acc100\n+DEPDIRS-acc100 = $(core-libs)\n DIRS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC) += fpga_lte_fec\n DEPDIRS-fpga_lte_fec = $(core-libs)\n DIRS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_5GNR_FEC) += fpga_5gnr_fec\ndiff --git a/drivers/baseband/acc100/Makefile b/drivers/baseband/acc100/Makefile\nnew file mode 100644\nindex 0000000..c79e487\n--- /dev/null\n+++ b/drivers/baseband/acc100/Makefile\n@@ -0,0 +1,25 @@\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2020 Intel Corporation\n+\n+include $(RTE_SDK)/mk/rte.vars.mk\n+\n+# library name\n+LIB = librte_pmd_bbdev_acc100.a\n+\n+# build flags\n+CFLAGS += -O3\n+CFLAGS += $(WERROR_FLAGS)\n+LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring -lrte_cfgfile\n+LDLIBS += -lrte_bbdev\n+LDLIBS += -lrte_pci -lrte_bus_pci\n+\n+# versioning export map\n+EXPORT_MAP := rte_pmd_bbdev_acc100_version.map\n+\n+# library version\n+LIBABIVER := 1\n+\n+# library source files\n+SRCS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_ACC100) += rte_acc100_pmd.c\n+\n+include $(RTE_SDK)/mk/rte.lib.mk\ndiff --git a/drivers/baseband/acc100/meson.build b/drivers/baseband/acc100/meson.build\nnew file mode 100644\nindex 0000000..8afafc2\n--- /dev/null\n+++ b/drivers/baseband/acc100/meson.build\n@@ -0,0 +1,6 @@\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2020 Intel Corporation\n+\n+deps += ['bbdev', 'bus_vdev', 'ring', 'pci', 'bus_pci']\n+\n+sources = files('rte_acc100_pmd.c')\ndiff --git a/drivers/baseband/acc100/rte_acc100_pmd.c b/drivers/baseband/acc100/rte_acc100_pmd.c\nnew file mode 100644\nindex 0000000..1b4cd13\n--- /dev/null\n+++ b/drivers/baseband/acc100/rte_acc100_pmd.c\n@@ -0,0 +1,175 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2020 Intel Corporation\n+ */\n+\n+#include <unistd.h>\n+\n+#include <rte_common.h>\n+#include <rte_log.h>\n+#include <rte_dev.h>\n+#include <rte_malloc.h>\n+#include <rte_mempool.h>\n+#include <rte_byteorder.h>\n+#include <rte_errno.h>\n+#include <rte_branch_prediction.h>\n+#include <rte_hexdump.h>\n+#include <rte_pci.h>\n+#include <rte_bus_pci.h>\n+\n+#include <rte_bbdev.h>\n+#include <rte_bbdev_pmd.h>\n+#include \"rte_acc100_pmd.h\"\n+\n+#ifdef RTE_LIBRTE_BBDEV_DEBUG\n+RTE_LOG_REGISTER(acc100_logtype, pmd.bb.acc100, DEBUG);\n+#else\n+RTE_LOG_REGISTER(acc100_logtype, pmd.bb.acc100, NOTICE);\n+#endif\n+\n+/* Free 64MB memory used for software rings */\n+static int\n+acc100_dev_close(struct rte_bbdev *dev  __rte_unused)\n+{\n+\treturn 0;\n+}\n+\n+static const struct rte_bbdev_ops acc100_bbdev_ops = {\n+\t.close = acc100_dev_close,\n+};\n+\n+/* ACC100 PCI PF address map */\n+static struct rte_pci_id pci_id_acc100_pf_map[] = {\n+\t{\n+\t\tRTE_PCI_DEVICE(RTE_ACC100_VENDOR_ID, RTE_ACC100_PF_DEVICE_ID)\n+\t},\n+\t{.device_id = 0},\n+};\n+\n+/* ACC100 PCI VF address map */\n+static struct rte_pci_id pci_id_acc100_vf_map[] = {\n+\t{\n+\t\tRTE_PCI_DEVICE(RTE_ACC100_VENDOR_ID, RTE_ACC100_VF_DEVICE_ID)\n+\t},\n+\t{.device_id = 0},\n+};\n+\n+/* Initialization Function */\n+static void\n+acc100_bbdev_init(struct rte_bbdev *dev, struct rte_pci_driver *drv)\n+{\n+\tstruct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(dev->device);\n+\n+\tdev->dev_ops = &acc100_bbdev_ops;\n+\n+\t((struct acc100_device *) dev->data->dev_private)->pf_device =\n+\t\t\t!strcmp(drv->driver.name,\n+\t\t\t\t\tRTE_STR(ACC100PF_DRIVER_NAME));\n+\t((struct acc100_device *) dev->data->dev_private)->mmio_base =\n+\t\t\tpci_dev->mem_resource[0].addr;\n+\n+\trte_bbdev_log_debug(\"Init device %s [%s] @ vaddr %p paddr %#\"PRIx64\"\",\n+\t\t\tdrv->driver.name, dev->data->name,\n+\t\t\t(void *)pci_dev->mem_resource[0].addr,\n+\t\t\tpci_dev->mem_resource[0].phys_addr);\n+}\n+\n+static int acc100_pci_probe(struct rte_pci_driver *pci_drv,\n+\tstruct rte_pci_device *pci_dev)\n+{\n+\tstruct rte_bbdev *bbdev = NULL;\n+\tchar dev_name[RTE_BBDEV_NAME_MAX_LEN];\n+\n+\tif (pci_dev == NULL) {\n+\t\trte_bbdev_log(ERR, \"NULL PCI device\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\trte_pci_device_name(&pci_dev->addr, dev_name, sizeof(dev_name));\n+\n+\t/* Allocate memory to be used privately by drivers */\n+\tbbdev = rte_bbdev_allocate(pci_dev->device.name);\n+\tif (bbdev == NULL)\n+\t\treturn -ENODEV;\n+\n+\t/* allocate device private memory */\n+\tbbdev->data->dev_private = rte_zmalloc_socket(dev_name,\n+\t\t\tsizeof(struct acc100_device), RTE_CACHE_LINE_SIZE,\n+\t\t\tpci_dev->device.numa_node);\n+\n+\tif (bbdev->data->dev_private == NULL) {\n+\t\trte_bbdev_log(CRIT,\n+\t\t\t\t\"Allocate of %zu bytes for device \\\"%s\\\" failed\",\n+\t\t\t\tsizeof(struct acc100_device), dev_name);\n+\t\t\t\trte_bbdev_release(bbdev);\n+\t\t\treturn -ENOMEM;\n+\t}\n+\n+\t/* Fill HW specific part of device structure */\n+\tbbdev->device = &pci_dev->device;\n+\tbbdev->intr_handle = &pci_dev->intr_handle;\n+\tbbdev->data->socket_id = pci_dev->device.numa_node;\n+\n+\t/* Invoke ACC100 device initialization function */\n+\tacc100_bbdev_init(bbdev, pci_drv);\n+\n+\trte_bbdev_log_debug(\"Initialised bbdev %s (id = %u)\",\n+\t\t\tdev_name, bbdev->data->dev_id);\n+\treturn 0;\n+}\n+\n+static int acc100_pci_remove(struct rte_pci_device *pci_dev)\n+{\n+\tstruct rte_bbdev *bbdev;\n+\tint ret;\n+\tuint8_t dev_id;\n+\n+\tif (pci_dev == NULL)\n+\t\treturn -EINVAL;\n+\n+\t/* Find device */\n+\tbbdev = rte_bbdev_get_named_dev(pci_dev->device.name);\n+\tif (bbdev == NULL) {\n+\t\trte_bbdev_log(CRIT,\n+\t\t\t\t\"Couldn't find HW dev \\\"%s\\\" to uninitialise it\",\n+\t\t\t\tpci_dev->device.name);\n+\t\treturn -ENODEV;\n+\t}\n+\tdev_id = bbdev->data->dev_id;\n+\n+\t/* free device private memory before close */\n+\trte_free(bbdev->data->dev_private);\n+\n+\t/* Close device */\n+\tret = rte_bbdev_close(dev_id);\n+\tif (ret < 0)\n+\t\trte_bbdev_log(ERR,\n+\t\t\t\t\"Device %i failed to close during uninit: %i\",\n+\t\t\t\tdev_id, ret);\n+\n+\t/* release bbdev from library */\n+\trte_bbdev_release(bbdev);\n+\n+\trte_bbdev_log_debug(\"Destroyed bbdev = %u\", dev_id);\n+\n+\treturn 0;\n+}\n+\n+static struct rte_pci_driver acc100_pci_pf_driver = {\n+\t\t.probe = acc100_pci_probe,\n+\t\t.remove = acc100_pci_remove,\n+\t\t.id_table = pci_id_acc100_pf_map,\n+\t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING\n+};\n+\n+static struct rte_pci_driver acc100_pci_vf_driver = {\n+\t\t.probe = acc100_pci_probe,\n+\t\t.remove = acc100_pci_remove,\n+\t\t.id_table = pci_id_acc100_vf_map,\n+\t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING\n+};\n+\n+RTE_PMD_REGISTER_PCI(ACC100PF_DRIVER_NAME, acc100_pci_pf_driver);\n+RTE_PMD_REGISTER_PCI_TABLE(ACC100PF_DRIVER_NAME, pci_id_acc100_pf_map);\n+RTE_PMD_REGISTER_PCI(ACC100VF_DRIVER_NAME, acc100_pci_vf_driver);\n+RTE_PMD_REGISTER_PCI_TABLE(ACC100VF_DRIVER_NAME, pci_id_acc100_vf_map);\n+\ndiff --git a/drivers/baseband/acc100/rte_acc100_pmd.h b/drivers/baseband/acc100/rte_acc100_pmd.h\nnew file mode 100644\nindex 0000000..6f46df0\n--- /dev/null\n+++ b/drivers/baseband/acc100/rte_acc100_pmd.h\n@@ -0,0 +1,37 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2020 Intel Corporation\n+ */\n+\n+#ifndef _RTE_ACC100_PMD_H_\n+#define _RTE_ACC100_PMD_H_\n+\n+/* Helper macro for logging */\n+#define rte_bbdev_log(level, fmt, ...) \\\n+\trte_log(RTE_LOG_ ## level, acc100_logtype, fmt \"\\n\", \\\n+\t\t##__VA_ARGS__)\n+\n+#ifdef RTE_LIBRTE_BBDEV_DEBUG\n+#define rte_bbdev_log_debug(fmt, ...) \\\n+\t\trte_bbdev_log(DEBUG, \"acc100_pmd: \" fmt, \\\n+\t\t##__VA_ARGS__)\n+#else\n+#define rte_bbdev_log_debug(fmt, ...)\n+#endif\n+\n+/* ACC100 PF and VF driver names */\n+#define ACC100PF_DRIVER_NAME           intel_acc100_pf\n+#define ACC100VF_DRIVER_NAME           intel_acc100_vf\n+\n+/* ACC100 PCI vendor & device IDs */\n+#define RTE_ACC100_VENDOR_ID           (0x8086)\n+#define RTE_ACC100_PF_DEVICE_ID        (0x0d5c)\n+#define RTE_ACC100_VF_DEVICE_ID        (0x0d5d)\n+\n+/* Private data structure for each ACC100 device */\n+struct acc100_device {\n+\tvoid *mmio_base;  /**< Base address of MMIO registers (BAR0) */\n+\tbool pf_device; /**< True if this is a PF ACC100 device */\n+\tbool configured; /**< True if this ACC100 device is configured */\n+};\n+\n+#endif /* _RTE_ACC100_PMD_H_ */\ndiff --git a/drivers/baseband/acc100/rte_pmd_bbdev_acc100_version.map b/drivers/baseband/acc100/rte_pmd_bbdev_acc100_version.map\nnew file mode 100644\nindex 0000000..4a76d1d\n--- /dev/null\n+++ b/drivers/baseband/acc100/rte_pmd_bbdev_acc100_version.map\n@@ -0,0 +1,3 @@\n+DPDK_21 {\n+\tlocal: *;\n+};\ndiff --git a/drivers/baseband/meson.build b/drivers/baseband/meson.build\nindex 415b672..72301ce 100644\n--- a/drivers/baseband/meson.build\n+++ b/drivers/baseband/meson.build\n@@ -5,7 +5,7 @@ if is_windows\n \tsubdir_done()\n endif\n \n-drivers = ['null', 'turbo_sw', 'fpga_lte_fec', 'fpga_5gnr_fec']\n+drivers = ['null', 'turbo_sw', 'fpga_lte_fec', 'fpga_5gnr_fec', 'acc100']\n \n config_flag_fmt = 'RTE_LIBRTE_PMD_BBDEV_@0@'\n driver_name_fmt = 'rte_pmd_bbdev_@0@'\ndiff --git a/mk/rte.app.mk b/mk/rte.app.mk\nindex a544259..a77f538 100644\n--- a/mk/rte.app.mk\n+++ b/mk/rte.app.mk\n@@ -254,6 +254,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_NETVSC_PMD)     += -lrte_pmd_netvsc\n \n ifeq ($(CONFIG_RTE_LIBRTE_BBDEV),y)\n _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL)     += -lrte_pmd_bbdev_null\n+_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_ACC100)    += -lrte_pmd_bbdev_acc100\n _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC) += -lrte_pmd_bbdev_fpga_lte_fec\n _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_5GNR_FEC) += -lrte_pmd_bbdev_fpga_5gnr_fec\n \n",
    "prefixes": [
        "v2",
        "01/11"
    ]
}