get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 110013,
    "url": "http://patches.dpdk.org/api/patches/110013/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220421151900.703467-8-john.miller@atomicrules.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": "<20220421151900.703467-8-john.miller@atomicrules.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220421151900.703467-8-john.miller@atomicrules.com",
    "date": "2022-04-21T15:18:58",
    "name": "[08/10] baseband/ark: add ark baseband user extensions",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "2baa35b14e12ac00caa486b4614499940554087b",
    "submitter": {
        "id": 719,
        "url": "http://patches.dpdk.org/api/people/719/?format=api",
        "name": "John Miller",
        "email": "john.miller@atomicrules.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/20220421151900.703467-8-john.miller@atomicrules.com/mbox/",
    "series": [
        {
            "id": 22596,
            "url": "http://patches.dpdk.org/api/series/22596/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=22596",
            "date": "2022-04-21T15:18:51",
            "name": "[01/10] doc/guides/bbdevs: add ark baseband device documentation",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/22596/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/110013/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/110013/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 7E630A0093;\n\tThu, 21 Apr 2022 17:20:06 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 7CC5042812;\n\tThu, 21 Apr 2022 17:19:28 +0200 (CEST)",
            "from mail-pj1-f42.google.com (mail-pj1-f42.google.com\n [209.85.216.42]) by mails.dpdk.org (Postfix) with ESMTP id 63E084280C\n for <dev@dpdk.org>; Thu, 21 Apr 2022 17:19:26 +0200 (CEST)",
            "by mail-pj1-f42.google.com with SMTP id\n w5-20020a17090aaf8500b001d74c754128so767267pjq.0\n for <dev@dpdk.org>; Thu, 21 Apr 2022 08:19:26 -0700 (PDT)",
            "from john-All-Series.tds\n (h75-100-85-216.cntcnh.broadband.dynamic.tds.net. [75.100.85.216])\n by smtp.gmail.com with ESMTPSA id\n q5-20020a056a00084500b0050ace4a699dsm6463465pfk.95.2022.04.21.08.19.24\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 21 Apr 2022 08:19:24 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=atomicrules-com.20210112.gappssmtp.com; s=20210112;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding;\n bh=d58HxdOpEtzcsv8LPq2nnHJ+dgZKSLvfn7TMCqv0Peo=;\n b=pAoN6TDGU6MOG+bcBvZzvOjKnmQIRdGuokzJDih1ykMLKHa9VfKNhtutlfy0zeJ9pV\n MGML3Xt3iZE9cdrMZo6l3GsidOHbhkEIsIdq/ouYGq78YuJoAl2jOVH3fEA0ZVGa1hdL\n IjI1qQjB1oCGYZVXPl+K4fc7rc4VTLo9cqxi2oDiWI/13kXoEKCol+q62CS1yTOfOEEh\n ufzJ/ObHMTgL73KkZAEDYvju4QhUfdV/TmUP/ACdE4m8WWdZQF9txzAN488onA28X2QL\n 8VRno8fM8scS8fH0SsG8azv+bZygAFEjaHeDLRikgrF+I0gFodg+cPkCjmnqqAuMLafl\n Tj5g==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20210112;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references:mime-version:content-transfer-encoding;\n bh=d58HxdOpEtzcsv8LPq2nnHJ+dgZKSLvfn7TMCqv0Peo=;\n b=RHKMwx0/PiQ4t6GK64q8ocjomMYHP/hXnEBh3YKtqtxN2JMtxNM8foNwGkxPAwFOWF\n RdYdpFg1PxXxhbs9Gfqeo1IjC0xduzbNriAIi0bb9ED3XDrnm9KHYV0EAFM0a9DEiJG+\n BjNisrmX0LDycpzG5Cc45n3SQt8na9zJHAO0VATJQawAYr65g2iPX3NLSXfx3+JJpAeB\n C3iWq+WxQhNRUwGqEn6D8tfVuC5PWv+SLTdit+ItgC5TAng1PenWYtAFwjgJvxbO6lPg\n 5ggQkdWohJXHqQZHCWom6T58H2iuHYdUsrxbBGBzPY8BfWlvH0sMV96+rkyoWh+xczK1\n kdPA==",
        "X-Gm-Message-State": "AOAM532fLuSL18Gwx4980dEVqxevfwLk2SbuIRO1Wd9zoBzuEqOhEKkM\n syozF8V9BlCjQ5z+7kznnB8rgLbP6z04lQ==",
        "X-Google-Smtp-Source": "\n ABdhPJy/IcOKaq622eusHeDlvAMAIuGHf0n/B3ge+0pvL4ENnpAaY5m9Hd5K7iq5svd0UHIgzTuRrQ==",
        "X-Received": "by 2002:a17:902:b718:b0:158:d4d6:4e6f with SMTP id\n d24-20020a170902b71800b00158d4d64e6fmr84239pls.28.1650554365200;\n Thu, 21 Apr 2022 08:19:25 -0700 (PDT)",
        "From": "John Miller <john.miller@atomicrules.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@xilinx.com, ed.czeck@atomicrules.com,\n John Miller <john.miller@atomicrules.com>",
        "Subject": "[PATCH 08/10] baseband/ark: add ark baseband user extensions",
        "Date": "Thu, 21 Apr 2022 10:18:58 -0500",
        "Message-Id": "<20220421151900.703467-8-john.miller@atomicrules.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20220421151900.703467-1-john.miller@atomicrules.com>",
        "References": "<20220421151900.703467-1-john.miller@atomicrules.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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 ark baseband user extensions.\n\nSigned-off-by: John Miller <john.miller@atomicrules.com>\n---\n drivers/baseband/ark/ark_bbdev.c        | 146 +++++++++++++++++++--\n drivers/baseband/ark/ark_bbdev_common.h |   8 ++\n drivers/baseband/ark/ark_bbext.h        | 163 ++++++++++++++++++++++++\n 3 files changed, 306 insertions(+), 11 deletions(-)\n create mode 100644 drivers/baseband/ark/ark_bbext.h",
    "diff": "diff --git a/drivers/baseband/ark/ark_bbdev.c b/drivers/baseband/ark/ark_bbdev.c\nindex b23bbd44d1..7cccaef49a 100644\n--- a/drivers/baseband/ark/ark_bbdev.c\n+++ b/drivers/baseband/ark/ark_bbdev.c\n@@ -2,6 +2,10 @@\n  * Copyright(c) 2016-2021 Atomic Rules LLC\n  */\n \n+#include <unistd.h>\n+#include <sys/stat.h>\n+#include <dlfcn.h>\n+\n #include \"ark_common.h\"\n #include \"ark_bbdev_common.h\"\n #include \"ark_bbdev_custom.h\"\n@@ -9,6 +13,7 @@\n #include \"ark_mpu.h\"\n #include \"ark_rqp.h\"\n #include \"ark_udm.h\"\n+#include \"ark_bbext.h\"\n \n #include <rte_bbdev.h>\n #include <rte_bbdev_pmd.h>\n@@ -22,6 +27,7 @@\n \n #define DRIVER_NAME baseband_ark\n \n+int ark_common_logtype;\n RTE_LOG_REGISTER_DEFAULT(ark_bbdev_logtype, DEBUG);\n \n #define ARK_SYSCTRL_BASE  0x0\n@@ -62,9 +68,77 @@ ark_device_caps[] = {\n /* Forward declarations */\n static const struct rte_bbdev_ops ark_bbdev_pmd_ops;\n \n+static int\n+check_for_ext(struct ark_bbdevice *ark)\n+{\n+\t/* Get the env */\n+\tconst char *dllpath = getenv(\"ARK_BBEXT_PATH\");\n+\n+\tif (dllpath == NULL) {\n+\t\tARK_PMD_LOG(DEBUG, \"EXT NO dll path specified\\n\");\n+\t\treturn 0;\n+\t}\n+\tARK_PMD_LOG(NOTICE, \"EXT found dll path at %s\\n\", dllpath);\n+\n+\t/* Open and load the .so */\n+\tark->d_handle = dlopen(dllpath, RTLD_LOCAL | RTLD_LAZY);\n+\tif (ark->d_handle == NULL) {\n+\t\tARK_PMD_LOG(ERR, \"Could not load user extension %s\\n\",\n+\t\t\t    dllpath);\n+\t\treturn -1;\n+\t}\n+\tARK_PMD_LOG(DEBUG, \"SUCCESS: loaded user extension %s\\n\",\n+\t\t\t    dllpath);\n+\n+\t/* Get the entry points */\n+\tark->user_ext.dev_init =\n+\t\t(void *(*)(struct rte_bbdev *, void *))\n+\t\tdlsym(ark->d_handle, \"rte_pmd_ark_bbdev_init\");\n+\n+\tark->user_ext.dev_uninit =\n+\t\t(int (*)(struct rte_bbdev *, void *))\n+\t\tdlsym(ark->d_handle, \"rte_pmd_ark_dev_uninit\");\n+\tark->user_ext.dev_start =\n+\t\t(int (*)(struct rte_bbdev *, void *))\n+\t\tdlsym(ark->d_handle, \"rte_pmd_ark_bbdev_start\");\n+\tark->user_ext.dev_stop =\n+\t\t(int (*)(struct rte_bbdev *, void *))\n+\t\tdlsym(ark->d_handle, \"rte_pmd_ark_bbdev_stop\");\n+\tark->user_ext.dequeue_ldpc_dec  =\n+\t\t(int (*)(struct rte_bbdev *,\n+\t\t\t struct rte_bbdev_dec_op *,\n+\t\t\t uint32_t *,\n+\t\t\t void *))\n+\t\tdlsym(ark->d_handle, \"rte_pmd_ark_bbdev_dequeue_ldpc_dec\");\n+\tark->user_ext.enqueue_ldpc_dec  =\n+\t\t(int (*)(struct rte_bbdev *,\n+\t\t\t struct rte_bbdev_dec_op *,\n+\t\t\t uint32_t *,\n+\t\t\t uint8_t *,\n+\t\t\t void *))\n+\t\tdlsym(ark->d_handle, \"rte_pmd_ark_bbdev_enqueue_ldpc_dec\");\n+\tark->user_ext.dequeue_ldpc_enc  =\n+\t\t(int (*)(struct rte_bbdev *,\n+\t\t\t struct rte_bbdev_enc_op *,\n+\t\t\t uint32_t *,\n+\t\t\t void *))\n+\t\tdlsym(ark->d_handle, \"rte_pmd_ark_bbdev_dequeue_ldpc_enc\");\n+\tark->user_ext.enqueue_ldpc_enc  =\n+\t\t(int (*)(struct rte_bbdev *,\n+\t\t\t struct rte_bbdev_enc_op *,\n+\t\t\t uint32_t *,\n+\t\t\t uint8_t *,\n+\t\t\t void *))\n+\t\tdlsym(ark->d_handle, \"rte_pmd_ark_bbdev_enqueue_ldpc_enc\");\n+\n+\treturn 0;\n+}\n+\n \n /* queue */\n struct ark_bbdev_queue {\n+\tstruct ark_bbdevice *ark_bbdev;\n+\n \tstruct rte_ring *active_ops;  /* Ring for processed packets */\n \n \t/* RX components */\n@@ -182,6 +256,7 @@ ark_bb_q_setup(struct rte_bbdev *bbdev, uint16_t q_id,\n \t\treturn -ENOMEM;\n \t}\n \tbbdev->data->queues[q_id].queue_private = q;\n+\tq->ark_bbdev = ark_bb;\n \n \t/* RING */\n \tsnprintf(ring_name, RTE_RING_NAMESIZE, RTE_STR(DRIVER_NAME) \"%u:%u\",\n@@ -273,6 +348,11 @@ ark_bbdev_start(struct rte_bbdev *bbdev)\n \tif (ark_bb->started)\n \t\treturn 0;\n \n+\t/* User start hook */\n+\tif (ark_bb->user_ext.dev_start)\n+\t\tark_bb->user_ext.dev_start(bbdev,\n+\t\t\t\t\tark_bb->user_data);\n+\n \t/* start UDM */\n \tark_udm_start(ark_bb->udm.v);\n \n@@ -368,6 +448,12 @@ ark_bbdev_stop(struct rte_bbdev *bbdev)\n \t\tark_pktchkr_dump_stats(ark_bb->pc);\n \t\tark_pktchkr_stop(ark_bb->pc);\n \t}\n+\n+\t/* User stop hook */\n+\tif (ark_bb->user_ext.dev_stop)\n+\t\tark_bb->user_ext.dev_stop(bbdev,\n+\t\t\t\t\t  ark_bb->user_data);\n+\n }\n \n static int\n@@ -574,10 +660,15 @@ ark_bb_enqueue_ldpc_dec_one_op(struct ark_bbdev_queue *q,\n \tuint32_t meta[5] = {0};\n \tuint8_t meta_cnt = 0;\n \n-\t/* User's meta move from bbdev op to Arkville HW */\n-\tif (ark_bb_user_enqueue_ldpc_dec(this_op, meta, &meta_cnt)) {\n-\t\tARK_BBDEV_LOG(ERR, \"%s failed\", __func__);\n-\t\treturn 1;\n+\tif (q->ark_bbdev->user_ext.enqueue_ldpc_dec) {\n+\t\tif (q->ark_bbdev->user_ext.enqueue_ldpc_dec(q->ark_bbdev->bbdev,\n+\t\t\t\t\t\t\t    this_op,\n+\t\t\t\t\t\t\t    meta,\n+\t\t\t\t\t\t\t    &meta_cnt,\n+\t\t\t\t\t\t\t    q->ark_bbdev->user_data)) {\n+\t\t\tARK_BBDEV_LOG(ERR, \"%s failed\", __func__);\n+\t\t\treturn 1;\n+\t\t}\n \t}\n \n \treturn ark_bb_enqueue_common(q, m_in, m_out, offset, meta, meta_cnt);\n@@ -652,8 +743,18 @@ ark_bb_dequeue_ldpc_dec_ops(struct rte_bbdev_queue_data *q_data,\n \t\t}\n \n \t\tusermeta = meta->user_meta;\n+\n \t\t/* User's meta move from Arkville HW to bbdev OP */\n-\t\tark_bb_user_dequeue_ldpc_dec(this_op, usermeta);\n+\t\tif (q->ark_bbdev->user_ext.dequeue_ldpc_dec) {\n+\t\t\tif (q->ark_bbdev->user_ext.dequeue_ldpc_dec(q->ark_bbdev->bbdev,\n+\t\t\t\t\t\t\t\t    this_op,\n+\t\t\t\t\t\t\t\t    usermeta,\n+\t\t\t\t\t\t\t\t    q->ark_bbdev->user_data)) {\n+\t\t\t\tARK_BBDEV_LOG(ERR, \"%s failed\", __func__);\n+\t\t\t\treturn 1;\n+\t\t\t}\n+\t\t}\n+\n \t\tnb++;\n \t\tcons_index++;\n \t\tif (nb >= nb_ops)\n@@ -682,9 +783,15 @@ ark_bb_enqueue_ldpc_enc_one_op(struct ark_bbdev_queue *q,\n \tuint8_t meta_cnt = 0;\n \n \t/* User's meta move from bbdev op to Arkville HW */\n-\tif (ark_bb_user_enqueue_ldpc_enc(this_op, meta, &meta_cnt)) {\n-\t\tARK_BBDEV_LOG(ERR, \"%s failed\", __func__);\n-\t\treturn 1;\n+\tif (q->ark_bbdev->user_ext.enqueue_ldpc_enc) {\n+\t\tif (q->ark_bbdev->user_ext.enqueue_ldpc_enc(q->ark_bbdev->bbdev,\n+\t\t\t\t\t\t\t    this_op,\n+\t\t\t\t\t\t\t    meta,\n+\t\t\t\t\t\t\t    &meta_cnt,\n+\t\t\t\t\t\t\t    q->ark_bbdev->user_data)) {\n+\t\t\tARK_BBDEV_LOG(ERR, \"%s failed\", __func__);\n+\t\t\treturn 1;\n+\t\t}\n \t}\n \n \treturn ark_bb_enqueue_common(q, m_in, m_out, offset, meta, meta_cnt);\n@@ -759,7 +866,16 @@ ark_bb_dequeue_ldpc_enc_ops(struct rte_bbdev_queue_data *q_data,\n \t\t}\n \n \t\t/* User's meta move from Arkville HW to bbdev OP */\n-\t\tark_bb_user_dequeue_ldpc_enc(this_op, usermeta);\n+\t\tif (q->ark_bbdev->user_ext.dequeue_ldpc_enc) {\n+\t\t\tif (q->ark_bbdev->user_ext.dequeue_ldpc_enc(q->ark_bbdev->bbdev,\n+\t\t\t\t\t\t\t\t    this_op,\n+\t\t\t\t\t\t\t\t    usermeta,\n+\t\t\t\t\t\t\t\t    q->ark_bbdev->user_data)) {\n+\t\t\t\tARK_BBDEV_LOG(ERR, \"%s failed\", __func__);\n+\t\t\t\treturn 1;\n+\t\t\t}\n+\t\t}\n+\n \t\tnb++;\n \t\tcons_index++;\n \t\tif (nb >= nb_ops)\n@@ -774,6 +890,7 @@ ark_bb_dequeue_ldpc_enc_ops(struct rte_bbdev_queue_data *q_data,\n \treturn nb;\n }\n \n+\n /**************************************************************************/\n /*\n  *Initial device hardware configuration when device is opened\n@@ -829,7 +946,7 @@ ark_bb_config_device(struct ark_bbdevice *ark_bb)\n \tark_udm_stop(ark_bb->udm.v, 0);\n \tark_udm_configure(ark_bb->udm.v,\n \t\t\t  RTE_PKTMBUF_HEADROOM,\n-\t\t\t  bbdev->data->queues[q_id]->dataroom,\n+\t\t\t  RTE_MBUF_DEFAULT_DATAROOM,\n \t\t\t  ARK_RX_WRITE_TIME_NS);\n \n \n@@ -875,6 +992,7 @@ ark_bbdev_init(struct rte_bbdev *bbdev, struct rte_pci_driver *pci_drv)\n \tstruct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(bbdev->device);\n \tbool rqpacing = false;\n \tint p;\n+\tark_bb->bbdev = bbdev;\n \n \tRTE_SET_USED(pci_drv);\n \n@@ -905,6 +1023,10 @@ ark_bbdev_init(struct rte_bbdev *bbdev, struct rte_pci_driver *pci_drv)\n \telse\n \t\tark_bb->rqpacing = NULL;\n \n+\t/* Check to see if there is an extension that we need to load */\n+\tif (check_for_ext(ark_bb))\n+\t\treturn -1;\n+\n \tark_bb->started = 0;\n \n \tARK_BBDEV_LOG(INFO, \"Sys Ctrl Const = 0x%x  HW Commit_ID: %08x\",\n@@ -1032,7 +1154,9 @@ ark_bbdev_remove(struct rte_pci_device *pci_dev)\n \t\t\t\t\"Device %i failed to close during remove: %i\",\n \t\t\t\tbbdev->data->dev_id, ret);\n \n-\treturn rte_bbdev_release(bbdev);\n+\tret = rte_bbdev_release(bbdev);\n+\n+\treturn ret;\n }\n \n /* Operation for the PMD */\ndiff --git a/drivers/baseband/ark/ark_bbdev_common.h b/drivers/baseband/ark/ark_bbdev_common.h\nindex 670e7e86d6..59ac2235ed 100644\n--- a/drivers/baseband/ark/ark_bbdev_common.h\n+++ b/drivers/baseband/ark/ark_bbdev_common.h\n@@ -8,6 +8,7 @@\n #include \"ark_pktchkr.h\"\n #include \"ark_pktdir.h\"\n #include \"ark_pktgen.h\"\n+#include \"ark_bbext.h\"\n \n #define ARK_MAX_ARG_LEN 256\n \n@@ -51,6 +52,9 @@ struct ark_bbdevice {\n \t/* Application Bar needed for extensions */\n \tuint8_t *a_bar;\n \n+\t/* rte baseband device */\n+\tstruct rte_bbdev *bbdev;\n+\n \t/* Arkville hardware block offsets */\n \tdef_ptr(sys_ctrl, sysctrl);\n \tdef_ptr(pkt_gen, pktgen);\n@@ -76,6 +80,10 @@ struct ark_bbdevice {\n \tint started;\n \tunsigned int max_nb_queues;  /**< Max number of queues */\n \n+\tvoid *d_handle;\n+\tstruct arkbb_user_ext user_ext;\n+\tvoid *user_data;\n+\n };\n \n \ndiff --git a/drivers/baseband/ark/ark_bbext.h b/drivers/baseband/ark/ark_bbext.h\nnew file mode 100644\nindex 0000000000..2e9cc4ccf3\n--- /dev/null\n+++ b/drivers/baseband/ark/ark_bbext.h\n@@ -0,0 +1,163 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2015-2018 Atomic Rules LLC\n+ */\n+\n+#ifndef _ARK_BBEXT_H_\n+#define _ARK_BBEXT_H_\n+\n+#include <rte_bbdev.h>\n+#include <rte_bbdev_pmd.h>\n+\n+/* The following section lists function prototypes for Arkville's\n+ * baseband dynamic PMD extension. User's who create an extension\n+ * must include this file and define the necessary and desired\n+ * functions. Only 1 function is required for an extension,\n+ * rte_pmd_ark_bbdev_init(); all other functions prototypes in this\n+ * section are optional.\n+ * See documentation for compiling and use of extensions.\n+ */\n+\n+/**\n+ * Extension prototype, required implementation if extensions are used.\n+ * Called during device probe to initialize the user structure\n+ * passed to other extension functions.  This is called once for each\n+ * port of the device.\n+ *\n+ * @param dev\n+ *   current device.\n+ * @param a_bar\n+ *   access to PCIe device bar (application bar) and hence access to\n+ *   user's portion of FPGA.\n+ * @return user_data\n+ *   which will be passed to other extension functions.\n+ */\n+void *rte_pmd_ark_bbdev_init(struct rte_bbdev *dev, void *a_bar);\n+\n+/**\n+ * Extension prototype, optional implementation.\n+ * Called during device uninit.\n+ *\n+ * @param dev\n+ *   current device.\n+ * @param user_data\n+ *   user argument from dev_init() call.\n+ */\n+int rte_pmd_ark_bbdev_uninit(struct rte_bbdev *dev, void *user_data);\n+\n+/**\n+ * Extension prototype, optional implementation.\n+ * Called during rte_bbdev_start().\n+ *\n+ * @param dev\n+ *   current device.\n+ * @param user_data\n+ *   user argument from dev_init() call.\n+ * @return (0) if successful.\n+ */\n+int rte_pmd_ark_bbdev_start(struct rte_bbdev *dev, void *user_data);\n+\n+/**\n+ * Extension prototype, optional implementation.\n+ * Called during  rte_bbdev_stop().\n+ *\n+ * @param dev\n+ *   current device.\n+ * @param user_data\n+ *   user argument from dev_init() call.\n+ * @return (0) if successful.\n+ */\n+int rte_pmd_ark_bbdev_stop(struct rte_bbdev *dev, void *user_data);\n+\n+/**\n+ * Extension prototype, optional implementation.\n+ * Called during rte_bbdev_dequeue_ldpc_dec_ops\n+ *\n+ * @param dev\n+ *   current device.\n+ * @param user_data\n+ *   user argument from dev_init() call.\n+ * @return (0) if successful.\n+ */\n+int rte_pmd_ark_bbdev_dequeue_ldpc_dec(struct rte_bbdev *dev,\n+\t\t\t\t  struct rte_bbdev_dec_op *this_op,\n+\t\t\t\t  uint32_t *usermeta,\n+\t\t\t\t  void *user_data);\n+\n+/**\n+ * Extension prototype, optional implementation.\n+ * Called during rte_bbdev_dequeue_ldpc_enc_ops\n+ *\n+ * @param dev\n+ *   current device.\n+ * @param user_data\n+ *   user argument from dev_init() call.\n+ * @return (0) if successful.\n+ */\n+int rte_pmd_ark_bbdev_dequeue_ldpc_enc(struct rte_bbdev *dev,\n+\t\t\t\t  struct rte_bbdev_enc_op *this_op,\n+\t\t\t\t  uint32_t *usermeta,\n+\t\t\t\t  void *user_data);\n+\n+/**\n+ * Extension prototype, optional implementation.\n+ * Called during rte_bbdev_enqueue_ldpc_dec_ops\n+ *\n+ * @param dev\n+ *   current device.\n+ * @param user_data\n+ *   user argument from dev_init() call.\n+ * @return (0) if successful.\n+ */\n+int rte_pmd_ark_bbdev_enqueue_ldpc_dec(struct rte_bbdev *dev,\n+\t\t\t\t\tstruct rte_bbdev_dec_op *this_op,\n+\t\t\t\t\tuint32_t *usermeta,\n+\t\t\t\t\tuint8_t *meta_cnt,\n+\t\t\t\t\tvoid *user_data);\n+\n+/**\n+ * Extension prototype, optional implementation.\n+ * Called during rte_bbdev_enqueue_ldpc_enc_ops\n+ *\n+ * @param dev\n+ *   current device.\n+ * @param user_data\n+ *   user argument from dev_init() call.\n+ * @return (0) if successful.\n+ */\n+int rte_pmd_ark_bbdev_enqueue_ldpc_enc(struct rte_bbdev *dev,\n+\t\t\t\t\tstruct rte_bbdev_enc_op *this_op,\n+\t\t\t\t\tuint32_t *usermeta,\n+\t\t\t\t\tuint8_t *meta_cnt,\n+\t\t\t\t\tvoid *user_data);\n+\n+\n+struct arkbb_user_ext {\n+\tvoid *(*dev_init)(struct rte_bbdev *dev, void *abar);\n+\tint (*dev_uninit)(struct rte_bbdev *dev, void *udata);\n+\tint (*dev_start)(struct rte_bbdev *dev, void *udata);\n+\tint (*dev_stop)(struct rte_bbdev *dev, void *udata);\n+\tint (*dequeue_ldpc_dec)(struct rte_bbdev *dev,\n+\t\t\t\t struct rte_bbdev_dec_op *op,\n+\t\t\t\t uint32_t *v,\n+\t\t\t\t void *udata);\n+\tint (*dequeue_ldpc_enc)(struct rte_bbdev *dev,\n+\t\t\t\t struct rte_bbdev_enc_op *op,\n+\t\t\t\t uint32_t *v,\n+\t\t\t\t void *udata);\n+\tint (*enqueue_ldpc_dec)(struct rte_bbdev *dev,\n+\t\t\t\t struct rte_bbdev_dec_op *op,\n+\t\t\t\t uint32_t *v,\n+\t\t\t\t uint8_t *v1,\n+\t\t\t\t void *udata);\n+\tint (*enqueue_ldpc_enc)(struct rte_bbdev *dev,\n+\t\t\t\t struct rte_bbdev_enc_op *op,\n+\t\t\t\t uint32_t *v,\n+\t\t\t\t uint8_t *v1,\n+\t\t\t\t void *udata);\n+};\n+\n+\n+\n+\n+\n+#endif\n",
    "prefixes": [
        "08/10"
    ]
}