From patchwork Tue May 15 10:32:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shally Verma X-Patchwork-Id: 40045 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 D83361BA02; Tue, 15 May 2018 12:33:08 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0050.outbound.protection.outlook.com [104.47.36.50]) by dpdk.org (Postfix) with ESMTP id 7F8071BA0B for ; Tue, 15 May 2018 12:33:05 +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; bh=wbtCroYOlU8kvct0XWg7/uvjvUL1haeHrFjKFf3qsLg=; b=eDsQ6mvjF45kvl9KXrUY3FX9yRpUFTN9mzjy55lsZm5Ap/gAB2MUZ13fsSeVQYF1bK2HarANwyBatnFWT0hx/C8Avjb8zYIzL4e/j/rrVCneifcBHCFktzFfuv5nKnMAirtmXWQD3UBK/T5nXGgpBeqzqqlzJ1q37QaF+PQo/b8= 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_CBC_SHA384_P256) id 15.20.755.16; Tue, 15 May 2018 10:33:02 +0000 From: Shally Verma To: pablo.de.lara.guarch@intel.com Cc: fiona.trahe@intel.com, dev@dpdk.org, pathreay@caviumnetworks.com, Sunila Sahu , Ashish Gupta Date: Tue, 15 May 2018 16:02:23 +0530 Message-Id: <1526380346-7386-4-git-send-email-shally.verma@caviumnetworks.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1526380346-7386-1-git-send-email-shally.verma@caviumnetworks.com> References: <1526380346-7386-1-git-send-email-shally.verma@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [115.113.156.2] X-ClientProxiedBy: BMXPR01CA0033.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:c::19) To SN4PR0701MB3646.namprd07.prod.outlook.com (2603:10b6:803:4d::12) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(5600026)(2017052603328)(7153060)(7193020); SRVR:SN4PR0701MB3646; X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3646; 3:tSYcPail1c5LyZNt8vCEWrGxAKXiQzVhgCzEMsZ8pRX9PoVru3EyGUtMPBi4gigSVWPrFo8CrPJpjgRVLL0IeDmwVSWbbhD/IxBJ0FyIcRco4brpe66yqE0d/O9rqzNswYND1Ifea2qWgs4ReKx1JEK8cfC0tiGiFqysip3awmaYakbug5fPiWY8La3M3/exFxkDzfLjpLszkSU91SChvAtk7vPvRUMYNDikTvwY+OrZ8P0jSl1IT6YUSt+MUtcW; 25:rflNwOgNchrlBVLjzt/P6heVxAk2wA5cgTEtu5NNDxUZeF9KJwKZBGP1hd2lp85OC4GstFnJ+Djq6TMYRg/w7lYlHcXsMbD39ox6Vr83yNsBxtd87ky9l3Rt684mYkFsjYmRCSYjnKdA1uZXoAwnxwXYjtIDqepDjD8Y9iyQe/c2deTGA7T2f5ss0Kjwo0PFIyN8X9We36OAf1LFh16ZhAN5hOUxmbsuF4hNaPMlKOb0zP3iETKK6VzCRqRcFF0+EwGUi1LPXvKWh8Pyo0TYIBgKmXR+cAcHpxnctqKrryKGV5RuhXSNfBrC2sIo8048OP8btY+LqCwQtYaF9B23Cw==; 31:goA5Hb2MC+zHP4kNDFc8DFg+pwMzZ31UUl4hTQCLU3IXR0g3xRBmRQoEWRwopPNrVBm3krknPAj4Go1pqjjoAsxIsDQGx0uSsaaMzMqPFct2snwGfbd8zD4rIwiRio1Yez672I9b7PyKecGNJL8Ou2dlVsr6x09m+JD1CaiBmM6S2uMsXG7NAWueHavLZhyhnozdkYXba1wJUL0MVAOipQNlmwLV5KQdGeZO7esM4HM= X-MS-TrafficTypeDiagnostic: SN4PR0701MB3646: X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3646; 20:RlmgIDtfhF8UqZ4FYIArV5b/FTMZ3fBJ2QvB12ld/FScTGuYWHNeAU2YvVziAlxhferDY2Kfb8xO4tIx1oTP5NzL3v2fH30rIJ83+StqUH27CNVOmnuGOYzS6zEwy1lBgRpMThcMTeQan+m2UcbnSPxBu82Ke3yq4dIDObPalXInf2mNF0+cb3PwdAQvheag7Kf8OzUqHWuKUaFbQWnyrrDT7HptG5XmGFI6xFO3LANUrMRPD38iGtva/Q8RKZ0csEY9sD85WZtEyAzHRpBKBVixUtlvbvoS3V4+SQeASQPAahRPLcWY7Kg6y9gVlP+qW+awn7WgzQXN37yY2C8c+9j5MrtOdXMdsSi23RSzUTV/ZngY5FJnMQlu44YMNL8LkA453Lj2G+TjJqyOclDbIT3UCeWM0HMjknm2xzJItpoyMek4clKxGxaFbR6MeOpid/Bkwk4PReKxL2aYh6WsJHcwurMQWKCp1UZYW7IMWdPwCq+AaUunsyqcMtkczOpwnTB8vzKmF9LLITq3HQ4YZMYmAaHR8QGhnZIDSAHHhenAohAxV8fMkFYQrJMEsmwcjDK/TJ8BN2d1AJ0/io+GwJa0k/EN+wLIFpzbpXR0ftQ=; 4:ZePJmEf/qsxvYOQ5Xo+WBRd65NKNQRiYCnnC0bMyJ0yqpCqORO6qLsxlNTaMxZAIq66Vbqn88DHBqzt/IOp/cVd8LTzwV7wr1qocMKfMguBQAr49ANlVofX1kI70CeNlBszal/V0qmNHjsfKLsT36fEgR85bGnHlYbkeFctkgrDsjjxx7IrhomPdFk0aTMkffuWo3abMfp0fGqRhQay85813rU5WvLQov85TAb0pAD6G3JPjl32jh6gENQV0Vt3LOtCIVFf20IW9ZTJ34qmxRQ== 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)(3231254)(944501410)(52105095)(93006095)(3002001)(10201501046)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011); SRVR:SN4PR0701MB3646; BCL:0; PCL:0; RULEID:; SRVR:SN4PR0701MB3646; X-Forefront-PRVS: 0673F5BE31 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(39860400002)(376002)(366004)(396003)(346002)(189003)(199004)(478600001)(486006)(55236004)(44832011)(16586007)(54906003)(316002)(47776003)(2906002)(6506007)(386003)(8936002)(66066001)(6486002)(72206003)(6116002)(3846002)(25786009)(97736004)(5660300001)(42882007)(50226002)(36756003)(8676002)(48376002)(53416004)(52116002)(107886003)(26005)(50466002)(2616005)(81156014)(105586002)(81166006)(2361001)(53936002)(6666003)(6916009)(4326008)(16526019)(68736007)(476003)(446003)(956004)(106356001)(76176011)(186003)(7736002)(2351001)(69596002)(6512007)(305945005)(51416003)(11346002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN4PR0701MB3646; H:hyd1sverma-dt.caveonetworks.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A: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:drE+pcZewSA0TpOFFxqZfjWDH9AGjOEMTTN2ivn?= YYoxpLqxHZqackkGy3cVe0arz1U1Pneb4WwSS4lRncthCTEFq4pNsHAy80Kx0Cv4LGBuqWQDM55+9T3nq7FhWMcc6/tlT07FtMhyDDJO60fuTZtGnbtTmaujQnCihWGqByYFF/D1eqjPZj+05vKC2+2SHiR8At+bgQHvs/TJtZyPQleyh6N1iarc8hkQ8GoMtNu/d/5ypj4xLziFs3UzSXuMU/Lkw+vZD4WdHec7hk72DeDja8AZO6JUvcqzALgXUj+GTAM4GCulax+Civ8QP6ueyNMX4slkTQIje5jSdvtmRq1AvlZ6N1pAA6RETKEy55VBaMSkxXdnpIOIdXFGfzbIua1647vodikMcYlrRc5Xf2o31ZQDep4Cxrs6vENt/3UxRv96ZT6rCw0+NnsbMwRpk4d+buJbVGAg+sLtSY3khtWDiWNIFyMV+bQV7sRUUyhulMRUoOUQ8l0RRyZ0iR42pZ9xtvBI9qH+6wfwiV7T9sDww9+3bacAU5YyanEmhXMadUtbTRmb9dFDJMksNCEchAsniDN4JqxztHhuv4uBpVPh3xj6/jAuTxB6VQg5tZNlTsRF1o90Y+63lg/7OBS4WINFUv9FGPdECpCVNQyzQMusDwVkDKFVLiV6kjXgsBQLyaJ0dp0qdjot8zSk+P1qAFgLHtb2OpgjAkl5SznHepHUZSF1wzngbLq1asGlAdHotpzGb6AiXF4TsNrigxAzEic1214nYtRBDhCmrZp1FEmVUwPf9W9V5d0qlNF1OE+KgXPYjZTJbo+QZDnlY5eSHADcSjozqV9VPiJJtTDUw39Yu75T67QoJlEx56tAaDVDU93AIIsa7ptJ6YhlAL7XOdWjAvsZ0x7S9aBW+yhyk3nL2i2QZSd+gtxfRYQNCGlNgRz/LLzsirvHzchvA8L3H5JzlBg3wwq7NF9+uXBH70G/236D3CASGgCmUhaki0x2owCh6YCzzAxxjw9NXkec73An42jYvf2mJOH3SZsCTHSSNSEdcQvuQScoX6dklT96t5lyHZ4joNc9i9MzLClgrybZxy6iXj1Wwg4lUdV8kirIi8y80+wzjuIbi9LzdYd0G9I+mtm0ipkaWbYerZkdBv3KrjKXNSO+k/J6bmN60syL6qKE+JH8D4dfhm40baDp/g0Ngw1eT38G8UG7aWNNG/EOXhLP4W3LA4PsDxx4UfOiw2jGjRbiPL7vFk/ZHOhmyX98mA3qu23/Dm//2UaRh1+aF8nPGwSN1t77xt/4DcvUTD4inf1MadX1KNkrTMLROk7qgy0QU7FEVrlhoERRCtErUPSwidS6sRuDhUB5Zuw== X-Microsoft-Antispam-Message-Info: VKCzg4rYfzjPnJv1SglS2GWnj1R47N3S9Ny95y0EwZnyhS2tEHpfkan0SVnATifU3M2Md04YktoAldES52A7ejdj3i2VjxOCm6jGOBmh6VWlFXypXvNo5nzRyIv0LIlL3Rg9W2z0WfkYOzdjjZuPcpy3Ixajt0Z87BxxggF8PgMhHf5WUVP96LJIsYRDZ48N X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3646; 6:CFTL28an0VM0SpauB9r2QQ5DWJ2NuDBrWW8D7EG1e8skgklFNgtflc4vq2/3tGG8QPKCvq09saF/zM/GSMytmMLpWpx5vG8C3HdvXS2juwRYP/tYVDKO14kGKpvkhs/9/5omwegmJeX1MA15oItEw4NPlFagogeyS2NO3YmtBjax0iZXCELaX/lLQTHBhJuO4Evi9wE8ontWGypslyozEiahFkHg/x/jmX5DBA5huO8gZgwIeEpf8LZTI5x9TBj2t3AVBZ55FpXOs24CUPWgukyOTQ/1V+6LSvbGu/QMWaoDCu7C9u7JHvspTuJ4tBBAXhltWi2S/4IVmeR9S43Uk9RtjyZA5QC/qJwqf3IT1SaLnfRAcjh/KF/gPdwNv9QmEALUqmJtW0eY01vfvQEQyGksMVIGqbyupYqdrYa3zDE/0XwbFTsspORABZYX6TNb588MK4vP/xaxWx7aDWWXzg==; 5:i3ch/c6cLVbCik5AVI8bt7zUoIY6gS2sRuRX8tp6xcrZ1C1wWEmXjtqSuo/Pn3XEmEN9R77yV87OMia56O6Z3bOB8+MvEUFS7e65K4SziWsx+Av6YDcg/fX7zUKAY1xjVOU6CCp0gEECy7E8A6kjepKkOE3KENyqs7cyXzW4O0w=; 24:dqnekB3TuY7Ty2S/r/VSgsiPpo+mCXlCAt0X0aCtnHZ+3V+QDTyOwuL+q+2g1+5eu/U4B6nOZjyjA+bxbNiQqRz0I1eHIHjzmuFqgiwwVkY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3646; 7:TrLz4rvMFGcdRDSM1eyzcz3qzaWLL2GqvWl5GwtTjfC3E9xTtPWr9pXS5R/tSi1/tCJiHdYvFdmcfHu7wbJ7dbEjkn/356Euslda4Gq0f6swXVUwzQwyF0k8lir81k4CdZApJohRfPy173hHy8F0mObkcXvErCMIlzPZgHhtr0pedWeltZFNSnBQAYzr/g1gwuzN+JSVp/0SNsNGRL4Nqpt/GSahhJWJqvYmMNde/zuSpz22kAwmtvUDjcXYTcvu X-MS-Office365-Filtering-Correlation-Id: 01d56b04-01c2-4811-064e-08d5ba4f3da8 X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2018 10:33:02.0053 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 01d56b04-01c2-4811-064e-08d5ba4f3da8 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 v1 3/6] compress/zlib: add xform and stream create support 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" Implement private xform and stream create ops Signed-off-by: Sunila Sahu Signed-off-by: Shally Verma Signed-off-by: Ashish Gupta --- drivers/compress/zlib/zlib_pmd.c | 99 ++++++++++++++++++++++++++++++++++++ drivers/compress/zlib/zlib_pmd_ops.c | 84 ++++++++++++++++++++++++++++-- 2 files changed, 179 insertions(+), 4 deletions(-) diff --git a/drivers/compress/zlib/zlib_pmd.c b/drivers/compress/zlib/zlib_pmd.c index bbf49f1..3dc71ec 100644 --- a/drivers/compress/zlib/zlib_pmd.c +++ b/drivers/compress/zlib/zlib_pmd.c @@ -19,6 +19,105 @@ static uint8_t compressdev_driver_id; int zlib_logtype_driver; +/** Parse comp xform and set private xform/Stream parameters */ +int +zlib_set_stream_parameters(const struct rte_comp_xform *xform, + struct zlib_stream *stream) +{ + int strategy, level, wbits; + z_stream *strm = &stream->strm; + + /* allocate deflate state */ + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; + strm->opaque = Z_NULL; + + switch (xform->type) { + case RTE_COMP_COMPRESS: + + stream->comp = process_zlib_deflate; + stream->free = deflateEnd; + /** Compression window bits */ + switch (xform->compress.algo) { + case RTE_COMP_ALGO_DEFLATE: + wbits = -(xform->compress.window_size); + break; + default: + ZLIB_LOG_ERR("Compression algorithm not supported\n"); + return -1; + } + + /** Compression Level */ + switch (xform->compress.level) { + case RTE_COMP_LEVEL_PMD_DEFAULT: + level = Z_DEFAULT_COMPRESSION; + break; + case RTE_COMP_LEVEL_NONE: + level = Z_NO_COMPRESSION; + break; + case RTE_COMP_LEVEL_MIN: + level = Z_BEST_SPEED; + break; + case RTE_COMP_LEVEL_MAX: + level = Z_BEST_COMPRESSION; + break; + default: + level = xform->compress.level; + + if (level < RTE_COMP_LEVEL_MIN || + level > RTE_COMP_LEVEL_MAX) { + ZLIB_LOG_ERR("Compression level not supported\n"); + return -1; + } + } + + /** Compression strategy */ + switch (xform->compress.deflate.huffman) { + case RTE_COMP_HUFFMAN_DEFAULT: + strategy = Z_DEFAULT_STRATEGY; + break; + case RTE_COMP_HUFFMAN_FIXED: + strategy = Z_FIXED; + break; + case RTE_COMP_HUFFMAN_DYNAMIC: + strategy = Z_HUFFMAN_ONLY; + break; + default: + ZLIB_LOG_ERR("Compression strategy not supported\n"); + return -1; + } + if (deflateInit2(strm, level, + Z_DEFLATED, wbits, + DEF_MEM_LEVEL, strategy) != Z_OK) { + ZLIB_LOG_ERR("Deflate init failed\n"); + return -1; + } + break; + case RTE_COMP_DECOMPRESS: + + stream->comp = process_zlib_inflate; + stream->free = inflateEnd; + /** window bits */ + switch (xform->decompress.algo) { + case RTE_COMP_ALGO_DEFLATE: + wbits = -(xform->decompress.window_size); + break; + default: + ZLIB_LOG_ERR("Compression algorithm not supported\n"); + return -1; + } + + if (inflateInit2(strm, wbits) != Z_OK) { + ZLIB_LOG_ERR("Inflate init failed\n"); + return -1; + } + break; + default: + return -1; + } + return 0; +} + static int zlib_remove(struct rte_vdev_device *vdev); static int diff --git a/drivers/compress/zlib/zlib_pmd_ops.c b/drivers/compress/zlib/zlib_pmd_ops.c index 0bd42f3..be4fccd 100644 --- a/drivers/compress/zlib/zlib_pmd_ops.c +++ b/drivers/compress/zlib/zlib_pmd_ops.c @@ -213,6 +213,82 @@ zlib_pmd_qp_setup(struct rte_compressdev *dev, uint16_t qp_id, return -1; } +/** Configure stream */ +static int +zlib_pmd_stream_create(struct rte_compressdev *dev, + const struct rte_comp_xform *xform, + void **zstream) +{ + int ret = 0; + struct zlib_stream *stream; + struct zlib_private *internals = dev->data->dev_private; + + if (xform == NULL) { + ZLIB_LOG_ERR("invalid xform struct"); + return -EINVAL; + } + + struct rte_mempool *mp = rte_mempool_lookup(internals->mp_name); + if (rte_mempool_get(mp, (void **)zstream)) { + ZLIB_LOG_ERR( + "Couldn't get object from session mempool"); + return -ENOMEM; + } + stream = *((struct zlib_stream **)zstream); + + ret = zlib_set_stream_parameters(xform, stream); + + if (ret < 0) { + ZLIB_LOG_ERR("failed configure session parameters"); + + memset(stream, 0, sizeof(struct zlib_stream)); + /* Return session to mempool */ + rte_mempool_put(mp, stream); + } + + return 0; +} + +/** Configure private xform */ +static int +zlib_pmd_private_xform_create(struct rte_compressdev *dev, + const struct rte_comp_xform *xform, + void **private_xform) +{ + int ret = 0; + + ret = zlib_pmd_stream_create(dev, xform, private_xform); + return ret; +} + +/** Clear the memory of stream so it doesn't leave key material behind */ +static int +zlib_pmd_stream_free(__rte_unused struct rte_compressdev *dev, + void *zstream) +{ + struct zlib_stream *stream = zstream; + if (!stream) + return -EINVAL; + + stream->free(&stream->strm); + /* Zero out the whole structure */ + memset(stream, 0, sizeof(struct zlib_stream)); + struct rte_mempool *mp = rte_mempool_from_obj(stream); + rte_mempool_put(mp, stream); + + return 0; +} + +/** Clear the memory of stream so it doesn't leave key material behind */ +static int +zlib_pmd_private_xform_free(struct rte_compressdev *dev, + void *private_xform) +{ + zlib_pmd_stream_free(dev, private_xform); + + return 0; +} + struct rte_compressdev_ops zlib_pmd_ops = { .dev_configure = zlib_pmd_config, .dev_start = zlib_pmd_start, @@ -228,11 +304,11 @@ struct rte_compressdev_ops zlib_pmd_ops = { .queue_pair_setup = zlib_pmd_qp_setup, .queue_pair_release = zlib_pmd_qp_release, - .private_xform_create = NULL, - .private_xform_free = NULL, + .private_xform_create = zlib_pmd_private_xform_create, + .private_xform_free = zlib_pmd_private_xform_free, - .stream_create = NULL, - .stream_free = NULL + .stream_create = zlib_pmd_stream_create, + .stream_free = zlib_pmd_stream_free }; struct rte_compressdev_ops *rte_zlib_pmd_ops = &zlib_pmd_ops;