From patchwork Wed Jul 25 17:04:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ashish Gupta X-Patchwork-Id: 43361 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 C188D44CF; Wed, 25 Jul 2018 18:43:09 +0200 (CEST) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0072.outbound.protection.outlook.com [104.47.33.72]) by dpdk.org (Postfix) with ESMTP id 8A7D4378B for ; Wed, 25 Jul 2018 18:43:07 +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=MMpZ+X+PN3GWvl4cYIDdsvzPRVY/Wb+ODMcMqphx/KE=; b=LCC/VsXioclEK0N4Mj6ZpPMXHCnwYppBEoy7yQHaYybH/DnmdpdsL/t+EGDk6TJvW6Qc43hZ3g6EgRkPzl6/M5wEdr24UFHMy0dTU6+5nDJswgEij4GlNL0pZPCeqvaSD9M6KHJwn0UUmxMVghpnaxeIV1xcg0RwbiVySadBv0w= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Ashish.Gupta@cavium.com; Received: from hyd1agupta-dt.caveonetworks.com (115.113.156.2) by CY4PR07MB3062.namprd07.prod.outlook.com (2603:10b6:903:d1::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.973.21; Wed, 25 Jul 2018 16:43:03 +0000 From: Ashish Gupta To: pablo.de.lara.guarch@intel.com Cc: dev@dpdk.org, narayanaprasad.athreya@cavium.com, mahipal.challa@cavium.com, fiona.trahe@intel.com, Ashish Gupta , Shally Verma , Sunila Sahu Date: Wed, 25 Jul 2018 22:34:53 +0530 Message-Id: <20180725170456.3319-4-Ashish.Gupta@caviumnetworks.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180725170456.3319-1-Ashish.Gupta@caviumnetworks.com> References: <20180725170456.3319-1-Ashish.Gupta@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [115.113.156.2] X-ClientProxiedBy: MA1PR01CA0106.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::22) To CY4PR07MB3062.namprd07.prod.outlook.com (2603:10b6:903:d1::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 71ba8bd9-aa63-46dd-0d90-08d5f24db225 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(5600073)(711020)(2017052603328)(7153060)(7193020); SRVR:CY4PR07MB3062; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3062; 3:wLiLW34ggcDASbdFx2YWaHOCUc7gGJgVBmmiYbYjgNE6HWTQtHZrFwnb84KB8sQrQ065zY0ON4UxBA6nfjbK6edKbNqHPbnvCwC5OSSJAWJvjfJZMrZJzmQ+5wKo5uR0s/a9oHq3nVFz8iaqeGI2OdRH3+de7eFgTzLpKzDg+D5tQIKK5rMM3lxKUwQ9OYskSa0PxxQXNuoxqay7ORLYGuTSXrFrrx538S1gbqcWjGrjFT21OQy9dnS5jjm6VcvW; 25:V5nJWglbQJgRskGwfGAER5XQEDKvL3GQl4ommOzPmuv+19WpIiFZe7i9+f8DppT6/ylUSXQuHvYsqenBnPUaSRfOPJCM1cbrTplCk/mWwUDJ6ru+DKpCrE91Q72ah72dE9V23kkwH+DMXGDVZllJlCTqBjQkjKYd2YuCkrJxcgMMZ5j3ScYqAaD2MOAbafo7t6l/c1m3m8nQcg1tl5kgaYeV9fOdFhM5vf2khlS7Vnm5u2Vv79eVR4AA4X6Q7ZEAKFsxbl/4+KGbZPGKnZZzW5wL5H+NEaUhNW1JgpjjZztaH8MqJ+lvE+NHrcfFW9qCcSjH9KycHvzY7EYD0ffOiQ==; 31:yGKVutE7MLrwxatzIyy2Z1xy/L2H82yPfL/sFkIsVwjssZh6t21IWOTRZ7mnlCSNqTxaZfwdBjkaorlpOhEBpmRSBLRLk1llejoLQTf4aHR5WHDpepofWIiuGrjlOroN5kmeN5gIZcpWZze44J5cpvK7jd4SLO0rarR9c8mDi5Uvr7xwGCRaBz8qRZ2QJc3KLxkZ7iG0DBBWj7blY+P8KGWmMtMTdkSiOoZRsUUfqns= X-MS-TrafficTypeDiagnostic: CY4PR07MB3062: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3062; 20:ghwROezBETWY6kwH5aysjVOtvPuC1knVUwBPLeNxKmXUhoFj0PurqOGNmW5woKOxjSxhQ2l+b2sB1jcCzBGykGSH8NjsGhIipgV7Qp2v1PP8OI8qMeguW/AXZBZTboytKspk1YJrQSZiUfSzQ8lbnhc5hmrv6/aD9yd3XcoNvwCp2RUtw6DodF7RgIUqnt9J7gihR4NQJOOftJMIc97DlFOvSsxbZ0R+a2ccjknAJxp9m1wJkk/gW1hUaLsh11Xcb2rjVotefzI2OxLyVIxwQkqFSbGojwn2w5kpBPMZz4KyXjQXCWYm2Kp4Gn2Vw1r9+3pV+KJg2gM+FFuW2NFkrxT2xnbsIPHcQjBFMf2A76CeeiwOJgpviKXrMsTBQsbTMogotBmev84oh3lHNF5nFpBuCcyCxawvB7NbJOVcotbFrKpBhDbRFbnUYKxRDTNON9MeZ37KoLNZRkUPLgjf+nvpQoEdSysxUO91Kc5cv4tFGLspltK3sbQNjcXNWvUYeVYdco/kcc0WwksPYOP61Ej7g5rbvkVNb2JkD5jqsnJ5Pu8cuFK/0Q6LsS2vYbwkL1aQ4+Akb7x9okJAFYZ7rb1z6EQeXCv0wa3WJr7zXBA=; 4:MQ4r+QHEZqjsJRDxQJzHR6jMP3mAhQMKUVqg7y0pFzuHrHfFl3KfTLEYMNw+XQxvw02bpFuI7BGA42aV/K/EAiTcV27gyRybcImpCu0siS+M5Ueoxy4mkHAhc/cAVvTSgkycG1FGoTG11Lf29vBw73aQAEQZNuM/r6Zb84Di0CA7zCW5KM+yZFAKdWat+GwK4Tp/Ps6qjQkhFjdElxgq09A0vyG4UrM9g6LJ5Dl/GGsbF6pMpp+uxp97F8yf1I08xk2nviVN06pJe53NweZ0w9YFmNyGkedpXDQ129WQT/OgHjKuq3d7xCaFZjp26JN2 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(93006095)(3231311)(944501410)(52105095)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:CY4PR07MB3062; BCL:0; PCL:0; RULEID:; SRVR:CY4PR07MB3062; X-Forefront-PRVS: 0744CFB5E8 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(376002)(346002)(136003)(366004)(39860400002)(189003)(199004)(2616005)(956004)(446003)(25786009)(69596002)(6486002)(2351001)(53416004)(81156014)(8676002)(11346002)(47776003)(105586002)(4326008)(66066001)(81166006)(486006)(8936002)(476003)(2361001)(26005)(186003)(16526019)(42882007)(7736002)(106356001)(68736007)(386003)(305945005)(6506007)(50226002)(107886003)(6512007)(51416003)(48376002)(52116002)(54906003)(72206003)(14444005)(50466002)(6666003)(97736004)(6916009)(5660300001)(478600001)(76176011)(16586007)(53936002)(3846002)(36756003)(2906002)(6116002)(55236004)(1076002)(316002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB3062; H:hyd1agupta-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; CY4PR07MB3062; 23:LIdSED4sOtGBKSAVeH0aO/TpzLvPcTUDz/9Lzqu9P?= HDXYEeISywKV9E2OLr57wVNYMWLff2w3jPx1mVXZyRx9UBAxXMxi80qsMszYzNLDArg7Sdvw8UJ44VE12ZLbiMiludJJ7Fk+gNW1AQjtIjKFYJsMPE4IIvmLwXCvZj3LMLL8eu+hdpYfPm0wERmRpt43QY+pVnDmyy+wKD47cb+cSMsK/5c+NXHprDmq8aqQVpMRX43iFmjzjEV+ybjJEz5ov1ed6S4HGJzmfe87JyKsDdjtQShc3oIE+V2d19OxB2IEb6k5SK31WHWCGGm7O73LBdammTLYvwZ4TW8hmm/aXjvEJEDXVB1G7NIHrj1ypMEji5J2hyhGVv5/UYk9weWu5uIpcoCbpUXCpIP+qqHvC/HcyAr3p5GGehqYm77kTdEWZ7T5Z8F3x6FA3ZcxI1zbL/xOL3pCbPDmB+H2qH5ru0U+xtRWi95cSdEdlu1lKRRpgHp4nCcjy57ajnorz76ssUEDy4iUAtZtZwT63E5kirOOieFkrA2p0xXSS7g+Xywq9aSzdZTaff626k8Gc0CSG/b/6YPJY8GxxSu98ul49xWelfBxldGL4rETIcYkB8IO5hHN/FbDgmUxPbbTBNBczUaXoZXhDC0AsaauTEgsgosrwMXvZ1Lm/9+6t6OfcihduFq3TGFAsRxRg/gfz4Zmv+DIHHgF9SdFKnFiPtVDqlnzegDhFtkuCIESA/JoHNzat4YG3Q/LXfhdMcMqJOa8NyjNmg2tpmrYmxFyAGhui9aq8n9t8TS1ORaoELtdGTTUNx0UQYXhWl8kxHnI7+U4/11RiELaqPwDzyHTCu2fBAqW+zCAfmjoE3FrRh8W4RkX/SVeNTU/qgOS5wGlCLtUf2H2oDBvnPkCpRV6h6XCIUdeiBCjexseolIMDt/cIkgb6aK937/Qmcv7j1+KgAPo7RLdUTp+JJLj+H7Bc4XKzUkF9oP44+85SX4vXzqtimY5+l22HH5EQmqzRSkvKNLOyfE40dOF9Il7GGsqq26D/TfV6YEM1Yhx8uUKgNYkydfQXeRAv3kxkW9AyuBpxCCb3lbLCjlaAg/zB+4mVemZacyFNkqGC9Hl8dRf/1ETjnbUt+3G6XSqwKkeWbRbNzwP0wLYgHaW0USxUHD34+AFiyVqBfjD4W65/Ms6J8qUo+phAALYS9O2c8HG3Ihfm1pYX5tBX1bNADhiH3eet+7Bte9Fs8z5VnQh+Ud7j+sGTnRqpRSOtUSFhfoQndmDO5S988NVenskJXJTeqTMzHop1Uf34V/3pFsXlA+tyriyYfkQlHB9D1WGIaxqs0ZB4g7xN0aQ1fMJOsuRNyLY6Zxp+iyMdL5z0kF8SPeztrAqOo= X-Microsoft-Antispam-Message-Info: 2O2sqX9NM/Z6OgAtxOnzfTYn6ZvuAFwuGtdur5xiaf0QBiHU72S6WT7whUowYSJJuu9MblJ1qfyU7xtFZ4l/10b06h2YwDb0gXjwJoUxSC3i8J0+oegxgJtAlqM8G9xHbKnPaAARKKYZtvtVaKwoa+wSRnLv6VgMd9jTQTv4in3NK37+K2eGolaAbEkkQebmGk94vUDojeETQz8w2z33lmiJic+Yc4k/bt6JbkN5mSjHlTO05+sZKQL4gh+woGBaqlj+0hQHk50xODLSuhGo011ieyb8Ckx9142nj2XNUF+1CWpAC2dl0Xtemkhhr4ROCgYjGhCcLBtnKdcKJTNMNubZoDTWKyUszg9CjAGWM9M= X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3062; 6:QzGWWNE6eAu6V+a3mjdUfq8dSOOS9eu9nqEYbR54dKYM1iTFNYlREQNqepp9+nvL9u5iHCYnEg1ZgNz3cEUcZb5QBFjpcxQ7MhDna7HcdVEGuc9UBB/K8GAXdTOp9R9aR1ksF8sA6B5IvVK8eOLtJu/ysutxP1e7BergKbQlUtTAUedEs08LwXvNnCpbwVwjfYphfUgDrFu8ny+fHLk2iEhVBaPXtbxS5xzC4Tf4iMximqXbLN7C93t3HDVLWZpgIlEGbVngCMX3va3+vBP4WCyM4HouHHIZoj2hAioNA8FIyi3cd+S6GvuOAU1BXexP4/Q+PUFpb2g4p4e4h+uVZOk9b3/78dhFVOuyEhAPOWgpdrlkT43yJnUghkIbhc/qk1QJvSbuJ7nJ08VBdltd8x24H4dohTv//JyZFB7QTZAhQUh1AapNVDS13AWXgv6WDaltOIDbzW38u19NFyc1yQ==; 5:joH34ZJaWbC3LR+/rOg3wIIOM6kGHRUEkeaUHvXUElhkzP8Eika8ItevPc7sZ7k6pXZMuN7tnO6G7aUr2AqpV5LS6BnYtPyuFw0jzKpcT0KrqWU0hQowXdxTqxvrCz7zkBtUuMM2wOegDxb/fwZ+koS7qZ/xeHSPaKkpB05FDjI=; 7:jHfJD65lD3o1G8NRsM4dYza+Em+nur1Db3fnX6shAAoS3Sdlg8OfIxgrXkK9p1t9IKYp7kJjGiZ3rG7+5rJjnfhSIx1J7qUyLOwH2+aiq44hth4QWGFxSGNXeO2eYDuGa8absFu0r0XMqcrh3L3W1whBuFAq7cs5Znqn/ruK3tdYa3NDEW5oYLSuxCQ+ufgtFArTdi0bCR2ov/ZbdHDb8TQPKn6DUsgZ2/Bf3Ee30ik9VguI+kI0jhGaSzf4e4gh SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jul 2018 16:43:03.2828 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 71ba8bd9-aa63-46dd-0d90-08d5f24db225 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB3062 Subject: [dpdk-dev] [PATCH v4 3/6] compress/octeontx: create private xform 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" Create non-shareable private xform for applications to perform stateless compression/decompression. Signed-off-by: Ashish Gupta Signed-off-by: Shally Verma Signed-off-by: Sunila Sahu --- drivers/compress/octeontx/otx_zip.h | 19 +++- drivers/compress/octeontx/otx_zip_pmd.c | 149 ++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+), 1 deletion(-) diff --git a/drivers/compress/octeontx/otx_zip.h b/drivers/compress/octeontx/otx_zip.h index 1289919..3fcd86a 100644 --- a/drivers/compress/octeontx/otx_zip.h +++ b/drivers/compress/octeontx/otx_zip.h @@ -90,9 +90,24 @@ enum { MAX_BUFS_PER_STREAM } NUM_BUFS_PER_STREAM; - +struct zip_stream; struct zipvf_qp; +/* Algorithm handler function prototype */ +typedef int (*comp_func_t)(struct rte_comp_op *op, + struct zipvf_qp *qp, struct zip_stream *zstrm); + +/** + * ZIP private stream structure + */ +struct zip_stream { + union zip_inst_s *inst; + /* zip instruction pointer */ + comp_func_t func; + /* function to process comp operation */ + void *bufs[MAX_BUFS_PER_STREAM]; +} _rte_cache_aligned; + /** * ZIP instruction Queue @@ -156,6 +171,8 @@ zipvf_q_init(struct zipvf_qp *qp); int zipvf_q_term(struct zipvf_qp *qp); +int +zipvf_push_command(struct zipvf_qp *qp, union zip_inst_s *zcmd); uint64_t zip_reg_read64(uint8_t *hw_addr, uint64_t offset); diff --git a/drivers/compress/octeontx/otx_zip_pmd.c b/drivers/compress/octeontx/otx_zip_pmd.c index b670f87..16f581b 100644 --- a/drivers/compress/octeontx/otx_zip_pmd.c +++ b/drivers/compress/octeontx/otx_zip_pmd.c @@ -28,6 +28,103 @@ static const struct rte_compressdev_capabilities RTE_COMP_END_OF_CAPABILITIES_LIST() }; +/** Parse xform parameters and setup a stream */ +static int +zip_set_stream_parameters(struct rte_compressdev *dev, + const struct rte_comp_xform *xform, + struct zip_stream *z_stream) +{ + int ret; + union zip_inst_s *inst; + struct zip_vf *vf = (struct zip_vf *)dev->data->dev_private; + void *res; + + /* Allocate resources required by a stream */ + ret = rte_mempool_get_bulk(vf->zip_mp, + z_stream->bufs, MAX_BUFS_PER_STREAM); + if (ret < 0) + return -1; + + /* get one command buffer from pool and set up */ + inst = (union zip_inst_s *)z_stream->bufs[CMD_BUF]; + res = z_stream->bufs[RES_BUF]; + + memset(inst->u, 0, sizeof(inst->u)); + + /* set bf for only first ops of stream */ + inst->s.bf = 1; + + if (xform->type == RTE_COMP_COMPRESS) { + inst->s.op = ZIP_OP_E_COMP; + + switch (xform->compress.deflate.huffman) { + case RTE_COMP_HUFFMAN_DEFAULT: + inst->s.cc = ZIP_CC_DEFAULT; + break; + case RTE_COMP_HUFFMAN_FIXED: + inst->s.cc = ZIP_CC_FIXED_HUFF; + break; + case RTE_COMP_HUFFMAN_DYNAMIC: + inst->s.cc = ZIP_CC_DYN_HUFF; + break; + default: + ret = -1; + goto err; + } + + switch (xform->compress.level) { + case RTE_COMP_LEVEL_MIN: + inst->s.ss = ZIP_COMP_E_LEVEL_MIN; + break; + case RTE_COMP_LEVEL_MAX: + inst->s.ss = ZIP_COMP_E_LEVEL_MAX; + break; + case RTE_COMP_LEVEL_NONE: + ZIP_PMD_ERR("Compression level not supported"); + ret = -1; + goto err; + default: + /* for any value between min and max , choose + * PMD default. + */ + inst->s.ss = ZIP_COMP_E_LEVEL_MED; /** PMD default **/ + break; + } + } else if (xform->type == RTE_COMP_DECOMPRESS) { + inst->s.op = ZIP_OP_E_DECOMP; + /* from HRM, + * For DEFLATE decompression, [CC] must be 0x0. + * For decompression, [SS] must be 0x0 + */ + inst->s.cc = 0; + /* Speed bit should not be set for decompression */ + inst->s.ss = 0; + /* decompression context is supported only for STATEFUL + * operations. Currently we support STATELESS ONLY so + * skip setting of ctx pointer + */ + + } else { + ZIP_PMD_ERR("\nxform type not supported"); + ret = -1; + goto err; + } + + inst->s.res_ptr_addr.s.addr = rte_mempool_virt2iova(res); + inst->s.res_ptr_ctl.s.length = 0; + + z_stream->inst = inst; + + return 0; + +err: + rte_mempool_put_bulk(vf->zip_mp, + (void *)&(z_stream->bufs[0]), + MAX_BUFS_PER_STREAM); + + return ret; +} + /** Configure device */ static int zip_pmd_config(struct rte_compressdev *dev, @@ -253,6 +350,53 @@ zip_pmd_qp_setup(struct rte_compressdev *dev, uint16_t qp_id, return -1; } +static int +zip_pmd_stream_create(struct rte_compressdev *dev, + const struct rte_comp_xform *xform, void **stream) +{ + int ret; + struct zip_stream *strm = NULL; + + strm = rte_malloc(NULL, + sizeof(struct zip_stream), 0); + + if (strm == NULL) + return (-ENOMEM); + + ret = zip_set_stream_parameters(dev, xform, strm); + if (ret < 0) { + ZIP_PMD_ERR("failed configure xform parameters"); + rte_free(strm); + return ret; + } + *stream = strm; + return 0; +} + +static int +zip_pmd_stream_free(struct rte_compressdev *dev, void *stream) +{ + struct zip_vf *vf = (struct zip_vf *) (dev->data->dev_private); + struct zip_stream *z_stream; + + if (stream == NULL) + return 0; + + z_stream = (struct zip_stream *)stream; + + /* Free resources back to pool */ + rte_mempool_put_bulk(vf->zip_mp, + (void *)&(z_stream->bufs[0]), + MAX_BUFS_PER_STREAM); + + /* Zero out the whole structure */ + memset(stream, 0, sizeof(struct zip_stream)); + rte_free(stream); + + return 0; +} + + struct rte_compressdev_ops octtx_zip_pmd_ops = { .dev_configure = zip_pmd_config, .dev_start = zip_pmd_start, @@ -266,6 +410,11 @@ struct rte_compressdev_ops octtx_zip_pmd_ops = { .queue_pair_setup = zip_pmd_qp_setup, .queue_pair_release = zip_pmd_qp_release, + + .private_xform_create = zip_pmd_stream_create, + .private_xform_free = zip_pmd_stream_free, + .stream_create = NULL, + .stream_free = NULL }; static int