From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 12318A034C; Mon, 9 May 2022 23:04:31 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9D83C41156; Mon, 9 May 2022 23:04:30 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mails.dpdk.org (Postfix) with ESMTP id E7432410EE for ; Mon, 9 May 2022 23:04:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652130268; x=1683666268; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=K/XkB3ms72o6o2PFo0wbwwDhmDNNd538KLHnxy5bZ5A=; b=EI8XjWJbL7CldoRJ/oAvoVx9skZGyPw4qPyCBuaHf/gCtzqrcCgJ/AAh yJ3hLWWDdgKLCHHpVkKhj+n7136sMSKrcQ2ecDFgSQ3edx2ZighqYJGKy hE9U3MiF+YW57dGNLZJwRHI3zM2BzCkeFnC9vu4qA/dutigRhjQ9EUVya OeRPric5nLmrSfsXbXYF68XzXa8OXSDFOfp0oslFt/enUn4a5t6Uqvn3t vhgzLXR7djNWYQa5AkE5wnQM9KXKfSRw62XZvnYNGp1089SPzkizaQFgv HJCPBaAQKB8PvpeLhCbhiOKX+f3Vfc3lci3LBPg//vh9SfwptHMU2Fu9I w==; X-IronPort-AV: E=McAfee;i="6400,9594,10342"; a="256706155" X-IronPort-AV: E=Sophos;i="5.91,212,1647327600"; d="scan'208";a="256706155" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2022 14:04:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,212,1647327600"; d="scan'208";a="657311276" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by FMSMGA003.fm.intel.com with ESMTP; 09 May 2022 14:04:09 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Mon, 9 May 2022 14:04:08 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Mon, 9 May 2022 14:04:08 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.104) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Mon, 9 May 2022 14:04:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RVoRkXT6fKOMYAkO+w2xNbgE0NstGSLYmUPKxhF/3JTmUKKA87GvClWIyhCHe0R6rgfbT7/i2iE0tqwyND8GNw4zo/hs5xYoKhMI345aSkOgW63iE0SavfQrfzmgad24qJkk6diEtGltkpc0POgNU7aH865XPHs3jqtL5vrn0VJULml03i6O4CSnNiFMGlQarFexwR/z6VKEGD1mJaB/8gC9FKgkEzhCNa/uK25FAjK4mAsoPJYU31qud80i8y8Ql5gtLOCP+itA/U3yxIB9pQv9Pqwp/momxkFpoaSz6bptV6PxZQwRCZ6ACPlv/ECY5HeBKJshFHj+mChXHWX4/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=p+jfC5lZoFYvTZvez0adXR+UCeluQGP2JEu9BHBIZW8=; b=X/I8cz4P45n27NMS+8mmH/jN9OJt+hgYoKpahWtphfG41QrSosaQjnFcLnOBQHkO+mjL59h1iXdSmioJQxJgoNejd8RDUg+hu9eqZQ7aI0OBW77IPCeSpODjsDRSYZTb7VDMZoPTSF6/h3WTJiWnqFYlZ517Up3APpY93o+q/t/Kiay7WF2y6qrBrQZJZegzL+WEKWKnjxjEfJ/og0Gep3R4OvmEngBdKYyF++N3iEHBXOqfTTd6hvOf4/jifWUrdhkfcGK99y+Ln867YzOlfcUpFwT9PLjQlgaiepO+Lh8SCTFLdyBCes/jilOclVllpZ1jkP3jIc2bPf5riqs8dw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by BN9PR11MB5513.namprd11.prod.outlook.com (2603:10b6:408:102::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.22; Mon, 9 May 2022 21:04:07 +0000 Received: from BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::40f:170c:c586:7219]) by BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::40f:170c:c586:7219%2]) with mapi id 15.20.5227.023; Mon, 9 May 2022 21:04:06 +0000 From: "Chautru, Nicolas" To: "Vargas, Hernan" , "dev@dpdk.org" , "gakhil@marvell.com" , "trix@redhat.com" CC: "Zhang, Qi Z" Subject: RE: [PATCH v1 4/5] baseband/fpga_5gnr_fec: enable validate LDPC enc/dec Thread-Topic: [PATCH v1 4/5] baseband/fpga_5gnr_fec: enable validate LDPC enc/dec Thread-Index: AQHYY+cVb+NJFgJB9028Jv3osJQGG60XCHSQ Date: Mon, 9 May 2022 21:04:06 +0000 Message-ID: References: <20220509201734.946900-1-hernan.vargas@intel.com> <20220509201734.946900-5-hernan.vargas@intel.com> In-Reply-To: <20220509201734.946900-5-hernan.vargas@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.401.20 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b32b731f-b4a1-44b8-bba1-08da31ff7491 x-ms-traffictypediagnostic: BN9PR11MB5513:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qveK0+NELroGsDlmj3Q5t8tERuv/FksrNjlEVKpZBL+ihEpjOPjVCG8lV8ynio6exM4zbB8uZNy5qI9wkrM0YOG6lXYIaYR3HN5dT77yWdCygWZUGnIe67b6YG732l1nOy3Vs3rIBcCn1VPpFndhabhoVS3RuRozxha8PANlE0/WVI0w2Vtej0ZCAbbNuNuN0n1pk3eKP2FwKGyyf3+GG04jdskvSOYxXj/ASk4X3U1Er+ZJb7IixMyy++YxrXbkCeOBQKpsSK5osp4843govsgSu3QnY+InQeT2pZV8yWCUrAbD5IrQCaOBXbAyZnrvBfEWyYHN/cH9NRCReSjwgZmo7IjRMfjbC/ZyB7gJ2pCmnYboR6SuAdxU/fw3QJBnuJDIeVmVMGw+pEGIh1OMVLHZt1610Mxjrl8CHcxqJEKYSe1nDp085f/VFEsk9+nnAXaxKsC3ZWPNekYhZ2vdx8eT8hRs7V8ACkda/WHLJdMw1MNtnqHwUcjCvHbYaqBkPQ1R7XkEayuG+NxtJ+u7B8krjG1vtN8XfAMgUIow2faSmSFUnKG3R+/G5VYU9LqJA4ojzWJMjSDPZB/D9gRwXpce/6jwKtQPmjofB/Em7FVC5jXPcycu9hbehCOCJRCsvsj9SM/5PMOBezvre5pD5jSttm/09cDsqJYkSBmP16Tbv9rxBJ2sdXFE0Vz6CsrahgqC8ZADS64tnf5uhcyemQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR11MB4451.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(38070700005)(107886003)(122000001)(9686003)(82960400001)(55016003)(38100700002)(26005)(66446008)(64756008)(4326008)(8676002)(186003)(66556008)(76116006)(316002)(110136005)(66946007)(66476007)(5660300002)(71200400001)(53546011)(86362001)(6506007)(2906002)(508600001)(8936002)(52536014)(7696005)(33656002)(83380400001)(15650500001)(30864003)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?S7ZVCS4UqSdkr8oQJdMsAlpEYp8QVgMdV3rvujAdhMuwMTVFFyajPQaQD/Lg?= =?us-ascii?Q?uBpHPKCLXN1UsFo2rBgvDvBTpAj78v+JQleuRRxB9Byg9NwyQE0/Lc1E062u?= =?us-ascii?Q?pmlmpv2yn8WziFfKKvCx5VuCGR2hmFBwy8Z2WaAfQLOsMZeJ9QPC8NnrCtme?= =?us-ascii?Q?EgqN+AlonS8hm6r1Xi0Bw5HJyfyP/60TDfBCjGFCtedX4hDpORPKQf5K47RY?= =?us-ascii?Q?caiFeVLKnufUT124MmOnJRSE/wtxd2PA79yPUWN7oaIKpOT2xJIzGARM7GNn?= =?us-ascii?Q?xjN5hc9KsSgE2DGs6Km2E0nvDO5lEZGZ3ghBkkUshdvi6QESvlTlcstyXpiM?= =?us-ascii?Q?EkTVqheZZ5jf8qTRCjM5jC83JbjdF4MyBmsmRsh0f73SoX3yN35iHyPg7vAE?= =?us-ascii?Q?uKs15iYIy+inKY6YeRd1aNKFnq5BZNpBOJij6dvKlpqjUnOXGp8c9YZgt1v/?= =?us-ascii?Q?pHpDf1nPB1AMc5KbsgXXA9lkpRzPf7gvxQcpQNhcLIMqcwqKdK5xJfV1Mnc3?= =?us-ascii?Q?RntxdNKgQuWQWv9YlllRuk8gvABL6GJljd1bMDC6YeLF663qCaZvTTN//kAy?= =?us-ascii?Q?BnQPcJJqoV22XMBvVoDM5gFvAM40gAOyoLSAQnKDnAk+at2158QWx3nA+86l?= =?us-ascii?Q?R1sJSFo8Rrt0QR91Kww8YLbXTX1ELbdpMPaOyMvYFrebtOi6hUbCJPw3E1BS?= =?us-ascii?Q?bX4TMBqcahwT3+DQwc3mBy++x6ar4LVTkgd9ea3m8pwHZS8ELxZVRBvLA7t6?= =?us-ascii?Q?6qVmKeO8pnq1D1kLCPtll28RiKws6oFeAx+glgJin0K7Xb34cWZmswpIlvCh?= =?us-ascii?Q?XMhh4lv7WWdDz2vOskucWghVhT0IO7BrZXa5EJTRC5jO1P0jgzle+7Y5GQMc?= =?us-ascii?Q?pL14k65YAMA6MVO6t6e939faBzvc3aDdgQ5N6zdFZD3VFm/PhA5Z70Zl8Ocp?= =?us-ascii?Q?8lNIffhGDI5bErZztOmoglq5RdKHsULqHLlpDWJzyR/2Dkp7tIDDirtVqBJ/?= =?us-ascii?Q?tsbABBtHodB5aCl425ZxvF3lEu6h0YRNi2k6CFKiunKqQuTnOrdFiPA1rAh3?= =?us-ascii?Q?7fzxEAb/1fDRXqsT0cmhYReFKWua7YhZQR6zzCoB9tDRApDc7Pc61DIpJyc5?= =?us-ascii?Q?qHoFNhretl3ryCfB+hi4x8iH1Sa63CzV3+5HY9hZb8ERbm4g3HHDfb2Z31Y/?= =?us-ascii?Q?qzc/1rOiF/tQZLyiyhveueDR8umnNOgwrpvnVLpLnE+69sBuyPUKO0505Y6I?= =?us-ascii?Q?GJMDmKY1fH26ALPvVXHVIYAvp7KrsmeiZ7+n6qj9nWaViA0q33+kSoeLtc5D?= =?us-ascii?Q?x1dq0RbjH9YPybzmLTMXgRuqRQ+p6OdPcFYEsVT9u9q2mh8+7wqm99PpUT8Y?= =?us-ascii?Q?JbQmljJHd0W7DgomGg33PDcye+BF3XzorxLCTYw+cb8jbLkMbpPYgAAFRwPV?= =?us-ascii?Q?/6KrRm6QXQpTiWkzMLz5y2bG3ukDJCWKoHj3Cak1p433JYKObOahq6hbuAqJ?= =?us-ascii?Q?NaeszRKbbphUKwcWoveHJTtXs2rbnNINIbdbMcI8Q/Csjt9PwfB61JfvCoqC?= =?us-ascii?Q?a6S0zsXCOs3M5EchQs27jIV7WmzR6LTY8YGp3SabDnuzBRLu2a2l1fjxIPHC?= =?us-ascii?Q?1u9A0AK71g0dIcAd/AE6UJUz6Qjm2GYOf0giD0R08ZxdkrpAaPNcg6LVIXk1?= =?us-ascii?Q?W/6pXT+HLlpS10m+xxR24BCTqVz8LAjvBXHHl718Vfl3Qg8nTBfAp1ILj/KV?= =?us-ascii?Q?W8kkWP2BZFIbBQSY1F70KuvHlNrtgbU=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR11MB4451.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b32b731f-b4a1-44b8-bba1-08da31ff7491 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 May 2022 21:04:06.8319 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5o80gHPlBjZLiia8liiAD4+dqUFv17Uf6jjUo8Pn9vtzR++U9OkPpog6zc1ut1U8KlB8jNoYmzuEEPzzrmNsKBp53HkU4y8CU86RoxpCAlI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR11MB5513 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org > -----Original Message----- > From: Vargas, Hernan > Sent: Monday, May 9, 2022 1:18 PM > To: dev@dpdk.org; gakhil@marvell.com; trix@redhat.com > Cc: Chautru, Nicolas ; Zhang, Qi Z > ; Vargas, Hernan > Subject: [PATCH v1 4/5] baseband/fpga_5gnr_fec: enable validate LDPC > enc/dec >=20 > Enable validate_ldpc_enc_op and validate_ldpc_dec_op >=20 > Signed-off-by: Hernan > --- > .../fpga_5gnr_fec/rte_fpga_5gnr_fec.c | 490 ++++++++++++++---- > 1 file changed, 384 insertions(+), 106 deletions(-) >=20 > diff --git a/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c > b/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c > index 2d4b58067d..8fdb44c94a 100644 > --- a/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c > +++ b/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c > @@ -1032,23 +1032,11 @@ fpga_dma_desc_ld_fill(struct rte_bbdev_dec_op > *op, > return 0; > } >=20 > -#ifdef RTE_LIBRTE_BBDEV_DEBUG > /* Validates LDPC encoder parameters */ -static int -validate_enc_op(str= uct > rte_bbdev_enc_op *op __rte_unused) > +static inline int > +validate_ldpc_enc_op(struct rte_bbdev_enc_op *op) > { > struct rte_bbdev_op_ldpc_enc *ldpc_enc =3D &op->ldpc_enc; > - struct rte_bbdev_op_enc_ldpc_cb_params *cb =3D NULL; > - struct rte_bbdev_op_enc_ldpc_tb_params *tb =3D NULL; > - > - > - if (ldpc_enc->input.length > > - RTE_BBDEV_LDPC_MAX_CB_SIZE >> 3) { > - rte_bbdev_log(ERR, "CB size (%u) is too big, max: %d", > - ldpc_enc->input.length, > - RTE_BBDEV_LDPC_MAX_CB_SIZE); > - return -1; > - } >=20 > if (op->mempool =3D=3D NULL) { > rte_bbdev_log(ERR, "Invalid mempool pointer"); @@ - > 1062,140 +1050,437 @@ validate_enc_op(struct rte_bbdev_enc_op *op > __rte_unused) > rte_bbdev_log(ERR, "Invalid output pointer"); > return -1; > } > + if (ldpc_enc->input.length =3D=3D 0) { > + rte_bbdev_log(ERR, "CB size (%u) is null", > + ldpc_enc->input.length); > + return -1; > + } > if ((ldpc_enc->basegraph > 2) || (ldpc_enc->basegraph =3D=3D 0)) { > rte_bbdev_log(ERR, > - "basegraph (%u) is out of range 1 <=3D value <=3D > 2", > + "BG (%u) is out of range 1 <=3D value <=3D 2", > ldpc_enc->basegraph); > return -1; > } > + if (ldpc_enc->rv_index > 3) { > + rte_bbdev_log(ERR, > + "rv_index (%u) is out of range 0 <=3D value <=3D > 3", > + ldpc_enc->rv_index); > + return -1; > + } > if (ldpc_enc->code_block_mode > RTE_BBDEV_CODE_BLOCK) { > rte_bbdev_log(ERR, > - "code_block_mode (%u) is out of range 0:Tb > 1:CB", > + "code_block_mode (%u) is out of range 0 <=3D > value <=3D 1", > ldpc_enc->code_block_mode); > return -1; > } >=20 > - if (ldpc_enc->code_block_mode =3D=3D RTE_BBDEV_TRANSPORT_BLOCK) { > - tb =3D &ldpc_enc->tb_params; > - if (tb->c =3D=3D 0) { > - rte_bbdev_log(ERR, > - "c (%u) is out of range 1 <=3D value <=3D > %u", > - tb->c, > RTE_BBDEV_LDPC_MAX_CODE_BLOCKS); > + if (ldpc_enc->input.length > > + RTE_BBDEV_LDPC_MAX_CB_SIZE >> 3) { > + rte_bbdev_log(ERR, "CB size (%u) is too big, max: %d", > + ldpc_enc->input.length, > + RTE_BBDEV_LDPC_MAX_CB_SIZE); > + return -1; > + } > + int z_c =3D ldpc_enc->z_c; > + /* Check Zc is valid value */ > + if ((z_c > 384) || (z_c < 4)) { > + rte_bbdev_log(ERR, "Zc (%u) is out of range", z_c); > + return -1; > + } > + if (z_c > 256) { > + if ((z_c % 32) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > return -1; > } > - if (tb->cab > tb->c) { > - rte_bbdev_log(ERR, > - "cab (%u) is greater than c (%u)", > - tb->cab, tb->c); > + } else if (z_c > 128) { > + if ((z_c % 16) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > return -1; > } > - if ((tb->ea < RTE_BBDEV_LDPC_MIN_CB_SIZE) > - && tb->r < tb->cab) { > - rte_bbdev_log(ERR, > - "ea (%u) is less than %u or it is not > even", > - tb->ea, > RTE_BBDEV_LDPC_MIN_CB_SIZE); > + } else if (z_c > 64) { > + if ((z_c % 8) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > return -1; > } > - if ((tb->eb < RTE_BBDEV_LDPC_MIN_CB_SIZE) > - && tb->c > tb->cab) { > - rte_bbdev_log(ERR, > - "eb (%u) is less than %u", > - tb->eb, > RTE_BBDEV_LDPC_MIN_CB_SIZE); > + } else if (z_c > 32) { > + if ((z_c % 4) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > return -1; > } > - if (tb->r > (tb->c - 1)) { > - rte_bbdev_log(ERR, > - "r (%u) is greater than c - 1 (%u)", > - tb->r, tb->c - 1); > + } else if (z_c > 16) { > + if ((z_c % 2) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > return -1; > } > - } else { > - cb =3D &ldpc_enc->cb_params; > - if (cb->e < RTE_BBDEV_LDPC_MIN_CB_SIZE) { > - rte_bbdev_log(ERR, > - "e (%u) is less than %u or it is not > even", > - cb->e, > RTE_BBDEV_LDPC_MIN_CB_SIZE); > + } > + > + int n_filler =3D ldpc_enc->n_filler; > + int K =3D (ldpc_enc->basegraph =3D=3D 1 ? 22 : 10) * ldpc_enc->z_c; > + int Kp =3D K - n_filler; > + int q_m =3D ldpc_enc->q_m; > + int n_cb =3D ldpc_enc->n_cb; > + int N =3D (ldpc_enc->basegraph =3D=3D 1 ? N_ZC_1 : N_ZC_2) * z_c; > + int k0 =3D k0 =3D get_k0(n_cb, z_c, ldpc_enc->basegraph, > + ldpc_enc->rv_index); There is a typo here. And the same one below.=20 > + int crc24 =3D 0; > + int32_t L, Lcb, cw, cw_rm; > + int32_t e =3D ldpc_enc->cb_params.e; > + if (check_bit(op->ldpc_enc.op_flags, > + RTE_BBDEV_LDPC_CRC_24B_ATTACH)) > + crc24 =3D 24; > + > + if (K < (int) (ldpc_enc->input.length * 8 + n_filler) + crc24) { > + rte_bbdev_log(ERR, "K and F not matching input size %u %u > %u", > + K, n_filler, ldpc_enc->input.length); > + return -1; > + } > + if (ldpc_enc->code_block_mode =3D=3D RTE_BBDEV_TRANSPORT_BLOCK) { > + rte_bbdev_log(ERR, "TB mode not supported"); > + return -1; > + > + } > + > + /* K' range check */ > + if (Kp % 8 > 0) { > + rte_bbdev_log(ERR, "K' not byte aligned %u", Kp); > + return -1; > + } > + if ((crc24 > 0) && (Kp < 292)) { > + rte_bbdev_log(ERR, "Invalid CRC24 for small block %u", Kp); > + return -1; > + } > + if (Kp < 24) { > + rte_bbdev_log(ERR, "K' too small %u", Kp); > + return -1; > + } > + if (n_filler >=3D (K - 2 * z_c)) { > + rte_bbdev_log(ERR, "K - F invalid %u %u", K, n_filler); > + return -1; > + } > + /* Ncb range check */ > + if ((n_cb > N) || (n_cb < 32) || (n_cb <=3D (Kp - crc24))) { > + rte_bbdev_log(ERR, "Ncb (%u) is out of range K %d N %d", > n_cb, K, N); > + return -1; > + } > + /* Qm range check */ > + if (!check_bit(op->ldpc_enc.op_flags, > RTE_BBDEV_LDPC_INTERLEAVER_BYPASS) && > + ((q_m =3D=3D 0) || ((q_m > 2) && ((q_m % 2) =3D=3D 1)) || > (q_m > 8))) { > + rte_bbdev_log(ERR, "Qm (%u) is out of range", q_m); > + return -1; > + } > + /* K0 range check */ > + if (((k0 % z_c) > 0) || (k0 >=3D n_cb) || ((k0 >=3D (Kp - 2 * z_c)) > + && (k0 < (K - 2 * z_c)))) { > + rte_bbdev_log(ERR, "K0 (%u) is out of range", k0); > + return -1; > + } > + /* E range check */ > + if (e <=3D RTE_MAX(32, z_c)) { > + rte_bbdev_log(ERR, "E is too small %"PRIu32"", e); > + return -1; > + } > + if ((e > 0xFFFF)) { > + rte_bbdev_log(ERR, "E is too large for N3000 %"PRIu32" > > 64k", e); > + return -1; > + } > + if (q_m > 0) { > + if (e % q_m > 0) { > + rte_bbdev_log(ERR, "E %"PRIu32" not multiple of qm > %d", e, q_m); > return -1; > } > } > + /* Code word in RM range check */ > + if (k0 > (Kp - 2 * z_c)) > + L =3D k0 + e; > + else > + L =3D k0 + e + n_filler; > + Lcb =3D RTE_MIN(L, n_cb); > + if (ldpc_enc->basegraph =3D=3D 1) { > + if (Lcb <=3D 25 * z_c) > + cw =3D 25 * z_c; > + else if (Lcb <=3D 27 * z_c) > + cw =3D 27 * z_c; > + else if (Lcb <=3D 30 * z_c) > + cw =3D 30 * z_c; > + else if (Lcb <=3D 33 * z_c) > + cw =3D 33 * z_c; > + else if (Lcb <=3D 44 * z_c) > + cw =3D 44 * z_c; > + else if (Lcb <=3D 55 * z_c) > + cw =3D 55 * z_c; > + else > + cw =3D 66 * z_c; > + } else { > + if (Lcb <=3D 15 * z_c) > + cw =3D 15 * z_c; > + else if (Lcb <=3D 20 * z_c) > + cw =3D 20 * z_c; > + else if (Lcb <=3D 25 * z_c) > + cw =3D 25 * z_c; > + else if (Lcb <=3D 30 * z_c) > + cw =3D 30 * z_c; > + else > + cw =3D 50 * z_c; > + } > + if (n_cb < Kp - 2 * z_c) > + cw_rm =3D n_cb; > + else if ((Kp - 2 * z_c <=3D n_cb) && (n_cb < K - 2 * z_c)) > + cw_rm =3D Kp - 2 * z_c; > + else if ((K - 2 * z_c <=3D n_cb) && (n_cb < cw)) > + cw_rm =3D n_cb - n_filler; > + else > + cw_rm =3D cw - n_filler; > + if (cw_rm <=3D 32) { > + rte_bbdev_log(ERR, > + "Invalid Ratematching"); > + return -1; > + } > return 0; > } > -#endif > - > -static inline char * > -mbuf_append(struct rte_mbuf *m_head, struct rte_mbuf *m, uint16_t len) -= { > - if (unlikely(len > rte_pktmbuf_tailroom(m))) > - return NULL; > - > - char *tail =3D (char *)m->buf_addr + m->data_off + m->data_len; > - m->data_len =3D (uint16_t)(m->data_len + len); > - m_head->pkt_len =3D (m_head->pkt_len + len); > - return tail; > -} >=20 > -#ifdef RTE_LIBRTE_BBDEV_DEBUG > /* Validates LDPC decoder parameters */ -static int -validate_dec_op(str= uct > rte_bbdev_dec_op *op __rte_unused) > +static inline int > +validate_ldpc_dec_op(struct rte_bbdev_dec_op *op) > { > struct rte_bbdev_op_ldpc_dec *ldpc_dec =3D &op->ldpc_dec; > - struct rte_bbdev_op_dec_ldpc_cb_params *cb =3D NULL; > - struct rte_bbdev_op_dec_ldpc_tb_params *tb =3D NULL; > - > - if (op->mempool =3D=3D NULL) { > - rte_bbdev_log(ERR, "Invalid mempool pointer"); > + if (check_bit(ldpc_dec->op_flags, > + > RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_LOOPBACK)) > + return 0; > + if (ldpc_dec->input.data =3D=3D NULL) { > + rte_bbdev_log(ERR, "Invalid input pointer"); > return -1; > } > - if (ldpc_dec->rv_index > 3) { > + if (ldpc_dec->hard_output.data =3D=3D NULL) { > + rte_bbdev_log(ERR, "Invalid output pointer"); > + return -1; > + } > + if (ldpc_dec->input.length =3D=3D 0) { > + rte_bbdev_log(ERR, "input is null"); > + return -1; > + } > + if ((ldpc_dec->basegraph > 2) || (ldpc_dec->basegraph =3D=3D 0)) { > rte_bbdev_log(ERR, > - "rv_index (%u) is out of range 0 <=3D value <=3D > 3", > - ldpc_dec->rv_index); > + "BG (%u) is out of range 1 <=3D value <=3D 2", > + ldpc_dec->basegraph); > return -1; > } > - > if (ldpc_dec->iter_max =3D=3D 0) { > rte_bbdev_log(ERR, > "iter_max (%u) is equal to 0", > ldpc_dec->iter_max); > return -1; > } > - > + if (ldpc_dec->rv_index > 3) { > + rte_bbdev_log(ERR, > + "rv_index (%u) is out of range 0 <=3D value <=3D > 3", > + ldpc_dec->rv_index); > + return -1; > + } > if (ldpc_dec->code_block_mode > RTE_BBDEV_CODE_BLOCK) { > rte_bbdev_log(ERR, > "code_block_mode (%u) is out of range 0 <=3D > value <=3D 1", > ldpc_dec->code_block_mode); > return -1; > } > - > - if (ldpc_dec->code_block_mode =3D=3D RTE_BBDEV_TRANSPORT_BLOCK) { > - tb =3D &ldpc_dec->tb_params; > - if (tb->c < 1) { > - rte_bbdev_log(ERR, > - "c (%u) is out of range 1 <=3D value <=3D > %u", > - tb->c, > RTE_BBDEV_LDPC_MAX_CODE_BLOCKS); > + if (check_bit(op->ldpc_dec.op_flags, > + RTE_BBDEV_LDPC_DECODE_BYPASS)) { > + rte_bbdev_log(ERR, "Avoid LDPC Decode bypass"); > + return -1; > + } > + int z_c =3D ldpc_dec->z_c; > + /* Check Zc is valid value */ > + if ((z_c > 384) || (z_c < 4)) { > + rte_bbdev_log(ERR, > + "Zc (%u) is out of range", > + z_c); > + return -1; > + } > + if (z_c > 256) { > + if ((z_c % 32) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > return -1; > } > - if (tb->cab > tb->c) { > - rte_bbdev_log(ERR, > - "cab (%u) is greater than c (%u)", > - tb->cab, tb->c); > + } else if (z_c > 128) { > + if ((z_c % 16) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > return -1; > } > - } else { > - cb =3D &ldpc_dec->cb_params; > - if (cb->e < RTE_BBDEV_LDPC_MIN_CB_SIZE) { > - rte_bbdev_log(ERR, > - "e (%u) is out of range %u <=3D value <=3D > %u", > - cb->e, > RTE_BBDEV_LDPC_MIN_CB_SIZE, > - RTE_BBDEV_LDPC_MAX_CB_SIZE); > + } else if (z_c > 64) { > + if ((z_c % 8) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > + return -1; > + } > + } else if (z_c > 32) { > + if ((z_c % 4) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > + return -1; > + } > + } else if (z_c > 16) { > + if ((z_c % 2) !=3D 0) { > + rte_bbdev_log(ERR, "Invalid Zc %d", z_c); > return -1; > } > } >=20 > + int n_filler =3D ldpc_dec->n_filler; > + int K =3D (ldpc_dec->basegraph =3D=3D 1 ? 22 : 10) * ldpc_dec->z_c; > + int Kp =3D K - n_filler; > + int q_m =3D ldpc_dec->q_m; > + int n_cb =3D ldpc_dec->n_cb; > + int N =3D (ldpc_dec->basegraph =3D=3D 1 ? N_ZC_1 : N_ZC_2) * z_c; > + int k0 =3D k0 =3D get_k0(n_cb, z_c, ldpc_dec->basegraph, > + ldpc_dec->rv_index); > + int crc24 =3D 0; > + int32_t L, Lcb, cw, cw_rm; > + int32_t e =3D ldpc_dec->cb_params.e; > + if (check_bit(op->ldpc_dec.op_flags, > + RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK)) > + crc24 =3D 24; > + > + if (ldpc_dec->code_block_mode =3D=3D RTE_BBDEV_TRANSPORT_BLOCK) { > + rte_bbdev_log(ERR, > + "TB mode not supported"); > + return -1; > + } > + /* Enforce HARQ input length */ > + ldpc_dec->harq_combined_input.length =3D RTE_MIN((uint32_t) n_cb, > + ldpc_dec->harq_combined_input.length); > + if ((ldpc_dec->harq_combined_input.length =3D=3D 0) && > + check_bit(ldpc_dec->op_flags, > + RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE)) { > + rte_bbdev_log(ERR, > + "HARQ input length (%u) should not be null", > + ldpc_dec->harq_combined_input.length); > + return -1; > + } > + if ((ldpc_dec->harq_combined_input.length > 0) && > + !check_bit(ldpc_dec->op_flags, > + RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE)) { > + ldpc_dec->harq_combined_input.length =3D 0; > + } > + > + /* K' range check */ > + if (Kp % 8 > 0) { > + rte_bbdev_log(ERR, > + "K' not byte aligned %u", > + Kp); > + return -1; > + } > + if ((crc24 > 0) && (Kp < 292)) { > + rte_bbdev_log(ERR, > + "Invalid CRC24 for small block %u", > + Kp); > + return -1; > + } > + if (Kp < 24) { > + rte_bbdev_log(ERR, > + "K' too small %u", > + Kp); > + return -1; > + } > + if (n_filler >=3D (K - 2 * z_c)) { > + rte_bbdev_log(ERR, > + "K - F invalid %u %u", > + K, n_filler); > + return -1; > + } > + /* Ncb range check */ > + if (n_cb !=3D N) { > + rte_bbdev_log(ERR, > + "Ncb (%u) is out of range K %d N %d", > + n_cb, K, N); > + return -1; > + } > + /* Qm range check */ > + if (!check_bit(op->ldpc_dec.op_flags, > + RTE_BBDEV_LDPC_INTERLEAVER_BYPASS) && > + ((q_m =3D=3D 0) || ((q_m > 2) && ((q_m % 2) =3D=3D 1)) > + || (q_m > 8))) { > + rte_bbdev_log(ERR, > + "Qm (%u) is out of range", > + q_m); > + return -1; > + } > + /* K0 range check */ > + if (((k0 % z_c) > 0) || (k0 >=3D n_cb) || ((k0 >=3D (Kp - 2 * z_c)) > + && (k0 < (K - 2 * z_c)))) { > + rte_bbdev_log(ERR, > + "K0 (%u) is out of range", > + k0); > + return -1; > + } > + /* E range check */ > + if (e <=3D RTE_MAX(32, z_c)) { > + rte_bbdev_log(ERR, > + "E is too small"); > + return -1; > + } > + if ((e > 0xFFFF)) { > + rte_bbdev_log(ERR, > + "E is too large"); > + return -1; > + } > + if (q_m > 0) { > + if (e % q_m > 0) { > + rte_bbdev_log(ERR, > + "E not multiple of qm %d", q_m); > + return -1; > + } > + } > + /* Code word in RM range check */ > + if (k0 > (Kp - 2 * z_c)) > + L =3D k0 + e; > + else > + L =3D k0 + e + n_filler; > + Lcb =3D RTE_MIN(n_cb, RTE_MAX(L, > + (int32_t) ldpc_dec->harq_combined_input.length)); > + if (ldpc_dec->basegraph =3D=3D 1) { > + if (Lcb <=3D 25 * z_c) > + cw =3D 25 * z_c; > + else if (Lcb <=3D 27 * z_c) > + cw =3D 27 * z_c; > + else if (Lcb <=3D 30 * z_c) > + cw =3D 30 * z_c; > + else if (Lcb <=3D 33 * z_c) > + cw =3D 33 * z_c; > + else if (Lcb <=3D 44 * z_c) > + cw =3D 44 * z_c; > + else if (Lcb <=3D 55 * z_c) > + cw =3D 55 * z_c; > + else > + cw =3D 66 * z_c; > + } else { > + if (Lcb <=3D 15 * z_c) > + cw =3D 15 * z_c; > + else if (Lcb <=3D 20 * z_c) > + cw =3D 20 * z_c; > + else if (Lcb <=3D 25 * z_c) > + cw =3D 25 * z_c; > + else if (Lcb <=3D 30 * z_c) > + cw =3D 30 * z_c; > + else > + cw =3D 50 * z_c; > + } > + cw_rm =3D cw - n_filler; > + if (cw_rm <=3D 32) { > + rte_bbdev_log(ERR, > + "Invalid Ratematching"); > + return -1; > + } > return 0; > } > -#endif > + > +static inline char * > +mbuf_append(struct rte_mbuf *m_head, struct rte_mbuf *m, uint16_t len) > +{ > + if (unlikely(len > rte_pktmbuf_tailroom(m))) > + return NULL; > + > + char *tail =3D (char *)m->buf_addr + m->data_off + m->data_len; > + m->data_len =3D (uint16_t)(m->data_len + len); > + m_head->pkt_len =3D (m_head->pkt_len + len); > + return tail; > +} >=20 > static inline void > fpga_mutex_acquisition(struct fpga_queue *q) @@ -1386,14 +1671,11 @@ > enqueue_ldpc_enc_one_op_cb(struct fpga_queue *q, struct > rte_bbdev_enc_op *op, > uint16_t ring_offset; > uint16_t K, k_; >=20 > -#ifdef RTE_LIBRTE_BBDEV_DEBUG > - /* Validate op structure */ > - /* FIXME */ > - if (validate_enc_op(op) =3D=3D -1) { > - rte_bbdev_log(ERR, "LDPC encoder validation failed"); > + > + if (validate_ldpc_enc_op(op) =3D=3D -1) { > + rte_bbdev_log(ERR, "LDPC encoder validation rejected"); > return -EINVAL; > } > -#endif >=20 > /* Clear op status */ > op->status =3D 0; > @@ -1481,13 +1763,10 @@ enqueue_ldpc_dec_one_op_cb(struct > fpga_queue *q, struct rte_bbdev_dec_op *op, > uint16_t out_offset =3D dec->hard_output.offset; > uint32_t harq_offset =3D 0; >=20 > -#ifdef RTE_LIBRTE_BBDEV_DEBUG > - /* Validate op structure */ > - if (validate_dec_op(op) =3D=3D -1) { > - rte_bbdev_log(ERR, "LDPC decoder validation failed"); > - return -EINVAL; > - } > -#endif > + if (validate_ldpc_dec_op(op) =3D=3D -1) { > + rte_bbdev_log(ERR, "LDPC decoder validation rejected"); > + return -EINVAL; > + } >=20 > /* Clear op status */ > op->status =3D 0; > @@ -1717,8 +1996,7 @@ fpga_enqueue_ldpc_dec(struct > rte_bbdev_queue_data *q_data, >=20 >=20 > static inline int > -dequeue_ldpc_enc_one_op_cb(struct fpga_queue *q, > - struct rte_bbdev_enc_op **op, > +dequeue_ldpc_enc_one_op_cb(struct fpga_queue *q, struct > +rte_bbdev_enc_op **op, > uint16_t desc_offset) > { > union fpga_dma_desc *desc; > -- > 2.25.1