From patchwork Tue Jul 24 15:05:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shally Verma X-Patchwork-Id: 43314 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9D0CF32A5; Tue, 24 Jul 2018 17:06:12 +0200 (CEST) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0052.outbound.protection.outlook.com [104.47.33.52]) by dpdk.org (Postfix) with ESMTP id 01CD8324B for ; Tue, 24 Jul 2018 17:06:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KJRmzDYqU2rZ8ZWGXblmjC/oT9+93EEXt+h+XgmGiZ8=; b=Iw8+TNQ/zoO+mdp11ye6YlvDQIaA2/60lw0CZCeKrgS1v0SN78KIGM/sG9PAACCSYTr7rEOeGCJRlveBe7mmCA+3BcqB+dE1TcRc0Hwb0XHI6WNfv4pioM2moDIPJjuAfK77bGefQmT5wbDKPfrQWnvDlGdTG6gMnI28pQ8M94s= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Shally.Verma@cavium.com; Received: from hyd1sverma-dt.caveonetworks.com (115.113.156.2) by SN4PR0701MB3646.namprd07.prod.outlook.com (2603:10b6:803:4d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.973.21; Tue, 24 Jul 2018 15:06:06 +0000 From: Shally Verma To: pablo.de.lara.guarch@intel.com Cc: dev@dpdk.org, pathreya@caviumnetworks.com, mchalla@caviumnetworks.com, Ashish Gupta , Sunila Sahu Date: Tue, 24 Jul 2018 20:35:33 +0530 Message-Id: <1532444736-26801-3-git-send-email-shally.verma@caviumnetworks.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1532444736-26801-1-git-send-email-shally.verma@caviumnetworks.com> References: <1532444736-26801-1-git-send-email-shally.verma@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [115.113.156.2] X-ClientProxiedBy: BM1PR0101CA0014.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:18::24) To SN4PR0701MB3646.namprd07.prod.outlook.com (2603:10b6:803:4d::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4b75e5dd-6f48-4000-a9fd-08d5f176fc74 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(5600073)(711020)(2017052603328)(7153060)(7193020); SRVR:SN4PR0701MB3646; X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3646; 3:jny93wQ0ojQiP6+G4dMhYhcZYRO/9XUyyxYmk6VrpcA6u0r3fQgpJ6d3m1/tJvMhF+hV4zlPwWA3h5qOquhn2iEDDFzqh0360fLUy0wEPnMJMPCnOX88T7uyYbPu3MXKdw7gkt2r4hB0vp4kFOaIBa/gw0bFMGsW0vaYgvw8CLshZYuWRhUkOv6HSSzt5N1ZN9+kOqs1LzWlWjzAscKsBsWnPF7/sLiIRHvBDpm6D7Xh7oCPXbj9eOts9zrO9nu/; 25:xt4wJ2yOhAnjygdC7+zlkzzfPnxvOogT4uniK0UwNEJtjzMZbWTsqDNCO2Jyoq5BJ+sJGg6CuowjzrrEoYoGb2eRDUOgbo1PzsYekRH88udoJFVJLa5YOU1Db1hJfvazjf/Kbkm2TVdU1N+L0TeuKJNqPwe4HRwfqqchK5Y/q020a4/sdgCbKaU/kHXFiij4X+waEIUjHbK86MNfMWuwd5Y7jAeaaTc26R0C3LaCKzsWTxfPodVkH2ZdIE5joT5u8Qpt4e29bK8kC5A4CYVZAqdZTXMD9M4PyBNNXlK+1pS0HhV+oc0J9vv5z4rIEb9VzDf6SNlwH3QNU+cVuL/BVQ==; 31:SCv7QW3QBPUWyQ5qg6gOVt0HjwCu27LMvTU/IxrtrSY+wUcKtY2hr0I1ycVdKRV03Sy6Zo79tzO8QRRJxUunsMu6vSmW4NH4Jiyi68cJo/s/61rEr/Kvi8eOhRbMUGY0O4CLHdDFZSI0NULkxqccw0mTM58nnvB4xEirIp0L2ss0pQ8SLEKyptfDENp9afUvMi5naEKsqcexMhZ1owvrtPXFWGcSSRQf8YTqNl/TE1A= X-MS-TrafficTypeDiagnostic: SN4PR0701MB3646: X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3646; 20:jqStVuXcqdxwho+6kfWrc55oDsgLIEWWMaMWgtjZ+lRCBoRs1lkOHBbHSJ0mbhBlPtnocPEN6hK3Qkpj1DYlRHpCq3YXzJwrTJjiFQk8mtnUUWzeYbP8pJIDPAMFUIygX32ayOI3WVIbWjcTmD5VeKZBKiibYHk0RROP4Gzq9DAP4mrNuxO1OLUpNDMn4k0dY3iXogBekIPgiPuEVLM+s4feLOBtiTIfTONzXnXYfkkswzwuKt6+bsdC5NoDYNlRar4+VgPORRAZ5pIVndfkpiQXzhM/P3EcL7DkPKfRzQNmzExrLg896rhaSCCMbj+atVQCTj/YlUU7BY/5AkNHqerJvsEF6WAy9b65Tuzx9bkD9eepU+jrC9bPg3RPutQZeigxBhTRF77SPZhzlx6Y8sTYcxZsWvs0xT5MTDeyHm6/asWAs9zgbimf5jwiT0eLCDynfpdEm/Gb79R62LTr5zrrpLRZrp7COLj7A1VBz+PlGpbqRBtsYrPZ6S28m00kWzbxqo3v18wrTQE7lB+5U3013GC8KDyV9n842w6TbTq4I3SfTkHdOxf/5Fru3xr76C5NLFt+JaJ84NKpbMeHe0mFS12hsjCF8MQVCp3Rpuo=; 4:h7311t5IFnvHfsEjYbr1zGYRlo2yccPnTtk6+tR0P0L8JM4u+UZD7sdAR2kBDm8teKh4nraz0142hQ9zslqqhMI8IpOj5aesC13hxlUkOqFc0cdQCH01kWnyc2G3RJRnTREiU2STjGAuZ931oI4svYT13EXHQjjnuyw1kGjoEoIj4URFTb06E4JqOzXAGNDUjWwVqCBTCTnnlNVU1MoTU1J5jysS3LdQMxWif0Y+7oXaTKIwOFt/KuNY5dtESrjIy0uZ1DNchlChUWQQiuUV3Q== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3231311)(944501410)(52105095)(93006095)(3002001)(149027)(150027)(6041310)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:SN4PR0701MB3646; BCL:0; PCL:0; RULEID:; SRVR:SN4PR0701MB3646; X-Forefront-PRVS: 0743E8D0A6 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(39860400002)(366004)(346002)(136003)(376002)(199004)(189003)(14444005)(26005)(2361001)(6506007)(55236004)(386003)(486006)(2616005)(2906002)(3846002)(36756003)(16526019)(956004)(6116002)(186003)(50226002)(68736007)(5660300001)(11346002)(4326008)(107886003)(478600001)(53936002)(476003)(52116002)(76176011)(51416003)(446003)(72206003)(48376002)(6666003)(575784001)(97736004)(25786009)(42882007)(305945005)(2351001)(69596002)(54906003)(105586002)(106356001)(44832011)(6486002)(53416004)(66066001)(6512007)(316002)(7736002)(47776003)(8676002)(8936002)(81166006)(50466002)(16586007)(6916009)(81156014); DIR:OUT; SFP:1101; SCL:1; SRVR:SN4PR0701MB3646; H:hyd1sverma-dt.caveonetworks.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN4PR0701MB3646; 23:s0yf/K9X5PHJZ1VnHs5DV9WuXcuUBMGTEuVpDCN?= 1fXI42fmdEnDXALIfE4iRVzrIl1OVE6vQ1HbUsgrrjN11JlWuhtftsF+L0vVRdAy2wDCCcC0F3nkfJzQ3CS9kBT8VCI/9EmITVT3Nx/KWCvIUg6EyHsrj7EuHG0ptAgeT3EDK7SX5E75ciWL6ZOjBAEDWSr5EU2HWVucDsfPEv/CoYCAJK9ZaEJrHfR30elI6zmW2K5l5gha2RoJat1RWcUikltJJN0umveCfh+td5kNX7r5DifXfScef5oY3S26E4GKxa2Yq7jXrlbmmcN6PrhpucK2mjc50I8zdKPu2hkZr9ZGmy8QLHNCb6l4AEKPy+YDko33VzfuvKe42kI1wjn2lq8R1ZexOmxbed0RRNSBKLUtEybvwO4HUi8DtJVSb4BuXSmmKnV8Qp6k0VlvX00gxJ5LnCJj0p122x2ThZHGyAKBjrbXJde08Y4op++19XXPf+/8YawOtzxMo0Y+hF/Ui9wW4QKbLQeLU76Ztd8tU7PkDc3P7GC+fRo2BjVYjCDQtsRaf1ksEJxfmvMCN77Faf6ubCGLIOv4VfQtpPJ+VHfKZv8lxmA7cq8ZcBc+DAkQxKq2HvOAbLjnTX5arxNfByu7xcDcGdBNrHFssuTy+eR+9hDRLBNurNNtC54yQUFh/hor306MVsuOgavv+jDjrOjxE3fQpYyXXndNs1GJlupGyLz4c6QgamYe5e+dLw6gasGzF0C/VVWGffnUVyX/75MKARCHfDkWks2P245bEc72tsUge4e/22kAchAJsU5IXQwezDO5aOAwvsivymG43dAVCyZFzSd7dEmQQEh05rUigZfG3nUS9lsqaMo/zpbZES1jOchNXwqGUS04/NEjJWMVuILGFGxwBvOw0xPYHG09UgsvZkNsuoqsO7QZZwjnEBF3KD+JYo5zBqZSRnkJ/UgmYl0IJIgGPw0347Sf0zRGNqI92FRODEFd0FFiIGVV4cWzDspje4LwkhZBWNuHejlET7NN00iALzy97uIzJyE1rVcvHQNIz5EE1oP9z/eKhOHTo/De15P2yDlw/yduOWtxPKAxkS1RMEKSm7YtON55ET8pm2tU0TW8/ARLqr4exnWug9wygEsKQ7Nx8v6UnWCi+TR+rw3WKWwhacMpNp/AYt4vl5a+ocf/jflN6PhEdfbt5OP7s6SagIvso7KjYmSin77ZDhIKkrnNJxoQ3R/bpNNir7ImAwvEr3TB0VHWq+n8UiY+gk4L618/13JDP0/ZtY7uOO5nIsVmO5zZSY9ZkPUTH/3yTxul+v74NyG6OYfN8pkK4U16QSnp8n036+uJ3PEUdaMUYZ25JPeGHYdyLQ/YdesLFHE2+Cak1hnMHvja8vbO4Hszz3R3I7Y34 X-Microsoft-Antispam-Message-Info: NgPnEkVPqsNdUhXdP+MOsGP3BUoUoKvygqrts9Yc1YXfhmVIHm+VWtf2nNrXdkPgfKjHLfw2aS+ROnaUcco6Hjocv8DYT6I8u3+uueZ8yIzEolWrEgnpmhccCppEmoqQZvaVOncFHdzZNN2NhlXoAILXMN+CLz1wTZmw1xTUvc8vZQyUuT5ZgaCR44AgGZ3sCCnzHEWtschEfGBVMOtS6uiq8BU8neaA9MKpiYMo/kaAqU38fFXu1jct1RPSCo7rfoNZAYai1ZEsf7LSUAK8swru+us1IJ/h2M9WAzGBANQDafkV2N52qbL5UyIUeIScgKzK7AIPS9ZFnLMPDpzim8taOGi2O4mRH5GU9/R4WXA= X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3646; 6:tkkL0bnmE9DMa4Imyiwiubp8KYVWoPqnIAYKaOFDu8Ak3WbZ4lCPhsRmmSIOL9rpGkZt0P0koQwoyM90rzYDruY/2l+mmchSBzsZiVqTuWnUtO4L946etZOrVnQ25mS44GvfqC0wX4pWfK7DZaPJIIsVmTaPEryogFWc8UWFQxxBaSKNrson6MTb76gPC2shu8SgYlDRCRY/w9OWGkPRyUhDWtG/9/nANfHogvZ+LKa8Z04iC3sX4T3+brdEEPw6S3w/d+eE5oX6KLf4BWxoCfNQkQ9w4VFXoMdtNXY16opFDzQ3DfoMj1NcC7i3GCthcCNJ+Ot2GQfTqhbduyMWmtPCBqm/3UfA7hae9a9oevcIbCkopLYP1Mi+2tIWsGmt51gP4iQUGa37ud11y0r1qCEPhOWInFoYDE8SsAInou02+PuggsNVDFwKOyNDQ787wjtrmwLokPysmggYrXOygw==; 5:5zuohYs2Kn9jeFrYgFYVanHg+NbWyoZ2LrlBWcf4BHJVyyEd3Q9xAFBIuyZYOdU3ueUHhDSq+DVPEn8ftIpd46vx8w3R60P2qLfL4ggdsF/EtpYWwpYZIb3l3BJT1YucXoDMa0VNyYe2Wk4+Ib6eMA6Vtn5ohbYDHKrEp+oTw0M=; 7:67jsgdkn844vCZTVrXxWJGLN3s/cj6RN9/PBxeakNaIUcFwTPfrePRbnh5HruQC3/NIpx0r/nE3v/3VBjxnsaNzz4uo2lGhYjqrk6Kr563xwf2hVdnYQMvmx18V/C7qg0/0zL6spNlw9K0Z54jhirfmLlLS7tqu8lYGWPWsZn8D2imI5TVOXE6IH1a+HOL5vgJl9Dq0/4Fuz+ur0+jfzRoHold/Nx6bnuFkm01Auuha8UMLva+Te9wRWG8F1ETqM SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2018 15:06:06.2244 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4b75e5dd-6f48-4000-a9fd-08d5f176fc74 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR0701MB3646 Subject: [dpdk-dev] [PATCH v5 2/5] compress/zlib: add device PMD ops X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Ashish Gupta Implement device configure and queue pair setup PMD ops Signed-off-by: Sunila Sahu Signed-off-by: Shally Verma Signed-off-by: Ashish Gupta --- drivers/compress/zlib/Makefile | 1 + drivers/compress/zlib/meson.build | 2 +- drivers/compress/zlib/zlib_pmd.c | 2 + drivers/compress/zlib/zlib_pmd_ops.c | 237 +++++++++++++++++++++++++++++++ drivers/compress/zlib/zlib_pmd_private.h | 35 +++++ 5 files changed, 276 insertions(+), 1 deletion(-) diff --git a/drivers/compress/zlib/Makefile b/drivers/compress/zlib/Makefile index bd322c9..5cf8de6 100644 --- a/drivers/compress/zlib/Makefile +++ b/drivers/compress/zlib/Makefile @@ -24,5 +24,6 @@ LDLIBS += -lrte_bus_vdev # library source files SRCS-$(CONFIG_RTE_LIBRTE_PMD_ZLIB) += zlib_pmd.c +SRCS-$(CONFIG_RTE_LIBRTE_PMD_ZLIB) += zlib_pmd_ops.c include $(RTE_SDK)/mk/rte.lib.mk diff --git a/drivers/compress/zlib/meson.build b/drivers/compress/zlib/meson.build index 3f0a77b..7748de2 100644 --- a/drivers/compress/zlib/meson.build +++ b/drivers/compress/zlib/meson.build @@ -7,7 +7,7 @@ if not dep.found() endif deps += 'bus_vdev' -sources = files('zlib_pmd.c') +sources = files('zlib_pmd.c', 'zlib_pmd_ops.c') ext_deps += dep pkgconfig_extra_libs += '-lz' diff --git a/drivers/compress/zlib/zlib_pmd.c b/drivers/compress/zlib/zlib_pmd.c index 505502d..7aeef44 100644 --- a/drivers/compress/zlib/zlib_pmd.c +++ b/drivers/compress/zlib/zlib_pmd.c @@ -21,6 +21,8 @@ zlib_create(const char *name, return -ENODEV; } + dev->dev_ops = rte_zlib_pmd_ops; + return 0; } diff --git a/drivers/compress/zlib/zlib_pmd_ops.c b/drivers/compress/zlib/zlib_pmd_ops.c new file mode 100644 index 0000000..cf9c006 --- /dev/null +++ b/drivers/compress/zlib/zlib_pmd_ops.c @@ -0,0 +1,237 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Cavium Networks + */ + +#include + +#include +#include + +#include "zlib_pmd_private.h" + +static const struct rte_compressdev_capabilities zlib_pmd_capabilities[] = { + { /* Deflate */ + .algo = RTE_COMP_ALGO_DEFLATE, + .comp_feature_flags = (RTE_COMP_FF_NONCOMPRESSED_BLOCKS | + RTE_COMP_FF_HUFFMAN_FIXED | + RTE_COMP_FF_HUFFMAN_DYNAMIC), + .window_size = { + .min = 8, + .max = 15, + .increment = 1 + }, + }, + + RTE_COMP_END_OF_CAPABILITIES_LIST() + +}; + +/** Configure device */ +static int +zlib_pmd_config(struct rte_compressdev *dev, + struct rte_compressdev_config *config) +{ + struct rte_mempool *mp; + char mp_name[RTE_MEMPOOL_NAMESIZE]; + struct zlib_private *internals = dev->data->dev_private; + + snprintf(mp_name, RTE_MEMPOOL_NAMESIZE, + "stream_mp_%u", dev->data->dev_id); + mp = internals->mp; + if (mp == NULL) { + mp = rte_mempool_create(mp_name, + config->max_nb_priv_xforms + + config->max_nb_streams, + sizeof(struct zlib_priv_xform), + 0, 0, NULL, NULL, NULL, + NULL, config->socket_id, + 0); + if (mp == NULL) { + ZLIB_PMD_ERR("Cannot create private xform pool on " + "socket %d\n", config->socket_id); + return -ENOMEM; + } + internals->mp = mp; + } + return 0; +} + +/** Start device */ +static int +zlib_pmd_start(__rte_unused struct rte_compressdev *dev) +{ + return 0; +} + +/** Stop device */ +static void +zlib_pmd_stop(__rte_unused struct rte_compressdev *dev) +{ +} + +/** Close device */ +static int +zlib_pmd_close(struct rte_compressdev *dev) +{ + struct zlib_private *internals = dev->data->dev_private; + rte_mempool_free(internals->mp); + internals->mp = NULL; + return 0; +} + +/** Get device statistics */ +static void +zlib_pmd_stats_get(struct rte_compressdev *dev, + struct rte_compressdev_stats *stats) +{ + int qp_id; + + for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { + struct zlib_qp *qp = dev->data->queue_pairs[qp_id]; + + stats->enqueued_count += qp->qp_stats.enqueued_count; + stats->dequeued_count += qp->qp_stats.dequeued_count; + + stats->enqueue_err_count += qp->qp_stats.enqueue_err_count; + stats->dequeue_err_count += qp->qp_stats.dequeue_err_count; + } +} + +/** Reset device statistics */ +static void +zlib_pmd_stats_reset(struct rte_compressdev *dev) +{ + int qp_id; + + for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { + struct zlib_qp *qp = dev->data->queue_pairs[qp_id]; + + memset(&qp->qp_stats, 0, sizeof(qp->qp_stats)); + } +} + +/** Get device info */ +static void +zlib_pmd_info_get(struct rte_compressdev *dev, + struct rte_compressdev_info *dev_info) +{ + if (dev_info != NULL) { + dev_info->driver_name = dev->device->name; + dev_info->feature_flags = dev->feature_flags; + dev_info->capabilities = zlib_pmd_capabilities; + } +} + +/** Release queue pair */ +static int +zlib_pmd_qp_release(struct rte_compressdev *dev, uint16_t qp_id) +{ + struct zlib_qp *qp = dev->data->queue_pairs[qp_id]; + + if (qp != NULL) { + rte_ring_free(qp->processed_pkts); + rte_free(qp); + dev->data->queue_pairs[qp_id] = NULL; + } + return 0; +} + +/** set a unique name for the queue pair based on its name, dev_id and qp_id */ +static int +zlib_pmd_qp_set_unique_name(struct rte_compressdev *dev, + struct zlib_qp *qp) +{ + unsigned int n = snprintf(qp->name, sizeof(qp->name), + "zlib_pmd_%u_qp_%u", + dev->data->dev_id, qp->id); + + if (n >= sizeof(qp->name)) + return -1; + + return 0; +} + +/** Create a ring to place process packets on */ +static struct rte_ring * +zlib_pmd_qp_create_processed_pkts_ring(struct zlib_qp *qp, + unsigned int ring_size, int socket_id) +{ + struct rte_ring *r = qp->processed_pkts; + + if (r) { + if (rte_ring_get_size(r) >= ring_size) { + ZLIB_PMD_INFO("Reusing existing ring %s for processed" + " packets", qp->name); + return r; + } + + ZLIB_PMD_ERR("Unable to reuse existing ring %s for processed" + " packets", qp->name); + return NULL; + } + + return rte_ring_create(qp->name, ring_size, socket_id, + RING_F_EXACT_SZ); +} + +/** Setup a queue pair */ +static int +zlib_pmd_qp_setup(struct rte_compressdev *dev, uint16_t qp_id, + uint32_t max_inflight_ops, int socket_id) +{ + struct zlib_qp *qp = NULL; + + /* Free memory prior to re-allocation if needed. */ + if (dev->data->queue_pairs[qp_id] != NULL) + zlib_pmd_qp_release(dev, qp_id); + + /* Allocate the queue pair data structure. */ + qp = rte_zmalloc_socket("ZLIB PMD Queue Pair", sizeof(*qp), + RTE_CACHE_LINE_SIZE, socket_id); + if (qp == NULL) + return (-ENOMEM); + + qp->id = qp_id; + dev->data->queue_pairs[qp_id] = qp; + + if (zlib_pmd_qp_set_unique_name(dev, qp)) + goto qp_setup_cleanup; + + qp->processed_pkts = zlib_pmd_qp_create_processed_pkts_ring(qp, + max_inflight_ops, socket_id); + if (qp->processed_pkts == NULL) + goto qp_setup_cleanup; + + memset(&qp->qp_stats, 0, sizeof(qp->qp_stats)); + return 0; + +qp_setup_cleanup: + if (qp) { + rte_free(qp); + qp = NULL; + } + return -1; +} + +struct rte_compressdev_ops zlib_pmd_ops = { + .dev_configure = zlib_pmd_config, + .dev_start = zlib_pmd_start, + .dev_stop = zlib_pmd_stop, + .dev_close = zlib_pmd_close, + + .stats_get = zlib_pmd_stats_get, + .stats_reset = zlib_pmd_stats_reset, + + .dev_infos_get = zlib_pmd_info_get, + + .queue_pair_setup = zlib_pmd_qp_setup, + .queue_pair_release = zlib_pmd_qp_release, + + .private_xform_create = NULL, + .private_xform_free = NULL, + + .stream_create = NULL, + .stream_free = NULL +}; + +struct rte_compressdev_ops *rte_zlib_pmd_ops = &zlib_pmd_ops; diff --git a/drivers/compress/zlib/zlib_pmd_private.h b/drivers/compress/zlib/zlib_pmd_private.h index d26a740..0e391a4 100644 --- a/drivers/compress/zlib/zlib_pmd_private.h +++ b/drivers/compress/zlib/zlib_pmd_private.h @@ -27,6 +27,41 @@ int zlib_logtype_driver; ZLIB_PMD_LOG(WARNING, fmt, ## args) struct zlib_private { + struct rte_mempool *mp; }; +struct zlib_qp { + struct rte_ring *processed_pkts; + /**< Ring for placing process packets */ + struct rte_compressdev_stats qp_stats; + /**< Queue pair statistics */ + uint16_t id; + /**< Queue Pair Identifier */ + char name[RTE_COMPRESSDEV_NAME_MAX_LEN]; + /**< Unique Queue Pair Name */ +} __rte_cache_aligned; + +/* Algorithm handler function prototype */ +typedef void (*comp_func_t)(struct rte_comp_op *op, z_stream *strm); + +typedef int (*comp_free_t)(z_stream *strm); + +/** ZLIB Stream structure */ +struct zlib_stream { + z_stream strm; + /**< zlib stream structure */ + comp_func_t comp; + /**< Operation (compression/decompression) */ + comp_free_t free; + /**< Free Operation (compression/decompression) */ +} __rte_cache_aligned; + +/** ZLIB private xform structure */ +struct zlib_priv_xform { + struct zlib_stream stream; +} __rte_cache_aligned; + +/** Device specific operations function pointer structure */ +extern struct rte_compressdev_ops *rte_zlib_pmd_ops; + #endif /* _RTE_ZLIB_PMD_PRIVATE_H_ */