From patchwork Tue Apr 13 05:17:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 91191 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id CE141A0524; Tue, 13 Apr 2021 07:18:34 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 61AAC160B11; Tue, 13 Apr 2021 07:18:34 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-eopbgr130041.outbound.protection.outlook.com [40.107.13.41]) by mails.dpdk.org (Postfix) with ESMTP id 80D8A160B0F for ; Tue, 13 Apr 2021 07:18:33 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eH8MmxtpaBhdfZE/HPEKpDpei2vFX5OUPvKJc+YEZUQUK6TjjNvrFWKuhbrzwNJNGIxzAV/GpvN38qd3JHuH33drm6KgXacyutYtXtScKGDtAA8rFF9BNR4roFOZ+dW7YP3n8NCkWk3ZAK1wWSZEgiE+OZL0U4Hal2wgiJ0j5x4wVsoZlHZmf2xXe07r3FxUFol/WLxkEFYfWpcY424nUTxXJA7dUN0eEvGLp+voviycDi41JNYk1+scyhUCghIwU30gHMGllpIoXVJ10H6TwJHkaXthTlDYhtNrig0FDSqFDHKXB+16grvwLGTrW44aQKnh581wERdxn6knqqWf4A== 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-SenderADCheck; bh=2ArbjHTsMZPUo5actbW79ES61qJ1YaTGcdX/6xr0fQc=; b=klDLKp5k2NPR9w88At7plezp0+GQOeWSTh/BkHFoa99ZlH2AfV4Z9OffPz1WAKLH2UkKI0PDB80xOvTL/JJS9toeb26JqLIBLiJGUyM8dNiC6a0mKqoJfTCxJIDFZwHWC7naXWBBbNZ6Cm8n4L3vBI/nU5cgEKaYGayOOnFQWpBk+Xqls/GN7GlLGu+Aj3n74IJBP3ee2Lv8FGaOskqF7H3MtBroCj095HKrOZBkEtkSihaWrKxVFhNNXvi2MkRtud8nBqzg+UtVUO62yjplVVuYI3Mjkcgn+JOavAiBJaaOxyBi8HBnEWdMwXtMiiv7CzBG4dZT7O5cN0AhFEbEqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2ArbjHTsMZPUo5actbW79ES61qJ1YaTGcdX/6xr0fQc=; b=lwrZ1FFAZUI9uYCJ61SbdVgvh3sgxGc2PzObcKYKc7JW/5w36i3kWQce5/cIGjxK/bvrEJrjqeCtkJ3h6MxzkYmIOI8KSVyCtc0P2gaCsbuz5zVK8h7WcsJxvMitfuhZpbCz1R0Z6ZFxmCt4YqsyPYnRAZlGc2ibmtuWkClYds0= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) by AM5PR04MB3250.eurprd04.prod.outlook.com (2603:10a6:206:b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Tue, 13 Apr 2021 05:18:32 +0000 Received: from AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55]) by AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55%7]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 05:18:32 +0000 From: Hemant Agrawal To: dev@dpdk.org, gakhil@marvell.com, nicolas.chautru@intel.com Cc: david.marchand@redhat.com, Hemant Agrawal , Nipun Gupta Date: Tue, 13 Apr 2021 10:47:08 +0530 Message-Id: <20210413051715.26430-2-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210413051715.26430-1-hemant.agrawal@nxp.com> References: <20210410170252.4587-1-hemant.agrawal@nxp.com> <20210413051715.26430-1-hemant.agrawal@nxp.com> X-Originating-IP: [92.120.0.67] X-ClientProxiedBy: HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) To AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dpdk-xeon.ap.freescale.net (92.120.0.67) by HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.6 via Frontend Transport; Tue, 13 Apr 2021 05:18:29 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aca3a405-3854-436d-dc14-08d8fe3b9494 X-MS-TrafficTypeDiagnostic: AM5PR04MB3250: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: J7UpY/1PGJYiXhYBio+ZGSlkN3Xpv+T0epgYGfA9TpohIy2gjNVNXGtG+CVwAI9WBNO1zTHmgeeEmuo1BHtzlmLWXFJx0BxokopjGNsNMcd/Don6HCxhAnIo///n4zGR7xnmwx0pmztCIYNw625obEbGRbFJE9xEVv0X3BuoMulUANvtTMwNtyh4FVT0s2OcyuY0nyaGipDBux6O54kHOobQJ0vKgrsviMT+f1siyTK58ktEULywMG1yw8gAChhl9kZlZzH/Wti29vJZJPr+Rd4DYiXZCw8KzTqTwRuohm1kv/mpRv0WapL1Qs7OgGmwoSF/FlLbz1Ee/TR74FszKhHzRrjnG+Q4UYloimsxdwt7+bMTxiZH7H66tizIcSkEz0/GEYr/HlaXN28rVsUTwxRB957zaay1LZg4hG1Y+m24Bih8F1shTsG/U3qUM/F9Y2pYOj46mSN35wC8edcOFTEGZgJSoASyipq0OZ1pJBx8w1y4c026ntO2qxjmNWc4lmz1t7I8/85EcE2FOuho8uq6RLlS45yM6+xcK2NJpL6Yb5q+EfXl6MZgXQzgf97Q0HakgrZ7CpH/DRiIrwOT2k2iWmwNKP6H1jnlRmmxYtJKYnzXXV/W27azElALYTp27Tf6ibkE7Ivqrz/PalYk9ylylcb3whCOXZAkDMO3+OQ= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB4456.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(39860400002)(366004)(136003)(376002)(83380400001)(16526019)(186003)(26005)(54906003)(38350700002)(38100700002)(316002)(66556008)(66946007)(66476007)(6512007)(2616005)(956004)(478600001)(4326008)(44832011)(36756003)(6486002)(6506007)(5660300002)(2906002)(52116002)(1076003)(86362001)(8936002)(6666004)(8676002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: BfvzwvOJbxMKxzAbumdPEHSPi534Ee7Za9saEZRlnfOGQqG5uLjgxNS61Jqu2k08EArsUS2xvL3ovikzfx7MBf7qx8QCrPQ0QOwiUSoSF+uObUQSy6fsdTwVZ3g5jnqp/s9JqnZMs0aay0eLC/O6feZUYj6X7inai+kp6XPKzPOb9FBnqvrJNbCqUZgvusp/AS2EkZtz6G2s/iggOmgyZvDtkKb3fpKSAoXR0Xr4OEzdChoA3WPMu1cHwCPRkKKDRik6kHwvXgQUEoJaL7l6XZe/8x7SSByO2MGeJ3KVSRC5hHueI8afmJkEgwomxB+rCnqVbPno1Wd46sDgkbCgNg9HcK7C2hMyG5/G1iY09AtQuqudnXCqlhdK4hF3VHYX4NxIqHalHyhP5mWDGZ3u4peLNwmuCtR9azAd2TlpHOELl5gCV84GvFwkpLH6YVuyUeAP7s9g8UUAIJSVx0t99QcJftYPeA5HuvmpxW951vDRBxhYr0d6rxX70+2lYmudUmWCgQ9f8rMUwhHF2k0JAqsUn3+ddG4PQvzk5tr3S63f1Lu3+8f8XwHqW9L3Hh5HtzyXBX3T7ola3ooxPfmtcX+1JDM/XmhOKp71y4u0HfPCMR8z6BO2ZGarms701Lp/447EIrTq4++o2y3Leyrd84CxkYOQTt7t20+6xYWw+7ckmz5HpUKB/R697n0EuCZs6hdL36QN7XYEQiE1tShmTfcHJoVU6t18HMUwoARLAOPHoErroyUDmQCuRmLjNy5wt2o8VGOebMRCTMhoQk6Yp5OkO4BvgSfkAwk2QrPSj3+imi76NQN44SfYUdHF8zy4sZ8ht/WDWGfuSnpyglaYI6yg+lW5LYwr/5duPQ6F9ECMeHtps5ODZ325HF6frLo+GmkZ6PJge/K83s/CijGakuP1EcJFeh7pOjMNknssjK55W4OqQmea6jCcUc2NwXu6k+oihJOefzW0gjeROIPTjEHEyuBDd6yngaOReI/eVf+UhTUIt5GHyiez9WgDA36BBEUuZrQaqfLvGttNYsYcJ8Ue0M+ptlDRpEncMNEOfc8+U41YJRNtLQNTcbWwGlBFh1eDPHklr3licMLoZ6FLYwJV24dMYLq1Q0rlXQZ4SyWhgM02XA7l0HExt2Gg3iYybgAok2kqTeS2dKrwJS6tP+Z2g6XAM3R2PCNJdeqH1qCWllizQqqn6bKwFDmVlRhOoCTktQVD/tLZwWyoHZrVqhGGt1APeYI9Wkc7o019q0Bw4VHCwwVJZXh2Et6bFMjcLgoBwEKkyQzw0+CQS0K+2QMao/JojPOG29Qt9VqFRduQdFjT5Pd0TsTB1ax5eHrx X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: aca3a405-3854-436d-dc14-08d8fe3b9494 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4456.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 05:18:32.4603 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: d30uKhme3wUEbDIoy+uaPDcIdQUs+U5W92+HmuV35efkPg/6GBJXa+MAL9gLS7++CWOcfRpefc+jU8hgUYFt+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3250 Subject: [dpdk-dev] [PATCH v3 1/8] baseband: introduce NXP LA12xx driver 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 Sender: "dev" This patch introduce the baseband device drivers for NXP's LA1200 series software defined baseband modem. Signed-off-by: Nipun Gupta Signed-off-by: Hemant Agrawal --- drivers/baseband/la12xx/bbdev_la12xx.c | 109 ++++++++++++++++++ .../baseband/la12xx/bbdev_la12xx_pmd_logs.h | 38 ++++++ drivers/baseband/la12xx/meson.build | 6 + drivers/baseband/la12xx/version.map | 3 + drivers/baseband/meson.build | 2 +- 5 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 drivers/baseband/la12xx/bbdev_la12xx.c create mode 100644 drivers/baseband/la12xx/bbdev_la12xx_pmd_logs.h create mode 100644 drivers/baseband/la12xx/meson.build create mode 100644 drivers/baseband/la12xx/version.map diff --git a/drivers/baseband/la12xx/bbdev_la12xx.c b/drivers/baseband/la12xx/bbdev_la12xx.c new file mode 100644 index 0000000000..7050b17728 --- /dev/null +++ b/drivers/baseband/la12xx/bbdev_la12xx.c @@ -0,0 +1,109 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020-2021 NXP + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#define DRIVER_NAME baseband_la12xx + +RTE_LOG_REGISTER(bbdev_la12xx_logtype, pmd.bb.la12xx, NOTICE); + +/* private data structure */ +struct bbdev_la12xx_private { + unsigned int max_nb_queues; /**< Max number of queues */ +}; +/* Create device */ +static int +la12xx_bbdev_create(struct rte_vdev_device *vdev) +{ + struct rte_bbdev *bbdev; + const char *name = rte_vdev_device_name(vdev); + + PMD_INIT_FUNC_TRACE(); + + bbdev = rte_bbdev_allocate(name); + if (bbdev == NULL) + return -ENODEV; + + bbdev->data->dev_private = rte_zmalloc(name, + sizeof(struct bbdev_la12xx_private), + RTE_CACHE_LINE_SIZE); + if (bbdev->data->dev_private == NULL) { + rte_bbdev_release(bbdev); + return -ENOMEM; + } + + bbdev->dev_ops = NULL; + bbdev->device = &vdev->device; + bbdev->data->socket_id = 0; + bbdev->intr_handle = NULL; + + /* register rx/tx burst functions for data path */ + bbdev->dequeue_enc_ops = NULL; + bbdev->dequeue_dec_ops = NULL; + bbdev->enqueue_enc_ops = NULL; + bbdev->enqueue_dec_ops = NULL; + + return 0; +} + +/* Initialise device */ +static int +la12xx_bbdev_probe(struct rte_vdev_device *vdev) +{ + const char *name; + + PMD_INIT_FUNC_TRACE(); + + if (vdev == NULL) + return -EINVAL; + + name = rte_vdev_device_name(vdev); + if (name == NULL) + return -EINVAL; + + return la12xx_bbdev_create(vdev); +} + +/* Uninitialise device */ +static int +la12xx_bbdev_remove(struct rte_vdev_device *vdev) +{ + struct rte_bbdev *bbdev; + const char *name; + + PMD_INIT_FUNC_TRACE(); + + if (vdev == NULL) + return -EINVAL; + + name = rte_vdev_device_name(vdev); + if (name == NULL) + return -EINVAL; + + bbdev = rte_bbdev_get_named_dev(name); + if (bbdev == NULL) + return -EINVAL; + + rte_free(bbdev->data->dev_private); + + return rte_bbdev_release(bbdev); +} + +static struct rte_vdev_driver bbdev_la12xx_pmd_drv = { + .probe = la12xx_bbdev_probe, + .remove = la12xx_bbdev_remove +}; + +RTE_PMD_REGISTER_VDEV(DRIVER_NAME, bbdev_la12xx_pmd_drv); diff --git a/drivers/baseband/la12xx/bbdev_la12xx_pmd_logs.h b/drivers/baseband/la12xx/bbdev_la12xx_pmd_logs.h new file mode 100644 index 0000000000..71613a5bac --- /dev/null +++ b/drivers/baseband/la12xx/bbdev_la12xx_pmd_logs.h @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020 NXP + */ + +#ifndef _BBDEV_LA12XX_PMD_LOGS_H_ +#define _BBDEV_LA12XX_PMD_LOGS_H_ + +#define BBDEV_LA12XX_PMD_LOG(level, fmt, args...) \ + rte_log(RTE_LOG_ ## level, bbdev_la12xx_logtype, "bbdev_la12xx: " \ + fmt "\n", ##args) + +#define BBDEV_LA12XX_PMD_DEBUG(fmt, args...) \ + rte_log(RTE_LOG_DEBUG, bbdev_la12xx_logtype, "bbdev_la12xx: %s(): "\ + fmt "\n", __func__, ##args) + +#define PMD_INIT_FUNC_TRACE() BBDEV_LA12XX_PMD_DEBUG(">>") + +#define BBDEV_LA12XX_PMD_CRIT(fmt, args...) \ + BBDEV_LA12XX_PMD_LOG(CRIT, fmt, ## args) +#define BBDEV_LA12XX_PMD_INFO(fmt, args...) \ + BBDEV_LA12XX_PMD_LOG(INFO, fmt, ## args) +#define BBDEV_LA12XX_PMD_ERR(fmt, args...) \ + BBDEV_LA12XX_PMD_LOG(ERR, fmt, ## args) +#define BBDEV_LA12XX_PMD_WARN(fmt, args...) \ + BBDEV_LA12XX_PMD_LOG(WARNING, fmt, ## args) + +/* DP Logs, toggled out at compile time if level lower than current level */ +#define BBDEV_LA12XX_PMD_DP_LOG(level, fmt, args...) \ + RTE_LOG_DP(level, PMD, fmt, ## args) + +#define BBDEV_LA12XX_PMD_DP_DEBUG(fmt, args...) \ + BBDEV_LA12XX_PMD_DP_LOG(DEBUG, fmt, ## args) +#define BBDEV_LA12XX_PMD_DP_INFO(fmt, args...) \ + BBDEV_LA12XX_PMD_DP_LOG(INFO, fmt, ## args) +#define BBDEV_LA12XX_PMD_DP_WARN(fmt, args...) \ + BBDEV_LA12XX_PMD_DP_LOG(WARNING, fmt, ## args) + +#endif /* _BBDEV_LA12XX_PMD_LOGS_H_ */ diff --git a/drivers/baseband/la12xx/meson.build b/drivers/baseband/la12xx/meson.build new file mode 100644 index 0000000000..7a017dcffa --- /dev/null +++ b/drivers/baseband/la12xx/meson.build @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2020-2021 NXP + +deps += ['bbdev', 'bus_vdev', 'ring'] + +sources = files('bbdev_la12xx.c') diff --git a/drivers/baseband/la12xx/version.map b/drivers/baseband/la12xx/version.map new file mode 100644 index 0000000000..4a76d1d52d --- /dev/null +++ b/drivers/baseband/la12xx/version.map @@ -0,0 +1,3 @@ +DPDK_21 { + local: *; +}; diff --git a/drivers/baseband/meson.build b/drivers/baseband/meson.build index 920e3b02ee..ba5b2e570a 100644 --- a/drivers/baseband/meson.build +++ b/drivers/baseband/meson.build @@ -5,4 +5,4 @@ if is_windows subdir_done() endif -drivers = ['null', 'turbo_sw', 'fpga_lte_fec', 'fpga_5gnr_fec', 'acc100'] +drivers = ['null', 'turbo_sw', 'fpga_lte_fec', 'fpga_5gnr_fec', 'acc100', 'la12xx'] From patchwork Tue Apr 13 05:17:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 91192 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 62F46A0524; Tue, 13 Apr 2021 07:18:43 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 54E26160B1E; Tue, 13 Apr 2021 07:18:38 +0200 (CEST) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40065.outbound.protection.outlook.com [40.107.4.65]) by mails.dpdk.org (Postfix) with ESMTP id 5D24E160B16 for ; Tue, 13 Apr 2021 07:18:36 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PZtEXhnruYRSGmmo0RoufwR9GmdfDGujex5hbDYuKqKovA/DHQ5qgyblC6UyiXJ3E6shGe7WAf17NhF6TlY34sf/HxwpE2nXCocS/IUbCCFoegit63CA6DUnHflrf/nRmCfAJsfmEBOLDs3QitVfxxMz/R3/66UtYuhLpNXIRpckjW2003Q1MPbVmroUuyJgnv4+uZI8cbXe2OVj5wOIfjvXkCPFImnchCwUc6rjk48Ji/AK4Q6sI2+EJqQehDY8IugtMc3TQyj4Cdace4MgWbOSWiHfxaDGMh2Jri7o1u9TkoWN6r2SUxSdm1BDhf2gx8h0qTJ7zz3m8i/tdriC1w== 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-SenderADCheck; bh=WDKXevkyzpwBQRqOCyqAewemsZnKlZOqF3VTlCrjmBM=; b=md5KqdbnAcs1I/LQpSIHCLj1lyR/ihK5DwMUNt+e8tm1nLL8zy+8NhzucofNeoSYn3Ic35rye1lw/VMt0Ds418RYEEJEOxUDWibxJzMHxeVzrQyct8hyn0jtrsc+EkBAB+FNXGggYrBq1NqDKjh6xy9oFi2U1J8IG6hDkeXKztI02fw2Lszn2pFcRWavurchbfzorKy15vd3gVSXLPId934VvRbotjaxyW3oCiHcSvRq4MeyZmsv0Jk68x8NlIQXx5twkSE7dE7n1egRJeEgCQqkN7NIrc+YsOjJQ9VpocHygtyukoq5SNXbnJh8WmB22Qy8dgmfXplCAes13tPBhA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WDKXevkyzpwBQRqOCyqAewemsZnKlZOqF3VTlCrjmBM=; b=G2LVx1F3xwTiQTE+/RjZVEk5WlzYhZB1btEVXGlMBG4+zeN2xtzSb1BzdIFZjSoEiHEqSYIncMFMpiawIh9G26k5pUikB7s8jRblwIheIIXVdrUfc+OUeZu92ox3qfC3RQMQhvOvuP8ceMs3OeL8fWfnSMJbVhM33Ib9sZuUQlM= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) by AM5PR04MB3250.eurprd04.prod.outlook.com (2603:10a6:206:b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Tue, 13 Apr 2021 05:18:35 +0000 Received: from AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55]) by AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55%7]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 05:18:35 +0000 From: Hemant Agrawal To: dev@dpdk.org, gakhil@marvell.com, nicolas.chautru@intel.com Cc: david.marchand@redhat.com, Hemant Agrawal , Nipun Gupta Date: Tue, 13 Apr 2021 10:47:09 +0530 Message-Id: <20210413051715.26430-3-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210413051715.26430-1-hemant.agrawal@nxp.com> References: <20210410170252.4587-1-hemant.agrawal@nxp.com> <20210413051715.26430-1-hemant.agrawal@nxp.com> X-Originating-IP: [92.120.0.67] X-ClientProxiedBy: HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) To AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dpdk-xeon.ap.freescale.net (92.120.0.67) by HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.6 via Frontend Transport; Tue, 13 Apr 2021 05:18:32 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b9d12872-7226-4665-1981-08d8fe3b9673 X-MS-TrafficTypeDiagnostic: AM5PR04MB3250: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ix9u6ZWvJE6YUC1fA2onQUqx+0ZZ/GLxXMtYLVrQ3uj1qMiM9BI7Jff1WdKpsTaux2bGIaOlxEB2qEyb8/XhHVnSSfdVy21m1Tqaho7DPS9E867YvBilmIhbM7hq8S6sWMTgJk6DVRKvBW1KxhRGZbjZbp3s7SKtusDkzozvu76TtKioogrpggAYwR0TpivKPhiTdnEB2lWIwfQ/GoX0lcY2TcAcxeYk+ObUp4jfUp87GDo4wrLHz41LN2cZ6FUfbQXnOfg2XtSGH3IgOUvCwkd61GM8nC7M8WkSlp8QybaKsnBIPCYumpj1lm9eqFQig/cqWO5dPBbnMU9RuLq/ZxNnRZib/SabjAnNT2VMhjRIHy/HJUHGCrcC5tRR1P5TUJxolqSNeAjU4cNgTt0f6NoES3H8tkdNmgjD+r7AyMglQF2eqaX/RYLuGmO1etMiZNsT/E/cfYTBtWT2M6/Fo1tUjOjuL2vDtb1ojmmVYrqTCo9QGiBileMC4zxmF727NRkV3/AKOQzxqV5G3/e9PLmsdDl6vJtErlydQoM7bjpyw2gbH3voYNID6u6bRQlq+dnCSVEhK/XMDfiX5VVNzc3BRdoqZMkdws78vybkOmdmaWmUak9p0k5aMHLdLUZx619b5WcmOdLyoSSfdqdTDKSyNXVVsTLxeFZ9VG5GLI4= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB4456.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(39860400002)(366004)(136003)(376002)(83380400001)(16526019)(186003)(26005)(54906003)(38350700002)(38100700002)(316002)(66556008)(66946007)(66476007)(6512007)(2616005)(956004)(478600001)(4326008)(44832011)(36756003)(6486002)(6506007)(5660300002)(2906002)(52116002)(1076003)(86362001)(8936002)(6666004)(8676002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: QO7/qYsCyftOfPGIZFx51O37ZUPZ2r5aeqSi1R9Nwp/6Kv5v+rAOXvAlaKXI8LobJ6YuthVC5QJGCpRqSCdoYJuD80L8/HWdIdVPBSznqpxUl1Er29/yx21GUFho3N0NkSNzzaGre8lKPxOFYkMfmhHSrV61Nsb5ofmXkj0abUB6HP25uWYOO1bD7yzzVMI8JpNLVY9UEGmERJfHxpdHxR0TEs76jAiQgxox+ntWSHMJnsJOSX+YCSVcmtZQz5j7pTw2MT4QiwIhPGnElaga/9t9AeQDkyaR9ckXlTmsGjZ9LMNmq60L54UZtNuNDhdRe1kCnm0EfXwkSrxDhVZdamsstvUkF2AEuVbQENMkU2sR0jJixG1DpaW6RPGZV4nhdMr+NFcVO4C+Axmnt2J2Y7YT7rQTxYIH1U4uMNWRF6kzQq/VB6GrbEgCyein8s8Bik9d++TSrBIzDIs6TgoRcffrq/hv8RaNYP7DYVUwk3i17bpaJa3NQ0yYhiibqzUL2UzbXF5o06Z35L1tbglkdWPTyYdngAslu1wVVQNGF8dGormXA6US1sMavsBWnWPfeU/bKmj4qR3O3C6mjjfUuYvtRu9fVTIAy0jRfLDvugNH4j6xOL5eXt5FUVHkA6ezr4ERMx7TOXI41/cKqJ6uCvlOlcT1VfKuc1dIW9I95H53++H1ihdRKFNkoCF9T3Vgov5icI91HXZv9v2pyYKHlf7OCsnjX+wQDCVDq2Nc+pqYx186YKxoBZEfw2m8Q8Ki/3fNswzIAAAvmZCec2/++mTb+L413V1SoAqpEo5m788FyzjMXM7dNzRabR7vEzBFRJxWGvMxAXixhR2sk7VQRa7gcLVgaCHaM00vnogpQ5APWXxY2xQ3clY4YcaEfI+AwmOmz4i6VNjvxo8OIg/R3m5kKtrfoa8Ng4rl2uukTNIMUc51IV7aM0rLyjW53FjwEoaUev+Xvq/SxJH/pFUg7wNsp6wUrIvYLBlnL5vyBwE8zcm9jY1i+0RIpRannxpAOBhw87lGbL2kePbWPIC1VoDal5FAwlwidtTJAJCb7G+rwBZwE3Rs/AqgP+Zd9NBEmLKZEiYRPjia0j6KxEhFAA3pzYm/x5pKLgGdRyrtGHUdYFdOdqWIaMSZdNW9ZbtkouIBSs4sODSvJUqB2SmeFa/8VV/7JCe8FN7dIDEtrfOLfUM0KoYJxzEWILWnxtzycxQ27ikW3EVi3X6LlInksnNB9oIavD0P4LFdOtecb6qf6otTx5ASfCpUdgNhAWybXwbiCYzi5YUDC6mYYsT9tqHo/0FuFpubfSgCaOB+qJolKC3NgXqGmT37JVo1MGJB X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9d12872-7226-4665-1981-08d8fe3b9673 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4456.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 05:18:35.5725 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BvjBlHUaDPopMtZTgNgtsrSUDZlqBKROF8+C+sttqfnNb4I4NOsO08BGoNa0YK6pApZylN+dhrDeBUj8FmTXPg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3250 Subject: [dpdk-dev] [PATCH v3 2/8] baseband/la12xx: add devargs for max queues 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 Sender: "dev" This patch adds dev args to take max queues as input Signed-off-by: Nipun Gupta Signed-off-by: Hemant Agrawal --- drivers/baseband/la12xx/bbdev_la12xx.c | 72 +++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/drivers/baseband/la12xx/bbdev_la12xx.c b/drivers/baseband/la12xx/bbdev_la12xx.c index 7050b17728..8d3041ce28 100644 --- a/drivers/baseband/la12xx/bbdev_la12xx.c +++ b/drivers/baseband/la12xx/bbdev_la12xx.c @@ -19,13 +19,72 @@ RTE_LOG_REGISTER(bbdev_la12xx_logtype, pmd.bb.la12xx, NOTICE); +/* Initialisation params structure that can be used by LA12xx BBDEV driver */ +struct bbdev_la12xx_params { + uint8_t queues_num; /*< LA12xx BBDEV queues number */ +}; + +#define BBDEV_LA12XX_MAX_NB_QUEUES_ARG "max_nb_queues" + +static const char * const bbdev_la12xx_valid_params[] = { + BBDEV_LA12XX_MAX_NB_QUEUES_ARG, +}; + /* private data structure */ struct bbdev_la12xx_private { unsigned int max_nb_queues; /**< Max number of queues */ }; +static inline int +parse_u16_arg(const char *key, const char *value, void *extra_args) +{ + uint16_t *u16 = extra_args; + + unsigned int long result; + if ((value == NULL) || (extra_args == NULL)) + return -EINVAL; + errno = 0; + result = strtoul(value, NULL, 0); + if ((result >= (1 << 16)) || (errno != 0)) { + BBDEV_LA12XX_PMD_ERR("Invalid value %lu for %s", result, key); + return -ERANGE; + } + *u16 = (uint16_t)result; + return 0; +} + +/* Parse parameters used to create device */ +static int +parse_bbdev_la12xx_params(struct bbdev_la12xx_params *params, + const char *input_args) +{ + struct rte_kvargs *kvlist = NULL; + int ret = 0; + + if (params == NULL) + return -EINVAL; + if (input_args) { + kvlist = rte_kvargs_parse(input_args, + bbdev_la12xx_valid_params); + if (kvlist == NULL) + return -EFAULT; + + ret = rte_kvargs_process(kvlist, bbdev_la12xx_valid_params[0], + &parse_u16_arg, ¶ms->queues_num); + if (ret < 0) + goto exit; + + } + +exit: + if (kvlist) + rte_kvargs_free(kvlist); + return ret; +} + /* Create device */ static int -la12xx_bbdev_create(struct rte_vdev_device *vdev) +la12xx_bbdev_create(struct rte_vdev_device *vdev, + struct bbdev_la12xx_params *init_params) { struct rte_bbdev *bbdev; const char *name = rte_vdev_device_name(vdev); @@ -62,7 +121,11 @@ la12xx_bbdev_create(struct rte_vdev_device *vdev) static int la12xx_bbdev_probe(struct rte_vdev_device *vdev) { + struct bbdev_la12xx_params init_params = { + 8, -1, + }; const char *name; + const char *input_args; PMD_INIT_FUNC_TRACE(); @@ -73,7 +136,10 @@ la12xx_bbdev_probe(struct rte_vdev_device *vdev) if (name == NULL) return -EINVAL; - return la12xx_bbdev_create(vdev); + input_args = rte_vdev_device_args(vdev); + parse_bbdev_la12xx_params(&init_params, input_args); + + return la12xx_bbdev_create(vdev, &init_params); } /* Uninitialise device */ @@ -107,3 +173,5 @@ static struct rte_vdev_driver bbdev_la12xx_pmd_drv = { }; RTE_PMD_REGISTER_VDEV(DRIVER_NAME, bbdev_la12xx_pmd_drv); +RTE_PMD_REGISTER_PARAM_STRING(DRIVER_NAME, + BBDEV_LA12XX_MAX_NB_QUEUES_ARG"="); From patchwork Tue Apr 13 05:17:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 91193 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id DA8E1A0524; Tue, 13 Apr 2021 07:18:49 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B655A160B23; Tue, 13 Apr 2021 07:18:40 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-eopbgr130049.outbound.protection.outlook.com [40.107.13.49]) by mails.dpdk.org (Postfix) with ESMTP id 4C9BA160B16 for ; Tue, 13 Apr 2021 07:18:39 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QvErgRBCHjlXIRNKaxeji2nGWKSLPs2che5zhq0DIu0ARpUqqC4UfS6qA0ZwvP7vte+0DW2G3dqPtFMh3lMXUDtpYOAwEoyACGoySaBSfEEIQdLy6+mMvSmDaWB68M6hPHqlMw4qXZZiD7NmeBca8n4byf+lOvtsOng/6UffSsX896QgSV3wGpNYQBK/VrMPsDLSJm65Mz9yArgp2WOMMY5z+ehYtNY4n1bpmeN+7Zu7K3vOTEnO/GudJZZXYIbmLZJTYa2sLsgXBraK+zv8ReQ9SLie+Ip2VUZ7Lh+7u3VxTjziXl9G50UI9M7+jWi6KkUA1063ABDC1LrEq4YQlA== 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-SenderADCheck; bh=dbYw14cQRWFEsfZVHRX52rVIxpjSmZTBgkXd0VDFQY8=; b=HentZR3kOfG/WOLVIaoTmATDqRFDR+6nv1HDXRzIf1a22jTBkYgjfo8qbT3kTa4BtklMfn8fUnXcpW1WlfSlwNwUYkhmTavtVmNMJBTBK7vCm/RaEVCL5qoM2SDk20QgK5Bm3gMe8uNQ3NCH/JRBEYeWI2jbw7tUsG8mJk/LjNYRiyFcmgGM5FQfzQogiknFyBOPuhbQ8y8duCfK2KuEnY4Umo678PfoA4lOaKsu1q5flCzc35FZGBQ1yrWkYN/6sc9QyiqrynI81ysnc33lgrXUthkbkxnsyfUFSZzEve7+kL1/LqzJKVXNWdKnmQ4v35cCUUPKm0iyHT6DXN1rGQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dbYw14cQRWFEsfZVHRX52rVIxpjSmZTBgkXd0VDFQY8=; b=ri+7PsPKw/mgu33Dc6oIqBDQaVkAlxXzUwCof+mVnxAemmaDvjdVnCwGQFWFnskcQ1ebkDCmOhrzoCIEls+scdy95golOs6+Txvu5IiaWc0PqCSGIU3UOeswAi6nKG7V4ub4ihPSeCaij16nYF9wmzmnasf1oVUA1ugVgcqbfkE= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) by AM5PR04MB3250.eurprd04.prod.outlook.com (2603:10a6:206:b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Tue, 13 Apr 2021 05:18:38 +0000 Received: from AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55]) by AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55%7]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 05:18:38 +0000 From: Hemant Agrawal To: dev@dpdk.org, gakhil@marvell.com, nicolas.chautru@intel.com Cc: david.marchand@redhat.com, Hemant Agrawal Date: Tue, 13 Apr 2021 10:47:10 +0530 Message-Id: <20210413051715.26430-4-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210413051715.26430-1-hemant.agrawal@nxp.com> References: <20210410170252.4587-1-hemant.agrawal@nxp.com> <20210413051715.26430-1-hemant.agrawal@nxp.com> X-Originating-IP: [92.120.0.67] X-ClientProxiedBy: HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) To AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dpdk-xeon.ap.freescale.net (92.120.0.67) by HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.6 via Frontend Transport; Tue, 13 Apr 2021 05:18:35 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 95c5d548-9099-410d-e1df-08d8fe3b9813 X-MS-TrafficTypeDiagnostic: AM5PR04MB3250: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QRHYuJ/XbABx1TkJPZIIjBNOJ+yfgxnYczeeysyubhnP1qvWL1kZef5Kns6VnRmxqE2x1FacM9bPkVbIaes5cx9P0M/RwMgZCvp1qxvp+zTuf7yk7MpOgThO9a+DItTjFr/r9ehtJZACcVG0M3IE+u3XwGkMenog8ZOrqNugR/k5QLqTuPwJ/1CuXX+k+RLd6Wj5MAZFyOH+nR40hO9OqMnaagRFy45qgPNjLgR/Am6aXRE/Ko2N01MH6LH8nADZ2Slcu4OhxSQpIa1CRSGsG9XNJguArv7xy+/IOXDM1d5aKxeZiMeag2LkU5Qndfzjb1/CuJz8h8ERqrXxoes8VyUJThloB08J/2GhZPjePj+18eW5ciGKoZ0x98ubOtQ0jHK7y6Sc4GycZY53ujl7sSu9Hu+BphpLUZef6+qvPpVVkFq8qg3wAKwwRodAyefbspaDvn/7/XrAorQ7VhucMx8H1SUZW3gUM5fxc13FsfoyqebfupwQaSRZFCsUY/zn9A2w7egfiEMSgpwJc9FkY9z4wqx+iantYMnQ4tw+CUTOChtcxKBRMFhXdwX4Mek1QJWwsRtg8QSsz3tMb/bdOpvydObwIIgxRED9FOolyFOEfG5fZ0yyqrB/XaeOc2Mz+2ZKnTVYO6DUI4AYhMLuHy8uEs1n/1vI7gzWRyIjXGk= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB4456.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(39860400002)(366004)(136003)(376002)(83380400001)(16526019)(186003)(26005)(38350700002)(38100700002)(316002)(66556008)(66946007)(66476007)(6512007)(2616005)(956004)(478600001)(4326008)(44832011)(36756003)(6486002)(6506007)(5660300002)(2906002)(52116002)(1076003)(86362001)(8936002)(6666004)(8676002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: rfTaKG9dlAzh54hnUnavcrqwedy0+Pwr03uvbpGywQLoRRKkXx6d1g71H1a0aHDN/+mSYqkxn1hgPOndPAo97uvcjXI63jwQr5gj16VOzhHWoZWwTrusiW4unPmoYQ7cg4P+yAy9lEpc2FoCwBULTQPdPXpmjB3SKGsWUsH+UxygkjXl4i0NPGPmWujmpCiP9Hl4+iNExAXhFbFMyYfzT/cq/EvjXzfOEaK1A3rJhsFBV2WSDwM2fMIYp4dUEDGKizEwoXlWTbBJPwHBErDOzCa5hDfzrfmwxYJfcCZjGL8/Y1HzUtfMY83aEZR3Xk2kNQ73XEXl58OndZb4v9uShk4Z2jEQVoPYNSwhGWQMWoG/uSi3xUQGcFKgInYyh8Ut8fb1WY6yl3QT3MTlnr4YAfGSHwYJinrTgcHKrTkF0AOWZM99WlyCZs8t9sJRjjYeRrwHL7fVBnbIgf0pF65v/3iX6ZUEcB/6QMu+LjmC8/gSafey4Jr0MKthCZU82Lp9+S093APZqq7VLpFu0/z73HlTWhk0k7ZcjvI66rfwy0wyaIfp6tCPsNG+PUfBxR82ns5i8dPIkC8kgGVrk1FogeoG/EHGOC4i4Cq7hFZntnkG23MANUcDpA+jykTAHAZOyoh3vb06wNKamzvZQYJfh7AR7WEqGSfEp3oU57eLTjEgKDZJ5Ihv1GbNZaJFBr4aBBI+Zyz2QTJkewlBWVmCXo8uv+QhlMUB4Hbq1wwVWCtEeCUBkMSb6D9/3s59QCnCZ04S9fTw57BU2Svp6xmzEiTr4XbEuqwoq8J49HnCYzlG+pWFXw2cvyLH0VuQ26lVUs400Vg/4YNF2DS162vTegYQWs+dA/b6XYzP8o1KYXojSHrKW8d+EgZLR+W9Gqbtlxo+VNsjRwIKiQwmdhFne3AIwF6Jmbwp7ZPYcGjReK67m5KAacq6IsZK29ErnEcFhRPcIB5l+yqRZGx1ikzSzN68V/3RSHRBjWhAZB5ndJaQCRHlhtxfGXzNc9+1gO/w5kG01kKfJL68ehXSW4rcZVKlxM7Lf+kZA0GNALQokn7gBtQUlO5Mr1jn7RgZUGv1PETI7ZZ9bXnaEg7Jz02V9eVebzCZ3I5feGQfxMUzTl1a/S/5VTiVjKgXu/sUBOeCT4qzckYoI+gYpVbSleg0lZTycI0bfU4W6O5pVHBRjcTeg76zw+5k437kQ3cVb0+QaX2XEpNkobY+2NXYX2M4rsJzkNttBXmj7YctwGky3AdepNt/cenBJ1Pj6uCFM6ubTCvAGoEZvKiV6zPnC+bb32EXPcFa44flMrCCG0Qt7NxKrAzK55S9hSCn+1Ls4QUK X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 95c5d548-9099-410d-e1df-08d8fe3b9813 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4456.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 05:18:38.3079 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: cM2p+bxbfkJQd1RlfFJo/ZkRsuOtAOsQQrlzlRfMZpiAnKqsCLkOxjDoBmLnjjXa3PylskA+86cPEc5AS0cAZg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3250 Subject: [dpdk-dev] [PATCH v3 3/8] baseband/la12xx: add support for multiple modems 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 Sender: "dev" This patch add support for multiple modems by assigning a modem id as dev args in vdev creation. Signed-off-by: Hemant Agrawal --- drivers/baseband/la12xx/bbdev_la12xx.c | 60 ++++++++++++++++++++-- drivers/baseband/la12xx/bbdev_la12xx.h | 56 ++++++++++++++++++++ drivers/baseband/la12xx/bbdev_la12xx_ipc.h | 20 ++++++++ 3 files changed, 131 insertions(+), 5 deletions(-) create mode 100644 drivers/baseband/la12xx/bbdev_la12xx.h create mode 100644 drivers/baseband/la12xx/bbdev_la12xx_ipc.h diff --git a/drivers/baseband/la12xx/bbdev_la12xx.c b/drivers/baseband/la12xx/bbdev_la12xx.c index 8d3041ce28..7e9be74bb4 100644 --- a/drivers/baseband/la12xx/bbdev_la12xx.c +++ b/drivers/baseband/la12xx/bbdev_la12xx.c @@ -14,6 +14,8 @@ #include #include +#include +#include #define DRIVER_NAME baseband_la12xx @@ -22,18 +24,18 @@ RTE_LOG_REGISTER(bbdev_la12xx_logtype, pmd.bb.la12xx, NOTICE); /* Initialisation params structure that can be used by LA12xx BBDEV driver */ struct bbdev_la12xx_params { uint8_t queues_num; /*< LA12xx BBDEV queues number */ + int8_t modem_id; /*< LA12xx modem instance id */ }; #define BBDEV_LA12XX_MAX_NB_QUEUES_ARG "max_nb_queues" +#define BBDEV_LA12XX_VDEV_MODEM_ID_ARG "modem" +#define LA12XX_MAX_MODEM 4 static const char * const bbdev_la12xx_valid_params[] = { BBDEV_LA12XX_MAX_NB_QUEUES_ARG, + BBDEV_LA12XX_VDEV_MODEM_ID_ARG, }; -/* private data structure */ -struct bbdev_la12xx_private { - unsigned int max_nb_queues; /**< Max number of queues */ -}; static inline int parse_u16_arg(const char *key, const char *value, void *extra_args) { @@ -52,6 +54,28 @@ parse_u16_arg(const char *key, const char *value, void *extra_args) return 0; } +/* Parse integer from integer argument */ +static int +parse_integer_arg(const char *key __rte_unused, + const char *value, void *extra_args) +{ + int i; + char *end; + + errno = 0; + + i = strtol(value, &end, 10); + if (*end != 0 || errno != 0 || i < 0 || i > LA12XX_MAX_MODEM) { + BBDEV_LA12XX_PMD_ERR("Supported Port IDS are 0 to %d", + LA12XX_MAX_MODEM - 1); + return -EINVAL; + } + + *((uint32_t *)extra_args) = i; + + return 0; +} + /* Parse parameters used to create device */ static int parse_bbdev_la12xx_params(struct bbdev_la12xx_params *params, @@ -73,6 +97,16 @@ parse_bbdev_la12xx_params(struct bbdev_la12xx_params *params, if (ret < 0) goto exit; + ret = rte_kvargs_process(kvlist, + bbdev_la12xx_valid_params[1], + &parse_integer_arg, + ¶ms->modem_id); + + if (params->modem_id >= LA12XX_MAX_MODEM) { + BBDEV_LA12XX_PMD_ERR("Invalid modem id, must be < %u", + LA12XX_MAX_MODEM); + goto exit; + } } exit: @@ -88,6 +122,7 @@ la12xx_bbdev_create(struct rte_vdev_device *vdev, { struct rte_bbdev *bbdev; const char *name = rte_vdev_device_name(vdev); + struct bbdev_la12xx_private *priv; PMD_INIT_FUNC_TRACE(); @@ -103,6 +138,20 @@ la12xx_bbdev_create(struct rte_vdev_device *vdev, return -ENOMEM; } + priv = bbdev->data->dev_private; + priv->modem_id = init_params->modem_id; + /* if modem id is not configured */ + if (priv->modem_id == -1) + priv->modem_id = bbdev->data->dev_id; + + /* Reset Global variables */ + priv->num_ldpc_enc_queues = 0; + priv->num_ldpc_dec_queues = 0; + priv->num_valid_queues = 0; + priv->max_nb_queues = init_params->queues_num; + + BBDEV_LA12XX_PMD_INFO("Setting Up %s: DevId=%d, ModemId=%d", + name, bbdev->data->dev_id, priv->modem_id); bbdev->dev_ops = NULL; bbdev->device = &vdev->device; bbdev->data->socket_id = 0; @@ -174,4 +223,5 @@ static struct rte_vdev_driver bbdev_la12xx_pmd_drv = { RTE_PMD_REGISTER_VDEV(DRIVER_NAME, bbdev_la12xx_pmd_drv); RTE_PMD_REGISTER_PARAM_STRING(DRIVER_NAME, - BBDEV_LA12XX_MAX_NB_QUEUES_ARG"="); + BBDEV_LA12XX_MAX_NB_QUEUES_ARG"=" + BBDEV_LA12XX_VDEV_MODEM_ID_ARG "= "); diff --git a/drivers/baseband/la12xx/bbdev_la12xx.h b/drivers/baseband/la12xx/bbdev_la12xx.h new file mode 100644 index 0000000000..5228502331 --- /dev/null +++ b/drivers/baseband/la12xx/bbdev_la12xx.h @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020-2021 NXP + */ + +#ifndef __BBDEV_LA12XX_H__ +#define __BBDEV_LA12XX_H__ + +#define BBDEV_IPC_ENC_OP_TYPE 1 +#define BBDEV_IPC_DEC_OP_TYPE 2 + +#define MAX_LDPC_ENC_FECA_QUEUES 4 +#define MAX_LDPC_DEC_FECA_QUEUES 4 + +#define MAX_CHANNEL_DEPTH 16 +/* private data structure */ +struct bbdev_la12xx_private { + void *ipc_priv; + uint8_t num_valid_queues; + uint8_t max_nb_queues; + uint8_t num_ldpc_enc_queues; + uint8_t num_ldpc_dec_queues; + int8_t modem_id; + struct bbdev_la12xx_q_priv *queues_priv[32]; +}; + +struct hugepage_info { + void *vaddr; + phys_addr_t paddr; + size_t len; +}; + +struct bbdev_la12xx_q_priv { + struct bbdev_la12xx_private *bbdev_priv; + uint32_t q_id; /**< Channel ID */ + uint32_t feca_blk_id; /** FECA block ID for processing */ + uint32_t feca_blk_id_be32; /**< FECA Block ID for this queue */ + uint8_t en_napi; /* 0: napi disabled, 1: napi enabled */ + uint16_t queue_size; /**< Queue depth */ + int32_t eventfd; /**< Event FD value */ + enum rte_bbdev_op_type op_type; /**< Operation type */ + uint32_t la12xx_core_id; + /* LA12xx core ID on which this will be scheduled */ + struct rte_mempool *mp; /**< Pool from where buffers would be cut */ + void *bbdev_op[MAX_CHANNEL_DEPTH]; + /**< Stores bbdev op for each index */ + void *msg_ch_vaddr[MAX_CHANNEL_DEPTH]; + /**< Stores msg channel addr for modem->host */ + uint32_t host_pi; /**< Producer_Index for HOST->MODEM */ + uint32_t host_ci; /**< Consumer Index for MODEM->HOST */ + host_ipc_params_t *host_params; /**< Host parameters */ +}; + +#define lower_32_bits(x) ((uint32_t)((uint64_t)x)) +#define upper_32_bits(x) ((uint32_t)(((uint64_t)(x) >> 16) >> 16)) + +#endif diff --git a/drivers/baseband/la12xx/bbdev_la12xx_ipc.h b/drivers/baseband/la12xx/bbdev_la12xx_ipc.h new file mode 100644 index 0000000000..9aa5562981 --- /dev/null +++ b/drivers/baseband/la12xx/bbdev_la12xx_ipc.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020-2021 NXP + */ +#ifndef __BBDEV_LA12XX_IPC_H__ +#define __BBDEV_LA12XX_IPC_H__ + +/** No. of max channel per instance */ +#define IPC_MAX_DEPTH (16) + +/* This shared memory would be on the host side which have copy of some + * of the parameters which are also part of Shared BD ring. Read access + * of these parameters from the host side would not be over PCI. + */ +typedef struct host_ipc_params { + volatile uint32_t pi; + volatile uint32_t ci; + volatile uint32_t modem_ptr[IPC_MAX_DEPTH]; +} __rte_packed host_ipc_params_t; + +#endif From patchwork Tue Apr 13 05:17:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 91194 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id D4E0FA0524; Tue, 13 Apr 2021 07:18:56 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 09545160B28; Tue, 13 Apr 2021 07:18:45 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-eopbgr130079.outbound.protection.outlook.com [40.107.13.79]) by mails.dpdk.org (Postfix) with ESMTP id E9918160B27 for ; Tue, 13 Apr 2021 07:18:42 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z0TgVfUbMUQU0GsUKX5haQgwheYVHDiewy2fp5+ETQaedDNe4mP1xz9Qra2H+Nmy7VkQyfvVflNAY8L2V7BeIYQxQwBpagkbrXEIsYAKSBArk7HkXrmaBiCH1y0AtRpZFxPcv76U68IVV+DIDPrTQEN9sVaWq9L+XmOxPlrg/xNTAZsVmwjTb/TWqRVMLUALpUtFyhIOJg7QGiLyKnwdyr8+C81V89rNzqluLlgNZBxqgedYx5qDO3PzG3/JwaKfo/aBDo6J6/HzlnIjGxBtQqREEu7WSpkT48vKjWxYiiGjCUifYRsLe3VudlcO5yI98vam6dMzPiWtYN8AkxBUTA== 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-SenderADCheck; bh=NL9mSmuzvoOUuDRZIUzXhUhYc1SPcLdwBOU1zz892AU=; b=FPN7whR9ZfOa08nVp8b51jfk1o5BAN8qYgg7OxHIN8cCkp+BXVfL9CY/QhSTeBR1Afr8GmofyvW1IGSKQAK9ZxWCRV3d8g2OaOpLyPurjbv0t/oXQFebs2xlddb+GbL04KaHZTcm/hXXQJcRTGzYvXNuhOlda+A9RSveG+C/kCfZeJJf/VM8QdrhUkvTaH8LnCNJS8DXVPNN2p+LBayXxzm7rzlIaUt0/o03CBOFyNsypTE4d9NYi3E1K5S1AXNxyif53Mz89Sl1BzPZMdCJ3Ga/60l9Nk5YnnaBC/pp0D1e0C6Mb2N3xDdSk61xHzgNGAiQYqeXTX6DNrqMgSp8jg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NL9mSmuzvoOUuDRZIUzXhUhYc1SPcLdwBOU1zz892AU=; b=BnwqZVCVBLekUd7+th4gizTJa0nf9tSnJCuG/yjc6SzQrQx78D43mm+y7FKs90eOego1iW9lTrvvBpE4h5+gw3d2RLik1cVwWSMn2XepVP/Pf5pX4E+Ye3gS7c3/8zSx94U4NABG99tp0AI193tvFsYR8zQBxvRYwuwIWDSdp7A= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) by AM5PR04MB3250.eurprd04.prod.outlook.com (2603:10a6:206:b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Tue, 13 Apr 2021 05:18:41 +0000 Received: from AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55]) by AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55%7]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 05:18:41 +0000 From: Hemant Agrawal To: dev@dpdk.org, gakhil@marvell.com, nicolas.chautru@intel.com Cc: david.marchand@redhat.com, Hemant Agrawal , Nipun Gupta Date: Tue, 13 Apr 2021 10:47:11 +0530 Message-Id: <20210413051715.26430-5-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210413051715.26430-1-hemant.agrawal@nxp.com> References: <20210410170252.4587-1-hemant.agrawal@nxp.com> <20210413051715.26430-1-hemant.agrawal@nxp.com> X-Originating-IP: [92.120.0.67] X-ClientProxiedBy: HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) To AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dpdk-xeon.ap.freescale.net (92.120.0.67) by HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.6 via Frontend Transport; Tue, 13 Apr 2021 05:18:38 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f7a32e2f-f736-4ac9-5cc5-08d8fe3b99e8 X-MS-TrafficTypeDiagnostic: AM5PR04MB3250: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:459; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 191QgUjyS58TEnb40Qe2jTDWt8KCpwF6VccSK0GR6jF8moVF8ZksprfSZYedRFMR9PB8fZdOMyrC/EDPlITacGgSCfdwJH14Ww2UXaQbW1jHYHtS2uoRwwNwcRo61rsqQOd7wvvwIcvkeX7FtsXf9JT9M27Ch5ukDlGEMybGjwxN7sABdBK5QEDzhY8Yo7t5+Gx1S0dTG5v8FznMCCPrTRQ0zMsrdYpB8yg/8Us8RiByosYCJfAxd5KyoywuuKBxW+UpKcss44RO1UnR3WIuH/t5Zz6AQyWyWM9aTpyOs53BCybA3eaCmwIkQD/QdT4TzhfDxyT7d69i/B3TokBC9ESLcIVt2kCv/v51/DzAnLLYYN/Mo+Q3EF57MX6O4WY3O0xLgtmIIHi7LUUMb34kpqa0JCW0yJ5JUgJdXeSg8bUEpXxrn6boW75SfafsUcKnQUfmqzGQEH3cVubOQ+qBVsv3ez0BYRPhiNOFj8p4H4kz9ZvdDI/LbnXY7Lv3XN7vgY29Y5h9D4q1uGJ7pkS1BLHFztQEHrnwxpH5t1v1esbvYChfkC7q0dTYetuzvhzovPTvX15LdPjwoHkjD7xNkEE27yfkRokLdbJhQIsNt7YN/k0sDHj+ANZyXin0ohrfA2mCRW1qC7W8PUZGaZ6z8gFGymj/5netDjvF5MVUGms= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB4456.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(39860400002)(366004)(136003)(376002)(83380400001)(16526019)(186003)(26005)(54906003)(38350700002)(38100700002)(316002)(66556008)(66946007)(66476007)(6512007)(2616005)(956004)(478600001)(4326008)(44832011)(36756003)(6486002)(6506007)(5660300002)(2906002)(52116002)(1076003)(86362001)(8936002)(30864003)(6666004)(8676002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: IQ6RFceUcH7mQEvZzxojsb/34phHLYRCMs93LMlNuLZgVHPqj1hUMUuxXpvJihETm8N2FR3z/SierCG0iVQtUbkHZdgSdVD3sORJOznBeHFxVdUdiAeVvV7PS5EwEqY1qAWbttmfjz9/1g4pt8BzBXxDjXKm7/pytGyJ749MOgqDro0uTBayZ3PWV76lSLfJ38FX4JpG2weJEnVuCfR+9+DQIPQg7mHvt5FjNcU7/+tnIt2iOdKWOGrHFa/Uy72nVutv3To6aQ2X2jTZaRQ3ZEIr04kSC1eOn+M/Hyt2F7wHsHeq4ZsWdw9scikF8o8mTRd/KTWlQFri7zJkoFVg+HK8E8urBjItpLkodIC/+4ySztMCmoFccjFwm/5VJvcfTpiwSlyw4zYIN0Q5UytWhaWYoHlskR19Kwm5YGu3IDoYziUcL7WQ7+w7XV3OwsE+oH8/q5Y0Zp5OcC9PTsw8a0RBqvH4IWX4XP8f4TYAuAuPciqa2E1z1evYxaLKs+UZNwHig94PvOMUJfUnG4xmn1H/i2hkVcRIQYHagCH6Pjmtkx2W27l0PP35YiL1J0sQiBlWSQNjLTy3b1FJVFaAMRxfiz+PlKVq193IYVMz3wuvgh/0LRMgIK4f0lrWU68Zf005SNMPDPq5Iw0KWIG4PXXPs1KsrdfVUw3VUjfB9XPvdUvrjgeM2wiks1BjYM0FhRcB7sF+yh6BkTNM1HVccVxQ5BPUMWNwrUJtCAhKf8+n3KvVEZ2WGmn2GkMnkxpJd+XvLPmDiuZgUCuxSQGl0hI24mTigqpAR62w6TPifltpv8K8PlcCU1r9iKLVWerDbzzhYvGes4bNH4wWy8dwOXeRmayVgFFtWyiZrDUfffn5M6l10oLUaw7LlWTVXMjqT4r0UiRpqBug1vha6cIieu/P3OXPbeZLtIOzsVk0sCs548tPL3s2XJdmJskhGcP+sVyQq22iqvWLsqANVFIj0mynf1ERom5Z+H2TTPJR3xUu8emQ5xm4gsmxLkwD1eUy7tjvlrJT5mQ0p8SbT8sAx8SGI6Sn/RJil4v0YH+yPehKQ5+O3Fq+CI8uwPpGh3pidxFN/qQB1UIALvWhF17lQZZNaPJvn9I+l76QH7FqUK7KEvbog3Yrx7O5uVROIfkBrDR1wUnmUPuI2XVVhzQE58DGMeQ48429iOeNdWjzqogNhzvPxyLW1wukiw9MbUbm8Ej3McCkV/9mnGaZ74dAi3QH6csI/nBxE2Eju1CjWIx1mbwej0ZuO/GBH3/BkEQcv3+yXxvTyBPtuku/9SCBepCCEbwMuG6jNP0CGtVSN6KJ0OP+s75F4AXB5rasfV+6 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7a32e2f-f736-4ac9-5cc5-08d8fe3b99e8 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4456.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 05:18:41.4990 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3FPG44v/3R4oclJq+0h+4qC+bqu7wBtvpU3e63XyyHZzeVqh6PZ+LXV9alU8PZvBhdqcCtyPRrgNjK6KLNYN2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3250 Subject: [dpdk-dev] [PATCH v3 4/8] baseband/la12xx: add queue and modem config support 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 Sender: "dev" This patch add support for connecting with modem and creating the ipc channel as queues with modem for the exchange of data. Signed-off-by: Nipun Gupta Signed-off-by: Hemant Agrawal --- drivers/baseband/la12xx/bbdev_la12xx.c | 564 ++++++++++++++++++++- drivers/baseband/la12xx/bbdev_la12xx.h | 5 +- drivers/baseband/la12xx/bbdev_la12xx_ipc.h | 180 +++++++ 3 files changed, 746 insertions(+), 3 deletions(-) diff --git a/drivers/baseband/la12xx/bbdev_la12xx.c b/drivers/baseband/la12xx/bbdev_la12xx.c index 7e9be74bb4..0a68686205 100644 --- a/drivers/baseband/la12xx/bbdev_la12xx.c +++ b/drivers/baseband/la12xx/bbdev_la12xx.c @@ -3,6 +3,11 @@ */ #include +#include +#include +#include +#include +#include #include #include @@ -31,11 +36,561 @@ struct bbdev_la12xx_params { #define BBDEV_LA12XX_VDEV_MODEM_ID_ARG "modem" #define LA12XX_MAX_MODEM 4 +#define LA12XX_MAX_CORES 4 +#define BBDEV_LA12XX_LDPC_ENC_CORE 0 +#define BBDEV_LA12XX_LDPC_DEC_CORE 1 + static const char * const bbdev_la12xx_valid_params[] = { BBDEV_LA12XX_MAX_NB_QUEUES_ARG, BBDEV_LA12XX_VDEV_MODEM_ID_ARG, }; +static const struct rte_bbdev_op_cap bbdev_capabilities[] = { + { + .type = RTE_BBDEV_OP_LDPC_ENC, + .cap.ldpc_enc = { + .capability_flags = + RTE_BBDEV_LDPC_CRC_24A_ATTACH | + RTE_BBDEV_LDPC_CRC_24B_ATTACH, + .num_buffers_src = + RTE_BBDEV_LDPC_MAX_CODE_BLOCKS, + .num_buffers_dst = + RTE_BBDEV_LDPC_MAX_CODE_BLOCKS, + } + }, + { + .type = RTE_BBDEV_OP_LDPC_DEC, + .cap.ldpc_dec = { + .capability_flags = + RTE_BBDEV_LDPC_CRC_TYPE_24A_CHECK | + RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK | + RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP, + .num_buffers_src = + RTE_BBDEV_LDPC_MAX_CODE_BLOCKS, + .num_buffers_hard_out = + RTE_BBDEV_LDPC_MAX_CODE_BLOCKS, + } + }, + RTE_BBDEV_END_OF_CAPABILITIES_LIST() +}; + +static struct rte_bbdev_queue_conf default_queue_conf = { + .queue_size = MAX_CHANNEL_DEPTH, +}; + +/* Get device info */ +static void +la12xx_info_get(struct rte_bbdev *dev, + struct rte_bbdev_driver_info *dev_info) +{ + PMD_INIT_FUNC_TRACE(); + + dev_info->driver_name = RTE_STR(DRIVER_NAME); + dev_info->max_num_queues = LA12XX_MAX_QUEUES; + dev_info->queue_size_lim = MAX_CHANNEL_DEPTH; + dev_info->hardware_accelerated = true; + dev_info->max_dl_queue_priority = 0; + dev_info->max_ul_queue_priority = 0; + dev_info->default_queue_conf = default_queue_conf; + dev_info->capabilities = bbdev_capabilities; + dev_info->cpu_flag_reqs = NULL; + dev_info->min_alignment = 64; + + BBDEV_LA12XX_PMD_DEBUG("got device info from %u", dev->data->dev_id); +} + +/* Release queue */ +static int +la12xx_queue_release(struct rte_bbdev *dev, uint16_t q_id) +{ + RTE_SET_USED(dev); + RTE_SET_USED(q_id); + + PMD_INIT_FUNC_TRACE(); + + /* TODO: Implement */ + + return 0; +} + +#define HUGEPG_OFFSET(A) \ + ((uint64_t) ((unsigned long) (A) \ + - ((uint64_t)ipc_priv->hugepg_start.host_vaddr))) + +static int ipc_queue_configure(uint32_t channel_id, + ipc_t instance, struct bbdev_la12xx_q_priv *q_priv) +{ + ipc_userspace_t *ipc_priv = (ipc_userspace_t *)instance; + ipc_instance_t *ipc_instance = ipc_priv->instance; + ipc_ch_t *ch; + void *vaddr; + uint32_t i = 0; + uint32_t msg_size = sizeof(struct bbdev_ipc_enqueue_op); + + PMD_INIT_FUNC_TRACE(); + + BBDEV_LA12XX_PMD_DEBUG("%x %p", ipc_instance->initialized, + ipc_priv->instance); + ch = &(ipc_instance->ch_list[channel_id]); + + BBDEV_LA12XX_PMD_DEBUG("channel: %u, depth: %u, msg size: %u", + channel_id, q_priv->queue_size, msg_size); + + /* Start init of channel */ + ch->md.ring_size = rte_cpu_to_be_32(q_priv->queue_size); + ch->md.pi = 0; + ch->md.ci = 0; + ch->md.msg_size = msg_size; + for (i = 0; i < q_priv->queue_size; i++) { + vaddr = rte_malloc(NULL, msg_size, RTE_CACHE_LINE_SIZE); + if (!vaddr) + return IPC_HOST_BUF_ALLOC_FAIL; + /* Only offset now */ + ch->bd[i].modem_ptr = + rte_cpu_to_be_32(HUGEPG_OFFSET(vaddr)); + ch->bd[i].host_virt_l = lower_32_bits(vaddr); + ch->bd[i].host_virt_h = upper_32_bits(vaddr); + q_priv->msg_ch_vaddr[i] = vaddr; + /* Not sure use of this len may be for CRC*/ + ch->bd[i].len = 0; + } + ch->host_ipc_params = + rte_cpu_to_be_32(HUGEPG_OFFSET(q_priv->host_params)); + ch->bl_initialized = 1; + + BBDEV_LA12XX_PMD_DEBUG("Channel configured"); + return IPC_SUCCESS; +} + +static int +la12xx_e200_queue_setup(struct rte_bbdev *dev, + struct bbdev_la12xx_q_priv *q_priv) +{ + struct bbdev_la12xx_private *priv = dev->data->dev_private; + ipc_userspace_t *ipc_priv = priv->ipc_priv; + struct gul_hif *mhif; + ipc_metadata_t *ipc_md; + ipc_ch_t *ch; + int instance_id = 0, i; + int ret; + + PMD_INIT_FUNC_TRACE(); + + switch (q_priv->op_type) { + case RTE_BBDEV_OP_LDPC_ENC: + q_priv->la12xx_core_id = BBDEV_LA12XX_LDPC_ENC_CORE; + break; + case RTE_BBDEV_OP_LDPC_DEC: + q_priv->la12xx_core_id = BBDEV_LA12XX_LDPC_DEC_CORE; + break; + default: + BBDEV_LA12XX_PMD_ERR("Unsupported op type\n"); + return -1; + } + + mhif = (struct gul_hif *)ipc_priv->mhif_start.host_vaddr; + /* offset is from start of PEB */ + ipc_md = (ipc_metadata_t *)((size_t)ipc_priv->peb_start.host_vaddr + + mhif->ipc_regs.ipc_mdata_offset); + ch = &ipc_md->instance_list[instance_id].ch_list[q_priv->q_id]; + + if (q_priv->q_id < priv->num_valid_queues) { + ipc_br_md_t *md, *host_md; + ipc_ch_t *host_rx_ch; + + host_rx_ch = + &ipc_md->instance_list[instance_id].ch_list[q_priv->q_id + + HOST_RX_QUEUEID_OFFSET]; + md = &(ch->md); + host_md = &(host_rx_ch->md); + + q_priv->feca_blk_id = rte_cpu_to_be_32(ch->feca_blk_id); + q_priv->feca_blk_id_be32 = ch->feca_blk_id; + q_priv->host_pi = rte_be_to_cpu_32(host_md->pi); + q_priv->host_ci = rte_be_to_cpu_32(md->ci); + q_priv->host_params = (host_ipc_params_t *) + (rte_be_to_cpu_32(ch->host_ipc_params) + + ((size_t)ipc_priv->hugepg_start.host_vaddr)); + + for (i = 0; i < q_priv->queue_size; i++) { + uint32_t h, l; + + h = host_rx_ch->bd[i].host_virt_h; + l = host_rx_ch->bd[i].host_virt_l; + q_priv->msg_ch_vaddr[i] = (void *)join_32_bits(h, l); + } + + BBDEV_LA12XX_PMD_WARN( + "Queue [%d] already configured, not configuring again", + q_priv->q_id); + return 0; + } + + BBDEV_LA12XX_PMD_DEBUG("setting up queue %d", q_priv->q_id); + + q_priv->host_params = rte_zmalloc(NULL, sizeof(host_ipc_params_t), + RTE_CACHE_LINE_SIZE); + ch->host_ipc_params = + rte_cpu_to_be_32(HUGEPG_OFFSET(q_priv->host_params)); + + /* Call ipc_configure_channel */ + ret = ipc_queue_configure((q_priv->q_id + HOST_RX_QUEUEID_OFFSET), + ipc_priv, q_priv); + if (ret) { + BBDEV_LA12XX_PMD_ERR("Unable to setup queue (%d) (err=%d)", + q_priv->q_id, ret); + return ret; + } + + /* Set queue properties for LA12xx device */ + switch (q_priv->op_type) { + case RTE_BBDEV_OP_LDPC_ENC: + if (priv->num_ldpc_enc_queues >= MAX_LDPC_ENC_FECA_QUEUES) { + BBDEV_LA12XX_PMD_ERR( + "num_ldpc_enc_queues reached max value"); + return -1; + } + ch->la12xx_core_id = + rte_cpu_to_be_32(BBDEV_LA12XX_LDPC_ENC_CORE); + ch->feca_blk_id = rte_cpu_to_be_32(priv->num_ldpc_enc_queues++); + break; + case RTE_BBDEV_OP_LDPC_DEC: + if (priv->num_ldpc_dec_queues >= MAX_LDPC_DEC_FECA_QUEUES) { + BBDEV_LA12XX_PMD_ERR( + "num_ldpc_dec_queues reached max value"); + return -1; + } + ch->la12xx_core_id = + rte_cpu_to_be_32(BBDEV_LA12XX_LDPC_DEC_CORE); + ch->feca_blk_id = rte_cpu_to_be_32(priv->num_ldpc_dec_queues++); + break; + default: + BBDEV_LA12XX_PMD_ERR("Not supported op type\n"); + return -1; + } + ch->op_type = rte_cpu_to_be_32(q_priv->op_type); + ch->depth = rte_cpu_to_be_32(q_priv->queue_size); + + /* Store queue config here */ + q_priv->feca_blk_id = rte_cpu_to_be_32(ch->feca_blk_id); + q_priv->feca_blk_id_be32 = ch->feca_blk_id; + + return 0; +} + +/* Setup a queue */ +static int +la12xx_queue_setup(struct rte_bbdev *dev, uint16_t q_id, + const struct rte_bbdev_queue_conf *queue_conf) +{ + struct bbdev_la12xx_private *priv = dev->data->dev_private; + struct rte_bbdev_queue_data *q_data; + struct bbdev_la12xx_q_priv *q_priv; + int ret; + + PMD_INIT_FUNC_TRACE(); + + /* Move to setup_queues callback */ + q_data = &dev->data->queues[q_id]; + q_data->queue_private = rte_zmalloc(NULL, + sizeof(struct bbdev_la12xx_q_priv), 0); + if (!q_data->queue_private) { + BBDEV_LA12XX_PMD_ERR("Memory allocation failed for qpriv"); + return -ENOMEM; + } + q_priv = q_data->queue_private; + q_priv->q_id = q_id; + q_priv->bbdev_priv = dev->data->dev_private; + q_priv->queue_size = queue_conf->queue_size; + q_priv->op_type = queue_conf->op_type; + + ret = la12xx_e200_queue_setup(dev, q_priv); + if (ret) { + BBDEV_LA12XX_PMD_ERR("e200_queue_setup failed for qid: %d", + q_id); + return ret; + } + + /* Store queue config here */ + priv->num_valid_queues++; + + return 0; +} + +static int +la12xx_start(struct rte_bbdev *dev) +{ + struct bbdev_la12xx_private *priv = dev->data->dev_private; + ipc_userspace_t *ipc_priv = priv->ipc_priv; + int ready = 0; + struct gul_hif *hif_start; + + PMD_INIT_FUNC_TRACE(); + + hif_start = (struct gul_hif *)ipc_priv->mhif_start.host_vaddr; + + /* Set Host Read bit */ + SET_HIF_HOST_RDY(hif_start, HIF_HOST_READY_IPC_APP); + + /* Now wait for modem ready bit */ + while (!ready) + ready = CHK_HIF_MOD_RDY(hif_start, HIF_MOD_READY_IPC_APP); + + return 0; +} + +static const struct rte_bbdev_ops pmd_ops = { + .info_get = la12xx_info_get, + .queue_setup = la12xx_queue_setup, + .queue_release = la12xx_queue_release, + .start = la12xx_start +}; +static struct hugepage_info * +get_hugepage_info(void) +{ + struct hugepage_info *hp_info; + struct rte_memseg *mseg; + + PMD_INIT_FUNC_TRACE(); + + /* TODO - find a better way */ + hp_info = rte_malloc(NULL, sizeof(struct hugepage_info), 0); + if (!hp_info) { + BBDEV_LA12XX_PMD_ERR("Unable to allocate on local heap"); + return NULL; + } + + mseg = rte_mem_virt2memseg(hp_info, NULL); + hp_info->vaddr = mseg->addr; + hp_info->paddr = rte_mem_virt2phy(mseg->addr); + hp_info->len = mseg->len; + + return hp_info; +} + +static int open_ipc_dev(int modem_id) +{ + char dev_initials[16], dev_path[PATH_MAX]; + struct dirent *entry; + int dev_ipc = 0; + DIR *dir; + + dir = opendir("/dev/"); + if (!dir) { + BBDEV_LA12XX_PMD_ERR("Unable to open /dev/"); + return -1; + } + + sprintf(dev_initials, "gulipcgul%d", modem_id); + + while ((entry = readdir(dir)) != NULL) { + if (!strncmp(dev_initials, entry->d_name, + sizeof(dev_initials) - 1)) + break; + } + + if (!entry) { + BBDEV_LA12XX_PMD_ERR("Error: No gulipcgul%d device", modem_id); + return -1; + } + + sprintf(dev_path, "/dev/%s", entry->d_name); + dev_ipc = open(dev_path, O_RDWR); + if (dev_ipc < 0) { + BBDEV_LA12XX_PMD_ERR("Error: Cannot open %s", dev_path); + return -errno; + } + + return dev_ipc; +} + +static int +setup_la12xx_dev(struct rte_bbdev *dev) +{ + struct bbdev_la12xx_private *priv = dev->data->dev_private; + ipc_userspace_t *ipc_priv = priv->ipc_priv; + struct hugepage_info *hp = NULL; + ipc_channel_us_t *ipc_priv_ch = NULL; + int dev_ipc = 0, dev_mem = 0, i; + ipc_metadata_t *ipc_md; + struct gul_hif *mhif; + uint32_t phy_align = 0; + int ret; + + PMD_INIT_FUNC_TRACE(); + + if (!ipc_priv) { + /* TODO - get a better way */ + /* Get the hugepage info against it */ + hp = get_hugepage_info(); + if (!hp) { + BBDEV_LA12XX_PMD_ERR("Unable to get hugepage info"); + ret = -ENOMEM; + goto err; + } + + BBDEV_LA12XX_PMD_DEBUG("0x%" PRIx64 " %p %x", + hp->paddr, hp->vaddr, (int)hp->len); + + ipc_priv = rte_zmalloc(0, sizeof(ipc_userspace_t), 0); + if (ipc_priv == NULL) { + BBDEV_LA12XX_PMD_ERR( + "Unable to allocate memory for ipc priv"); + ret = -ENOMEM; + goto err; + } + + for (i = 0; i < IPC_MAX_CHANNEL_COUNT; i++) { + ipc_priv_ch = rte_zmalloc(0, + sizeof(ipc_channel_us_t), 0); + if (ipc_priv_ch == NULL) { + BBDEV_LA12XX_PMD_ERR( + "Unable to allocate memory for channels"); + ret = -ENOMEM; + } + ipc_priv->channels[i] = ipc_priv_ch; + } + + dev_mem = open("/dev/mem", O_RDWR); + if (dev_mem < 0) { + BBDEV_LA12XX_PMD_ERR("Error: Cannot open /dev/mem"); + ret = -errno; + goto err; + } + + ipc_priv->instance_id = 0; + ipc_priv->dev_mem = dev_mem; + + ipc_priv->sys_map.hugepg_start.host_phys = hp->paddr; + ipc_priv->sys_map.hugepg_start.size = hp->len; + + ipc_priv->hugepg_start.host_phys = hp->paddr; + ipc_priv->hugepg_start.host_vaddr = hp->vaddr; + ipc_priv->hugepg_start.size = hp->len; + + rte_free(hp); + } + + dev_ipc = open_ipc_dev(priv->modem_id); + if (dev_ipc < 0) { + BBDEV_LA12XX_PMD_ERR("Error: open_ipc_dev failed"); + goto err; + } + ipc_priv->dev_ipc = dev_ipc; + + /* Send IOCTL to get system map */ + /* Send IOCTL to put hugepg_start map */ + ret = ioctl(ipc_priv->dev_ipc, IOCTL_GUL_IPC_GET_SYS_MAP, + &ipc_priv->sys_map); + if (ret) { + BBDEV_LA12XX_PMD_ERR( + "IOCTL_GUL_IPC_GET_SYS_MAP ioctl failed"); + goto err; + } + + phy_align = (ipc_priv->sys_map.mhif_start.host_phys % 0x1000); + ipc_priv->mhif_start.host_vaddr = + mmap(0, ipc_priv->sys_map.mhif_start.size + phy_align, + (PROT_READ | PROT_WRITE), MAP_SHARED, ipc_priv->dev_mem, + (ipc_priv->sys_map.mhif_start.host_phys - phy_align)); + if (ipc_priv->mhif_start.host_vaddr == MAP_FAILED) { + BBDEV_LA12XX_PMD_ERR("MAP failed:"); + ret = -errno; + goto err; + } + + ipc_priv->mhif_start.host_vaddr = (void *)((size_t) + (ipc_priv->mhif_start.host_vaddr) + phy_align); + + phy_align = (ipc_priv->sys_map.peb_start.host_phys % 0x1000); + ipc_priv->peb_start.host_vaddr = + mmap(0, ipc_priv->sys_map.peb_start.size + phy_align, + (PROT_READ | PROT_WRITE), MAP_SHARED, ipc_priv->dev_mem, + (ipc_priv->sys_map.peb_start.host_phys - phy_align)); + if (ipc_priv->peb_start.host_vaddr == MAP_FAILED) { + BBDEV_LA12XX_PMD_ERR("MAP failed:"); + ret = -errno; + goto err; + } + + ipc_priv->peb_start.host_vaddr = (void *)((size_t) + (ipc_priv->peb_start.host_vaddr) + phy_align); + + phy_align = (ipc_priv->sys_map.modem_ccsrbar.host_phys % 0x1000); + ipc_priv->modem_ccsrbar.host_vaddr = + mmap(0, ipc_priv->sys_map.modem_ccsrbar.size + phy_align, + (PROT_READ | PROT_WRITE), MAP_SHARED, ipc_priv->dev_mem, + (ipc_priv->sys_map.modem_ccsrbar.host_phys - phy_align)); + if (ipc_priv->modem_ccsrbar.host_vaddr == MAP_FAILED) { + BBDEV_LA12XX_PMD_ERR("MAP failed:"); + ret = -errno; + goto err; + } + + ipc_priv->modem_ccsrbar.host_vaddr = (void *)((size_t) + (ipc_priv->modem_ccsrbar.host_vaddr) + phy_align); + + ipc_priv->hugepg_start.modem_phys = + ipc_priv->sys_map.hugepg_start.modem_phys; + + ipc_priv->mhif_start.host_phys = + ipc_priv->sys_map.mhif_start.host_phys; + ipc_priv->mhif_start.size = ipc_priv->sys_map.mhif_start.size; + ipc_priv->peb_start.host_phys = ipc_priv->sys_map.peb_start.host_phys; + ipc_priv->peb_start.size = ipc_priv->sys_map.peb_start.size; + + BBDEV_LA12XX_PMD_INFO("peb 0x%" PRIx64 " %p %x", + ipc_priv->peb_start.host_phys, + ipc_priv->peb_start.host_vaddr, + ipc_priv->peb_start.size); + BBDEV_LA12XX_PMD_INFO("hugepg 0x%" PRIx64 " %p %x", + ipc_priv->hugepg_start.host_phys, + ipc_priv->hugepg_start.host_vaddr, + ipc_priv->hugepg_start.size); + BBDEV_LA12XX_PMD_INFO("mhif 0x%" PRIx64 " %p %x", + ipc_priv->mhif_start.host_phys, + ipc_priv->mhif_start.host_vaddr, + ipc_priv->mhif_start.size); + mhif = (struct gul_hif *)ipc_priv->mhif_start.host_vaddr; + + /* offset is from start of PEB */ + ipc_md = (ipc_metadata_t *)((size_t)ipc_priv->peb_start.host_vaddr + + mhif->ipc_regs.ipc_mdata_offset); + + if (sizeof(ipc_metadata_t) != mhif->ipc_regs.ipc_mdata_size) { + BBDEV_LA12XX_PMD_ERR( + "\n ipc_metadata_t=%d mhif->ipc_regs.ipc_mdata_size=%x", + (int)sizeof(ipc_metadata_t), + mhif->ipc_regs.ipc_mdata_size); + BBDEV_LA12XX_PMD_ERR( + "--> mhif->ipc_regs.ipc_mdata_offset= %x", + mhif->ipc_regs.ipc_mdata_offset); + BBDEV_LA12XX_PMD_ERR( + "gul_hif size=%d", (int)sizeof(struct gul_hif)); + return IPC_MD_SZ_MISS_MATCH; + } + + ipc_priv->instance = (ipc_instance_t *) + (&ipc_md->instance_list[ipc_priv->instance_id]); + + BBDEV_LA12XX_PMD_DEBUG("finish host init"); + + priv->ipc_priv = ipc_priv; + + return 0; + +err: + rte_free(hp); + rte_free(ipc_priv); + rte_free(ipc_priv_ch); + if (dev_mem) + close(dev_mem); + if (dev_ipc) + close(dev_ipc); + + return ret; +} + static inline int parse_u16_arg(const char *key, const char *value, void *extra_args) { @@ -123,6 +678,7 @@ la12xx_bbdev_create(struct rte_vdev_device *vdev, struct rte_bbdev *bbdev; const char *name = rte_vdev_device_name(vdev); struct bbdev_la12xx_private *priv; + int ret; PMD_INIT_FUNC_TRACE(); @@ -152,7 +708,13 @@ la12xx_bbdev_create(struct rte_vdev_device *vdev, BBDEV_LA12XX_PMD_INFO("Setting Up %s: DevId=%d, ModemId=%d", name, bbdev->data->dev_id, priv->modem_id); - bbdev->dev_ops = NULL; + ret = setup_la12xx_dev(bbdev); + if (ret) { + BBDEV_LA12XX_PMD_ERR("IPC Setup failed for %s", name); + rte_free(bbdev->data->dev_private); + return ret; + } + bbdev->dev_ops = &pmd_ops; bbdev->device = &vdev->device; bbdev->data->socket_id = 0; bbdev->intr_handle = NULL; diff --git a/drivers/baseband/la12xx/bbdev_la12xx.h b/drivers/baseband/la12xx/bbdev_la12xx.h index 5228502331..c94f08e059 100644 --- a/drivers/baseband/la12xx/bbdev_la12xx.h +++ b/drivers/baseband/la12xx/bbdev_la12xx.h @@ -14,7 +14,7 @@ #define MAX_CHANNEL_DEPTH 16 /* private data structure */ struct bbdev_la12xx_private { - void *ipc_priv; + ipc_userspace_t *ipc_priv; uint8_t num_valid_queues; uint8_t max_nb_queues; uint8_t num_ldpc_enc_queues; @@ -52,5 +52,6 @@ struct bbdev_la12xx_q_priv { #define lower_32_bits(x) ((uint32_t)((uint64_t)x)) #define upper_32_bits(x) ((uint32_t)(((uint64_t)(x) >> 16) >> 16)) - +#define join_32_bits(upper, lower) \ + ((size_t)(((uint64_t)(upper) << 32) | (uint32_t)(lower))) #endif diff --git a/drivers/baseband/la12xx/bbdev_la12xx_ipc.h b/drivers/baseband/la12xx/bbdev_la12xx_ipc.h index 9aa5562981..9d5789f726 100644 --- a/drivers/baseband/la12xx/bbdev_la12xx_ipc.h +++ b/drivers/baseband/la12xx/bbdev_la12xx_ipc.h @@ -4,9 +4,175 @@ #ifndef __BBDEV_LA12XX_IPC_H__ #define __BBDEV_LA12XX_IPC_H__ +#define LA12XX_MAX_QUEUES 20 + +/** No. of max channel per instance */ +#define IPC_MAX_CHANNEL_COUNT (64) + /** No. of max channel per instance */ #define IPC_MAX_DEPTH (16) +/** No. of max IPC instance per modem */ +#define IPC_MAX_INSTANCE_COUNT (1) + +#define HOST_RX_QUEUEID_OFFSET LA12XX_MAX_QUEUES + +#define MAX_MEM_POOL_COUNT 8 + +/** Error codes */ +#define IPC_SUCCESS (0) /** IPC operation success */ +#define IPC_INPUT_INVALID (-1) /** Invalid input to API */ +#define IPC_CH_INVALID (-2) /** Channel no is invalid */ +#define IPC_INSTANCE_INVALID (-3) /** Instance no is invalid */ +#define IPC_MEM_INVALID (-4) /** Insufficient memory */ +#define IPC_CH_FULL (-5) /** Channel is full */ +#define IPC_CH_EMPTY (-6) /** Channel is empty */ +#define IPC_BL_EMPTY (-7) /** Free buffer list is empty */ +#define IPC_BL_FULL (-8) /** Free buffer list is full */ +#define IPC_HOST_BUF_ALLOC_FAIL (-9) /** DPDK malloc fail */ +#define IPC_MD_SZ_MISS_MATCH (-10) /** META DATA sz in mhif miss matched*/ +#define IPC_MALLOC_FAIL (-11) /** system malloc fail */ +#define IPC_IOCTL_FAIL (-12) /** IOCTL call failed */ +#define IPC_MMAP_FAIL (-14) /** MMAP fail */ +#define IPC_OPEN_FAIL (-15) /** OPEN fail */ +#define IPC_EVENTFD_FAIL (-16) /** eventfd initialization failed */ +#define IPC_NOT_IMPLEMENTED (-17) /** IPC feature is not implemented yet*/ + +#define SET_HIF_HOST_RDY(hif, RDY_MASK) (hif->host_ready |= RDY_MASK) +#define CHK_HIF_MOD_RDY(hif, RDY_MASK) (hif->mod_ready & RDY_MASK) + +/* Host Ready bits */ +#define HIF_HOST_READY_HOST_REGIONS (1 << 0) +#define HIF_HOST_READY_IPC_LIB (1 << 12) +#define HIF_HOST_READY_IPC_APP (1 << 13) +#define HIF_HOST_READY_FECA (1 << 14) + +/* Modem Ready bits */ +#define HIF_MOD_READY_IPC_LIB (1 << 5) +#define HIF_MOD_READY_IPC_APP (1 << 6) +#define HIF_MOD_READY_FECA (1 << 7) + +typedef void *ipc_t; + +struct ipc_msg { + int chid; + void *addr; + uint32_t len; + uint8_t flags; +}; + +typedef struct { + uint64_t host_phys; + uint32_t modem_phys; + void *host_vaddr; + uint32_t size; +} mem_range_t; + +#define GUL_IPC_MAGIC 'R' + +#define IOCTL_GUL_IPC_GET_SYS_MAP _IOW(GUL_IPC_MAGIC, 1, struct ipc_msg *) +#define IOCTL_GUL_IPC_CHANNEL_REGISTER _IOWR(GUL_IPC_MAGIC, 4, struct ipc_msg *) +#define IOCTL_GUL_IPC_CHANNEL_DEREGISTER \ + _IOWR(GUL_IPC_MAGIC, 5, struct ipc_msg *) +#define IOCTL_GUL_IPC_CHANNEL_RAISE_INTERRUPT _IOW(GUL_IPC_MAGIC, 6, int *) + +/** buffer ring common metadata */ +typedef struct ipc_bd_ring_md { + volatile uint32_t pi; /**< Producer index and flag (MSB) + * which flip for each Ring wrapping + */ + volatile uint32_t ci; /**< Consumer index and flag (MSB) + * which flip for each Ring wrapping + */ + uint32_t ring_size; /**< depth (Used to roll-over pi/ci) */ + uint32_t msg_size; /**< Size of the each buffer */ +} __rte_packed ipc_br_md_t; + +/** IPC buffer descriptor */ +typedef struct ipc_buffer_desc { + union { + uint64_t host_virt; /**< msg's host virtual address */ + struct { + uint32_t host_virt_l; + uint32_t host_virt_h; + }; + }; + uint64_t host_phy; /**< msg's host physical address */ + uint32_t modem_ptr; /**< msg's modem physical address */ + uint32_t len; /**< msg len */ + uint64_t crc; /**< crc */ +} __rte_packed ipc_bd_t; + +typedef struct ipc_channel { + uint32_t ch_id; /**< Channel id */ + uint32_t bl_initialized;/**< Set when buffer list is initialized */ + ipc_br_md_t md; + ipc_bd_t bd[IPC_MAX_DEPTH]; + uint32_t op_type;/* BBDEV operation supported on this channel */ + uint32_t depth; /* Channel depth */ + uint32_t feca_blk_id;/* FECA Transport Block ID for processing */ + uint32_t la12xx_core_id;/* LA12xx core ID to scheduled work for it*/ + uint32_t host_ipc_params;/* Address for host IPC parameters */ +} __rte_packed ipc_ch_t; + +typedef struct ipc_instance { + uint32_t initialized; /**< Set in ipc_init */ + ipc_ch_t ch_list[IPC_MAX_CHANNEL_COUNT]; + /**< Channel descriptors in this instance */ +} __rte_packed ipc_instance_t; + +typedef struct ipc_metadata { + ipc_instance_t instance_list[IPC_MAX_INSTANCE_COUNT]; +} __rte_packed ipc_metadata_t; + +typedef struct ipc_channel_us_priv { + int32_t eventfd; + uint32_t channel_id; + /* In flight packets status for buffer list. */ + uint8_t bufs_inflight[IPC_MAX_DEPTH]; +} ipc_channel_us_t; + +typedef struct { + uint64_t host_phys; + uint32_t modem_phys; + uint32_t size; +} mem_strt_addr_t; + +typedef struct { + mem_strt_addr_t modem_ccsrbar; + mem_strt_addr_t peb_start; /* PEB meta data */ + mem_strt_addr_t mhif_start; /* MHIF meta daat */ + mem_strt_addr_t hugepg_start; /* Modem to access hugepage */ +} sys_map_t; + +typedef struct ipc_priv_t { + int instance_id; + int dev_ipc; + int dev_mem; + struct rte_mempool *rtemempool[MAX_MEM_POOL_COUNT]; + sys_map_t sys_map; + mem_range_t modem_ccsrbar; + mem_range_t peb_start; + mem_range_t mhif_start; + mem_range_t hugepg_start; + ipc_channel_us_t *channels[IPC_MAX_CHANNEL_COUNT]; + ipc_instance_t *instance; +} ipc_userspace_t; + +/** Structure specifying enqueue operation (enqueue at LA1224) */ +struct bbdev_ipc_enqueue_op { + /** Status of operation that was performed */ + int32_t status; + /** CRC Status of SD operation that was performed */ + int32_t crc_stat_addr; + /** HARQ Output buffer memory length for Shared Decode. + * Filled by LA12xx. + */ + uint32_t out_len; + /** Reserved (for 8 byte alignment) */ + uint32_t rsvd; +}; + /* This shared memory would be on the host side which have copy of some * of the parameters which are also part of Shared BD ring. Read access * of these parameters from the host side would not be over PCI. @@ -17,4 +183,18 @@ typedef struct host_ipc_params { volatile uint32_t modem_ptr[IPC_MAX_DEPTH]; } __rte_packed host_ipc_params_t; +struct hif_ipc_regs { + uint32_t ipc_mdata_offset; + uint32_t ipc_mdata_size; +} __rte_packed; + +struct gul_hif { + uint32_t ver; + uint32_t hif_ver; + uint32_t status; + volatile uint32_t host_ready; + volatile uint32_t mod_ready; + struct hif_ipc_regs ipc_regs; +} __rte_packed; + #endif From patchwork Tue Apr 13 05:17:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 91195 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id B92BAA0524; Tue, 13 Apr 2021 07:19:06 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BBCF1160B33; Tue, 13 Apr 2021 07:18:46 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-eopbgr130052.outbound.protection.outlook.com [40.107.13.52]) by mails.dpdk.org (Postfix) with ESMTP id C0D6C160B2C for ; Tue, 13 Apr 2021 07:18:45 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X47Rkc4mQC1CISlXjhV2rZEP4ov/lYDkMA2hu6FUIecyJh5Rwdr6ARWu1FyPTCPZoiscnollRcomFEAaPr27kj3c9FvX8EqUCVUxGmM4KKSvHBn2Bvi81btNQzDCGkgeqehfjRwC9iU2gk++rDNldnBe3Z8V+fSnkDfdGZUwaGmvAlWlUKsbm3/2UUW7nPd5vQzEs6vvKdMTFPxVlWNHPdFF4TErU2MUBJRDtEnsrRQPEk2k+7+xG2Gq0EvPw+p4IyoJHTSlvVpugDEL3ggOc7M9l3p5/KXpq8LTn7uP9iLAwaJd5Xxz3KkmlyjtC/4fMBOD7jFWzUnaw+kWi15EcA== 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-SenderADCheck; bh=3Ci6HFluxIz6zQFN8/FiOIaWxXEB78sSpX26gq+jKho=; b=n/pazQEh5+D4bItuUgbfeM6TaJPLAHeoxnCnihvGszACXbDruSwQRlmnTVMwoFcNxzFtA5l+zPTWaTAfT0ByMJgDRTJq6hJU5FxYKrfWNb5GXm8ZhEk0yGTsP1ckbCEcX0vUiTGeialsjqH4CewIbYdPnsL3o6OPPRO5BlAlNgfjMdrHJW7j33ms8H0OD87cm/sFEjDi6TO97BoBTm23Nkzz0drScvpdNM3Yi57hPr8JuY2GJjt7fk2HR5UB02PrwBecsCID6dhldAzHmDKpHSxKjWpJZ1s3wDDuwPC05LN/ej3+uArTpuL01DpvQslIGZgxGBRTxg67BNHchL5hJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3Ci6HFluxIz6zQFN8/FiOIaWxXEB78sSpX26gq+jKho=; b=V4cs/ymW5jJYMZnReSaS0EVZ0wvjPHKxHSFlB6Ugn6/55wFDqsQQu6ZYL/KMFX1gmToAArbMDq2hHziUn2lOnfszuinczc5Zw9TYKB/emaQT5LjhWLpKUzd7wvmDcbSFFn3gVZnnmjuV00cOOHydvLDYSG7IkEesMFdHTa4ck70= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) by AM5PR04MB3250.eurprd04.prod.outlook.com (2603:10a6:206:b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Tue, 13 Apr 2021 05:18:44 +0000 Received: from AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55]) by AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55%7]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 05:18:44 +0000 From: Hemant Agrawal To: dev@dpdk.org, gakhil@marvell.com, nicolas.chautru@intel.com Cc: david.marchand@redhat.com, Hemant Agrawal , Nipun Gupta Date: Tue, 13 Apr 2021 10:47:12 +0530 Message-Id: <20210413051715.26430-6-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210413051715.26430-1-hemant.agrawal@nxp.com> References: <20210410170252.4587-1-hemant.agrawal@nxp.com> <20210413051715.26430-1-hemant.agrawal@nxp.com> X-Originating-IP: [92.120.0.67] X-ClientProxiedBy: HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) To AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dpdk-xeon.ap.freescale.net (92.120.0.67) by HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.6 via Frontend Transport; Tue, 13 Apr 2021 05:18:41 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fa47d7e9-a205-4a5e-c99a-08d8fe3b9bcb X-MS-TrafficTypeDiagnostic: AM5PR04MB3250: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5516; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 12YH7lqoku/mLNWkPxRswIwnopIGVYO6n6vJnNvP4PLdacwFk5RrAgFIIu33Za9+4m77BpS0rvqv6DnTUUd2YafW4wAc8UpDe5Cc7VKZcU8Nm8LvctT7K8XYSeusmfG0pXL/aRDHE/aoACAi5fmDQvti3caIxlU3+TzH3hEqqMGqJn2hBhr7Oa1TtvMQNdvCl/alRMjuZeCv2/pzQG6/6NDFcwNWMpsHA2aNiYPKBq9lc2sGRN2VkXu3B9yqfFqTdjdflpmuOim9ByP/JXP/ZpFAsL9lyO3weLShxDmayIylLmKwB035ogYvF1rjzqTqpiaWfBDr41PxTNmIlzy8PlBGgZ2ZpX1l7uqGZWYsYCuJmUpFXqmhcUUzIKPw7czJjmJ28f5ijuVmFs/Rbfc/wXUzC9x8mNWLvOUAbbJ5sUFZpTzOaAuPiB+GuxL81332jBjqxM9lQe11B+OOr0drgHStNZwIL8XrRS/GHzqcS/VJ6NyPXiSPOk/U8/iZBbjelK4MsDrYror+PouHN2VUhNSERABZFIxWjNWVu0Og1RcQWaHm4lhCp9OctDMkMjaiefvZKYP+sftzPrusSMJmB7sODH0bj6KVlnY971Y3vgzM7D5ulM4vYNH7R7spRhg7Rjpva6iNZ5kAupWKtCcQQZ5RbMuY3yxCa/9sdObUJQs= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB4456.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(39860400002)(366004)(136003)(376002)(83380400001)(16526019)(186003)(26005)(54906003)(38350700002)(38100700002)(316002)(66556008)(66946007)(66476007)(6512007)(2616005)(956004)(478600001)(4326008)(44832011)(36756003)(6486002)(6506007)(5660300002)(2906002)(52116002)(1076003)(86362001)(8936002)(30864003)(6666004)(8676002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: sYQEJGnKLxH3FltrV8QARyOHYLMtrJ0iQwlNNHudGBv5jGnS5mpHc/2YyQC6d5HpxmAYakguTaj8k8URnA7jy8m60+y7qEujJsQq8WRedy9C7d+W7svKfpnvMFVv4iVz/Q1GoDSjr3K3TMikupI/PD4rGnizMagaJgdqyv4Kw5NEApa+QKEWFdldV5Wkh0Py5gYasQYGy4Ms/J4cy+jlwPT/0pLEAUlCv2dJo8bZg6vB8AjMlqVTPQKZXKt3vmkTgSW4Pv6E2S38Ai5+ZsgVWhpWGRh+t4421jhjX378gPJeUmvKFp6/yfXXDK4UJCw+s1qpzooefOPQ5l/av/l04Fe0R7jdpi1RHkco7az/NPqBB2bu+E2VJ9gveeP74mDLFuk3+LUJRHNlc3rItMnmlEINAjr6F7d8hkEVa6o5P3wi0sVZJynlwpuky+GRF2fGMzsiwSEJ0QLmos4jhRRvk2pDgqM9GMyPDM+OMuNKZ48Jtbe7hhzVm2H+V1QgvhiDuCRz2ey/INFQnosF4WUtAPFKZOBN++swvCH8jJyTDBkm1kLg6SgLOoGipBXPuZYxd9w8LqtshXPDytg1azgQCHd/iYxJ9s2ekIVzU3b9ate2rKb+Y5XPbrH9BGPMH2Op8NNXKQa6ug9FEkUfh3ESd/c7xwQL+nl4A+GQc8yRyWGCKwTzoD8lFGgM982X8xz0UI6DKjIakLq2+xKOp8+YYuK6LI20KFJqNVfH6pM6k7WHW29WO1QcU7tNz53m+Bs8dGUDFuTkJ6ASel6yt5NDFYW6FUcrIi3tZXlNyncDNGbFyEAZutjuAFGMZLDOSi5+TLydltVHKWgePAPVepiaZlXqTWnPT8Pf7JPTvGYxJZpGLGKIjxE3xvROKC+v3uooGLiKIFmS6OtNrV6T/1WUaIqx5USDzkbiCso36rLlURDQAHqJNL+DARua0B7CjR74zznB/KVdAxByv50JQ5FxQ8zHthXGVz5BFx6xS2Fr3LS9Dti+D30KrKmLWAy0B/yQeDTRNevKKosWGuEaW1zVG8MeSR7t4YdDwseMmTq7f+gxCs1eOsppGTl1C2EYm0aLluM9ZfL9P/8RRxvNA7wkX48Bb15JecaDy0Fi3pEklvs6NKjoWX9QSHeRt7f+kz1jtiazaIw1PYMK4sDZfpf980RjdFvdEHkI1+lgi0lgHlEvsVogMft2GW/AepL45wSB8qUm+tW8zU1TMMTjZgn6rNj+qb3qD7ARCQ0KmXO2PbXw79DDh69dIH88i4Z4Uraqjh4TgB2sWqpwLYYmqegF/w5arsTlED6TPXKY2VebpoDfzE7a8IByg/VuyHC6g4XD X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fa47d7e9-a205-4a5e-c99a-08d8fe3b9bcb X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4456.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 05:18:44.5443 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: pLp0syav8FwYiJi1LsaxxcfWxgOAbobD6u33RAuyF/l1/RAgiTM7Utgt4mkw+DVnCXD9d9p0OImTjKAkc/g1Uw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3250 Subject: [dpdk-dev] [PATCH v3 5/8] baseband/la12xx: add enqueue and dequeue support 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 Sender: "dev" Add support for enqueue and dequeue the LDPC enc/dec from the modem device. Signed-off-by: Nipun Gupta Signed-off-by: Hemant Agrawal Signed-off-by: Nipun Gupta Signed-off-by: Hemant Agrawal --- drivers/baseband/la12xx/bbdev_la12xx.c | 397 ++++++++++++++++++++- drivers/baseband/la12xx/bbdev_la12xx_ipc.h | 37 ++ 2 files changed, 430 insertions(+), 4 deletions(-) diff --git a/drivers/baseband/la12xx/bbdev_la12xx.c b/drivers/baseband/la12xx/bbdev_la12xx.c index 0a68686205..d1040987b2 100644 --- a/drivers/baseband/la12xx/bbdev_la12xx.c +++ b/drivers/baseband/la12xx/bbdev_la12xx.c @@ -117,6 +117,10 @@ la12xx_queue_release(struct rte_bbdev *dev, uint16_t q_id) ((uint64_t) ((unsigned long) (A) \ - ((uint64_t)ipc_priv->hugepg_start.host_vaddr))) +#define MODEM_P2V(A) \ + ((uint64_t) ((unsigned long) (A) \ + + (unsigned long)(ipc_priv->peb_start.host_vaddr))) + static int ipc_queue_configure(uint32_t channel_id, ipc_t instance, struct bbdev_la12xx_q_priv *q_priv) { @@ -345,6 +349,387 @@ static const struct rte_bbdev_ops pmd_ops = { .queue_release = la12xx_queue_release, .start = la12xx_start }; + +static int +fill_feca_desc_enc(struct bbdev_la12xx_q_priv *q_priv, + struct bbdev_ipc_dequeue_op *bbdev_ipc_op, + struct rte_bbdev_enc_op *bbdev_enc_op, + struct rte_bbdev_op_data *in_op_data) +{ + RTE_SET_USED(q_priv); + RTE_SET_USED(bbdev_ipc_op); + RTE_SET_USED(bbdev_enc_op); + RTE_SET_USED(in_op_data); + + return 0; +} + +static int +fill_feca_desc_dec(struct bbdev_la12xx_q_priv *q_priv, + struct bbdev_ipc_dequeue_op *bbdev_ipc_op, + struct rte_bbdev_dec_op *bbdev_dec_op, + struct rte_bbdev_op_data *out_op_data) +{ + RTE_SET_USED(q_priv); + RTE_SET_USED(bbdev_ipc_op); + RTE_SET_USED(bbdev_dec_op); + RTE_SET_USED(out_op_data); + + return 0; +} + +static inline int +is_bd_ring_full(uint32_t ci, uint32_t ci_flag, + uint32_t pi, uint32_t pi_flag) +{ + if (pi == ci) { + if (pi_flag != ci_flag) + return 1; /* Ring is Full */ + } + return 0; +} + +static inline int +prepare_ldpc_enc_op(struct rte_bbdev_enc_op *bbdev_enc_op, + struct bbdev_ipc_dequeue_op *bbdev_ipc_op, + struct bbdev_la12xx_q_priv *q_priv, + struct rte_bbdev_op_data *in_op_data, + struct rte_bbdev_op_data *out_op_data) +{ + struct rte_bbdev_op_ldpc_enc *ldpc_enc = &bbdev_enc_op->ldpc_enc; + uint32_t total_out_bits; + int ret; + + total_out_bits = (ldpc_enc->tb_params.cab * + ldpc_enc->tb_params.ea) + (ldpc_enc->tb_params.c - + ldpc_enc->tb_params.cab) * ldpc_enc->tb_params.eb; + + ldpc_enc->output.length = (total_out_bits + 7)/8; + + ret = fill_feca_desc_enc(q_priv, bbdev_ipc_op, + bbdev_enc_op, in_op_data); + if (ret) { + BBDEV_LA12XX_PMD_ERR( + "fill_feca_desc_enc failed, ret: %d", ret); + return ret; + } + + rte_pktmbuf_append(out_op_data->data, ldpc_enc->output.length); + + return 0; +} + +static inline int +prepare_ldpc_dec_op(struct rte_bbdev_dec_op *bbdev_dec_op, + struct bbdev_ipc_dequeue_op *bbdev_ipc_op, + struct bbdev_la12xx_q_priv *q_priv, + struct rte_bbdev_op_data *out_op_data) +{ + struct rte_bbdev_op_ldpc_dec *ldpc_dec = &bbdev_dec_op->ldpc_dec; + uint32_t total_out_bits; + uint32_t num_code_blocks = 0; + uint16_t sys_cols; + int ret; + + sys_cols = (ldpc_dec->basegraph == 1) ? 22 : 10; + if (ldpc_dec->tb_params.c == 1) { + total_out_bits = ((sys_cols * ldpc_dec->z_c) - + ldpc_dec->n_filler); + /* 5G-NR protocol uses 16 bit CRC when output packet + * size <= 3824 (bits). Otherwise 24 bit CRC is used. + * Adjust the output bits accordingly + */ + if (total_out_bits - 16 <= 3824) + total_out_bits -= 16; + else + total_out_bits -= 24; + ldpc_dec->hard_output.length = (total_out_bits / 8); + } else { + total_out_bits = (((sys_cols * ldpc_dec->z_c) - + ldpc_dec->n_filler - 24) * + ldpc_dec->tb_params.c); + ldpc_dec->hard_output.length = (total_out_bits / 8) - 3; + } + + num_code_blocks = ldpc_dec->tb_params.c; + + bbdev_ipc_op->num_code_blocks = rte_cpu_to_be_32(num_code_blocks); + + ret = fill_feca_desc_dec(q_priv, bbdev_ipc_op, + bbdev_dec_op, out_op_data); + if (ret) { + BBDEV_LA12XX_PMD_ERR("fill_feca_desc_dec failed, ret: %d", ret); + return ret; + } + + return 0; +} + +static int +enqueue_single_op(struct bbdev_la12xx_q_priv *q_priv, void *bbdev_op) +{ + struct bbdev_la12xx_private *priv = q_priv->bbdev_priv; + ipc_userspace_t *ipc_priv = priv->ipc_priv; + ipc_instance_t *ipc_instance = ipc_priv->instance; + struct bbdev_ipc_dequeue_op *bbdev_ipc_op; + struct rte_bbdev_op_ldpc_enc *ldpc_enc; + struct rte_bbdev_op_ldpc_dec *ldpc_dec; + uint32_t q_id = q_priv->q_id; + uint32_t ci, ci_flag, pi, pi_flag; + ipc_ch_t *ch = &(ipc_instance->ch_list[q_id]); + ipc_br_md_t *md = &(ch->md); + size_t virt; + char *huge_start_addr = + (char *)q_priv->bbdev_priv->ipc_priv->hugepg_start.host_vaddr; + struct rte_bbdev_op_data *in_op_data, *out_op_data; + char *data_ptr; + uint32_t l1_pcie_addr; + int ret; + uint32_t temp_ci; + + temp_ci = q_priv->host_params->ci; + ci = IPC_GET_CI_INDEX(temp_ci); + ci_flag = IPC_GET_CI_FLAG(temp_ci); + + pi = IPC_GET_PI_INDEX(q_priv->host_pi); + pi_flag = IPC_GET_PI_FLAG(q_priv->host_pi); + + BBDEV_LA12XX_PMD_DP_DEBUG( + "before bd_ring_full: pi: %u, ci: %u, pi_flag: %u, ci_flag: %u, ring size: %u", + pi, ci, pi_flag, ci_flag, q_priv->queue_size); + + if (is_bd_ring_full(ci, ci_flag, pi, pi_flag)) { + BBDEV_LA12XX_PMD_DP_DEBUG( + "bd ring full for queue id: %d", q_id); + return IPC_CH_FULL; + } + + virt = MODEM_P2V(q_priv->host_params->modem_ptr[pi]); + bbdev_ipc_op = (struct bbdev_ipc_dequeue_op *)virt; + q_priv->bbdev_op[pi] = bbdev_op; + + switch (q_priv->op_type) { + case RTE_BBDEV_OP_LDPC_ENC: + ldpc_enc = &(((struct rte_bbdev_enc_op *)bbdev_op)->ldpc_enc); + in_op_data = &ldpc_enc->input; + out_op_data = &ldpc_enc->output; + + ret = prepare_ldpc_enc_op(bbdev_op, bbdev_ipc_op, q_priv, + in_op_data, out_op_data); + if (ret) { + BBDEV_LA12XX_PMD_ERR( + "process_ldpc_enc_op failed, ret: %d", ret); + return ret; + } + break; + + case RTE_BBDEV_OP_LDPC_DEC: + ldpc_dec = &(((struct rte_bbdev_dec_op *)bbdev_op)->ldpc_dec); + in_op_data = &ldpc_dec->input; + + out_op_data = &ldpc_dec->hard_output; + + ret = prepare_ldpc_dec_op(bbdev_op, bbdev_ipc_op, + q_priv, out_op_data); + if (ret) { + BBDEV_LA12XX_PMD_ERR( + "process_ldpc_dec_op failed, ret: %d", ret); + return ret; + } + break; + + default: + BBDEV_LA12XX_PMD_ERR("unsupported bbdev_ipc op type"); + return -1; + } + + if (in_op_data->data) { + data_ptr = rte_pktmbuf_mtod(in_op_data->data, char *); + l1_pcie_addr = (uint32_t)GUL_USER_HUGE_PAGE_ADDR + + data_ptr - huge_start_addr; + bbdev_ipc_op->in_addr = l1_pcie_addr; + bbdev_ipc_op->in_len = in_op_data->length; + } + + if (out_op_data->data) { + data_ptr = rte_pktmbuf_mtod(out_op_data->data, char *); + l1_pcie_addr = (uint32_t)GUL_USER_HUGE_PAGE_ADDR + + data_ptr - huge_start_addr; + bbdev_ipc_op->out_addr = rte_cpu_to_be_32(l1_pcie_addr); + bbdev_ipc_op->out_len = rte_cpu_to_be_32(out_op_data->length); + } + + /* Move Producer Index forward */ + pi++; + /* Flip the PI flag, if wrapping */ + if (unlikely(q_priv->queue_size == pi)) { + pi = 0; + pi_flag = pi_flag ? 0 : 1; + } + + if (pi_flag) + IPC_SET_PI_FLAG(pi); + else + IPC_RESET_PI_FLAG(pi); + /* Wait for Data Copy & pi_flag update to complete before updating pi */ + rte_mb(); + /* now update pi */ + md->pi = rte_cpu_to_be_32(pi); + q_priv->host_pi = pi; + + BBDEV_LA12XX_PMD_DP_DEBUG( + "enter: pi: %u, ci: %u, pi_flag: %u, ci_flag: %u, ring size: %u", + pi, ci, pi_flag, ci_flag, q_priv->queue_size); + + return 0; +} + +/* Enqueue decode burst */ +static uint16_t +enqueue_dec_ops(struct rte_bbdev_queue_data *q_data, + struct rte_bbdev_dec_op **ops, uint16_t nb_ops) +{ + struct bbdev_la12xx_q_priv *q_priv = q_data->queue_private; + int nb_enqueued, ret; + + for (nb_enqueued = 0; nb_enqueued < nb_ops; nb_enqueued++) { + ret = enqueue_single_op(q_priv, ops[nb_enqueued]); + if (ret) + break; + } + + q_data->queue_stats.enqueue_err_count += nb_ops - nb_enqueued; + q_data->queue_stats.enqueued_count += nb_enqueued; + + return nb_enqueued; +} + +/* Enqueue encode burst */ +static uint16_t +enqueue_enc_ops(struct rte_bbdev_queue_data *q_data, + struct rte_bbdev_enc_op **ops, uint16_t nb_ops) +{ + struct bbdev_la12xx_q_priv *q_priv = q_data->queue_private; + int nb_enqueued, ret; + + for (nb_enqueued = 0; nb_enqueued < nb_ops; nb_enqueued++) { + ret = enqueue_single_op(q_priv, ops[nb_enqueued]); + if (ret) + break; + } + + q_data->queue_stats.enqueue_err_count += nb_ops - nb_enqueued; + q_data->queue_stats.enqueued_count += nb_enqueued; + + return nb_enqueued; +} + +static inline int +is_bd_ring_empty(uint32_t ci, uint32_t ci_flag, + uint32_t pi, uint32_t pi_flag) +{ + if (ci == pi) { + if (ci_flag == pi_flag) + return 1; /* No more Buffer */ + } + return 0; +} + +/* Dequeue encode burst */ +static void * +dequeue_single_op(struct bbdev_la12xx_q_priv *q_priv, void *dst) +{ + struct bbdev_la12xx_private *priv = q_priv->bbdev_priv; + ipc_userspace_t *ipc_priv = priv->ipc_priv; + uint32_t q_id = q_priv->q_id + HOST_RX_QUEUEID_OFFSET; + ipc_instance_t *ipc_instance = ipc_priv->instance; + ipc_ch_t *ch = &(ipc_instance->ch_list[q_id]); + uint32_t ci, ci_flag, pi, pi_flag; + ipc_br_md_t *md; + void *op; + uint32_t temp_pi; + + md = &(ch->md); + ci = IPC_GET_CI_INDEX(q_priv->host_ci); + ci_flag = IPC_GET_CI_FLAG(q_priv->host_ci); + + temp_pi = q_priv->host_params->pi; + pi = IPC_GET_PI_INDEX(temp_pi); + pi_flag = IPC_GET_PI_FLAG(temp_pi); + + if (is_bd_ring_empty(ci, ci_flag, pi, pi_flag)) + return NULL; + + BBDEV_LA12XX_PMD_DP_DEBUG( + "pi: %u, ci: %u, pi_flag: %u, ci_flag: %u, ring size: %u", + pi, ci, pi_flag, ci_flag, q_priv->queue_size); + + op = q_priv->bbdev_op[ci]; + + rte_memcpy(dst, q_priv->msg_ch_vaddr[ci], + sizeof(struct bbdev_ipc_enqueue_op)); + + /* Move Consumer Index forward */ + ci++; + /* Flip the CI flag, if wrapping */ + if (q_priv->queue_size == ci) { + ci = 0; + ci_flag = ci_flag ? 0 : 1; + } + if (ci_flag) + IPC_SET_CI_FLAG(ci); + else + IPC_RESET_CI_FLAG(ci); + md->ci = rte_cpu_to_be_32(ci); + q_priv->host_ci = ci; + + BBDEV_LA12XX_PMD_DP_DEBUG( + "exit: pi: %u, ci: %u, pi_flag: %u, ci_flag: %u, ring size: %u", + pi, ci, pi_flag, ci_flag, q_priv->queue_size); + + return op; +} + +/* Dequeue decode burst */ +static uint16_t +dequeue_dec_ops(struct rte_bbdev_queue_data *q_data, + struct rte_bbdev_dec_op **ops, uint16_t nb_ops) +{ + struct bbdev_la12xx_q_priv *q_priv = q_data->queue_private; + struct bbdev_ipc_enqueue_op bbdev_ipc_op; + int nb_dequeued; + + for (nb_dequeued = 0; nb_dequeued < nb_ops; nb_dequeued++) { + ops[nb_dequeued] = dequeue_single_op(q_priv, &bbdev_ipc_op); + if (!ops[nb_dequeued]) + break; + ops[nb_dequeued]->status = bbdev_ipc_op.status; + } + q_data->queue_stats.dequeued_count += nb_dequeued; + + return nb_dequeued; +} + +/* Dequeue encode burst */ +static uint16_t +dequeue_enc_ops(struct rte_bbdev_queue_data *q_data, + struct rte_bbdev_enc_op **ops, uint16_t nb_ops) +{ + struct bbdev_la12xx_q_priv *q_priv = q_data->queue_private; + struct bbdev_ipc_enqueue_op bbdev_ipc_op; + int nb_enqueued; + + for (nb_enqueued = 0; nb_enqueued < nb_ops; nb_enqueued++) { + ops[nb_enqueued] = dequeue_single_op(q_priv, &bbdev_ipc_op); + if (!ops[nb_enqueued]) + break; + ops[nb_enqueued]->status = bbdev_ipc_op.status; + } + q_data->queue_stats.enqueued_count += nb_enqueued; + + return nb_enqueued; +} + static struct hugepage_info * get_hugepage_info(void) { @@ -720,10 +1105,14 @@ la12xx_bbdev_create(struct rte_vdev_device *vdev, bbdev->intr_handle = NULL; /* register rx/tx burst functions for data path */ - bbdev->dequeue_enc_ops = NULL; - bbdev->dequeue_dec_ops = NULL; - bbdev->enqueue_enc_ops = NULL; - bbdev->enqueue_dec_ops = NULL; + bbdev->dequeue_enc_ops = dequeue_enc_ops; + bbdev->dequeue_dec_ops = dequeue_dec_ops; + bbdev->enqueue_enc_ops = enqueue_enc_ops; + bbdev->enqueue_dec_ops = enqueue_dec_ops; + bbdev->dequeue_ldpc_enc_ops = dequeue_enc_ops; + bbdev->dequeue_ldpc_dec_ops = dequeue_dec_ops; + bbdev->enqueue_ldpc_enc_ops = enqueue_enc_ops; + bbdev->enqueue_ldpc_dec_ops = enqueue_dec_ops; return 0; } diff --git a/drivers/baseband/la12xx/bbdev_la12xx_ipc.h b/drivers/baseband/la12xx/bbdev_la12xx_ipc.h index 9d5789f726..4e181e9254 100644 --- a/drivers/baseband/la12xx/bbdev_la12xx_ipc.h +++ b/drivers/baseband/la12xx/bbdev_la12xx_ipc.h @@ -76,6 +76,25 @@ typedef struct { _IOWR(GUL_IPC_MAGIC, 5, struct ipc_msg *) #define IOCTL_GUL_IPC_CHANNEL_RAISE_INTERRUPT _IOW(GUL_IPC_MAGIC, 6, int *) +#define GUL_USER_HUGE_PAGE_OFFSET (0) +#define GUL_PCI1_ADDR_BASE (0x00000000ULL) + +#define GUL_USER_HUGE_PAGE_ADDR (GUL_PCI1_ADDR_BASE + GUL_USER_HUGE_PAGE_OFFSET) + +/* IPC PI/CI index & flag manipulation helpers */ +#define IPC_PI_CI_FLAG_MASK 0x80000000 /* (1<<31) */ +#define IPC_PI_CI_INDEX_MASK 0x7FFFFFFF /* ~(1<<31) */ + +#define IPC_SET_PI_FLAG(x) (x |= IPC_PI_CI_FLAG_MASK) +#define IPC_RESET_PI_FLAG(x) (x &= IPC_PI_CI_INDEX_MASK) +#define IPC_GET_PI_FLAG(x) (x >> 31) +#define IPC_GET_PI_INDEX(x) (x & IPC_PI_CI_INDEX_MASK) + +#define IPC_SET_CI_FLAG(x) (x |= IPC_PI_CI_FLAG_MASK) +#define IPC_RESET_CI_FLAG(x) (x &= IPC_PI_CI_INDEX_MASK) +#define IPC_GET_CI_FLAG(x) (x >> 31) +#define IPC_GET_CI_INDEX(x) (x & IPC_PI_CI_INDEX_MASK) + /** buffer ring common metadata */ typedef struct ipc_bd_ring_md { volatile uint32_t pi; /**< Producer index and flag (MSB) @@ -173,6 +192,24 @@ struct bbdev_ipc_enqueue_op { uint32_t rsvd; }; +/** Structure specifying dequeue operation (dequeue at LA1224) */ +struct bbdev_ipc_dequeue_op { + /** Input buffer memory address */ + uint32_t in_addr; + /** Input buffer memory length */ + uint32_t in_len; + /** Output buffer memory address */ + uint32_t out_addr; + /** Output buffer memory length */ + uint32_t out_len; + /* Number of code blocks. Only set when HARQ is used */ + uint32_t num_code_blocks; + /** Dequeue Operation flags */ + uint32_t op_flags; + /** Shared metadata between L1 and L2 */ + uint32_t shared_metadata; +}; + /* This shared memory would be on the host side which have copy of some * of the parameters which are also part of Shared BD ring. Read access * of these parameters from the host side would not be over PCI. From patchwork Tue Apr 13 05:17:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 91196 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 7329CA0524; Tue, 13 Apr 2021 07:19:13 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 084BA160B39; Tue, 13 Apr 2021 07:18:50 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-eopbgr130055.outbound.protection.outlook.com [40.107.13.55]) by mails.dpdk.org (Postfix) with ESMTP id BE4A4160B2F for ; Tue, 13 Apr 2021 07:18:48 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Qaz0XR5jW66O3cN6JfqLHrYZdZi7iO2rjTjla2U2dmZ2n5aiCuI4jiiavMoZ50eQtIMve15P6enFyzSfZ6q4mKFsBHMdozwFNyuqXlull13CYY0EcP8/36CukdZx2cXmBDmdG79ReqxWmljfQhNLoMjSz2G7AhZPq5HWcFm//DVyFynRSJrXy9FsAGRltw/klDNXIfX5JOtA+arMlmpLqOb3A1J42yQsgeP6LowscVVIPMtSiQFT3wuDA7mj1pq+kFWRcDYqSgLtXmJKXLQSyS411rOMF3qLk6P0V7tjAYdS5qE1pqqjDC5FoX0w3JbdNvuXfTKcNTid5v0FOKdalQ== 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-SenderADCheck; bh=e2NdDSfc2Eo8QRAMh0pJKTz1RyqHaOJHv5XZoHnf/P8=; b=eTM4UtFu1/fvvvhV6Krgiv7dwT0erNkCY5jGGInKoOm9XMrlx4bhWgqNoBAsldfh9IrUs8ustnyvAUpCY7SV4SYpf0oM6mr1iQfQ7Ne8F8hnTa/iTh/wJ0F2Z7aNnZQseHKdnNuhu/j/nJr9Ejel/4L7eHUtQE53krlXuu3TzNdsyVmVR2KP7YHim35TITdA8xSGAJlcBusGMLqXcas0OsIzPz7yXHCpXDJe8z1vliRh6yBWj1bqyfNFhFcesL7zqGlcTRDrYSZIb6EdfvRcUwnrBJ57jAqZ3CM7EYDZjMxRnkbALDDiXzcCMRcFy5TF6HoMCkvgxtwgtuOEWRBSug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e2NdDSfc2Eo8QRAMh0pJKTz1RyqHaOJHv5XZoHnf/P8=; b=nPJtXAmOv2sMrHJVr8VhJxaZOwpDZ6NEAk2xy8KB1LNrg4/PYdA1UtXM5Y+RocR2kqVWZLk45CE72SjK7cdImoeNYv5kU7lhnK1UDkiB+kXpi6/aN59IoENWtWIS56ZkU8q4ek8CICvyi0o9sbvx4GIR9qk8/3AUwpZI2TuZw6s= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) by AM5PR04MB3250.eurprd04.prod.outlook.com (2603:10a6:206:b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Tue, 13 Apr 2021 05:18:47 +0000 Received: from AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55]) by AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55%7]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 05:18:47 +0000 From: Hemant Agrawal To: dev@dpdk.org, gakhil@marvell.com, nicolas.chautru@intel.com Cc: david.marchand@redhat.com, Hemant Agrawal , Nipun Gupta Date: Tue, 13 Apr 2021 10:47:13 +0530 Message-Id: <20210413051715.26430-7-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210413051715.26430-1-hemant.agrawal@nxp.com> References: <20210410170252.4587-1-hemant.agrawal@nxp.com> <20210413051715.26430-1-hemant.agrawal@nxp.com> X-Originating-IP: [92.120.0.67] X-ClientProxiedBy: HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) To AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dpdk-xeon.ap.freescale.net (92.120.0.67) by HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.6 via Frontend Transport; Tue, 13 Apr 2021 05:18:45 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e5f44b02-dcc7-424d-a3da-08d8fe3b9da1 X-MS-TrafficTypeDiagnostic: AM5PR04MB3250: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4125; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kZGZRtDwe9RLcq78UeLROd2JWH/iRPKH1jxBotk3iNFMzPiA4ogwEi2Asb7gfTlvwIA0xL9eQYF/YYtvXC8E+/3J8NFRUxubo1VxLxZph0ocZhooXp3/FUaYvnOJluZHf/eln1gnmAue75VH813T5eP+KvhOZ9G3UEiajym5n/Dj60s1M1tx0ErPZTTiQiKnhS9hF+qlIKaSbmKTN99JG090+EIszHCuRT8PPHX7LZuIrzBaEv+wd37RsKOY6QsQZcEaiduXx1sX4qVTPtkUbMoQdv7c+9pLA9C9CeOQi65x4vIXameBfdG0EoCsQPLoMlaBOOd2f3v3aT8Mmt/YfaLgaz76vq3zHz50NzEcvBSTehgRoluwnMfVHgZIHvvZyw0mLaS6IjAhZZWlz04v5SmgCMYkIy+b9kqtcD9jZPylgibDqZSqb/kWLtYxbOLzNRx9nwjX9AecLNtx8CDS/HdfIXqm76Wt5XWWcMXPGRFhLkMKAW7Apy32ucuaKZw9aX13bzTOnzqWYBkGsCZ16V4DwGraQizqt2dT6PxLG5lR0G4xlWxseXRn+aHXMoFVgUElVOYDmuAtjOMnjcEEegFbfOH3H9/ORbOQ+xS7+jgK4qNNYp+lGvT2XTWtRZcAaLlmkEcYAKE/7HnksHR8NTtENIClvYY4jYV60QFZ+RkeVrH70kncHVFzn9gO0IE5aaUE3+eNPvZJ0HpbrYtENrzIvlrRiY2pVqYtkfL0u8W4tMPhTdtnq+GunYA6Nl5L X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB4456.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(39860400002)(366004)(136003)(376002)(83380400001)(16526019)(186003)(26005)(54906003)(38350700002)(38100700002)(316002)(66556008)(66946007)(66476007)(6512007)(2616005)(956004)(478600001)(4326008)(44832011)(36756003)(6486002)(6506007)(5660300002)(2906002)(52116002)(1076003)(86362001)(8936002)(6666004)(8676002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: YQ4hBq8JUWSVSY8rnq110zZkqzibpmFOpyGg+G4gIRJwN0BZMW46SP4lfUmG8FTIWtjJS2xJh9/31ZP2vxAcgej84kTAwcBjDu4PAuolePxl6ckHZ2TNdD+/bXEsXHZCSfBThZMvL95XDa8U8hk1gviXxPTd5ZDpS+pPVHCwAeM+sGUA4jRWpfYxxZ3Xfw3pWa6YfG2Fk8tVenFhp6UXMThat6ocPPQkQcf0qpbU/zFlUljcbzFkNdPfO+fVKSQgAMcDdbV8NZmK22ylbE+5JhDOm7vKdQkAzTnffc0kiVJRvutd+tbFIzlMsGVtgWqg08OKyazJNJ5izeIibhL7H5t07GtrUDqQO5m+c9ajUyZN2cC3Xl/RqE2OJGrTlqxNCBb0v0BQLERzP4vuos025cvC1LyiwUwCPckyTdynbb8pN3oSigBBTmnoFPVJHT0lfbo+W3DQHcTiKhSG2/f2zblanaPq3tYPTktCbwaWaInn2K1OWr+m9ww6BBAu37Jl9E7tDkXecE0x/b2MVjb/KqiN1wzZoJnm2ebUhMmMp4SqfzOC/93LcSv0xCmE15BuFUUzFgEBN5oVO5Ie0Rl5PkSthbyq0/iVpTauRGiGlJqMy56OI0NWRmM1Lo5zGG392LSNB6ZeLbRruHjcjUxpLKtCMI0+TrxjnqjEolIB1kfYkgT2TwIIe0ECF1o/+J9ohKJZBfKdM3Afvr2gtUM0+cZp1X8X5kbjIBatEYeZz2VVYblbdmvgdjMco/kYagNjy/KMtmuuhuQ2Ul9S5ZLNhfW2TMF/mH492oPMLmfeR0PZ5NlJ0oa7tCKnxoZr8YXeOE0pGiQtORRYCtzRQg0JXsQWk155CzZa5GgmH53iv3d7uVuQ7Q2Cb2JpDVifJ+IactTf3wDkNz08y5DJ32Ta6qeu/QLGKJdeBH17BHzuFuZAhZq31VDfOovQlCjQnmCSsUFef3YpTLR+cCmBTwC913X8jgv8SdMHsMe8t+zpHrdlnR2qLtGrxMdjxEunNAv5ZNV1pBs9bs4B5QDshjSyLOWcvaNdp03sMDsfhoe0azg/woFITETd6/8P3oyvYmHQsaMdKdP4mQi59VZ2SHPOdcGzfIdhvTB25TPlz3CB+VWBLqSuYlp8Kf1RSmEl5Tg/fMpWb+sKGWjrkELhSosGCooB9EliJlnbJQWQLxPtw8l8LQodP5dI4d7Z1rb42V+jIk16YxRZy8osqD5VSI8qpiF27MgWwZ425wfN9NWtuoi947fDeqbJbGBtWDkiGGpvyFphTQgin7KsXxUeDHiVPlbHJdWbm3U29wLZ0JVWj+Km+KCn/RsGMHZjGNQ7uHbI X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e5f44b02-dcc7-424d-a3da-08d8fe3b9da1 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4456.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 05:18:47.6525 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: H5vsnQYEmWfxU0Zu/zNHFn8FirjwMUqLzW5hrNG1MSiI41nA6B1Z0KK5wKpLEsNXvo6KtbEjEwnvY5eM7bpwXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3250 Subject: [dpdk-dev] [PATCH v3 6/8] baseband/la12xx: add documentation support 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 Sender: "dev" This patch add documentation for LA12xx PMD. Signed-off-by: Nipun Gupta Signed-off-by: Hemant Agrawal --- MAINTAINERS | 9 ++ doc/guides/bbdevs/features/la12xx.ini | 14 +++ doc/guides/bbdevs/index.rst | 1 + doc/guides/bbdevs/la12xx.rst | 139 +++++++++++++++++++++++++ doc/guides/rel_notes/release_21_05.rst | 5 + 5 files changed, 168 insertions(+) create mode 100644 doc/guides/bbdevs/features/la12xx.ini create mode 100644 doc/guides/bbdevs/la12xx.rst diff --git a/MAINTAINERS b/MAINTAINERS index e746ef1d32..24081fceb3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1289,6 +1289,15 @@ F: doc/guides/rawdevs/ntb.rst F: examples/ntb/ F: doc/guides/sample_app_ug/ntb.rst +Baseband Drivers +------------------- + +NXP LA12xx +M: Hemant Agrawal +M: Nipun Gupta +F: drivers/baseband/la12xx/ +F: doc/guides/bbdevs/la12xx.rst +F: doc/guides/bbdevs/features/la12xx.ini Packet processing ----------------- diff --git a/doc/guides/bbdevs/features/la12xx.ini b/doc/guides/bbdevs/features/la12xx.ini new file mode 100644 index 0000000000..979d9dd224 --- /dev/null +++ b/doc/guides/bbdevs/features/la12xx.ini @@ -0,0 +1,14 @@ +; +; Supported features of the 'la12xx' bbdev driver. +; +; Refer to default.ini for the full list of available PMD features. +; +[Features] +Turbo Decoder (4G) = N +Turbo Encoder (4G) = N +LDPC Decoder (5G) = Y +LDPC Encoder (5G) = Y +LLR/HARQ Compression = N +External DDR Access = Y +HW Accelerated = Y +BBDEV API = Y diff --git a/doc/guides/bbdevs/index.rst b/doc/guides/bbdevs/index.rst index 4445cbd1b0..cedd706fa6 100644 --- a/doc/guides/bbdevs/index.rst +++ b/doc/guides/bbdevs/index.rst @@ -14,3 +14,4 @@ Baseband Device Drivers fpga_lte_fec fpga_5gnr_fec acc100 + la12xx diff --git a/doc/guides/bbdevs/la12xx.rst b/doc/guides/bbdevs/la12xx.rst new file mode 100644 index 0000000000..1cadd6f337 --- /dev/null +++ b/doc/guides/bbdevs/la12xx.rst @@ -0,0 +1,139 @@ +.. SPDX-License-Identifier: BSD-3-Clause + Copyright 2021 NXP + +NXP LA12xx Poll Mode Driver +======================================= + +The BBDEV LA12xx poll mode driver (PMD) supports an implementation for +offloading High Phy processing functions like LDPC Encode / Decode 5GNR wireless +acceleration function, using PCI based LA12xx Software defined radio. + +More information can be found at `NXP Official Website +`_. + +Features +-------- + +LA12xx PMD supports the following features: + +- LDPC Encode in the DL +- LDPC Decode in the UL +- Maximum of 8 UL queues +- Maximum of 8 DL queues +- PCIe Gen-3 x8 Interface +- MSI-X + +LA12xx PMD supports the following BBDEV capabilities: + +* For the LDPC encode operation: + - ``RTE_BBDEV_LDPC_CRC_24B_ATTACH`` : set to attach CRC24B to CB(s) + - ``RTE_BBDEV_LDPC_RATE_MATCH`` : if set then do not do Rate Match bypass + +* For the LDPC decode operation: + - ``RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK`` : check CRC24B from CB(s) + - ``RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP`` : drops CRC24B bits appended while decoding + - ``RTE_BBDEV_LDPC_DEC_SCATTER_GATHER`` : supports scatter-gather for input/output data + +Installation +------------ + +Section 3 of the DPDK manual provides instructions on installing and compiling DPDK. + +DPDK requires hugepages to be configured as detailed in section 2 of the DPDK manual. + +Initialization +-------------- + +The device can be listed on the host console with: + + +Use the following lspci command to get the multiple LA12xx processor ids. The +device ID of the LA12xx baseband processor is "1c30". + +.. code-block:: console + + sudo lspci -nn + +... +0001:01:00.0 Power PC [0b20]: Freescale Semiconductor Inc Device [1957:1c30] ( +rev 10) +... +0002:01:00.0 Power PC [0b20]: Freescale Semiconductor Inc Device [1957:1c30] ( +rev 10) + + +Prerequisites +------------- + +Currently supported by DPDK: + +- NXP LA1224 BSP **1.0+**. +- NXP LA1224 PCIe Modem card connected to ARM host. + +- Follow the DPDK :ref:`Getting Started Guide for Linux ` to setup the basic DPDK environment. + +* Use dev arg option ``modem=0`` to identify the modem instance for a given + device. This is required only if more than 1 modem cards are attached to host. + this is optional and the default value is 0. + e.g. ``--vdev=baseband_la12xx,modem=0`` + +* Use dev arg option ``max_nb_queues=x`` to specify the maximum number of queues + to be used for communication with offload device i.e. modem. default is 16. + e.g. ``--vdev=baseband_la12xx,max_nb_queues=4`` + +Enabling logs +------------- + +For enabling logs, use the following EAL parameter: + +.. code-block:: console + + ./your_bbdev_application --log-level=la12xx: + +Using ``bb.la12xx`` as log matching criteria, all Baseband PMD logs can be +enabled which are lower than logging ``level``. + + +Test Application +---------------- + +BBDEV provides a test application, ``test-bbdev.py`` and range of test data for testing +the functionality of LA12xx for FEC encode and decode, depending on the device +capabilities. The test application is located under app->test-bbdev folder and has the +following options: + +.. code-block:: console + + "-p", "--testapp-path": specifies path to the bbdev test app. + "-e", "--eal-params" : EAL arguments which are passed to the test app. + "-t", "--timeout" : Timeout in seconds (default=300). + "-c", "--test-cases" : Defines test cases to run. Run all if not specified. + "-v", "--test-vector" : Test vector path (default=dpdk_path+/app/test-bbdev/test_vectors/bbdev_null.data). + "-n", "--num-ops" : Number of operations to process on device (default=32). + "-b", "--burst-size" : Operations enqueue/dequeue burst size (default=32). + "-s", "--snr" : SNR in dB used when generating LLRs for bler tests. + "-s", "--iter_max" : Number of iterations for LDPC decoder. + "-l", "--num-lcores" : Number of lcores to run (default=16). + "-i", "--init-device" : Initialise PF device with default values. + + +To execute the test application tool using simple decode or encode data, +type one of the following: + +.. code-block:: console + + ./test-bbdev.py -e="--vdev=baseband_la12xx,socket_id=0,max_nb_queues=8" -c validation -n 64 -b 1 -v ./ldpc_dec_default.data + ./test-bbdev.py -e="--vdev=baseband_la12xx,socket_id=0,max_nb_queues=8" -c validation -n 64 -b 1 -v ./ldpc_enc_default.data + +The test application ``test-bbdev.py``, supports the ability to configure the PF device with +a default set of values, if the "-i" or "- -init-device" option is included. The default values +are defined in test_bbdev_perf.c. + + +Test Vectors +~~~~~~~~~~~~ + +In addition to the simple LDPC decoder and LDPC encoder tests, bbdev also provides +a range of additional tests under the test_vectors folder, which may be useful. The results +of these tests will depend on the LA12xx FEC capabilities which may cause some +testcases to be skipped, but no failure should be reported. diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst index 6f5858c8f6..61797e2a43 100644 --- a/doc/guides/rel_notes/release_21_05.rst +++ b/doc/guides/rel_notes/release_21_05.rst @@ -130,6 +130,11 @@ New Features * Added command to display Rx queue used descriptor count. ``show port (port_id) rxq (queue_id) desc used count`` +* **Added NXP LA12xx baseband PMD.** + + Added a new baseband PMD driver for NXP LA12xx Software defined radio. + + See the :doc:`../bbdevs/la12xx` for more details. Removed Items ------------- From patchwork Tue Apr 13 05:17:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 91197 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 392DCA0524; Tue, 13 Apr 2021 07:19:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CBB03160B3C; Tue, 13 Apr 2021 07:18:52 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-eopbgr130048.outbound.protection.outlook.com [40.107.13.48]) by mails.dpdk.org (Postfix) with ESMTP id 60C84160B37 for ; Tue, 13 Apr 2021 07:18:51 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jTg98gWePPyESnPBtoO8wPwyn3NUR7Rm7LI52Pm0E26svnH+gScswcHiKBVHt8J4rd/wzRf3P0oQ06VCYqRiFyn2icBFCtWQ2z2Y5LDAzvIhz+KyGV2TLdM5LC1SNfEkAxPvX/pTtnJZyMRPjlkUu6Qgt2khpSOfDS0453nbFq9b5i8nCtZ3g/OqdLKGQkHzS2We3/kmIXzCZ0/rjBoNprFsBHZjVzqx4cS2wxxRv6cEFvRoHD67Z3T9qqSoyrTGh6LsHkAT6XvC8eTNY+EMnxR0jckHgOV2ZSrLqADZt3GyvDy8JE5HCW2LRq93nYgiy4la6NxXoIuj0UIj86V1QA== 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-SenderADCheck; bh=8PsOm6qyX0mhQDqlWsJtLQw4CJf9wv0P85wIqkJyXwo=; b=QJ4gMW4IWVprUa0vlC7SR8PyYpl+Pj8Am828dFMUys00+1rwGE/txxi7/6DrP6gU4VNZ/Jb+dueG48qr4zCLArJEgGwOnpu04KimeBMeWOkuMcIuoNMukQXvchOH5SE9viKQV9j83zgrF/8rWg/IeL5H0bWckBEllQWImrnrxjSXy24ssSVLaw/XA6qWcxYoWpOBVbOjqhUSArNuHNb8dwDjtTajqCqFuSU/hVQe77ZMatwqNF3KLr5+Ai/g0uDrkKHon8uWlXvGR2WW6ILQMhnZZciSY+JZgECaCO1eEDuhNDr92Qcc8pRvFDZbfXPE0O90WzbrUdR501kTI0DNlQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8PsOm6qyX0mhQDqlWsJtLQw4CJf9wv0P85wIqkJyXwo=; b=Rd3zddvzMzopnh0zzd1nc4rgzHantyPLvUgJceayHygcypmguT1kSFTXp+yjtT2+6QRYGROnrKKEew8j5w67uZgeALL7/kY5IbpuLDhA7bw8sw31rSyrqbofB4rJ+UsrHBCgBawJLAdagMAFa/dFt/9+Pu9eaczE9uAPdAddhig= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) by AM5PR04MB3250.eurprd04.prod.outlook.com (2603:10a6:206:b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Tue, 13 Apr 2021 05:18:50 +0000 Received: from AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55]) by AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55%7]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 05:18:50 +0000 From: Hemant Agrawal To: dev@dpdk.org, gakhil@marvell.com, nicolas.chautru@intel.com Cc: david.marchand@redhat.com, Nipun Gupta Date: Tue, 13 Apr 2021 10:47:14 +0530 Message-Id: <20210413051715.26430-8-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210413051715.26430-1-hemant.agrawal@nxp.com> References: <20210410170252.4587-1-hemant.agrawal@nxp.com> <20210413051715.26430-1-hemant.agrawal@nxp.com> X-Originating-IP: [92.120.0.67] X-ClientProxiedBy: HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) To AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dpdk-xeon.ap.freescale.net (92.120.0.67) by HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.6 via Frontend Transport; Tue, 13 Apr 2021 05:18:48 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 85e6f1e5-a2af-4651-0c32-08d8fe3b9f4a X-MS-TrafficTypeDiagnostic: AM5PR04MB3250: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6790; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: O2fG/yCFc8F6VJTlN7YYeOYYv7RCgCZ3WzMzS0ZG7kXd1ws8yK8lTGuqA5sIgv8BXQN4GZCGaZhaa26yfcGpbCNbLVNO0T5iJ0sII9CCsbGKrlsZnESQcM0w83Siro4kWAKb+LQ/yut7+yeHlLCEIw2/0gv9n/Ys5uKRkHU4d+5C+Q1nd1MkCNWdkDU+of7tOFiX3ecOEsUvvyfTTWfCtabOtSmKzuW7WPM4+ZMFzbY7y/HzCOiclszKz417utw1+0W+r+bbBha0VKLqC/IfoRky7buCBFO6cPS2/bo7VmMMTnPOM9k9+Yp/CfplLIYbi2xI6CXU+KfUSL8wYEc/lfsHnEl1BLZbFyiGN4SxczKnpB9HMAfcXt0wg+9eVeLAUZAZBIPJAZ+A6/BSCyrTiEas285QQcW89luYtTynvkiYdiMXHD7JtdQP4PuVFpsAGiSKa0oTdHrSBt8Ni8XRUcnvIL35Rge+uag9GcAfqR43qi1JLJMI0Sr/63ZWdBSAIAKU5WlPYJv8bDTQwMwI/mGzdJ6Wqgf+aCA+zKf3PJgdLxoBu6cJHFe5YjtUCjnxu9tWqUTrbP3EcEvMCLcyhh4c+APKznIlDF+6LQsDD5SvBtfA/JCJ39jS71j9F0IT4xv0RH6SeP4Rn/Dsmw+CNdx1WSA+O502dWVnUsR58AY= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB4456.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(39860400002)(366004)(136003)(376002)(83380400001)(16526019)(186003)(26005)(38350700002)(38100700002)(316002)(66556008)(66946007)(66476007)(6512007)(2616005)(956004)(478600001)(4326008)(44832011)(36756003)(6486002)(6506007)(5660300002)(2906002)(52116002)(1076003)(86362001)(8936002)(6666004)(8676002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: NW3YBM20lvsKFbUmoY1QYPzmMKsWeq5QEg4+VbiDoTiASid3mHXT/d886Y+Cus7lPJXyikYCTP3LFbvpwuy2cQylsqjoTU1cseYhSRmcwfD731CY6sIBwwzkDGwOJ5eeJ26sEAbcJVvv5QeaEiivHjYUzhc9JyIhdQ/ljPd6+nRFwFP37cR3B2pDeJ+HxTRu0Sa3M7fWL2gPht+167QWTmvHMs0pzS26/R++oJ9jq/u0KujSeU4w00rQQJqHqA0aoOwDUvR5+xvX6WDxG3T7z1+HW98DrC3iU/5NKAL+KiQMc9xUFRBeKn4psR0RX+eoHRa7wdrqFfuboVFq1LxTx9+xU8dPySZYji9eIBZw6M3e3PP6/W01W9IzHabkYPO+RsLStxZW4jCYKb92P92v66UFSqao+wxyN5jesIdquF96NmIBidw1s/EtL3lBDFhXHEIXO2d/gFo+cNCHi0vaPQHrr635iNtFjFpkD/2QAvUiyyr9unrUTex4Nb6V3dI4KOw8s9SjpcIyrHO0weMNwdNrjyYxKEFiu37+OFy6U9igQisMfhN1Qno85gHvv9I4oJGS7dPAOR41EDzCE3dP+5NJlmDUj0ePJ5kPc7eoQAh8nGIIpWgsA6z9mA3m8xQK3NQMFc7SGKKAF5N753feBmV3aGxY8mYQfBMISePdmHZ1pVlPjMxFRhcawDkP/jKhohqayDa+f+2FSiofKkGpu/9zKkBUh76k/HWTDeFlhpuZuWoC0E/lVrR9RmXhgcucvFqTJhQTZ3WVfCwOl4sKr/qb4ofDbU4YOFOAIGfxe+cZfHw0NrSy4fvOtoj3L0W41v9F5kcxFpefLAvA7TquEsQhmVzoCTc4woqG26d2nZqx6CXe/51wkToJX6j6IlmogVYLqzj43AjT7N7OgU3NZLnuiA1gEg4Yb39VrodwJW7hyNMtZ2+God0t5FY5EggmB8pvFbQm9qd6kDA4tfqRhDhkLeBfSlauHHDVB2bAbhJS1+y5TSn1m/Htf2GGj+9ZS1TMhMoL86H8iaJ7/4TNKzydIdWwEVYgIA5nE438gov2M7ilhKdq3vsGcYZcwgQCOwcOLdgS0DB2PwOuqwm8aGQsCue1hhNIvgmt5EBH4eY9in5M1wWHgsG83qg5GohQT16sMESXKsBGu8FjixzTe2zfIk5feaPIg83SjZA5pOfke7nMtcq7UWPpPINWDk+d+YIVhsoRmzgyY1iLEdPmTovw3t7JS6Z32+DY0VpW8zDKoAJ8YNua10UKXQPD4gQMU8fgFxxYe4w/7tJ/VrQoTVAHRhwUv5mR7qvfqZa02Qqlgdo1mJHeIB5SzR2om/U/ X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85e6f1e5-a2af-4651-0c32-08d8fe3b9f4a X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4456.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 05:18:50.4339 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: x8HD+9ZWlVGQzOmvnG/r9+07HMnfuBEJy224oIWFoNM4G5rz5IG9Esq1dJgBWPeHq+f2qwjxyMCmXSfvEISbJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3250 Subject: [dpdk-dev] [PATCH v3 7/8] app/bbdev: add parameter to take input in network order 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 Sender: "dev" From: Nipun Gupta Test bbdev application is reading the input and output from the test vector files in the same endianness which is of the system. This patch adds an option to provide data in the network order i.e. big endian format Signed-off-by: Nipun Gupta --- app/test-bbdev/test_bbdev_vector.c | 18 ++++++++++++++++-- app/test-bbdev/test_bbdev_vector.h | 2 ++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/test-bbdev/test_bbdev_vector.c b/app/test-bbdev/test_bbdev_vector.c index 50d1da00f7..fe04bd6b95 100644 --- a/app/test-bbdev/test_bbdev_vector.c +++ b/app/test-bbdev/test_bbdev_vector.c @@ -53,7 +53,8 @@ starts_with(const char *str, const char *pre) /* tokenization test values separated by a comma */ static int -parse_values(char *tokens, uint32_t **data, uint32_t *data_length) +parse_values(char *tokens, uint32_t **data, uint32_t *data_length, + int network_order) { uint32_t n_tokens = 0; uint32_t data_size = 32; @@ -94,6 +95,14 @@ parse_values(char *tokens, uint32_t **data, uint32_t *data_length) } *data_length = *data_length + (strlen(tok) - strlen("0x"))/2; + if (network_order) { + if ((strlen(tok) - strlen("0x"))/2 == 4) + values[n_tokens] = + rte_cpu_to_be_32(values[n_tokens]); + else if ((strlen(tok) - strlen("0x"))/2 == 2) + values[n_tokens] = + rte_cpu_to_be_16(values[n_tokens]); + } tok = strtok(NULL, VALUE_DELIMITER); if (tok == NULL) @@ -416,7 +425,8 @@ parse_data_entry(const char *key_token, char *token, /* Clear new op data struct */ memset(op_data + *nb_ops, 0, sizeof(struct op_data_buf)); - ret = parse_values(token, &data, &data_length); + ret = parse_values(token, &data, &data_length, + vector->network_order); if (!ret) { op_data[*nb_ops].addr = data; op_data[*nb_ops].length = data_length; @@ -728,6 +738,10 @@ parse_ldpc_encoder_params(const char *key_token, char *token, ret = parse_expected_status(token, &status, vector->op_type); if (!ret) vector->expected_status = status; + } else if (!strcmp(key_token, "network_order")) { + vector->mask |= TEST_BBDEV_VF_NETWORK_ORDER; + vector->network_order = (uint8_t) strtoul(token, &err, 0); + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; } else { printf("Not valid ldpc enc key: '%s'\n", key_token); return -1; diff --git a/app/test-bbdev/test_bbdev_vector.h b/app/test-bbdev/test_bbdev_vector.h index 4e5dbf5d50..aa53f0bb0d 100644 --- a/app/test-bbdev/test_bbdev_vector.h +++ b/app/test-bbdev/test_bbdev_vector.h @@ -35,6 +35,7 @@ enum { TEST_BBDEV_VF_CODE_BLOCK_MODE = (1ULL << 23), TEST_BBDEV_VF_OP_FLAGS = (1ULL << 24), TEST_BBDEV_VF_EXPECTED_STATUS = (1ULL << 25), + TEST_BBDEV_VF_NETWORK_ORDER = (1ULL << 26), }; enum op_data_type { @@ -60,6 +61,7 @@ struct test_bbdev_vector { enum rte_bbdev_op_type op_type; int expected_status; int mask; + int network_order; union { struct rte_bbdev_op_turbo_dec turbo_dec; struct rte_bbdev_op_turbo_enc turbo_enc; From patchwork Tue Apr 13 05:17:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 91198 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 1FD90A0524; Tue, 13 Apr 2021 07:19:28 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 52C17160B4A; Tue, 13 Apr 2021 07:18:59 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-eopbgr130057.outbound.protection.outlook.com [40.107.13.57]) by mails.dpdk.org (Postfix) with ESMTP id A4064160B47 for ; Tue, 13 Apr 2021 07:18:57 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=js/bmgw3qoBTumWApIZAnn8aFSLMEd9N4k6zz2Q+ZImcJ9d/+q/2okm/K/8tjp9U5GFR+2jnZv3FJqHiapbg07YtxX+YXEfswGfmz9JnnUMxw9HrgiGOUqtmNJKFhxMktZeHuEC84vOCD8TPpIbN3R7WDOQn7vhFJ5CvfQt0jdQOkAv4XGVH9KIVMNE+Ij3Bci2PR8Evfpz/bZNF/syqukJUAL3ONoq5EnHFQhM6jqNc7D/cds6ld++4HIrU3gbyofquv8bhIrybbXQfWpZ6B3ybKPeJ0Qfc3fe9Q5F19/9+Odx42qHUODP34m5iqFgJujhChTrf7mpieM/tonJUbQ== 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-SenderADCheck; bh=u0dcxagbOKKF63vz7T9Ke7u2HaJVwyKIhYUUiuG4Fjs=; b=e9n1QoOpfZYOb2rVzOZ2DLcgKelF4UOnIVPCda1galpTwrQMXkXEFBo9blwiQ5bcBdpZ+LXNGyf8jrIJpNHXqpVQxAVq5m7n+y5K+qtioq7DnCLA5Qi8IpZnAbfmOldBe917J689YQDWXDehzrRnYthHHq8kJJigisXVlCdPVh6rhBa/TkC8VN/LJJq004kG9NgBLE0kkZANmaDOMXI7B7UQEnnSjGKKs62ZaPihmOkqZA5ZALvChQjLIlDIG8or5xVZJ0NInSj1lnATyVRxzS2SV9JHr5km5X0aB9P4AXNQnOEXc/mrey0mci11sysdAJ6OHSnKA7g4iKDikmhxdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u0dcxagbOKKF63vz7T9Ke7u2HaJVwyKIhYUUiuG4Fjs=; b=HZgk4GXjErq/2FybXQDpVcWZUBe0c8e0t8SPxqRSak1gkbn99tYr1Oa/vImSjekAILtQ97azsct0Kb2yykxXVU/11hXHYO0Dmx7kMy5dPYIK25onG+uE6QTDsZQSWuClzVMQIKwUkHFLenX54FvIwxnzwUKi/WXQQafZpui4YvI= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) by AM5PR04MB3250.eurprd04.prod.outlook.com (2603:10a6:206:b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Tue, 13 Apr 2021 05:18:53 +0000 Received: from AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55]) by AM6PR04MB4456.eurprd04.prod.outlook.com ([fe80::ad9e:a38e:e84e:bf55%7]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 05:18:53 +0000 From: Hemant Agrawal To: dev@dpdk.org, gakhil@marvell.com, nicolas.chautru@intel.com Cc: david.marchand@redhat.com, Nipun Gupta Date: Tue, 13 Apr 2021 10:47:15 +0530 Message-Id: <20210413051715.26430-9-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210413051715.26430-1-hemant.agrawal@nxp.com> References: <20210410170252.4587-1-hemant.agrawal@nxp.com> <20210413051715.26430-1-hemant.agrawal@nxp.com> X-Originating-IP: [92.120.0.67] X-ClientProxiedBy: HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) To AM6PR04MB4456.eurprd04.prod.outlook.com (2603:10a6:20b:22::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dpdk-xeon.ap.freescale.net (92.120.0.67) by HK2PR03CA0059.apcprd03.prod.outlook.com (2603:1096:202:17::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.6 via Frontend Transport; Tue, 13 Apr 2021 05:18:50 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5a181eb8-b3f0-40de-148b-08d8fe3ba0fa X-MS-TrafficTypeDiagnostic: AM5PR04MB3250: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:765; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OlnuYRk32e+302IpgAd1H9eGIgxmTwz6gvx8rI52xqccZEDsqXpSFS+MG116P88GaMBbmwsSWZ/C7iKu6/AaGWS5yRVZrZjIoOIYVY+2GcZRSu3aDrsRvSxTQVw0wzYJmqoyWEIRSm3CxDyj6nb2k2rhOTkfCi/99n5pnYzwbkhW3/OAbtvq88uOTWAD0VOA8lr9hwipPVGGt8itJnHu8Ozov7xwgmVv3QsrkbZ9Mq6rknFiElgkw7lyfu1uARw59tMCknGBT+hLdk391IMkwyLtLcrAKaF84zg2wkB1jRddYXbZoLSFt0PP8vYV4fUX+uq8nlPfAyQ3PVQ2rTXLoyUvdyJA4Q5Mw0ekzgIIZmdZrSznT5GqTYzBvcolkgMmovr1FPhI2MNJtPwI8/+CBRbM1hgfD/vcLLy0gmEqb9gYqk6Lrfk0MOjW+HcErkINpSQseQseZ+XvuEupd7COHe8HqgULCHzQWEKUszoLA9xN0OYmpdOrEcT0QMFaMAcoyLR5cfPqY+0QV4Ld3LdX/rNnI0QlXMgYyNzL+eethXZ4PbqfILVedjJNevADdTMwJMsnhJszmmKHlZ7ajDYNDO5imeTZYtZxa08JgdmlZX4RCa8p4EqZEpcPUL7fcdC2cKliGXoC3kl+Wy8+f826PiENo4B1gdIXKAiqqM+ggpI= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB4456.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(39860400002)(366004)(136003)(376002)(83380400001)(16526019)(186003)(26005)(38350700002)(38100700002)(316002)(66556008)(66946007)(66476007)(6512007)(2616005)(956004)(478600001)(4326008)(44832011)(36756003)(6486002)(6506007)(5660300002)(2906002)(52116002)(1076003)(86362001)(8936002)(30864003)(6666004)(8676002)(559001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: fiMerdNqEnGovZcAYxjTLREy3fr73qUIhViFRG3AsEkRVvxBshkfYUPqC6aesHqF5sxOJMTvGY67DPB5vXD8ve3XUZNI2kS6iZZi1c4uYv9bZqz/TsofMUStIRcSjlfmy3TqivaAp6/0s8niITTp/UTMF3k9IuYTXMen123uU/uXOEhGfl5t9jgncD4V7oEgDY6fwNFXyGFhQgmDt7jGDkjQNHO4Q3mswdQ+TutjOr3G2KZMdCKkEC78QHddXNDZ7EGkQ+NTAgy4BYo98fc9NDX8wD8xjB3HH8M/enFfMLDiz+uKg0qt4oBLH7oCyykENZw5mnY4/Z8bribPmLkH943fJ9qj6NplXjzsGNIDYQI/C2WnnPX4CNjJnnqFfbjLqsveOYzXmduGt13T24ZYJ7GzV2K9Vv2rUF/cTfOYTJZfXfVJDMMaaV8DU89kecEqi5Y87DYvTK64r6IvWQTwbG5AoRlhw2UtKnSZdsx/wjuSS5mUZ6GOfa1Yd9N+7vcVYag1u3IirMVxOlLPwTzFvy5qy7pnZgOBru218wGaAIBkNTgm99DaBQ9ak+dJWP0fSJB209sFXp9PhXmavUkhnEcZ7sXVN3R7Sx5sbCYXA/PKb0KkZu+pqJZLHaTG4jDal1M/z9blCS6JjdAP5dJwbufcu23C1TrOWs7cq1q2NW7+du/Uwc4aUU6doZPDl/p+rSUr3HAlHffCPeeiAzGVvD/8HeFT46WJs12P0H+nCaKG1myyMl008jukYSTk79BZP7EJSpna9+FDpJSyWzj5mxVHKiED7pGmcdL/TgIYq04ZjMsEjR8PutgSarx+puLFhfHIHk3ynituautQIfO/d3XKx283S/pPjHtSl19THT2JX/zRQaWR5KP9IlH+1KCFpdWKoAETt7qRSAyjSh68wf9JO4R3XkwhtsTCmcmITbvRsciSZa1wdQ3Mu2WMWGK6hMX3YF5JGly2zJidy++/18rS9oyVeUBAWd4bhrFHjYE/I3/ZsRbYuPUX31qle3627tYC76Ktt0CPPk83WNUO0cLdghI/M2YGjYFK2Ygqg9McC3RVpNJhk3D12PGzY9pMD/nA6tJZEEQlMQL8xBvWfsnIsrzl4qp49qBRZ9pBCc09RqqWxLV9xtz7GjZ/mEaft5R2ZJB5rPq/Tn1NVDWxcF8NIRjzm+W/6Z0AzyacGg3xlQGkj/sO6QabPlNbwBs5t+avyyt/33WBb9ZbJrFWdHbWO22BDK2+2xlDqzvdZdGLkZgYcrYw0Tc6Kg1BhfxtL5/108qHShWmz+WfT1seIxsyR8vWJel1Sx2Nf4MWvTw6H3MtzpQFAQxrfNyWHJ7M X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5a181eb8-b3f0-40de-148b-08d8fe3ba0fa X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4456.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 05:18:53.4951 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: e35OjMHjaEjNKtxiVDObAhmanKxKJIc/tlAf74GwA2v9sNLEMjxXY/i8g2SS5wrFwBl2WcKinRmadPHmCjec9g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3250 Subject: [dpdk-dev] [PATCH v3 8/8] app/bbdev: add test vectors for transport blocks 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 Sender: "dev" From: Nipun Gupta This patch adds two test vectors for transport block in network byte order: - LDPC encode for Transport Block - LDPC decode for Transport block Signed-off-by: Nipun Gupta --- app/test-bbdev/test_vectors/ldpc_dec_tb.data | 362 ++++++++++++++ app/test-bbdev/test_vectors/ldpc_enc_tb.data | 482 +++++++++++++++++++ 2 files changed, 844 insertions(+) create mode 100644 app/test-bbdev/test_vectors/ldpc_dec_tb.data create mode 100644 app/test-bbdev/test_vectors/ldpc_enc_tb.data diff --git a/app/test-bbdev/test_vectors/ldpc_dec_tb.data b/app/test-bbdev/test_vectors/ldpc_dec_tb.data new file mode 100644 index 0000000000..76b5105966 --- /dev/null +++ b/app/test-bbdev/test_vectors/ldpc_dec_tb.data @@ -0,0 +1,362 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2020 NXP + +op_type = +RTE_BBDEV_OP_LDPC_DEC + +network_order = +1 + +input0 = +0x817f7f81, 0x81817f7f, 0x7f7f8181, 0x81817f81, 0x8181817f, 0x7f817f81, 0x7f817f81, 0x7f817f7f, +0x7f818181, 0x7f817f7f, 0x81817f81, 0x817f7f7f, 0x81817f81, 0x81818181, 0x7f818181, 0x81818181, +0x7f7f7f7f, 0x81818181, 0x7f81817f, 0x817f7f7f, 0x81817f7f, 0x817f817f, 0x81817f81, 0x7f817f81, +0x7f7f7f7f, 0x7f7f8181, 0x7f818181, 0x81817f81, 0x7f818181, 0x817f8181, 0x817f8181, 0x7f7f7f7f, +0x7f7f817f, 0x817f8181, 0x8181817f, 0x817f7f81, 0x7f818181, 0x81817f7f, 0x7f81817f, 0x7f7f7f7f, +0x7f817f7f, 0x81818181, 0x7f81817f, 0x7f7f817f, 0x8181817f, 0x8181817f, 0x817f8181, 0x7f817f81, +0x7f7f8181, 0x7f7f7f7f, 0x81817f81, 0x7f7f7f81, 0x7f81817f, 0x81817f7f, 0x81817f7f, 0x7f7f8181, +0x817f817f, 0x7f817f7f, 0x7f7f7f7f, 0x817f8181, 0x81818181, 0x7f7f7f7f, 0x7f7f8181, 0x7f7f7f7f, +0x7f817f81, 0x7f81817f, 0x7f818181, 0x817f817f, 0x81817f7f, 0x7f7f7f81, 0x7f7f7f81, 0x7f817f81, +0x817f7f7f, 0x7f817f7f, 0x817f7f81, 0x7f7f7f7f, 0x7f817f81, 0x81817f7f, 0x7f817f7f, 0x7f7f7f81, +0x7f817f7f, 0x7f7f7f81, 0x7f817f7f, 0x7f81817f, 0x817f7f81, 0x7f7f7f7f, 0x81818181, 0x7f7f8181, +0x817f7f7f, 0x817f7f81, 0x81817f81, 0x7f817f81, 0x7f818181, 0x817f7f81, 0x7f817f7f, 0x7f818181, +0x7f7f8181, 0x81817f81, 0x7f7f8181, 0x8181817f, 0x8181817f, 0x817f7f81, 0x8181817f, 0x7f7f817f, +0x7f817f81, 0x817f7f7f, 0x81818181, 0x817f7f7f, 0x81817f81, 0x7f7f7f7f, 0x8181817f, 0x7f81817f, +0x8181817f, 0x7f818181, 0x7f817f7f, 0x817f7f7f, 0x7f817f7f, 0x817f8181, 0x7f7f8181, 0x7f81817f, +0x7f7f7f7f, 0x7f7f817f, 0x81818181, 0x7f818181, 0x81818181, 0x7f7f817f, 0x817f817f, 0x817f817f, +0x7f7f7f81, 0x7f7f817f, 0x7f7f7f7f, 0x7f7f8181, 0x7f817f81, 0x7f7f7f81, 0x81817f7f, 0x7f817f81, +0x817f817f, 0x7f7f7f7f, 0x81817f81, 0x817f8181, 0x7f817f7f, 0x7f81817f, 0x7f818181, 0x817f8181, +0x7f81817f, 0x7f818181, 0x817f817f, 0x8181817f, 0x817f817f, 0x81817f7f, 0x817f817f, 0x7f81817f, +0x8181817f, 0x7f817f81, 0x7f817f7f, 0x81817f81, 0x7f81817f, 0x817f8181, 0x7f818181, 0x7f7f7f7f, +0x817f8181, 0x7f817f7f, 0x7f7f8181, 0x817f8181, 0x7f7f7f81, 0x817f8181, 0x81817f7f, 0x817f7f7f, +0x81817f81, 0x81818181, 0x7f818181, 0x7f818181, 0x8181817f, 0x7f7f8181, 0x7f7f817f, 0x7f7f8181, +0x81817f7f, 0x7f817f7f, 0x7f7f817f, 0x81818181, 0x7f817f81, 0x817f8181, 0x7f81817f, 0x7f7f7f7f, +0x7f7f8181, 0x817f7f81, 0x7f7f8181, 0x817f817f, 0x7f818181, 0x7f7f8181, 0x7f7f7f7f, 0x8181817f, +0x817f7f81, 0x7f7f7f81, 0x817f7f81, 0x8181817f, 0x817f8181, 0x7f817f7f, 0x7f7f7f81, 0x817f817f, +0x81817f7f, 0x817f8181, 0x7f7f7f81, 0x7f81817f, 0x7f7f8181, 0x7f817f7f, 0x817f8181, 0x7f7f7f81, +0x8181817f, 0x817f8181, 0x7f817f7f, 0x817f7f81, 0x7f818181, 0x7f7f7f81, 0x81817f7f, 0x817f8181, +0x7f7f817f, 0x7f81817f, 0x817f7f81, 0x7f7f7f81, 0x7f81817f, 0x817f8181, 0x81818181, 0x817f817f, +0x7f81817f, 0x817f8181, 0x7f817f81, 0x7f817f7f, 0x7f81817f, 0x7f7f817f, 0x7f81817f, 0x81817f81, +0x817f817f, 0x81818181, 0x7f817f7f, 0x817f8181, 0x817f7f7f, 0x7f7f7f81, 0x817f8181, 0x7f818181, +0x7f7f7f7f, 0x817f8181, 0x817f7f7f, 0x7f817f7f, 0x81817f7f, 0x81818181, 0x7f7f817f, 0x8181817f, +0x8181817f, 0x8181817f, 0x81817f7f, 0x7f817f81, 0x817f8181, 0x8181817f, 0x7f81817f, 0x7f817f7f, +0x7f817f81, 0x81818181, 0x8181817f, 0x7f81817f, 0x81818181, 0x7f7f7f81, 0x7f818181, 0x7f7f7f81, +0x7f7f7f7f, 0x7f7f7f7f, 0x817f7f7f, 0x8181817f, 0x8181817f, 0x817f7f7f, 0x7f817f7f, 0x817f8181, +0x817f7f7f, 0x817f8181, 0x7f7f817f, 0x817f817f, 0x817f8181, 0x81817f81, 0x81817f81, 0x81817f7f, +0x7f81817f, 0x7f7f7f7f, 0x81817f81, 0x7f7f8181, 0x7f817f7f, 0x81818181, 0x7f7f817f, 0x81817f7f, +0x817f817f, 0x7f817f7f, 0x7f7f817f, 0x7f7f7f81, 0x817f7f81, 0x7f7f7f7f, 0x817f8181, 0x7f818181, +0x817f8181, 0x7f817f81, 0x7f7f7f7f, 0x8181817f, 0x81818181, 0x81817f7f, 0x817f7f7f, 0x817f8181, +0x817f8181, 0x7f818181, 0x81818181, 0x7f818181, 0x7f817f7f, 0x81817f81, 0x817f7f7f, 0x817f7f81, +0x817f7f81, 0x81817f81, 0x8181817f, 0x81817f81, 0x81817f81, 0x817f8181, 0x81818181, 0x81818181, +0x81818181, 0x817f817f, 0x8181817f, 0x8181817f, 0x81817f81, 0x817f7f81, 0x817f7f81, 0x817f7f7f, +0x7f7f8181, 0x7f7f817f, 0x7f7f8181, 0x7f817f7f, 0x7f818181, 0x81817f81, 0x7f817f81, 0x817f7f81, +0x7f817f81, 0x817f817f, 0x8181817f, 0x81817f81, 0x7f7f817f, 0x817f8181, 0x7f81817f, 0x7f817f81, +0x81817f7f, 0x7f7f8181, 0x7f7f817f, 0x7f7f8181, 0x7f7f7f7f, 0x7f7f7f81, 0x7f817f7f, 0x7f7f817f, +0x7f7f8181, 0x7f7f817f, 0x7f7f817f, 0x8181817f, 0x81817f7f, 0x7f7f817f, 0x7f817f81, 0x7f7f817f, +0x8181817f, 0x7f7f8181, 0x81817f7f, 0x817f817f, 0x8181817f, 0x817f7f81, 0x8181817f, 0x7f81817f, +0x7f81817f, 0x817f817f, 0x7f7f7f81, 0x7f7f8181, 0x81817f7f, 0x7f7f7f81, 0x7f818181, 0x7f818181, +0x7f7f7f81, 0x7f7f7f7f, 0x7f818181, 0x8181817f, 0x8181817f, 0x8181817f, 0x7f81817f, 0x81818181, +0x7f818181, 0x7f7f817f, 0x7f817f7f, 0x7f818181, 0x817f8181, 0x7f7f817f, 0x7f818181, 0x7f818181, +0x81817f81, 0x7f7f817f, 0x7f81817f, 0x7f7f7f7f, 0x7f7f7f7f, 0x7f817f81, 0x81817f81, 0x7f7f817f, +0x7f817f7f, 0x817f817f, 0x7f818181, 0x81817f81, 0x7f81817f, 0x7f817f7f, 0x7f817f7f, 0x7f7f7f81, +0x7f818181, 0x7f818181, 0x817f817f, 0x81818181, 0x817f817f, 0x81818181, 0x7f818181, 0x7f818181, +0x7f7f817f, 0x817f7f7f, 0x7f817f7f, 0x7f7f817f, 0x7f7f7f7f, 0x7f7f8181, 0x817f7f81, 0x7f81817f, +0x81817f81, 0x817f7f81, 0x8181817f, 0x817f817f, 0x7f817f7f, 0x7f817f81, 0x7f81817f, 0x7f818181, +0x817f8181, 0x81817f7f, 0x817f7f7f, 0x817f8181, 0x7f818181, 0x817f7f7f, 0x817f7f7f, 0x7f7f817f, +0x817f817f, 0x81817f81, 0x81818181, 0x7f7f7f81, 0x817f7f81, 0x817f7f81, 0x7f7f8181, 0x81818181, +0x7f7f7f7f, 0x7f7f8181, 0x81817f81, 0x7f817f7f, 0x817f817f, 0x817f8181, 0x81817f81, 0x7f7f817f, +0x7f817f7f, 0x7f818181, 0x81818181, 0x7f81817f, 0x7f7f7f81, 0x7f81817f, 0x7f7f817f, 0x8181817f, +0x817f7f81, 0x817f817f, 0x7f7f8181, 0x817f7f81, 0x7f7f8181, 0x817f7f81, 0x7f7f8181, 0x81817f81, +0x7f7f817f, 0x81818181, 0x8181817f, 0x7f818181, 0x817f817f, 0x7f817f81, 0x7f817f7f, 0x7f81817f, +0x7f7f7f81, 0x817f7f81, 0x817f7f7f, 0x7f7f7f81, 0x817f7f81, 0x817f8181, 0x817f8181, 0x7f818181, +0x7f7f8181, 0x7f817f7f, 0x81818181, 0x8181817f, 0x7f7f817f, 0x81817f7f, 0x817f817f, 0x81817f81, +0x7f817f81, 0x7f7f7f7f, 0x8181817f, 0x817f7f81, 0x81817f81, 0x7f818181, 0x81818181, 0x7f7f8181, +0x817f7f7f, 0x7f817f7f, 0x7f7f817f, 0x817f817f, 0x7f817f7f, 0x817f7f81, 0x7f7f8181, 0x7f7f7f81, +0x81818181, 0x7f7f8181, 0x81818181, 0x817f7f81, 0x81818181, 0x817f7f81, 0x81817f7f, 0x7f7f817f, +0x817f7f7f, 0x8181817f, 0x817f7f81, 0x81818181, 0x81817f81, 0x81818181, 0x7f81817f, 0x7f817f81, +0x7f81817f, 0x7f817f7f, 0x7f81817f, 0x7f818181, 0x81817f7f, 0x7f81817f, 0x81817f7f, 0x817f7f7f, +0x817f8181, 0x7f7f8181, 0x8181817f, 0x8181817f, 0x81817f7f, 0x817f817f, 0x7f81817f, 0x8181817f, +0x7f818181, 0x817f7f7f, 0x7f818181, 0x817f8181, 0x81818181, 0x7f7f7f81, 0x7f7f8181, 0x7f817f7f, +0x817f8181, 0x7f817f7f, 0x7f818181, 0x7f7f7f7f, 0x7f7f817f, 0x817f817f, 0x817f8181, 0x7f81817f, +0x7f817f7f, 0x7f7f7f7f, 0x7f7f8181, 0x7f818181, 0x7f817f7f, 0x7f7f8181, 0x7f817f81, 0x7f7f817f, +0x817f8181, 0x81817f81, 0x7f7f8181, 0x81817f81, 0x81817f7f, 0x817f7f7f, 0x817f8181, 0x7f818181, +0x81818181, 0x7f817f7f, 0x81817f81, 0x817f7f7f, 0x817f7f81, 0x81817f7f, 0x817f817f, 0x7f817f81, +0x7f7f8181, 0x81817f7f, 0x7f818181, 0x7f7f7f7f, 0x7f7f7f81, 0x7f817f81, 0x7f7f7f81, 0x7f7f8181, +0x81817f81, 0x817f817f, 0x817f7f81, 0x7f7f817f, 0x81817f7f, 0x81817f81, 0x817f7f81, 0x7f818181, +0x817f817f, 0x7f81817f, 0x8181817f, 0x8181817f, 0x7f818181, 0x817f7f81, 0x81818181, 0x817f7f81, +0x817f7f7f, 0x8181817f, 0x8181817f, 0x7f817f7f, 0x81818181, 0x7f7f7f81, 0x7f7f7f7f, 0x7f818181, +0x817f7f7f, 0x7f7f817f, 0x7f7f7f81, 0x7f7f7f81, 0x7f817f81, 0x7f817f7f, 0x7f817f81, 0x817f7f81, +0x81817f81, 0x8181817f, 0x7f81817f, 0x81818181, 0x7f7f7f7f, 0x817f7f81, 0x7f7f817f, 0x81818181, +0x817f817f, 0x7f818181, 0x817f7f81, 0x817f817f, 0x817f8181, 0x7f7f7f7f, 0x81817f81, 0x7f7f8181, +0x8181817f, 0x81817f7f, 0x7f818181, 0x81817f7f, 0x81817f81, 0x7f81817f, 0x7f81817f, 0x817f7f7f, +0x7f817f81, 0x8181817f, 0x81817f81, 0x7f818181, 0x8181817f, 0x81817f81, 0x81817f81, 0x7f7f8181, +0x7f818181, 0x817f8181, 0x81817f81, 0x7f818181, 0x7f818181, 0x81818181, 0x7f7f8181, 0x81817f7f, +0x7f7f8181, 0x7f818181, 0x7f818181, 0x8181817f, 0x7f817f81, 0x8181817f, 0x7f817f7f, 0x817f817f, +0x7f817f81, 0x81818181, 0x817f7f81, 0x8181817f, 0x7f7f817f, 0x7f7f7f81, 0x817f7f81, 0x7f7f8181, +0x7f817f81, 0x81817f81, 0x81818181, 0x7f7f7f81, 0x817f8181, 0x81817f7f, 0x817f7f7f, 0x7f7f817f, +0x8181817f, 0x7f817f81, 0x817f8181, 0x817f7f7f, 0x81817f81, 0x817f8181, 0x7f817f81, 0x8181817f, +0x81817f81, 0x817f817f, 0x817f8181, 0x81817f81, 0x7f817f81, 0x7f818181, 0x7f7f7f81, 0x7f7f8181, +0x7f7f817f, 0x8181817f, 0x7f817f7f, 0x817f8181, 0x817f8181, 0x817f817f, 0x7f7f817f, 0x81817f7f, +0x817f7f81, 0x7f818181, 0x7f7f7f7f, 0x7f818181, 0x81818181, 0x7f818181, 0x7f818181, 0x8181817f, +0x81817f81, 0x7f7f7f81, 0x817f7f81, 0x817f8181, 0x81817f7f, 0x7f81817f, 0x7f7f817f, 0x817f8181, +0x81817f81, 0x817f7f7f, 0x817f817f, 0x7f81817f, 0x817f817f, 0x817f7f7f, 0x81817f7f, 0x817f7f81, +0x817f817f, 0x7f7f7f7f, 0x8181817f, 0x7f817f81, 0x7f817f81, 0x81817f81, 0x7f817f7f, 0x7f817f7f, +0x7f817f7f, 0x7f7f7f7f, 0x7f7f7f7f, 0x81817f81, 0x817f7f81, 0x7f7f7f81, 0x81817f81, 0x7f7f817f, +0x817f8181, 0x7f817f81, 0x8181817f, 0x7f7f8181, 0x817f8181, 0x7f81817f, 0x8181817f, 0x7f7f8181, +0x81817f81, 0x7f818181, 0x7f817f81, 0x7f7f7f7f, 0x7f7f8181, 0x7f818181, 0x8181817f, 0x7f7f7f7f, +0x817f817f, 0x81817f7f, 0x7f81817f, 0x7f7f7f7f, 0x7f81817f, 0x7f81817f, 0x817f817f, 0x817f7f81, +0x7f817f81, 0x7f817f7f, 0x81817f7f, 0x817f7f7f, 0x817f7f7f, 0x7f817f81, 0x7f7f817f, 0x7f81817f, +0x81818181, 0x817f7f81, 0x7f7f8181, 0x7f7f7f7f, 0x7f7f8181, 0x7f7f817f, 0x817f7f7f, 0x7f817f81, +0x7f817f7f, 0x7f7f817f, 0x81817f81, 0x7f817f81, 0x8181817f, 0x7f7f8181, 0x7f7f8181, 0x8181817f, +0x7f7f7f81, 0x8181817f, 0x8181817f, 0x81817f81, 0x7f81817f, 0x7f7f817f, 0x7f7f817f, 0x7f7f817f, +0x7f81817f, 0x7f818181, 0x7f817f7f, 0x81817f7f, 0x7f7f7f81, 0x81817f81, 0x817f8181, 0x817f7f81, +0x817f817f, 0x7f818181, 0x7f817f7f, 0x817f7f81, 0x7f7f7f7f, 0x81817f7f, 0x7f81817f, 0x7f817f81, +0x7f7f8181, 0x7f817f7f, 0x7f81817f, 0x7f81817f, 0x81817f81, 0x7f817f81, 0x817f817f, 0x817f817f, +0x8181817f, 0x7f7f817f, 0x817f7f81, 0x81817f7f, 0x7f817f7f, 0x7f81817f, 0x7f7f8181, 0x8181817f, +0x7f817f7f, 0x817f817f, 0x81817f7f, 0x817f7f7f, 0x817f7f81, 0x81818181, 0x7f7f7f81, 0x81817f7f, +0x817f817f, 0x817f8181, 0x7f81817f, 0x7f7f8181, 0x817f7f81, 0x7f7f8181, 0x81817f7f, 0x81817f81, +0x7f818181, 0x817f817f, 0x7f7f817f, 0x817f817f, 0x817f7f81, 0x7f7f8181, 0x7f7f8181, 0x7f7f7f7f, +0x817f8181, 0x7f7f7f81, 0x817f7f7f, 0x7f7f8181, 0x7f7f7f7f, 0x7f817f7f, 0x7f817f7f, 0x7f7f817f, +0x817f817f, 0x81818181, 0x7f81817f, 0x7f7f817f, 0x7f818181, 0x817f7f7f, 0x7f817f81, 0x81817f81, +0x817f7f7f, 0x81817f7f, 0x81817f81, 0x7f7f8181, 0x7f7f817f, 0x7f7f7f81, 0x8181817f, 0x81817f7f, +0x81817f81, 0x7f7f7f81, 0x7f817f7f, 0x817f7f7f, 0x817f7f7f, 0x81817f7f, 0x81817f81, 0x7f7f7f7f, +0x7f817f81, 0x817f7f81, 0x7f817f81, 0x7f7f7f81, 0x81818181, 0x7f7f8181, 0x81817f7f, 0x81818181, +0x7f7f8181, 0x7f7f817f, 0x817f7f7f, 0x7f818181, 0x817f8181, 0x81817f7f, 0x8181817f, 0x81817f7f, +0x8181817f, 0x7f817f81, 0x81818181, 0x817f7f7f, 0x81818181, 0x7f818181, 0x7f7f8181, 0x7f7f817f, +0x817f8181, 0x7f7f8181, 0x817f7f7f, 0x817f7f81, 0x7f81817f, 0x817f7f7f, 0x8181817f, 0x81817f81, +0x817f7f81, 0x817f7f7f, 0x7f7f7f7f, 0x81817f7f, 0x817f7f7f, 0x7f818181, 0x7f81817f, 0x7f817f7f, +0x817f8181, 0x7f7f7f81, 0x7f817f81, 0x817f8181, 0x817f7f7f, 0x7f818181, 0x7f7f7f81, 0x81817f7f, +0x817f7f7f, 0x7f817f7f, 0x7f817f7f, 0x7f7f817f, 0x817f8181, 0x817f7f7f, 0x7f7f817f, 0x8181817f, +0x817f7f7f, 0x8181817f, 0x7f7f8181, 0x7f817f7f, 0x7f817f81, 0x81818181, 0x7f7f817f, 0x81818181, +0x817f7f7f, 0x7f7f7f81, 0x81817f7f, 0x817f8181, 0x7f7f7f81, 0x817f8181, 0x7f7f8181, 0x817f7f81, +0x817f7f81, 0x7f817f7f, 0x7f7f817f, 0x7f7f8181, 0x7f7f7f81, 0x7f7f7f81, 0x7f81817f, 0x817f817f, +0x7f817f7f, 0x81817f7f, 0x7f7f817f, 0x7f7f7f81, 0x817f8181, 0x7f7f8181, 0x7f7f7f81, 0x7f7f7f81, +0x81818181, 0x7f7f7f7f, 0x817f8181, 0x7f7f8181, 0x7f817f7f, 0x7f817f7f, 0x817f7f7f, 0x8181817f, +0x81818181, 0x7f817f81, 0x7f7f7f7f, 0x817f7f81, 0x817f7f81, 0x7f818181, 0x7f81817f, 0x7f818181, +0x7f7f7f81, 0x7f81817f, 0x7f7f8181, 0x7f7f8181, 0x817f7f81, 0x7f817f81, 0x7f817f7f, 0x7f818181, +0x7f7f817f, 0x7f818181, 0x7f817f7f, 0x81817f7f, 0x7f7f7f81, 0x7f818181, 0x817f7f7f, 0x817f817f, +0x7f81817f, 0x817f7f81, 0x7f818181, 0x817f7f81, 0x7f7f7f81, 0x8181817f, 0x8181817f, 0x7f81817f, +0x817f817f, 0x7f7f7f81, 0x81817f81, 0x7f7f8181, 0x7f7f7f81, 0x7f7f8181, 0x817f8181, 0x817f7f7f, +0x7f817f81, 0x8181817f, 0x7f7f817f, 0x7f817f7f, 0x7f7f8181, 0x7f7f7f81, 0x8181817f, 0x7f7f8181, +0x7f818181, 0x81817f7f, 0x8181817f, 0x817f7f81, 0x7f7f7f81, 0x817f7f7f, 0x7f817f81, 0x7f818181, +0x81818181, 0x7f7f7f7f, 0x817f7f81, 0x7f817f7f, 0x7f817f7f, 0x7f81817f, 0x81818181, 0x817f7f81, +0x817f7f81, 0x7f817f81, 0x7f7f8181, 0x7f818181, 0x7f818181, 0x7f818181, 0x7f7f7f81, 0x7f81817f, +0x7f81817f, 0x7f818181, 0x7f7f7f81, 0x81817f81, 0x81818181, 0x817f7f7f, 0x817f7f7f, 0x817f817f, +0x8181817f, 0x7f7f8181, 0x7f7f7f7f, 0x81818181, 0x817f8181, 0x7f7f8181, 0x81817f81, 0x7f817f81, +0x7f818181, 0x7f7f817f, 0x817f7f81, 0x7f7f7f81, 0x7f7f7f81, 0x81817f81, 0x81817f81, 0x7f7f7f7f, +0x817f7f81, 0x7f817f7f, 0x81817f81, 0x7f817f81, 0x817f817f, 0x7f7f8181, 0x81817f7f, 0x817f7f81, +0x7f817f81, 0x7f7f7f81, 0x817f8181, 0x7f7f7f81, 0x817f7f7f, 0x7f7f7f81, 0x817f817f, 0x7f7f7f81, +0x7f817f7f, 0x7f817f7f, 0x8181817f, 0x8181817f, 0x7f7f7f81, 0x7f7f7f81, 0x7f817f81, 0x81817f81, +0x81817f7f, 0x7f7f7f7f, 0x81817f7f, 0x81818181, 0x817f817f, 0x81817f81, 0x81818181, 0x817f7f81, +0x817f8181, 0x817f7f7f, 0x81817f7f, 0x81817f7f, 0x81818181, 0x7f7f7f7f, 0x7f817f7f, 0x7f81817f, +0x7f7f817f, 0x8181817f, 0x817f8181, 0x817f8181, 0x8181817f, 0x7f7f7f81, 0x817f7f7f, 0x817f7f7f, +0x817f8181, 0x7f817f81, 0x7f7f7f7f, 0x81817f7f, 0x81818181, 0x7f817f7f, 0x7f7f8181, 0x817f8181, +0x817f7f7f, 0x817f7f81, 0x817f7f81, 0x81817f7f, 0x7f817f7f, 0x817f7f7f, 0x7f7f8181, 0x7f817f81, +0x7f7f7f7f, 0x8181817f, 0x7f7f7f81, 0x81818181, 0x7f7f817f, 0x81817f81, 0x817f7f7f, 0x7f817f81, +0x817f817f, 0x7f817f81, 0x817f7f7f, 0x7f7f8181, 0x7f81817f, 0x7f7f8181, 0x7f7f7f7f, 0x7f818181, +0x81817f81, 0x7f7f817f, 0x7f7f817f, 0x7f7f817f, 0x817f7f7f, 0x81818181, 0x81817f7f, 0x7f817f81, +0x7f7f817f, 0x7f7f7f7f, 0x81818181, 0x7f7f817f, 0x7f7f817f, 0x7f817f7f, 0x817f7f81, 0x7f817f7f, +0x7f7f7f81, 0x7f7f817f, 0x817f817f, 0x81817f7f, 0x81818181, 0x817f8181, 0x7f817f7f, 0x817f8181, +0x7f818181, 0x7f81817f, 0x817f7f81, 0x817f7f7f, 0x7f7f817f, 0x817f7f7f, 0x7f7f7f81, 0x81817f7f, +0x7f7f817f, 0x817f7f81, 0x7f818181, 0x817f8181, 0x817f8181, 0x7f7f7f7f, 0x817f817f, 0x7f7f7f7f, +0x7f7f7f7f, 0x7f7f7f7f, 0x817f8181, 0x81817f81, 0x817f7f7f, 0x7f818181, 0x7f81817f, 0x7f81817f, +0x81818181, 0x817f8181, 0x817f7f81, 0x8181817f, 0x817f7f7f, 0x7f7f7f7f, 0x81817f81, 0x817f817f, +0x817f817f, 0x817f7f81, 0x7f818181, 0x7f817f81, 0x81817f81, 0x7f81817f, 0x7f81817f, 0x7f817f7f, +0x7f817f81, 0x7f7f7f81, 0x81817f81, 0x81817f81, 0x7f7f817f, 0x7f817f7f, 0x7f818181, 0x7f81817f, +0x817f7f81, 0x817f7f81, 0x81817f81, 0x7f818181, 0x817f8181, 0x7f81817f, 0x7f7f7f7f, 0x817f7f7f, +0x7f817f7f, 0x81817f7f, 0x7f7f8181, 0x7f7f8181, 0x7f7f8181, 0x817f8181, 0x7f81817f, 0x817f7f81, +0x817f7f81, 0x7f7f817f, 0x7f817f81, 0x81817f7f, 0x7f7f7f7f, 0x7f7f7f7f, 0x7f7f8181, 0x817f7f81, +0x8181817f, 0x8181817f, 0x7f7f8181, 0x7f7f817f, 0x817f7f81, 0x817f8181, 0x7f818181, 0x81818181, +0x817f7f81, 0x7f7f817f, 0x7f7f817f, 0x7f7f8181, 0x7f7f7f7f, 0x817f7f81, 0x8181817f, 0x81818181, +0x817f817f, 0x7f818181, 0x817f7f81, 0x81817f7f, 0x7f817f7f, 0x7f817f7f, 0x81818181, 0x817f817f, +0x817f7f81, 0x7f7f8181, 0x7f7f8181, 0x8181817f, 0x7f817f7f, 0x7f81817f, 0x7f7f7f81, 0x7f7f7f81, +0x8181817f, 0x7f817f7f, 0x817f7f81, 0x7f817f81, 0x7f817f81, 0x817f817f, 0x81818181, 0x817f817f, +0x817f8181, 0x7f7f8181, 0x7f817f7f, 0x817f817f, 0x817f7f81, 0x8181817f, 0x7f7f7f81, 0x81817f81, +0x817f7f81, 0x81818181, 0x7f818181, 0x7f7f7f81, 0x7f818181, 0x7f817f7f, 0x7f7f7f81, 0x7f7f7f81, +0x817f817f, 0x81818181, 0x7f7f817f, 0x81818181, 0x8181817f, 0x7f7f817f, 0x7f7f7f7f, 0x7f818181, +0x817f817f, 0x7f7f8181, 0x7f817f81, 0x817f8181, 0x7f817f81, 0x7f7f7f81, 0x7f818181, 0x8181817f, +0x7f7f7f7f, 0x7f7f7f81, 0x7f7f7f81, 0x7f7f7f7f, 0x81817f7f, 0x7f7f8181, 0x817f817f, 0x817f8181, +0x817f7f7f, 0x81817f81, 0x7f81817f, 0x7f7f8181, 0x7f7f8181, 0x7f7f7f7f, 0x817f817f, 0x81818181, +0x7f7f8181, 0x7f818181, 0x7f81817f, 0x817f7f7f, 0x81817f7f, 0x81817f81, 0x7f81817f, 0x8181817f, +0x81818181, 0x81817f7f, 0x7f818181, 0x7f817f81, 0x817f7f7f, 0x817f817f, 0x7f7f817f, 0x81818181, +0x7f81817f, 0x7f7f7f81, 0x7f7f7f81, 0x81817f81, 0x81817f7f, 0x817f7f81, 0x7f817f81, 0x817f817f, +0x817f817f, 0x7f7f7f7f, 0x7f817f7f, 0x7f7f7f81, 0x81817f7f, 0x817f7f81, 0x7f7f8181, 0x817f7f81, +0x7f81817f, 0x817f7f81, 0x817f817f, 0x817f8181, 0x7f818181, 0x7f7f7f81, 0x7f7f8181, 0x817f7f7f, +0x7f7f7f7f, 0x81817f7f, 0x81817f7f, 0x81817f7f, 0x7f817f81, 0x81818181, 0x817f817f, 0x81817f7f, +0x7f7f7f7f, 0x7f7f7f7f, 0x7f818181, 0x7f7f7f81, 0x817f7f81, 0x7f817f7f, 0x7f817f81, 0x7f7f7f81, +0x81817f7f, 0x81817f81, 0x81817f81, 0x81818181, 0x817f7f7f, 0x7f818181, 0x81818181, 0x7f7f7f7f, +0x7f818181, 0x7f7f817f, 0x7f7f8181, 0x817f7f7f, 0x7f817f81, 0x817f7f7f, 0x81818181, 0x7f7f817f, +0x817f7f81, 0x817f7f81, 0x7f81817f, 0x81817f81, 0x7f7f8181, 0x7f81817f, 0x7f7f8181, 0x817f7f7f, +0x7f817f7f, 0x8181817f, 0x8181817f, 0x8181817f, 0x7f7f8181, 0x8181817f, 0x7f7f8181, 0x817f817f, +0x7f817f7f, 0x7f7f8181, 0x7f7f7f81, 0x7f818181, 0x81817f7f, 0x7f818181, 0x817f7f81, 0x7f7f817f, +0x7f7f7f7f, 0x7f817f81, 0x7f817f81, 0x7f7f8181, 0x7f7f817f, 0x7f817f7f, 0x81817f81, 0x7f7f8181, +0x81818181, 0x7f7f817f, 0x7f817f81, 0x817f8181, 0x817f8181, 0x81817f81, 0x817f817f, 0x7f81817f, +0x817f7f7f, 0x7f7f7f7f, 0x7f7f7f81, 0x817f8181, 0x7f7f7f81, 0x817f8181, 0x81818181, 0x7f817f81, +0x81818181, 0x7f81817f, 0x7f7f7f7f, 0x81817f81, 0x7f818181, 0x7f7f7f7f, 0x7f81817f, 0x7f81817f, +0x8181817f, 0x7f81817f, 0x81817f81, 0x7f7f7f7f, 0x817f7f81, 0x7f7f7f81, 0x7f817f81, 0x7f7f7f81, +0x81818181, 0x81817f7f, 0x81817f81, 0x7f7f817f, 0x7f818181, 0x81817f81, 0x81817f7f, 0x81817f81, +0x7f7f7f81, 0x81817f7f, 0x7f7f8181, 0x7f7f817f, 0x81817f7f, 0x817f7f81, 0x7f818181, 0x7f817f7f, +0x7f817f81, 0x7f7f817f, 0x7f7f817f, 0x817f817f, 0x7f7f7f7f, 0x817f7f81, 0x7f7f7f81, 0x817f817f, +0x7f7f8181, 0x7f818181, 0x817f817f, 0x7f817f81, 0x817f7f7f, 0x7f818181, 0x81818181, 0x81818181, +0x81817f7f, 0x7f81817f, 0x7f817f7f, 0x7f7f817f, 0x7f7f8181, 0x817f817f, 0x817f8181, 0x7f7f817f, +0x817f7f81, 0x81817f81, 0x817f7f81, 0x7f81817f, 0x817f7f81, 0x81817f7f, 0x7f817f7f, 0x7f817f81, +0x817f7f7f, 0x7f7f817f, 0x7f817f81, 0x7f7f7f81, 0x81818181, 0x7f817f7f, 0x817f817f, 0x81818181, +0x7f7f7f7f, 0x7f817f81, 0x7f817f81, 0x7f817f7f, 0x817f8181, 0x817f8181, 0x7f817f81, 0x81818181, +0x7f818181, 0x81818181, 0x7f81817f, 0x7f818181, 0x7f7f817f, 0x7f7f817f, 0x7f7f7f81, 0x81817f7f, +0x7f818181, 0x817f8181, 0x7f7f7f81, 0x7f7f817f, 0x7f7f817f, 0x7f817f81, 0x7f817f7f, 0x7f7f7f7f, +0x81817f81, 0x81817f81, 0x7f7f7f81, 0x81818181, 0x7f817f7f, 0x81818181, 0x81817f7f, 0x7f7f8181, +0x817f7f7f, 0x7f7f817f, 0x817f817f, 0x817f8181, 0x81818181, 0x7f817f81, 0x817f817f, 0x817f8181, +0x817f8181, 0x817f817f, 0x81817f7f, 0x7f817f7f, 0x817f8181, 0x81817f7f, 0x81818181, 0x817f8181, +0x7f817f7f, 0x7f817f7f, 0x7f7f8181, 0x817f817f, 0x7f7f817f, 0x7f817f81, 0x7f7f817f, 0x7f7f7f81, +0x817f817f, 0x7f7f8181, 0x81817f7f, 0x7f7f7f7f, 0x7f818181, 0x7f818181, 0x7f817f81, 0x7f81817f, +0x7f7f8181, 0x7f7f7f7f, 0x81817f81, 0x817f7f7f, 0x81817f7f, 0x817f7f7f, 0x8181817f, 0x7f818181, +0x817f817f, 0x817f7f81, 0x81817f7f, 0x817f7f81, 0x7f817f81, 0x817f7f81, 0x817f817f, 0x7f7f7f7f, +0x7f817f7f, 0x8181817f, 0x7f818181, 0x81817f81, 0x7f7f7f7f, 0x7f818181, 0x817f817f, 0x7f818181, +0x7f818181, 0x817f7f7f, 0x81817f7f, 0x81817f81, 0x7f7f7f81, 0x7f7f817f, 0x81817f81, 0x7f81817f, +0x817f8181, 0x7f81817f, 0x7f7f7f81, 0x7f818181, 0x81817f7f, 0x7f818181, 0x817f817f, 0x817f7f7f, +0x817f7f7f, 0x817f817f, 0x817f7f7f, 0x7f81817f, 0x7f817f81, 0x7f7f8181, 0x817f817f, 0x817f817f, +0x7f81817f, 0x7f817f7f, 0x7f7f817f, 0x81817f81, 0x817f8181, 0x81818181, 0x7f7f817f, 0x81818181, +0x81817f7f, 0x7f818181, 0x7f7f8181, 0x7f7f8181, 0x81818181, 0x7f817f7f, 0x8181817f, 0x8181817f, +0x817f7f7f, 0x817f7f7f, 0x81818181, 0x7f818181, 0x7f817f7f, 0x81817f81, 0x8181817f, 0x817f7f7f, +0x7f7f7f7f, 0x7f7f7f81, 0x7f817f81, 0x7f7f817f, 0x81817f81, 0x7f7f817f, 0x7f818181, 0x7f817f7f, +0x7f81817f, 0x7f7f817f, 0x81818181, 0x7f7f817f, 0x7f7f8181, 0x7f7f7f81, 0x81817f81, 0x817f817f, +0x7f817f81, 0x7f817f7f, 0x8181817f, 0x7f7f7f81, 0x81818181, 0x817f7f7f, 0x81817f7f, 0x7f817f7f, +0x817f7f7f, 0x817f817f, 0x7f817f7f, 0x817f8181, 0x81818181, 0x7f817f7f, 0x81817f81, 0x817f7f7f, +0x817f8181, 0x7f81817f, 0x7f7f8181, 0x7f817f81, 0x81817f7f, 0x7f7f817f, 0x817f7f81, 0x817f817f, +0x7f817f81, 0x817f8181, 0x81817f7f, 0x817f8181, 0x8181817f, 0x7f81817f, 0x81817f7f, 0x7f7f817f, +0x7f81817f, 0x81817f7f, 0x7f818181, 0x817f7f81, 0x8181817f, 0x7f818181, 0x7f7f817f, 0x7f817f7f, +0x7f817f7f, 0x8181817f, 0x7f81817f, 0x81817f81, 0x7f7f7f7f, 0x7f81817f, 0x817f7f7f, 0x817f7f7f, +0x817f817f, 0x7f81817f, 0x7f818181, 0x7f7f7f81, 0x817f7f7f, 0x7f7f7f81, 0x7f7f8181, 0x7f7f817f, +0x7f7f7f81, 0x817f7f81, 0x81817f81, 0x7f7f817f, 0x817f8181, 0x7f7f7f81, 0x7f7f817f, 0x817f817f, +0x817f7f81, 0x817f817f, 0x7f817f7f, 0x7f7f817f, 0x81818181, 0x81817f81, 0x817f8181, 0x7f7f8181, +0x7f7f8181, 0x817f8181, 0x7f7f7f7f, 0x8181817f, 0x7f7f7f7f, 0x7f81817f, 0x81817f81, 0x81817f7f, +0x7f7f8181, 0x8181817f, 0x7f818181, 0x7f817f7f, 0x7f7f817f, 0x7f81817f, 0x7f817f81, 0x7f817f7f, +0x7f7f8181, 0x81818181, 0x7f7f8181, 0x7f7f7f81, 0x817f7f7f, 0x7f7f8181, 0x81818181, 0x7f817f81, +0x81818181, 0x7f818181, 0x7f818181, 0x817f8181, 0x81818181, 0x7f81817f, 0x7f7f8181, 0x7f7f8181, +0x817f7f7f, 0x7f7f7f7f, 0x7f817f81, 0x7f81817f, 0x7f817f7f, 0x817f817f, 0x7f7f7f81, 0x817f7f81, +0x7f818181, 0x8181817f, 0x817f7f81, 0x817f817f, 0x817f8181, 0x7f7f7f81, 0x7f817f7f, 0x81817f81, +0x817f8181, 0x817f8181, 0x7f817f7f, 0x81817f7f, 0x817f7f81, 0x7f817f81, 0x817f7f7f, 0x817f8181, +0x7f817f7f, 0x81817f7f, 0x81817f81, 0x7f817f81, 0x7f81817f, 0x7f7f7f81, 0x7f817f7f, 0x7f7f8181, +0x8181817f, 0x7f7f7f7f, 0x7f7f8181, 0x7f817f7f, 0x817f8181, 0x817f7f81, 0x7f7f7f7f, 0x7f81817f, +0x7f7f8181, 0x817f817f, 0x7f7f7f81, 0x81817f7f, 0x81818181, 0x817f7f81, 0x7f817f7f, 0x7f81817f, +0x8181817f, 0x7f7f817f, 0x817f7f81, 0x81817f81, 0x8181817f, 0x7f7f8181, 0x817f7f81, 0x81817f81, +0x817f8181, 0x817f8181, 0x817f817f, 0x817f8181, 0x817f7f81, 0x7f7f7f7f, 0x7f7f8181, 0x817f817f, +0x7f817f7f, 0x817f7f81, 0x7f81817f, 0x81818181, 0x7f7f7f81, 0x7f818181, 0x7f7f8181, 0x81817f7f, +0x817f7f81, 0x8181817f, 0x7f817f81, 0x7f7f7f7f, 0x7f817f7f, 0x7f818181, 0x8181817f, 0x817f7f81, +0x817f7f7f, 0x7f817f81, 0x7f7f8181, 0x817f7f81, 0x817f7f7f, 0x817f8181, 0x7f817f81, 0x81817f7f, +0x817f817f, 0x81817f81, 0x81817f7f, 0x8181817f, 0x817f8181, 0x817f7f7f, 0x81817f7f, 0x81817f81, +0x817f7f81, 0x81818181, 0x81817f81, 0x7f817f7f, 0x7f817f7f, 0x8181817f, 0x7f818181, 0x7f7f7f7f, +0x7f817f81, 0x81817f81, 0x7f7f817f, 0x817f7f81, 0x7f7f7f81, 0x7f818181, 0x7f7f7f7f, 0x7f817f7f, +0x7f7f817f, 0x817f7f7f, 0x7f7f817f, 0x8181817f, 0x7f818181, 0x7f7f7f7f, 0x81817f7f, 0x7f81817f, +0x817f7f7f, 0x7f7f7f7f, 0x7f81817f, 0x817f7f7f, 0x817f817f, 0x7f7f7f81, 0x81817f81, 0x817f7f7f, +0x817f7f81, 0x81817f7f, 0x7f7f7f7f, 0x81818181, 0x81817f7f, 0x7f7f7f81, 0x81817f7f, 0x7f7f7f81, +0x7f817f81, 0x817f7f7f, 0x7f817f7f, 0x7f81817f, 0x7f817f7f, 0x817f817f, 0x817f817f, 0x8181817f, +0x817f8181, 0x81818181, 0x817f817f, 0x7f7f8181, 0x7f817f7f, 0x7f817f81, 0x817f7f7f, 0x7f7f8181, +0x7f817f81, 0x81817f81, 0x817f817f, 0x7f818181, 0x7f7f7f81, 0x7f7f8181, 0x7f81817f, 0x8181817f, +0x7f7f7f7f, 0x817f8181, 0x7f7f7f7f, 0x81817f81, 0x8181817f, 0x7f7f817f, 0x8181817f, 0x7f7f7f7f, +0x7f817f7f, 0x7f81817f, 0x817f7f7f, 0x81817f7f, 0x7f7f7f7f, 0x81817f81, 0x81817f81, 0x7f81817f, +0x7f7f7f81, 0x81817f81, 0x817f817f, 0x7f7f7f7f, 0x8181817f, 0x7f817f7f, 0x7f7f7f81, 0x7f817f7f, +0x817f8181, 0x7f7f7f81, 0x7f81817f, 0x817f8181, 0x7f7f8181, 0x7f817f81, 0x8181817f, 0x81818181, +0x7f7f8181, 0x817f817f, 0x817f7f81, 0x7f817f7f, 0x7f818181, 0x81818181, 0x7f817f81, 0x817f7f81, +0x817f817f, 0x81817f7f, 0x81817f81, 0x817f7f7f, 0x7f7f7f81, 0x7f81817f, 0x7f7f8181, 0x7f7f817f, +0x7f7f7f7f, 0x7f817f7f, 0x7f817f7f, 0x817f8181, 0x7f7f7f81, 0x8181817f, 0x817f8181, 0x7f7f7f7f, +0x81817f81, 0x817f817f, 0x81818181, 0x7f817f7f, 0x817f817f, 0x817f817f, 0x81817f7f, 0x7f7f7f81, +0x7f7f7f81, 0x81817f7f, 0x7f817f7f, 0x817f8181, 0x81817f7f, 0x81817f7f, 0x817f8181, 0x8181817f, +0x7f81817f, 0x7f81817f, 0x817f7f81, 0x817f817f, 0x7f7f8181, 0x8181817f, 0x7f817f81, 0x817f817f, +0x7f818181, 0x81818181, 0x7f7f7f7f, 0x817f8181, 0x7f817f7f, 0x7f7f817f, 0x7f7f7f81, 0x7f7f7f81, +0x817f817f, 0x817f817f, 0x81818181, 0x81818181, 0x817f7f81, 0x7f81817f, 0x817f8181, 0x7f7f817f, +0x817f8181, 0x7f7f7f81, 0x7f818181, 0x817f7f7f, 0x817f7f81, 0x817f8181, 0x817f817f, 0x817f817f, +0x7f817f81, 0x817f7f7f, 0x81817f7f, 0x7f818181, 0x7f7f817f, 0x817f7f81, 0x817f7f81, 0x817f8181, +0x7f7f817f, 0x8181817f, 0x8181817f, 0x7f7f817f, 0x81817f81, 0x7f7f7f7f, 0x7f81817f, 0x8181817f, +0x7f7f817f, 0x7f7f8181, 0x8181817f, 0x817f817f, 0x7f817f81, 0x7f7f8181, 0x7f7f7f7f, 0x7f7f7f81, +0x81817f81, 0x81818181, 0x7f7f7f81, 0x7f817f81, 0x817f7f7f, 0x7f81817f, 0x81817f7f, 0x7f817f81, +0x7f818181, 0x7f7f7f81, 0x8181817f, 0x817f8181, 0x817f817f, 0x817f817f, 0x7f7f7f7f, 0x8181817f, +0x7f81817f, 0x81818181, 0x7f7f8181, 0x817f7f7f, 0x81817f81, 0x817f817f, 0x817f7f81, 0x81818181 + +output0 = +0xfb26769b, 0xc79ba708, 0xf8635f11, 0xd7e4cfa4, 0xe3c5e7d7, 0xc02d1876, 0xe718a692, 0x09395387, +0x9b38d4ad, 0x2cb9b3e9, 0xa975b0e1, 0x330bcede, 0x7b7550e4, 0x1f120789, 0x719ec767, 0x84e65e6f, +0x8067338a, 0x2f38b6a5, 0xe1100cdc, 0x4129350a, 0xf42f39a8, 0x41ae51c4, 0xa916952f, 0xab6d7503, +0xd0359b04, 0x97be8694, 0xee8effbe, 0x79b093ec, 0x57122f74, 0x73037ee7, 0x395a2f52, 0x73caae6b, +0xc3eff955, 0xf9f1d126, 0x02432290, 0x7295881a, 0xdd24b3a4, 0x7b3473eb, 0x9d1dcbef, 0x3c990bfb, +0xf280623b, 0x20c84e3b, 0x144c6d3a, 0x8ec60a92, 0x09737fc3, 0xeb399fd3, 0xfe46efae, 0x8bca3001, +0x78ade416, 0xb84aea12, 0x43ca2a9e, 0x15fe0d33, 0xd7c16a39, 0xc42a34e8, 0x58df1eaa, 0xa4c437b8, +0x155c3a34, 0xb76ffb85, 0x83762da1, 0x7a114abf, 0xa28f5f9a, 0xc5ea01a2, 0x2701d947, 0xf16083f2, +0x3800ccfd, 0x9c7a9a6f, 0xf65e474d, 0xb143759a, 0xdaaac55c, 0x29950c88, 0xa47976ba, 0xe8335a4f, +0x6a858152, 0x25a3a9f9, 0xc42def6b, 0x07a3ffe4, 0xeb949edb, 0x767e93a2, 0xe58b7e91, 0x02b0ceec, +0x4a519ff0, 0x33091006, 0xa5300a4a, 0x2bcd45f6, 0xb83b264d, 0x22336f72, 0xa555c8d1, 0xeb4aa02c, +0x700dd4a9, 0x6b8fc1e6, 0xd44ce0f3, 0xbb66e520, 0xbdb17016, 0xbebb013c, 0xe2a05d9a, 0x516f5605, +0xac27f407, 0xbd05f488, 0x2ef5e8c2, 0x23a62cf8, 0x50f2f8a9, 0x45d6bda3, 0x9b6efd5a, 0x77cdc34b, +0xb466da5a, 0x98b948f0, 0xb345dd43, 0x52ee8fdf, 0xc0596488, 0x73fab111, 0xf88a77d7, 0x36952151, +0xe5c88df4, 0x05e4e05a, 0xfd68dff8, 0x33ce03ce, 0x181d38da, 0x1bd14663, 0xf3b0e86a, 0xb1d7900d, +0x52165396, 0xa54e79ef, 0xbf1cda0d, 0xad1f7a2a, 0xebf4db32, 0xf049cd5d, 0xdcbe865f, 0xa1c31f6d, +0xeba00e1d, 0xde8e2a87, 0x5e9c15de, 0x02ec68bd, 0xaad1a964, 0x95d3bd1c, 0xf7e7048d, 0x4e2c6243, +0x7e675787, 0xd9811021, 0xec5c7341, 0x98d304da, 0xe68ea509, 0x6318d315, 0xe3570ce2, 0x594c4fad, +0x840f01f5, 0xa9a2e403, 0x8e651529, 0x72c70e44, 0x9402e2f4, 0x9e1cd395, 0x890701ca, 0xe804887a, +0xd209cae4, 0x0c344a3d, 0x8926ca86, 0x0f6debfa, 0x83323654, 0xd0d12b75, 0x7d73888c, 0xf95ce546, +0x0b4fe312, 0x2582b52d, 0xcf10f7ff, 0x7bf385f5, 0x57dcaf9f, 0xcbb60aef, 0x64711e8f, 0x923571ec, +0xfd90c78e, 0x85099f54, 0x63ae3fdf, 0xc683a0b3, 0x591e8102, 0xb6180e2d, 0x35ae7560, 0x94a4a536, +0x97defd69, 0x92afc0b4, 0xebce8cf4, 0x4d2fc035, 0x9057a972, 0x30e204a6, 0xc5af64e8, 0x6c7fa059, +0x40f043e6, 0xdcd8bc3f, 0x5bb3962b, 0xf0f1a38d, 0x99b2893e, 0xf77257c4, 0x60c59a02, 0xaedcaff2, +0xe5a852c1, 0xea67ccb9, 0x150acbb7, 0xea2cb0bc, 0xfa64f623, 0x0d37fe47, 0x81643457, 0x3dcf1a62, +0x5c6c4066, 0x66bdc50d, 0x20e45b88, 0x9746424f + +basegraph= +1 + +z_c= +320 + +n_cb= +16000 + +q_m= +8 + +n_filler= +488 + +ea = +8448 + +eb = +8448 + +iter_max= +8 + +expected_iter_count= +2 + +c = +1 + +r = +0 + +cab = +1 + +rv_index = +0 + +en_scramble = +1 + +q = +0 + +n_id = +323 + +n_rnti = +2300 + +code_block_mode = +0 + +op_flags = +RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP + +expected_status = +OK diff --git a/app/test-bbdev/test_vectors/ldpc_enc_tb.data b/app/test-bbdev/test_vectors/ldpc_enc_tb.data new file mode 100644 index 0000000000..00c8798995 --- /dev/null +++ b/app/test-bbdev/test_vectors/ldpc_enc_tb.data @@ -0,0 +1,482 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2020 NXP + +op_type = +RTE_BBDEV_OP_LDPC_ENC + +network_order = +1 + +input0 = +0x4a5cf377, 0xc1be40f7, 0x0928020e, 0xb516db35, 0x6345a450, 0x58fff002, 0x2e7eb452, 0x8b11e1cd, +0xad940424, 0xed9581f4, 0x786faf13, 0xa1a42fd8, 0xb4ae94ec, 0x3a495130, 0x870919cb, 0xce3e626b, +0xd589a336, 0x89b9255d, 0x9827afc3, 0x4b115731, 0xffa129a4, 0xbc5c19fd, 0x8178422f, 0x2b1b1c4e, +0x7260eea5, 0x815d0666, 0xa81b5713, 0xd16966b6, 0x6a2b38fb, 0xedb7af62, 0x1c4291c9, 0x344df3c4, +0x76b00f5c, 0xdfde72db, 0x49b974d1, 0xe1c427fd, 0x119899ff, 0xe19ef236, 0xb29ed77e, 0xcfbe3574, +0x5fb6601d, 0x4b01e2fa, 0xe672e5eb, 0xec2e1ddd, 0x7f4ce14e, 0x277b5543, 0x0cc6c1cd, 0x35207407, +0xf581c04d, 0xf3911008, 0x1acce490, 0x7a2da390, 0xb2675739, 0xa6f59003, 0x5cdabfba, 0xea345736, +0xf3855b42, 0xa5968e62, 0x7414e30f, 0xbf8379a7, 0x8e385fe2, 0x5578e2af, 0x7d8df3e4, 0x31baa8e5, +0x3d5d1bfb, 0xaec1353f, 0x966a3c92, 0x3e470876, 0x2917ed68, 0x87080d6a, 0xa31b0f0c, 0x7f15205f, +0x4a8f14ea, 0xaff808f8, 0x019ee1c4, 0xe15a3115, 0x34d00540, 0x820aef7e, 0xa77de257, 0xf4ae8ae3, +0x20970e8e, 0xe7936af0, 0x8ca57d87, 0x274f72fe, 0xc6b737ad, 0xe90868e6, 0x83efc09e, 0x29edd24b, +0x5c0c052b, 0x5fd00de7, 0x06bc61bc, 0x1b8cc48d, 0x4d44fe33, 0x5575407d, 0x1f81e81d, 0x62830c48, +0xc901f0a8, 0xf996afa9, 0x54437c46, 0x61b851c2, 0xa4be2f55, 0xe4af1f09, 0x1007b036, 0x6ddc2bac, +0xa22ab8bc, 0x22b2edc9, 0x5307c0de, 0x95a8bddf, 0x24a49d70, 0x26ac47a5, 0xccd21157, 0x748be14a, +0xdc903d7f, 0x0fe261af, 0x3aeba7a5, 0x83a5ee5e, 0x44a19c9d, 0x7b5cb38c, 0x983741ea, 0xdd630d75, +0x94ff02fb, 0x452f7ad7, 0xad6d63a2, 0x4d123a54, 0xcc48ec5d, 0x77aa559b, 0x059a31a2, 0xf352c2b2, +0x6079f2c3, 0x6251689b, 0x66ad28ab, 0x045a92cd, 0xfbeee326, 0xa75e1acf, 0xbf0ec9a5, 0xb3ae6c75, +0x631e787b, 0x527d5cae, 0x9b84fcef, 0x1e586a32, 0x89d3372a, 0x707b8cff, 0xc94583e2, 0xec47990f, +0xdd80df30, 0x0c1d93ab, 0x7f1c8ebe, 0x658c9498, 0xa352198f, 0x51b2efe6, 0xfae8ca17, 0x895bad0e, +0x707c66fd, 0x7d94e19d, 0x89b0b675, 0x1ea127f4, 0x40e4a629, 0xb63c89a1, 0x16157440, 0x07f051ad, +0xb4cadb1b, 0xbf071feb, 0x3d3a286d, 0x8cba496a, 0x35031946, 0xd0908645, 0xa63893b5, 0x83f7dcb6, +0xcd646355, 0x5a0098e5, 0x804dea3e, 0x5b68d32a, 0xe26f1b2f, 0x04afea8f, 0x9810a92c, 0xf9e830ea, +0x6023ea6f, 0x4e24abc8, 0xe13f73b6, 0xb253b55b, 0xbb4d8c3b, 0xa1fc6529, 0x1cc16b79, 0x3e4e97c2, +0x151e3bee, 0xb0b723fb, 0xa1d25067, 0x235766a7, 0x6682a381, 0x7339b658, 0xb1269ab0, 0x83ba2e11, +0x8822900e, 0xed25e0a1, 0x83500011, 0x3ac7816e, 0xef1bb934, 0xf1f181f7, 0x813f09c1, 0x3062549a, +0x8a848f2a, 0xbdbfd5dd, 0xb0b4a2da, 0xfe010280, 0xee27c73e, 0xa9e59ac9, 0x1839be41, 0x3e48115b, +0x8236e038, 0x31acebf3, 0x65e6ca9e, 0xe60827bd, 0x1c769295, 0x78664313, 0x393b746d, 0xc514d330, +0x745feccf, 0xf744bfde, 0xaec83f36, 0x68bb76e8, 0x8857a5d9, 0x955ee019, 0xdadc352d, 0x6258b61c, +0x7f3162b9, 0xc8482836, 0x111eef64, 0xd8ad108e, 0x80fd48c5, 0xf55d1692, 0xfcac5450, 0xbfd17400, +0x5c73ac96, 0xb3623e70, 0xb97a05db, 0x93324d75, 0x4f9b823c, 0xcbbea5f2, 0x895b9f80, 0xe784795b, +0x33484231, 0x6468c911, 0x25f8c678, 0xfebd9963, 0xe36977c5, 0x29eeb096, 0x425070c2, 0x1d193fb4, +0xa02c713a, 0xc5a32439, 0x7ccab8a7, 0xa74f2f43, 0x97e03e2b, 0xa9df9c82, 0x133fc0d5, 0x9940fb7b, +0x385e4f60, 0x88428bfb, 0x79643726, 0x03db0aa8, 0xf6d4e3a5, 0xbd3b6f2e, 0xd24f3149, 0x20c36508, +0xa52cbaf5, 0x515fbf81, 0x5048a565, 0x36813de9, 0xe15ff330, 0x40fc8d88, 0x7b2ebe5d, 0x54ba589d, +0xe04722ed, 0x229ba4c6, 0xfe344c90, 0x308a24d6, 0xd70657f8, 0x7246e901, 0xf05c5e25, 0x77b23e02, +0xe624c583, 0xb0cbd652, 0xc8351b48, 0x58df416a, 0xb36a5a8d, 0x25f40145, 0x0b9861b3, 0x7c4f6970, +0x2f6c7e65, 0xc5d465eb, 0x4a38d2a2, 0x8732f621, 0xf4c71a36, 0x7920edcd, 0xb6168152, 0x5dbbb680, +0xcc06d6c1, 0x40d8fd8f, 0x14f232ea, 0x23a42b46, 0xff077d0f, 0x103a835f, 0x96eceb0f, 0xe1a35d87, +0x4d6c6b31, 0x7e7b4eaa, 0xc00938f0, 0x26d96851, 0x6ac7c02f, 0xd12f4223, 0x043b560d, 0xa8844b9d, +0xf15b8c47, 0x9bc3ec92, 0x2fcead2a, 0xcdac5d0b, 0x71acf58a, 0xe7d0dc7e, 0x18b8724e, 0x595117ce, +0x13396946, 0x0e23554d, 0x0f7fd3d1, 0x8a414726, 0xfb55545f, 0xbd4f4ac1, 0x4a0f0314, 0x4e21b01d, +0xb6a7bfa2, 0x1df47f56, 0xfe337f3b, 0x9d35c666, 0x1edde4e3, 0x5bbc1776, 0xb1048246, 0xcd7fc90d, +0x86c1c8a0, 0xc660f81e, 0x3dcb73ca, 0xa4b05317, 0xddb4c87e, 0xfc3c8529, 0x98fb46ac, 0x19d85c90, +0x1f5ea4ea, 0x2b3dc0ef, 0x2566b8db, 0x915b1341, 0xedef8c0e, 0xc1f39458, 0x181b0f42, 0x1d6d0edb, +0x5f0ba327, 0xc023c2c7, 0xaebd1eb8, 0x4a1f501d, 0xd88f2f8c, 0x841344c0, 0x63876b91, 0xaaa9ba10, +0x817e0dfd, 0x7cf187f2, 0x018ac8ec, 0x7f5582af, 0x97b21eec, 0x05024214, 0x8a28c641, 0xcb9702ec, +0x733454e8, 0xcce12e56, 0xc7a34c2e, 0xafa25f51, 0x09c5918b, 0x55aa877c, 0xdc75b2e1, 0x554893f3, +0x0e6641a9, 0x8cefb7d6, 0xea97d30e, 0xc4a14b08, 0x18ba409b, 0xedd6788b, 0x429d54e2, 0xabf9fc15, +0x801d79b0, 0x0927883c, 0xdd19f658, 0x95c30cda, 0x1041b752, 0x71e5cce7, 0xf87fd784, 0xcf8987c0, +0x758f2204, 0xc53ab645, 0x36be3cf7, 0x64147343, 0xf5e381b5, 0x87f25b75, 0x5a5674f3, 0x4c85b2ba, +0x0b556520, 0xccf2d372, 0x74577cff, 0xd80c3b15, 0x1b8f4c93, 0x44875781, 0xc1999a74, 0xf7bdca58, +0x49d92d5e, 0xdcebe278, 0x36e14e25, 0x6a7637d5, 0xc77addcc, 0x040d017e, 0x2d4b023e, 0xc18bf4dc, +0x9ddcfc5c, 0x58916407, 0xad6de074, 0x8957f6c8, 0x479f0edb, 0x3cd589dc, 0x07fa22e9, 0x559c3ac4, +0xfffc7352, 0x029c85cf, 0xf4fffa1e, 0x5d48d9fb, 0x512107df, 0x4551a9d7, 0xdf6ecb8e, 0x0a59c951, +0xdb1cfe74, 0x5806a944, 0x9e4d3cac, 0x2edae438, 0x948c5a59, 0xcf66c03c, 0x91405c32, 0x095a2f8a, +0x1c8135e9, 0xd6905faa, 0xc4050296, 0x5d1d04d5, 0xbb2979d7, 0x73563363, 0x9a443aa6, 0x949bf7f5, +0xb1f0e2f4, 0xdaa0b0ea, 0xfa3646b4, 0x212930f4, 0xe5428845, 0x91fd9fc0, 0xd1699b38, 0xe8f864c2, +0x7a576c5f, 0x14b442ec, 0x1760a5be, 0x1185072d, 0xa11b6d2c, 0x7311c298, 0x49dbfac5, 0xfdfda3b7, +0x181b843a, 0x04b5972f, 0x2e2201c3, 0xfbd9ceef, 0x08d4cd96, 0xeb037558, 0xcfc663a3, 0xc93ee237, +0x5d16ab3c, 0x0406d649, 0x7a5509e7, 0xe70cc7a5, 0x46923c5e, 0xaf062ce6, 0x98962ac0, 0x73c47748, +0x1d4a7632, 0x3612e1f1, 0xd3dfea53, 0x20b7aa3f, 0x5eb3f95e, 0x94dab3d8, 0x2a0b2e53, 0xf5b33740, +0x9aa5a87b, 0xc8e074ac, 0xf91ef084, 0xfef4f361, 0x48491e92, 0x9bfabf66, 0x4a297c1a, 0xddd9db51, +0xf7714a40, 0xbbd68d0d, 0xd23a4748, 0xa53081b0, 0xa950824b, 0x90bcef08, 0x11beda69, 0x224dc658, +0x00643ed1, 0xcec8484c, 0x59f36e60, 0x47cda628, 0xe5cb95e5, 0x9a7cf8b5, 0x32822a3e, 0x72125dfc, +0x139269c0, 0xf518eb45, 0x71940491, 0x41dd1151, 0x87eb49e1, 0x236fd08e, 0xaede66ae, 0xbfa037cc, +0x3fab5641, 0xbb1294de, 0x58818646, 0xd63c09bb, 0x4b131a6d, 0x9419f9c4, 0x122fdb7a, 0xdde8a133, +0x5c1e79f5, 0x3b2cb296, 0xaa3edc40, 0x18a93769, 0x149068e3, 0x96d8ac40, 0xdd90844d, 0x6a00d925, +0x79092a60, 0x298fda82, 0xf31d8ac2, 0x57017fae, 0xc69a67c5, 0x63d7cc02, 0x28eae175, 0x9f5fed55, +0x4199a1b6, 0x23ec0793, 0xba2283f3, 0x36385be7, 0x7a821e53, 0xa42b1ec3, 0xbf7a5b5e, 0x9e190f7d, +0x5a4187ca, 0x9fc9b4b3, 0xf085e208, 0x4d37de1b, 0x269ead9d, 0xf5d13640, 0xf25f0f24, 0x0df44450, +0xf73b6e75, 0x2b3c7b84, 0xe7774fc4, 0x69d6a142, 0x1677c63e, 0x2a0bfba3, 0x977f97ca, 0xd23ffb71, +0x7cb2da58, 0xc49d9ced, 0x6897cd63, 0xd0032dd8, 0x6f8931e9, 0x5db54cbd, 0xc84997f6, 0xed5e9c75, +0x9abce2d1, 0x801b207d, 0x11778617, 0x19e272fa, 0x597d9e0a, 0x9dddc95f, 0xe01f4ede, 0x31adbb70, +0xf6d94ac7, 0xeb61a4eb, 0x23db31bd, 0xf4ead5e6, 0x6c013a45, 0x409bd6c6, 0xd776ca3b, 0x13a3278d, +0x0a8cb1f0, 0x1aad0132, 0xca8f203f, 0xd3f54096, 0xfa603de5, 0x083ea863, 0xa19ede8e, 0x427f9ca7, +0x16614e6a, 0x5b96dc1a, 0x51ec2543, 0x9dc9fee5, 0xb72c17aa, 0x34c3b64e, 0x36423449, 0xd62d3471, +0x6173988e, 0x257c9276, 0xe2fd88d2, 0x6bf34424, 0x54376a7b, 0x1fa5f4bb, 0xcfbc4df7, 0xac2fc153, +0xb9ab1046, 0x657292f7, 0xc457b315, 0xc5a8258c, 0x82688286, 0xf15c9a99, 0xdc647aff, 0x3d9cb19e, +0x1d288d9b, 0xcbd4f57e, 0x068eff84, 0xb2f0bcff, 0x9517630c, 0x8d900ef9, 0x7f01765f, 0xc4c05266, +0xbea656b5, 0x7fa29e7d, 0x1136d825, 0xb168fb65, 0xcfd9dbcd, 0x7bd4711a, 0x05585149, 0x8adb1a91, +0x843f0b61, 0xcd2bab30, 0x854959ee, 0x402bb88d, 0xd99aab9b, 0xffa772e3, 0x4027d3a1, 0xcbecb315, +0x5c4829f4, 0xdbf49e7f, 0x930d4e50, 0xa581e405, 0x4a4ecdb7, 0xbe33474d, 0x16532105, 0x4f07db5b, +0x668a67d2, 0x9c0b48f3, 0xe4d209de, 0x48b5555c, 0x37c9efdc, 0xe84c71d1, 0x59dd0c28, 0x9965690e, +0xd7725fb1, 0x484ade09, 0xa1193d06, 0x8142c1e8, 0x7d98fbad, 0x3780c8b7, 0xf278ef19, 0x76c68b4f, +0x55102634, 0xf9ccd433, 0xf76048e7, 0x0f91e266, 0x72bd4374, 0x367a801a, 0xe06c6504, 0x0e423d01, +0xc433a801, 0x5096caba, 0x1f6f1f10, 0xa052df85, 0x13de475f, 0xd1ed6388, 0x4917a88d, 0x868e7444, +0xc09d2ce9, 0xd2202e51, 0x6ab8c2b2, 0x33b78c75, 0xed9f0e67, 0x1e6c1070, 0x58055e91, 0x53ec6812, +0x49ea8f65, 0x935334eb, 0x6ee5d456, 0x027b369e, 0xd7987c92, 0xa37af483, 0xdd6c7fe1, 0xac46ef27, +0x45fb01cd, 0x8cbb6c77, 0x03200efa, 0xb6858079, 0xcdf77fa6, 0x35d15166, 0x174c2c51, 0xfa7cddd2, +0xa58f67c8, 0x971cfb6e, 0x76fcaa45, 0xd2627639, 0x0c514d34, 0xc2e0df49, 0x08227756, 0x11d83b0f, +0x8ede6a62, 0x01077605, 0x4d0693dc, 0x39002295, 0xa0435c2b, 0x0c287667, 0x789dfd9c, 0xddf9b6d5, +0x2b8ec1a4, 0x6540a4d2, 0xc94adef6, 0xa0c32239, 0x03c881a9, 0xe072faef, 0xe5286b31, 0x9252c82e, +0xc793bd2f, 0xb0759397, 0x8fa7cba7, 0xd6457e8c, 0xd4f92a70, 0xfe55fde6, 0x795c1198, 0x5aa4b8d9, +0x69c01ce8, 0x9ce26be6, 0x66aa4c90, 0x939ddbf4, 0xd83f8446, 0x32cd5896, 0xc1e56020, 0xf53ba633, +0x071e02b5, 0x477659cc, 0xb1f095ca, 0xe405d981, 0x8f4a7c36, 0xdf5af3bb, 0x8f196533, 0xab949098, +0x17110782, 0xb1e1c9cb, 0x2a1bb785, 0xdf0fcad7, 0x19996ea9, 0x76df052f, 0x2c9771e3, 0xc18a6846, +0x0c65a52b, 0x9a93d7aa, 0xfcbfcf00, 0xfad99f83, 0x2abfd889, 0x62c40280, 0x005c028d, 0x472b997d, +0xb2677a11, 0x01de466b, 0x3f2df4b6, 0xa9efa867, 0xa1d9287b, 0x4e9aa7d4, 0x172a3ab7, 0xa1997e4d, +0x6c5a4c56, 0x66a95c78, 0x84156d88, 0xa572ccc2, 0x9ab97777, 0x6105e0b9, 0x4df0b15c, 0x9788cc29, +0x66514f10, 0x4e30558c, 0x8e733cd6, 0x842760f5, 0x559c30d5, 0xdc95b2d8, 0xdbae163c, 0x5f19c251, +0xac606ff7, 0x52daa417, 0x7f902f10, 0xbbe4b183, 0x57785bc3, 0x5987dd66, 0x99255e46, 0xf150658b, +0x3033cc2a, 0x592ab8b7, 0x5f6e707e, 0xd1ddfa9e, 0xa45cd462, 0xe6489e26, 0xca55a06c, 0x4d5c71ea, +0x4aa55d71, 0x0a24feb4, 0x3eea2fec, 0x50a978b5, 0xa61f8c27, 0x78a6f84b, 0x832b94d3, 0x40aa168c, +0x7dc886b9, 0x3087caed, 0x3251ff31, 0xf1310a5b, 0xaf1cbe91, 0x765d2c0c, 0x93106316, 0x46f640fe, +0x9869cc07, 0x760cc955, 0x9de120c9, 0xa86eb0e8, 0xc759e85c, 0x554d82d0, 0x21df0327, 0x34123e0c, +0xd243e840, 0x32f0f044, 0xcba0fca5, 0x0b1381ae, 0xa03b8e22, 0xdec4117d, 0x96433a79, 0x3b73693a, +0x74b3e3c5, 0xddf39acc, 0xf2a22639, 0xf2df9e0d, 0x0e6d10a9, 0x2c40d38a, 0xf226f4a1, 0xde87fc0a, +0xb21a085e, 0x7e227f6d, 0xf2e60f38, 0x3eda9716, 0x1afdd4b4, 0x42c5fce3, 0x28727c95, 0x8c1fc6d6, +0x364b2c89, 0xe0137482, 0x4ac72ebb, 0x48d8df4f, 0xc7ceb9fe, 0xe39eee90, 0xe7740554, 0x6d2369f1, +0x97a6d50f, 0x481d6e36, 0xb7e04fdd, 0x32cfeddd, 0xc4d0ed26, 0x5246f89a, 0x47f08593, 0x493007dc, +0xc3ba31d9, 0xe5e78edf, 0xaff18c41, 0xc40d5821, 0x3d35683d, 0x0ea1322d, 0xe172bfd0, 0x7b06468e, +0x7a625685, 0x124e8296, 0x6c49da5e, 0xd04b5269, 0xe53f3d02, 0xab854f0d, 0x72512c9b, 0xad62dacf, +0xc7bea192, 0x19c7f0ec, 0x9354cf38, 0xb786157f, 0x017c0192, 0x6b6ee48f, 0x39bad067, 0xb3d5b80b, +0xc77888dd, 0xe4e48e7b, 0xa9b996b7, 0xccf28f1c, 0x35f28b7e, 0xb02f3bb0, 0x8c979d6c, 0x151f9cd9, +0xb2d09833, 0xdc715b4e, 0x1ec864ed, 0x448d4bd4, 0xacccf2f3, 0x92020b0b, 0x90954d1e, 0x6dc704db, +0xf8b87abe, 0xde91de07, 0xa030e9db, 0x3ab16581, 0x699d0ffe, 0x299eef93, 0xbffe0033, 0xf5d88cd5, +0x71a60b82, 0xdd502485, 0x924686c2, 0x189216fe, 0x234ce451, 0xa1670c8b, 0x901dfd3c, 0xe32fea80, +0xc1fa880e, 0x95eafb02, 0xd8ecb1a6, 0xc1b9a6f4, 0x74be4d2b, 0x13d0c91e, 0x877f66cf, 0x70650d13, +0xd9028826, 0x6cff996c, 0xbd1a4530, 0xa0a96a6f, 0x0079b94f, 0x22e31a93, 0x35477a91, 0xbc173bd4, +0xb3378428, 0xa975cffe, 0x81db2b64, 0x369ac6f3, 0xb1ca6503, 0x4169064d, 0xeea163ee, 0xb963ec66, +0x5a7d2992, 0x199f009b, 0x8883c27a, 0x8862d6dc, 0xf9c25ab5, 0x7fcd696d, 0xe8e5c632, 0x5ca44740, +0x4fe5eabc, 0x5b44bcaa, 0x76b7de71, 0x381eec39, 0x8aa57724, 0xacf86272, 0xe1eedd12, 0x6eb84604, +0x6df6f041, 0x2e6f637a, 0x568f1dc6, 0xa2e1495d, 0xbf0a2e3e, 0xc97b2e41, 0xe904e14c, 0x502eb027, +0x6852a350, 0x19e60e95, 0x51bbd6ad, 0x569a685a, 0x64680e1a, 0x6d32a9bc, 0xbb509f8c, 0xaec42bae, +0x8a101773, 0x21b99a93, 0xd59011db, 0xa30249f3, 0xeb1ac94a, 0xcb457fb3, 0x658b58c9, 0x1149b336, +0xd9b0ee3c, 0x5a305af1, 0xeceb5b7b, 0x2226b284, 0x4c73d0c3, 0x3a94d3ce, 0x4599f783, 0x7d6f9152, +0x8ec2e622, 0x486fed19, 0xee50f510, 0xb9a1a7b7, 0x454c5ccd, 0xb734ae65, 0x27297233, 0xe6667965, +0x18fb04b1, 0xaba41004, 0x82fecc8f, 0xfb1d0491, 0x90f5978e, 0xdcdf54ba, 0x3ec1be7b, 0x7cc16774, +0x3af181e0, 0xf434ec16, 0xf6e1262d, 0xe701a7e9, 0x45921406, 0x4f8f4a61, 0x4b49dc88, 0x35293bb8, +0x343a880e, 0x84a8a250, 0x05d1a204, 0xf7643c2a, 0x07464a2a, 0xd0c169f2, 0x1417e356, 0xc65e0235, +0x2b752d57, 0x0cac0224, 0xc1d181b3, 0xc238252e, 0x0f39be31, 0x3255961c, 0x1fb417b6, 0x86b513f6, +0x70fc0970, 0x01bf77e7, 0xf30717bf, 0xf2d40062, 0x34ac7c40, 0x24ac16fb, 0x6d93ce80, 0xfedc58ae, +0x45aad2ee, 0xab77f41a, 0x3d7fc154, 0xe9f433da, 0x88f5601d, 0x6634253d, 0x853ced87, 0x0c7970f0, +0xa707af5f, 0x2f2ea065, 0x28a3eeab, 0x05d2c9be, 0xdafe4dc9, 0x4c4564b3, 0xfe40a57e, 0x87201630, +0xf4597342, 0xec7a66f8, 0x18751ca2, 0xbbf4a89e, 0x54eeba08, 0x5111bb2c, 0x5eb931b5, 0xa18d910a, +0x6676657d, 0x59b25373, 0xec8120e4, 0x78f2ecf0, 0xbfe13273, 0x68120cf0, 0xc88ade76, 0x3f7ab4bb, +0x0e2387e2, 0xb18b677e, 0x6719eb26, 0x271c0826, 0x5d6a04c8, 0xf1f2c3e5, 0x1ea0c781, 0xc8832dc1, +0xd827c702, 0x078bf317, 0x263f16a8, 0xfad2d887, 0xdddf9212, 0xc03731f4, 0x41a47af1, 0xeaa5bf30, +0xa4e101f9, 0xe2fcb6e3, 0xef3b11ab, 0x8e95480a, 0xd8a746e7, 0x9641270e, 0xd94ac667, 0x1e2fcc6e, +0xce27f0a6, 0x47043e75, 0x0bd46362, 0x9f13ef57, 0x9efc4ca5, 0xbded0e35, 0x948869f3, 0xde802ab5, +0xb0cf7ef7, 0x29de89c1, 0x58448faa, 0x13a3417f, 0x5fedb263, 0xb4c89d7a, 0x14ef2576, 0xed21a460, +0x58dd447f, 0x53ba5166, 0xeec65ea4, 0xff19692f, 0x442aeceb, 0x021a2f28, 0x022f278d, 0xaeb82ed5, +0x7fc40cfe, 0xfc445690, 0xffce246b, 0x9a3ea761, 0x9b68328b, 0xc447c51e, 0x40c2d96d, 0xf3e85390, +0x80bc65af, 0x1e71cd49, 0xf2a01aab, 0x1b253584, 0xa3fcfa21, 0x92980769, 0x87b4634c, 0x4e53b761, +0x1e7a771b, 0x1706c0ff, 0x4f4f6acf, 0x50c3cc9f, 0x10b981d9, 0x2a55b314, 0x15dac111, 0x15a056a9, +0x3e37dab8, 0x31f93d30, 0x8d3dee0c, 0xd86c2cba, 0x3ab4afb6, 0x69ff517f, 0xe193630e, 0x35bfa7a5, +0x23532dae, 0x92328095, 0xd2d0bf55, 0x1022eb09, 0xa99046b5, 0x379fc636, 0x1147ce38, 0x175d23dc, +0xcd74a53c, 0x9610005d, 0x1460b6a9, 0x3adec55f, 0xfc410198, 0x9f38b6c7, 0x0f4f8879, 0xb92cc75f, +0x068ab224, 0x12a7602e, 0x8f3529ff, 0x1aa4cba3, 0x7eacfbee, 0xd46b9e7e, 0xb61446f9, 0xfdd0cb49, +0xa616e925, 0xdc74bc67, 0xd0557c0e, 0xb72df853, 0xc02b8a8f, 0xe6c4f704, 0x7229c5d2, 0x47faf983, +0x4f4617d7, 0x6ecdc6e1, 0x572951c8, 0x7f5e154c, 0x1ca045b4, 0xe94c0a0d, 0xf06b3b9d, 0xc0996085, +0x88c32dcf, 0x0aa43e8d, 0x26ac682f, 0xf6f777b8, 0xf03f0bcc, 0xfeee7b10, 0x97c3c504, 0x4467f80f, +0xa47ceb82, 0x5281e1ce, 0x4af93c49, 0x20274ebc, 0x757e4cb5, 0x33ca3747, 0xb235fcc1, 0x5ab80583, +0xe8620a7e, 0x8e2ca94e, 0xf412a366, 0x826df86a, 0x087c3fde, 0x9c012e9f, 0x5b941f46, 0xdd6b791e, +0x7d56c82a, 0x51a291c7, 0xdbb35769, 0xeffb2f9f, 0xce50d179, 0x9dd16496, 0xc133c69a, 0x4503dc59, +0xe0d734d3, 0x0e9ce6ea, 0x58c01cae, 0x51439d25, 0xadaa46a9, 0x3d3b3f4c, 0x682aa1cb, 0xafb2ad30, +0x40d677ee, 0x8df78364, 0x4a44e1a8, 0x8355d3f8, 0xc3e7f0c4, 0xb12504e6, 0xe6c97091, 0x848141cb, +0x58ad2a62, 0x96d14cb1, 0xd23a7f2b, 0x0429e769, 0x71d33728, 0xf3c7501c, 0xb78ef3e4, 0x40d508c0, +0x59ea210c, 0x930e541b, 0x92f0bc03, 0x73b5b18d, 0xd150caa4, 0xe202edbe, 0xefc133c5, 0x1e32772a, +0x42735269, 0x210fb4f1, 0x9f5cd3bf, 0xb67f0bb1, 0x73d8bef1, 0x8b601c6a, 0x789b964f, 0x25991711, +0x86b2dd8a, 0xf1840525, 0xf4d58ce7, 0x04b5de46, 0x92b3c94c, 0x9759b713, 0xdbaadc38, 0x98cce4d5, +0x5356e227, 0x07e460d3, 0xa0e67e42, 0x544925fd, 0x058f6de1, 0x9c7960dc, 0xd4da7425, 0x2a10ce0c, +0x21f76736, 0x9ac0901d, 0x31c10e8b, 0xc8a85f15, 0x44b21872, 0xd9c52ee7, 0xa256c103, 0x60d3937f, +0xbcfe4a7f, 0xe98812ea, 0xfd678bfc, 0x66fb8387, 0x8b93caf0, 0x37f4cb60, 0x1b16a977, 0x7330d534, +0xa22bfc0f, 0xa5904ddf, 0xc5f5eed5, 0x69d25848, 0x5b640b65, 0x4e2edd80, 0xb8c96e17, 0xe4831dd5, +0x98db3c53, 0x4cc62871, 0xc79772a8, 0xf1f55678, 0x7ae2115e, 0x0c560552, 0xa9ccf9bf, 0x74d74e7f, +0xc6eec006, 0x2f4273fb, 0x8a81c910, 0x8e6cfdca, 0x82feb368, 0x2cddb635, 0x70051c65, 0xed99ad3b, +0x2205ebdc, 0x7e9d6861, 0x427e44d0, 0xdc95d35a, 0x723cd9ad, 0x167a2dae, 0x4c5cda40, 0x7128dd3b, +0xe84da9e9, 0x9c204997, 0x6c167ec3, 0x044eb65b, 0x1803bc7f, 0x766883f8, 0x3d74b4b0, 0x3bd0501c, +0x98d65408, 0xa7fe2866, 0xc0162ed2, 0xc16e1075, 0x7ed20ea3, 0x359842eb, 0x279cda89, 0xb1546931, +0xccecabee, 0x35e79927, 0xba890c11, 0x1fefc11b, 0x87d3a3a6, 0x33b331b8, 0xf95e9ee5, 0x1ba74676, +0x6d1fa536, 0x8b3ea9b1, 0x65 + +output0 = +0xf690942a, 0x97bdb1e4, 0x09424ccd, 0x889e9e34, 0x31ab42d9, 0x64f6e870, 0x4d40bec9, 0xbe1ef1be, +0x16931279, 0xf20b7fd3, 0x95c573f4, 0x31ffbe30, 0x688da438, 0x6b6007eb, 0x5a260e45, 0x7f7aa70c, +0x763ef9a8, 0x88d7462d, 0xe5ff459f, 0x569aedd3, 0x2c6bdb69, 0x760ec5ca, 0xbf62878e, 0x387ed56f, +0xe0684b83, 0x4349ffdd, 0x174aebb5, 0xf7b2f234, 0xd99a61bf, 0xc7545637, 0x2d7dd337, 0xdae6fc0e, +0x6effdb34, 0xbc20c2ef, 0x2e798268, 0x3fb85d13, 0xbd3edc92, 0x3dc41751, 0xbfad303d, 0xc8e5456f, +0xf4dda60d, 0x17e88c3d, 0x3ad6d451, 0xe4ce2e70, 0x0207a59e, 0x8d602dc7, 0x7844b2a2, 0xd6060ade, +0xff66a3c0, 0x0d2084e7, 0x7ff2e162, 0xe8aa2801, 0x40330fa5, 0x1f0ee92a, 0xfe1bba67, 0xb3f26ba0, +0x5118bcf4, 0xcc5e5a6b, 0x39bc7fe6, 0xe182aa52, 0x46afcfb1, 0xd3f7fb9b, 0x9fb3d086, 0xc4dc5a3c, +0x77f8a14c, 0x6ef18e9a, 0x116463b6, 0x231f9692, 0x5486e22e, 0x17d8207f, 0xfb7583d0, 0x5ccb33de, +0x0917da21, 0xe6df15b0, 0x6c6ed483, 0x97b89955, 0xde4703cf, 0x7dd81d04, 0x52e2d139, 0x3103974e, +0xda6d46cf, 0x6a5b757b, 0x93bf2f42, 0x52cc52d5, 0x6914b439, 0xf82d4b98, 0x729f24fe, 0xa2abd634, +0x38e342f6, 0x35451eab, 0xa956000b, 0xa8c79693, 0x19fa68d1, 0x80d52a87, 0x765f6246, 0x3a006cd7, +0x8e19ab7f, 0xe02c37bb, 0x93ddd723, 0x0821fd01, 0xa068c39f, 0xbd40070e, 0xbd48ccbb, 0xfac0c066, +0x5a066d82, 0xa86c8e00, 0x219aa8bb, 0x175d5495, 0x13767c65, 0xbf9ace5e, 0x570e9b3f, 0x09993d78, +0xb8aa41f6, 0xaabf8b95, 0x1f5ccb78, 0x96915f8a, 0x018539c6, 0x7e6f09f6, 0x18f6acff, 0x7c185595, +0xafbcf3fe, 0xf05eb9e7, 0x97c38881, 0x16abb79c, 0x09d035f5, 0x2d00c99f, 0x90e3154d, 0x451204f1, +0x4caf2a85, 0x0acc10d9, 0xc4ffc5aa, 0xa847977c, 0xa236d10f, 0x16485325, 0x62d1230f, 0x2d8e2b45, +0x86c78e24, 0xd5bfd27a, 0x4c64f6ee, 0x0602d6ef, 0xe075a9ea, 0x3509eae5, 0xb6ba837a, 0xa2052483, +0x25e1a262, 0xff2abb89, 0xf7c9c91e, 0xb1fd3b41, 0x462406d8, 0xfc058416, 0x1c40d32b, 0x6e6aadb0, +0x1324d11d, 0xbad5e44e, 0xb7049b55, 0xe0d70a43, 0xca08027c, 0x598a58b4, 0x14c74fa5, 0x98db9187, +0xb910b813, 0xd903f18d, 0x12b2799a, 0x376da769, 0xc672807c, 0xa582679f, 0x494491ab, 0x5bed475d, +0x32ac9126, 0xcbc77408, 0x909eb968, 0xd05ff8fb, 0xa5d46934, 0xe2930b07, 0x19127406, 0xa56d8591, +0xc12f6abf, 0x3d58da57, 0x779ac440, 0x162a5701, 0xfbdb62c0, 0x153eaed0, 0x55d496aa, 0xd8dc8faf, +0xa2f82af4, 0x160cbf11, 0xed7587d6, 0x9a5219df, 0x6bc11e7a, 0xb2ee98b4, 0x18a14f0c, 0x291c9cf8, +0xcf84be87, 0x7bd37549, 0x513df1bb, 0x50b889cc, 0xb5304496, 0xb5f3a45a, 0x492de2dd, 0xe0c9fb57, +0x4cf7be64, 0x58299e5e, 0x36b89425, 0x186d63ed, 0xacfc9181, 0x84ebf56d, 0xe200dae3, 0x3a430131, +0xbe4f2b77, 0x32189609, 0x86c6a14e, 0xcc654220, 0x284877a5, 0xe0263e71, 0x96cdf8b2, 0xd194071e, +0x9dff2560, 0x8fd65d33, 0x8f75043d, 0xa3936859, 0x16f2129d, 0x41b86611, 0x23ed2400, 0x05bc4e6a, +0x7924908e, 0x3240c348, 0x1463ab1d, 0x10a4176d, 0xb688d5c5, 0xfd76b8c5, 0x595a4e41, 0xc02367e6, +0x6cbe2b22, 0xb23cfa6b, 0x3e284a7a, 0xd4992177, 0xc93ec5bb, 0xdaaeaf1b, 0x7b2b69f1, 0x2d1e27fb, +0xafc83a71, 0x553b31d0, 0x9f9408a4, 0xb2b1047b, 0xf0bfd411, 0x20af5a39, 0x6b09a021, 0xf79943db, +0x45f001e3, 0xba39d592, 0xda038c55, 0x658f1f65, 0x3b27c92c, 0x3765469c, 0x1d97c758, 0x365aa095, +0x9f0bdeff, 0x68692433, 0x267cda88, 0x4eb34d37, 0x2ef7e1da, 0x99c65582, 0x034e0e56, 0x81175ff1, +0xb3af3ae7, 0x8d8bff1d, 0x9d0b7eae, 0x63aeca43, 0xa5296fcc, 0xcf4311eb, 0x6f633120, 0x192bbf00, +0xc42d2db5, 0x96e5e39e, 0x9a058c61, 0xbb363125, 0x32821f9f, 0xa3f9812e, 0x1412008b, 0x332c02f2, +0x53710e69, 0x56039aa1, 0x36aacf24, 0x22a2888c, 0x841d7bca, 0x9582ecd9, 0x51d9079c, 0x17b5ac6f, +0x58a77687, 0x1628fc67, 0x9f080c5d, 0x25b0dcaa, 0x86af6889, 0x49441a16, 0x1b90bbe0, 0x12720d9b, +0x337dbcff, 0x7fe6fef4, 0xb6ad124f, 0x38817314, 0xdb75030a, 0xa6021928, 0xfad32be9, 0x5f42075f, +0xb93bde63, 0x169e7138, 0x2c9e081d, 0x14f7632a, 0x867dc112, 0x82ac4eb4, 0xbf8881cd, 0x7123001f, +0x00a79cdb, 0xf2b37725, 0x4fe3f649, 0xf91ab3de, 0x594b21b8, 0x824b9dd7, 0x86f4c8e7, 0xbb843bc6, +0x6c9fcac9, 0xeb8aa526, 0x05158637, 0x6dc5c8f3, 0x76600664, 0x508ead2d, 0x40e5e256, 0xdf7958f0, +0x5747cfe2, 0x3877ffdc, 0x11f9d3b0, 0xa2550567, 0xc391129f, 0x4fc5fbbb, 0x9098626c, 0x17435e96, +0x3e46ced4, 0xd10b829c, 0x569cd35c, 0x22cd04d9, 0x6c83e3bc, 0x3af817ba, 0xf931cb4f, 0xff612783, +0x304ad058, 0x5f8daaed, 0x6ccbe124, 0x80fff3fe, 0x51fa21c4, 0x1d267d3c, 0xa02b8b84, 0x120bf3dd, +0x53fc63be, 0x0e70dc18, 0xbe80d86d, 0xf3a2b3b1, 0x09579c67, 0x0eb7d831, 0x4e794d7a, 0x5314ff3a, +0x97e51a2e, 0xf7f8e20c, 0x49baaa2d, 0xd8bc6420, 0x219364ba, 0x05d999d5, 0x6464ca46, 0x7d79fd03, +0x4246a824, 0x81114cb4, 0xec729683, 0x68fa6517, 0x413542e6, 0x55fddafa, 0x0a0c88df, 0x8f81ef0b, +0x897cf998, 0x37d3bd4e, 0x67c62c51, 0x99640163, 0x45372886, 0x7e923097, 0xc5389a43, 0xdb91a6a5, +0xbeff35f2, 0x0c0eaf69, 0x0ad80229, 0x9310a6e5, 0x3e4dfc82, 0xb644f4df, 0x89d69826, 0x3c9dc18a, +0x40d5aaec, 0x0746bdb0, 0xeefe5ef1, 0x30d23508, 0x981f9492, 0x8627eca9, 0xf0f3020f, 0xd9459ce6, +0x102d297a, 0xe4eafbac, 0x0946a3c7, 0xfda640be, 0x937bd23c, 0x93cebb29, 0xc598ee7d, 0x8628c20c, +0x6c8251c1, 0x0116c27b, 0x7adc872c, 0x779ce9de, 0x2832df36, 0x275e9f9e, 0x66ade6ef, 0x8436ee17, +0xfb06b3d2, 0x014f9a31, 0x92a97678, 0x90ff14b8, 0xca578ca7, 0xf44299fa, 0xbcf6e11a, 0x2a97c505, +0x4779346a, 0x3ca14066, 0x38c64d73, 0xdb599cab, 0xa2ad0720, 0x344dbeaf, 0xc004aa65, 0xa1756fa3, +0xf54aa477, 0x12783a97, 0xb13ad2bb, 0x86185384, 0x96dffd80, 0xdcdcc58a, 0xf56a80f2, 0xb32170c4, +0x7f613497, 0x871f7382, 0xd79f6a9b, 0xfa444729, 0x7e0ced9e, 0xa71e7978, 0x4adebd54, 0x53043dbb, +0x11850000, 0xcbf20157, 0x0298346f, 0x4b968944, 0xe23eb1a7, 0xd6af0010, 0x5d456aba, 0x558c9210, +0x70820458, 0x71e61ea0, 0xcf112929, 0x0e8c5bcb, 0xe577c26e, 0xf3a32fae, 0x74cbf9a7, 0x70bf8761, +0x3010f7af, 0xbfb34732, 0xb327c739, 0x2d46ed0a, 0xf3fce891, 0x87f5e409, 0x3b1ffce7, 0x20efaf5e, +0x1d6889f3, 0x037e9aa6, 0x9746c14c, 0x40cadc87, 0x9dc2da7a, 0xe9964b84, 0x9e28b792, 0x5ae6c4a4, +0x45a27fd6, 0x7dc5f8ef, 0xc02b338e, 0x600cde92, 0x1cdd7b6e, 0x46e48e4c, 0x5df1ed0e, 0x7d0e13a5, +0xe204910a, 0x5da27a6a, 0xae2c1dba, 0x4a53a8ca, 0x4f7934bb, 0x74f9df33, 0xb2eaef55, 0x06f4f544, +0x167f9df0, 0x7074d5d0, 0x51c3cf7a, 0xec879c3c, 0x164a95ef, 0x47bfac95, 0x7a4ef159, 0x8de27e54, +0x1cfb6a00, 0x860390a4, 0x3c0de75e, 0xf5876182, 0xed03beaf, 0xe8ad8bb3, 0x80259434, 0x08550962, +0x885c3017, 0x460d88d3, 0xd1ea8f87, 0xef4a44da, 0x9178d2d2, 0xa3a4536b, 0x46fb423d, 0x094f70a8, +0x7399f93d, 0x0bc9feed, 0x840cb076, 0x6096ae96, 0x126fec3e, 0x133bc8cd, 0x77f07640, 0xc516a5fb, +0x81ce644e, 0xb2b20edf, 0xa785f0e1, 0xc14ba294, 0x9194f8d0, 0x73b5c5df, 0x64d93999, 0x64770c87, +0x5af360b0, 0xa3469227, 0xb2881e32, 0x3fc1a290, 0x1c7f51dc, 0xc4499532, 0xb0652a33, 0xfce6cc52, +0x033333d5, 0xbf7ef720, 0x4616a008, 0x744e151c, 0x0d2210ae, 0xe3171000, 0x7df8f60e, 0x9cdccf61, +0x96126efc, 0xa2a5dafa, 0x1e8304c2, 0x2abc4565, 0x8e4185de, 0xebfc7078, 0x6bdfbd6a, 0x5d756c1f, +0x42d2f01f, 0xb09c40fd, 0xaa424f36, 0x5a2f890b, 0xc85aea2e, 0x95b3ede1, 0x42866f91, 0xdd21f7f0, +0xc5c7cb28, 0xe46a2f45, 0x28f5c77c, 0xab978ab4, 0x673c60f5, 0xa76194c7, 0x6d6e94c9, 0x464967f2, +0x0dc5fa90, 0x423e253b, 0x9521126d, 0xce4e612c, 0x217250f8, 0x8fd10eef, 0x27cbcf40, 0x66c5f77a, +0x7fdd1428, 0x5a803f25, 0xcc8eb41f, 0xd84df81a, 0x2667c030, 0xc0454e9f, 0x0a540a1c, 0x1e943641, +0x45f26f1f, 0xd77eb2cb, 0x364010dc, 0xbc84f9c6, 0x5e7b5c70, 0xbb5d23c3, 0xb5a2edf1, 0xa94c7803, +0xebe419e1, 0xc7a9c777, 0xe4744a65, 0x357b74dc, 0x5a884088, 0x70842a6c, 0xd5a979cc, 0xb2872021, +0x5d79809c, 0x1ad5cfd0, 0x5c1276d4, 0xd4fad768, 0xd640beb0, 0x2ec4e920, 0xe2bddbcc, 0x7b7ea960, +0x4f9a3a4c, 0xce57cf51, 0x3068683f, 0x740df2f9, 0x14855fd2, 0x6c1410de, 0x7e20e8dd, 0x35890b59, +0x316cc694, 0x54203dd1, 0x60d0f75f, 0x55ca0fed, 0x06898039, 0x5e92627e, 0xd2f56f52, 0xf75737a1, +0x5cebdcee, 0x10d29efc, 0xb76d842c, 0xa32e605f, 0xdecfc2cc, 0xac34b1fc, 0x46f5fc6f, 0xd1591a3d, +0xd88bb24b, 0x3656986c, 0x26563e0f, 0xfcfad5c1, 0x6d6abe00, 0xc819134c, 0x6abafe6b, 0x7204fd38, +0xf3207153, 0xbc7b698a, 0x1530c692, 0x70c0be43, 0xb674586d, 0x635b82aa, 0x75b08ee6, 0xaaea74a2, +0x2501326e, 0x1e8b59bd, 0xb023f492, 0x00aee5f6, 0xbbfc6491, 0x8c42fc95, 0xbb796282, 0x600c2293, +0xe4cb7406, 0xd4a4c8fa, 0x6e36bd85, 0x9bceb5fe, 0x6e4505e7, 0xecab0fcd, 0x2b1f3ce9, 0xea8a3739, +0xc911c418, 0xb4f5c575, 0xe5342fdc, 0x2fd88173, 0x6f7a16b3, 0x0bb82572, 0xbbd11789, 0xefcb4899, +0x4da28124, 0x9ba40d7a, 0xe7d8fa1e, 0xe23a9d68, 0xd7c0effa, 0xcff717b3, 0x6ed89228, 0xdb741b39, +0x705d6e1f, 0x7bf87de3, 0x4c1de32e, 0x6db3d17a, 0x47893039, 0x22d31a3f, 0xcc725dcc, 0xd9d0d85e, +0xac80413b, 0xbb661b21, 0x56d9050b, 0x9d007604, 0x312f7541, 0x4a37f702, 0x8b8effbd, 0x7d067750, +0x9cc28409, 0x8c6bc23d, 0x43306b51, 0xf7317955, 0x3c160c99, 0xb0e3d60f, 0xc23b4f4d, 0xefc1c753, +0x4c4aff7e, 0xd64a8cbb, 0x868273f9, 0xedbe83c5, 0x8865edba, 0xd2bba474, 0x868133ee, 0xd202a360, +0xdb88b9c9, 0x6c8281b2, 0xacf3c102, 0xd3253f57, 0xa2894060, 0x79976f39, 0x34eb1a38, 0xae45af9c, +0xcea1aaa8, 0x1626d035, 0x65622d1d, 0x2f0b2603, 0x0c07e443, 0x55dab61f, 0xb4822c56, 0x056fbb16, +0x10893d6c, 0x07d9cb6e, 0xbd46cb33, 0x5e275703, 0x53c47a3a, 0x23129ab9, 0x58b75c32, 0x6a3066ed, +0xf58f62d8, 0xeb32bce3, 0x0d2ad7c4, 0x40293ff1, 0xa4665c62, 0x4b26a80e, 0x69488ee8, 0xe74dc068, +0x6ee221f4, 0xbdf32463, 0xb7ea30f2, 0x3e75c7aa, 0xa315b315, 0xe71fb414, 0x1317f977, 0x3188f27c, +0xad075875, 0xb9d1ecbc, 0x8ecad97b, 0xc8926384, 0x6f97e481, 0x09c82916, 0x0694ef16, 0xd2250a4b, +0x5bf124d3, 0x40d042bb, 0x9c67e10e, 0xc2635f49, 0x8f0cca9a, 0x10d56753, 0x56394fcd, 0x15a3396a, +0xf0584405, 0xe29f7e61, 0x55e67a53, 0xb225f132, 0xe9b693b1, 0xd23f658d, 0x04084aa9, 0x91437ade, +0x94c9e2ac, 0x63a81e0b, 0x3fdaeb14, 0xe58bb18f, 0xa608674f, 0xeb08ab8c, 0x266f9e91, 0x20a247c3, +0x38c47ccb, 0xaac11899, 0x1c20b8cb, 0x2355e513, 0xa3b2d570, 0x40cf8111, 0x0fbac6fc, 0x2ac0dc55, +0x9b3f2f3c, 0xc3139c54, 0x2d443470, 0x67f68f0d, 0x8830b8a3, 0x9511bdc2, 0x5c44e175, 0x66f79d4d, +0x64eca6c0, 0xe3499348, 0xdb1e12d0, 0x370f88d6, 0xc3f2791b, 0xb832a3f2, 0x77d0521e, 0xf0036ef3, +0x95fefc9b, 0x8b3ae29f, 0x4eda39a4, 0x12536897, 0x8ddad95f, 0x7c11cef3, 0xe4154b17, 0xc2e388dd, +0x5ce5c69b, 0x064221d4, 0xaf1b617d, 0xaf4b7186, 0x53f8f582, 0x816e3f1a, 0x00a306ed, 0x52f6ef17, +0x68d93236, 0x41173b4d, 0x61c5ffce, 0x4dc0d0be, 0xaca0ff32, 0xe4ff8277, 0x120e826f, 0xd52e262c, +0x66827d76, 0xda5b1e9f, 0xfee6387b, 0x7005d47b, 0x0b049d56, 0xdcf6a4d7, 0x27ac9663, 0x453c93c0, +0x2e38e234, 0x7cfe2736, 0xdab7b0b9, 0x00f1d773, 0x99da6b76, 0x5c171181, 0xc810c77d, 0x0e27a276, +0xd1af39ea, 0x80fec544, 0x2205dc24, 0xdafa47d9, 0xc5e08f2b, 0x0cfdddfa, 0xcb843f9a, 0xa52f186b, +0x27cd8efb, 0x74924771, 0x21f8a411, 0xda6f830e, 0xb9017c5a, 0x53ebf07d, 0xc50f59b4, 0xb7cca99a, +0x5fc62c94, 0xe329d696, 0x8f692514, 0x0d83ae14, 0x0b697893, 0x85c69b36, 0xab3d1285, 0xb29d7e78, +0x406a0fa6, 0x337f4bb0, 0x0c3de707, 0x4c7d71c8, 0xc0332445, 0xf61d16ab, 0x01862b19, 0x8b963de7, +0xacf7b650, 0xfd8c511f, 0x6356f669, 0x757e29c9, 0x79b7fd6c, 0xabecd50b, 0x10b9fc5e, 0x784c1cb0, +0x08ab8fa5, 0x1335e4b0, 0x44b75723, 0xa9317f1e, 0x3e1051a9, 0x7be42a04, 0xd9e86ba8, 0x04efc822, +0xee824d97, 0xb0534b7a, 0x6ed250f1, 0xa38da157, 0x46dd1dd4, 0x73586bb6, 0x5270a77a, 0x31c460ca, +0xf17a54cb, 0x7cbbc937, 0x19fdada0, 0x65c0e5fd, 0x7520c3be, 0x643560d6, 0x4bdfdf90, 0x1b903707, +0x1ce06160, 0x5bb8a868, 0xc7f71a7d, 0xb5a092bd, 0x2d7bfd09, 0x610b2a13, 0xae0fef7c, 0xe72c8793, +0xe7941bf5, 0xff8cccf2, 0x25ff3b32, 0x1a1ec5fb, 0x2886513e, 0xb8c7e05f, 0x16a7d161, 0x7df9727b, +0xdec3115f, 0xd6b903b5, 0x10d22e00, 0x91f1a899, 0x3249d0c8, 0x4c5bbcda, 0xe692f82a, 0x2b5495e2, +0xb405f241, 0x116654ee, 0x163c68a0, 0x33699a79, 0x506587a3, 0x0a6ef4d6, 0x68687151, 0x78f844e6, +0xfcf0747d, 0xfd049f15, 0xce27160b, 0x8a067513, 0xd42c58c1, 0x5c6febbe, 0xbe9ab351, 0xa3cb004c, +0x7a154bd3, 0xde1d43f2, 0x0757f5ba, 0x9eea9bcb, 0xad99600c, 0x79007225, 0x8b80bbc1, 0xa6494f49, +0xd19c5576, 0x25169481, 0xb541333a, 0x05b934a6, 0x38089141, 0x35aad753, 0x9451bc05, 0x6fca2e2f, +0xf7196eda, 0x2b603ccb, 0xe0b57c2d, 0xc1992e60, 0x5ad987e9, 0xcabe9391, 0x19f30b1e, 0xff43d8c5, +0x77796bef, 0x08c18937, 0x50b39a59, 0x7af3b1c8, 0x0bce4ad0, 0xba0793ed, 0x9a606f19, 0x3f3f84d1, +0xff96bacb, 0x02cb465b, 0x076070ac, 0x92f23af4, 0x33886f0a, 0xb00bc421, 0x7a6780dd, 0xf3fae0dd, +0xfecc391c, 0x5d0ae0e1, 0xe834ffb7, 0x0cd74ae7, 0x95d832bf, 0xc7abe74a, 0x1c6bbd11, 0x313a220c, +0xa79c695f, 0x786b49b1, 0x8314d497, 0x1f2d00e9, 0x480d17ca, 0x7592d08d, 0x0405ad3d, 0xec7431a1, +0xb617a9b6, 0x0d55c4a8, 0x20f2c4af, 0x2ac7a905, 0xb9822be0, 0x25832c56, 0x99087a83, 0xa994f666, +0x8e444309, 0x6e4fd02a, 0x7362a6f4, 0x1769d572, 0xf6f68631, 0xe33cd8e7, 0xc1f7b898, 0x4e255ef8, +0x17e77be1, 0xe5535db2, 0x33cb4054, 0xaee92bc1, 0xc583178e, 0x58602446, 0x520465f8, 0x805b81f8, +0x5ec51006, 0x122a2bc3, 0xc7456e09, 0x8654b402, 0x1725dabf, 0xda59d4c1, 0xb1630123, 0x202e42cf, +0x6d03c0c4, 0x58044033, 0xa6ddd488, 0xbfae228a, 0x01914e16, 0x8bc20acd, 0x5e2a9b0d, 0x52aa9362, +0xc7c9eb45, 0xb5925cd4, 0x7794d4da, 0x74f615b4, 0x455bc62c, 0x139f5871, 0xa8b643ca, 0xebcca0b2, +0x4b502cd3, 0x1ae6b0f3, 0xf659ed9b, 0x8178a8af, 0x01013584, 0x0affb832, 0x02bc9176, 0x89602571, +0xbff37bff, 0x4384b1e8, 0x39afafb4, 0x866906f3, 0x308853f9, 0x621d2617, 0xf784d13d, 0x25c0cd96, +0x8e1546b7, 0x50bf63f5, 0x921f6b7f, 0x4661624c, 0xdfbb727a, 0xe652372c, 0x3b4b2d70, 0x55e1e45e, +0xffd6c3cb, 0xbf4efe20, 0x041c3e6a, 0x96b9e930, 0x35f89446, 0x1b5c8222, 0x56529132, 0xfe700b4b, +0x9b5fc3e9, 0x6b9911c3, 0xd8b00e12, 0xac975c76, 0x34f5c77a, 0x9622d735, 0xc2e862a1, 0xa7f352ec, +0x341a447b, 0x80d4e366, 0xa18a2bf0, 0x4dac1dbd, 0x692b2787, 0x688fde0b, 0xa21b456c, 0xcac5c769, +0x36547232, 0x0d7e85b8, 0x4cdc3a71, 0xe98ac05e, 0xbe1c2a16, 0xf2459a61, 0x7588ef51, 0xd6c71c73, +0x873fbd17, 0x78af36ec, 0xe1a62f3f, 0xb9bfc692, 0x06301428, 0x648d8eac, 0xea9d0a91, 0x2dfca974, +0x3a7cba0d, 0x938bb495, 0x6d176a5e, 0xdc2dd8f7, 0x92516e27, 0x3c361e4e, 0x5391b964, 0xe771760d, +0xc2ac7307, 0x5118ccef, 0xa7dc0375, 0x201cba41, 0x916a4221, 0x78406994, 0x4bae1997, 0x1e99265f, +0xec9f9971, 0xdf9a7755, 0xd8a7aada, 0x1f73b436, 0xde150a0f, 0xbbb357f5, 0xb6123aec, 0x29d94822, +0x20b10220, 0x2ae2de80, 0x029b5aec, 0x408d331f, 0x9c6c75b4, 0x2f6b41cd, 0xb509868c, 0xaadef6c3, +0x62c19305, 0xd50fd1fc, 0xcf926f1b, 0x11fc719f, 0x91eaebb5, 0xa3543ca4, 0x9168176d, 0x721316bb, +0xebd56480, 0xeeaf330b, 0x3533453d, 0x893ebe6c, 0xff497844, 0x7342bec3, 0x78c2e6c3, 0x69911944, +0xde42bfb2, 0xe802e446, 0x5b9e30b8, 0xcb6e8fd9, 0x7ad20299, 0x9499bfe6, 0xc767474f, 0x2306e85c, +0x89b01dc6, 0xf0fc2d90, 0x2f467c98, 0x4e9f9a5a, 0xd828b94c, 0x6b690eee, 0xda058cea, 0xfa0b0fc2, +0xccbc7890, 0x786b2507, 0x7d780c14, 0xf21f3f2e, 0x0e70e425, 0xc92bacd8, 0xb744dc1c, 0xe96bb8a1, +0x7d7d4ba3, 0x5d216901, 0x0beeb8c5, 0x4fdc299f, 0xe4d7a429, 0x71f39835, 0xe9360a14, 0x86698189, +0xd840ab53, 0xb252de53, 0xba0af67f, 0xa4ad7aac, 0x951c8078, 0xf9730896, 0x3c04bb39, 0xaf37dd22, +0x49823e8c, 0xc7acdad4, 0xce837484, 0xb4f0b30f, 0xfda69a9d, 0x32b93116, 0xa7ca9609, 0x422a3f5d, +0x2be869da, 0xc1b92841, 0xe2f70814, 0x3cc3b240, 0xf7a6980a, 0xc0e17c29, 0xd6033290, 0x16e4c508, +0x5e154612, 0x09ee03eb, 0x2528efd6, 0xe4aac04d, 0xa7d66a68, 0xb4f59c12, 0x828bd31f, 0x0ff3b8c2, +0xcbcdd28d, 0x416551e3, 0xfb2641ed, 0xf0934461, 0x77403f32, 0x15977dc1, 0x0d45beb6, 0x5e494ec8, +0x427ae8a7, 0x5f61b4d5, 0x8ddf209e, 0x237cf236, 0xa3a34484, 0x4bb69022, 0xbc690766, 0x76e1c2d0, +0x54194602, 0xb7572cda, 0xfdb5a8ee, 0x444ba245, 0xaa2c985f, 0xf07deac8, 0x725fd936, 0x5de1fc70, +0x287649ad, 0x685fbe45, 0x0ed921fb, 0x82ef5e95, 0x1fb9641b, 0x306894b0, 0xdfbffe48, 0x6984f041, +0xd01f24bb, 0x079400ff, 0x37709e53, 0x48711ac6, 0x4116a686, 0x7d822ae9, 0xd3332c40, 0x30c6be5a, +0x43d6e44f, 0xb3a4948f, 0x3cf79b5c, 0x3ff0155e, 0x448df55d, 0x7ee00fdd, 0xf456068b, 0x5ef85991, +0xa2ba3b3b, 0xd03463c0, 0x5306ff03, 0x8f794d50, 0x1cb90bf6, 0x110c823f, 0x7174e8d3, 0xee735d22, +0xb8fc9f9f, 0xe349b47e, 0xd7b4b715, 0x3d381e23, 0xd6964b5a, 0x1a41b8fa, 0x5ea504e7, 0xb2f0fda9, +0x8e3a0763, 0xbbae49a3, 0x28501717, 0xbc6aed6d, 0xcaa93fa5, 0x55b8f778, 0xa75416dd, 0x65fcd7ab, +0xa7149228, 0xbf32883c, 0xbb8d6022, 0xe3b5eb31, 0x5b2cca37, 0x817eee8a, 0xeb6b4abe, 0xff0853c3, +0x6c7dbda1, 0xf04da9f2, 0x32f0245e, 0x5a45d240, 0xb85baeb8, 0x09619854, 0x2ee82e51, 0x72b412a6, +0xbf6712f5, 0x9e23ba44, 0xb341502e, 0xdd18e9dd, 0xc3b5a3c8, 0x466e8798, 0x31d4233c, 0x736b1083, +0xeb960c67, 0xe53cfb48, 0xb4c794d6, 0xb752eff5, 0x6c82a7eb, 0x02a51f58, 0x7f09f694, 0xa449b1b1, +0x9e54e12f, 0xc679adfa, 0x20995bd5, 0x03aa591f, 0x2a828763, 0x7266d954, 0xdcb0a47e, 0xcbadcfc5, +0x16abd270, 0xe7e13511, 0x4faf024c, 0xb752db07, 0x0e8e1c9d, 0x7790dc90, 0xae565a6d, 0x65a4452d, +0x85596c5b, 0x3d167e41, 0xacdca137, 0x6839fd43, 0x84667bf5, 0xee45a3b5, 0xa773c09b, 0xbc074a51, +0xeb11bc77, 0x8476ac79, 0x15a6edb2, 0xf940d2e5, 0x802debe0, 0x1701def4, 0xff1c3625, 0xff7602b4, +0x6e8847e8, 0x78c5c9a0, 0xb8818b12, 0x94bea57d, 0x5f6bc1bc, 0xad51e7e0, 0x3b8ee452, 0x2299a03b, +0xc996313e, 0xd582a0d6, 0x69f1cb04, 0xf7b03037, 0xda6031c3, 0xdaf2c42e, 0x547c1bcb, 0xc85ba742, +0xf67251c5, 0xac7bd05a, 0x742b2e18, 0x2b1343fe, 0x6407d757, 0x9501e8c7, 0x7b10d9bc, 0x0cf23c43, +0x13051cfd, 0xd853682f, 0xb99ecea0, 0x70044abc, 0x4b00bc0e, 0x4d151f93, 0x6894f897, 0x37d9e99e, +0x50bf8d94, 0xbc6419f4, 0xef984161, 0x9a60c3e1, 0xdda8aa61, 0x71a1a989, 0x7aad3274, 0x11a38bb4, +0x30cfbce5, 0x27d7410f, 0xb866b15b, 0x6efef725, 0xed36eb9c, 0x67b7099f, 0xe42db6f8, 0x30ecad93, +0x8c0e7426, 0x28acdf9d, 0xe695b151, 0x87eef9a6, 0x0cfba599, 0x91d6bc59, 0xfcef35f6, 0xca78a142, +0x1f152d70, 0x6929bb33, 0x66567410, 0x04332777, 0x833cb07e, 0x10bd4837, 0xb54dcf4a, 0x383417d9, +0xabac3628, 0x2c1e4d75, 0x3c55a006, 0x60183f9e, 0xdf3cf8f4, 0xbb4e3cab, 0xdfe0c707, 0xb499b83d, +0x6a86436e, 0x6fd9f508, 0x3912b7f0, 0x3da741dc, 0xfb909f04, 0x42bfe9a0, 0x86b7e88e, 0x27ee8892, +0x1dd12a32, 0x7c1e0b6e, 0x389bfa4e, 0x8ae84b3d, 0x94009549, 0x66eecaf1, 0xf9ef1c93, 0xe76e9c63, +0x393e21cc, 0x31bc2c9e, 0x29201de2, 0x133e6d78, 0x1099415b, 0x27d15bec, 0x28435521, 0xafbb17a5, +0x2e90d111, 0x15233948, 0x02e2767e, 0x5a18c2f9, 0x4b413b43, 0xd2ef6649, 0x226860cf, 0x5391da82, +0x1a0c69dd, 0x72bf736a, 0x19ade906, 0xb325f926, 0x4c5edff9, 0x5abe6e2b, 0xf16e2387, 0xc1606a04, +0xe353f85a, 0x1467c159, 0xa8151d58, 0xa54c33d8, 0x886c197f, 0xca3daf3f, 0x7964f9fe, 0xd9b8189a, +0xbc73922b, 0x24ac27fe, 0x58c50007, 0xf8509bc1, 0x2467d28d, 0x1f0e44c1, 0xebd7d409, 0xd87ecd16, +0x75414244, 0xba21372d, 0x1897b692, 0xb8a6831c, 0x579f4de8, 0xc19db76e, 0x0255cc42, 0x82fbe999, +0xca935c73, 0x548e46ae, 0xa5e685af, 0xcdfb5ef2, 0x8e13b71e, 0xc630de10, 0x6354b0f2, 0xd03d3c96, +0x1456eb16, 0x6e60ab57, 0x512aa67b, 0x68b3d913, 0x04e2808a, 0xaeabb2f7, 0xb5a7050b, 0x7f7d51c0, +0xcf0a8ceb, 0x4ac10855, 0x6ce17403, 0x1d678fc7, 0x7fc6a65b, 0x31f83707, 0x42d995d6, 0xd1562de7, +0x6c8355ab, 0xab0a2e61, 0x4c29b2c7, 0x77b46f73, 0xb87cc1c7, 0xa26857e5, 0x7103f34a, 0x4c0da95b, +0xccc43b4c, 0x454f6436, 0x9d7fb501, 0xda0efc3b, 0xfdf7ab90, 0x31c14578, 0xbf893cf4, 0x714e6ae0, +0x3f330f22, 0x58930f8f, 0xbe2b0493, 0xd45b0811, 0xfce1cf51, 0x2235ea01, 0x5f389de8, 0x1d6a8c1f, +0x207dc635, 0xd9bdecbd, 0xec4f0e8a, 0x8f13e668, 0x0ed66fed, 0x4436a2d1, 0xb1cec1d0, 0x5c6fd3c4, +0x552fcb59, 0x4bb0c90b, 0x01990769, 0x96f4df07, 0x0b488e99, 0x5dcf02bf, 0x8c223aa5, 0xbec03723, +0x7bb0b5bc, 0xa36c4723, 0x558e0f65, 0xff88d022, 0x37135241, 0x26c4ded6, 0xb5e96e68, 0xf2071b6b, +0xcd67fcac, 0x4a8a3130, 0x12d0d41c, 0x4429514f, 0x7e3236d0, 0x947b245a, 0x42f3b830, 0xc02e0787, +0xbf878531, 0xf531f3d0, 0x3e0cbb94, 0x1df64dc9, 0x2a1206c2, 0x8d21dd6a, 0x374ce54b, 0x9d62fc7f, +0x0d32940e, 0x9fbccd02, 0x38246063, 0x1560414a, 0xea6ed90f, 0x9fa55e17, 0xfdec9c69, 0xf43ee80f, +0x067c88df, 0x076c9e72, 0x48360f1f, 0xdd0d2737, 0xd0f245b4, 0x04a50415, 0xd803e008, 0x0c2d713b, +0x45242861, 0x61c8b578, 0x956c0954, 0x271158c5, 0x2c6289f7, 0x22da4bea, 0x2a34c673, 0xabd0d3a0, +0x8efd21b5, 0xa80608dd, 0x40fc1f14, 0x123fac2f, 0xfc9d384f, 0xe64a5d6c, 0xb96479e2, 0x0a5f71f9, +0x5b7f3a24, 0x98462b08, 0xbc9d3670, 0xbf0b09d2, 0xaca9f544, 0x1ffae7c4, 0x8e7bdc9f, 0xbe608661, +0x279a80da, 0x77f82d66, 0xf7631447, 0xa55cc59d, 0xd6161250, 0x6e5c4acd, 0x981b6ba2, 0xe0c4dbca, +0x2e9d29ed, 0xa7d51085, 0x89302615, 0x40e7fb38, 0x4b4621ad, 0x8f15702d, 0xeefd4189, 0xc7efc927, +0xaedf1dc0, 0x0ca723bd, 0x0801de0d, 0x9713c0fe, 0x1181a73e, 0x27e47a37, 0x3a54473d, 0x315f58e5, +0xd7a349cb, 0x8e5bdc59, 0xe51bc827, 0x9c511861, 0xc020e5fa, 0x9df6d9e7, 0x8280ce46, 0xb4791cc0, +0xe1955dc7, 0x1735c478, 0xf3e5e25a, 0x23b85b00, 0x8169e275, 0x462ebafe, 0xa416a938, 0xff95db7d, +0xe559940c, 0x2dfe9649, 0x49c0d033, 0x7dae9063, 0xc5b5ac39, 0xbfcdc599, 0x8ef2ae01, 0x8f225bc0, +0x53b3818b, 0x5d37b35e, 0xf4ac1398, 0x25ed45cd, 0x2987fb6d, 0x0e6b571f, 0x523a6510, 0xcc3fab8b, +0xceec45e1, 0x47362006, 0xd08c6c1f, 0xec80a22c, 0x4c1f067d, 0x62d164ed, 0xd4aa46cf, 0x3333f7df, +0x0301c8e1, 0xfd4ff58b, 0xa989e981, 0x07f80bef, 0x3ed517c3, 0x3d610c23, 0x45860fdb, 0x1edb9324, +0x2b8531a0, 0x10c65424, 0x53a4927d, 0xe7c48c26, 0x8889f999, 0x8f10943b, 0x9484c062, 0xbb4f044f, +0x9dd65dc8, 0xa1c78b8c, 0xc4c0f55a, 0xab178246, 0xefd6a6a3, 0x5dd67272, 0xc6c530eb, 0x065f9264, +0x892c2aaa, 0x62d48e66, 0x628130cf, 0x999ba495, 0xdb56dbc0, 0xc4d6ff7f, 0xe082862a, 0x1c1410f4, +0x05359247, 0xf1ca87d0, 0xcfd29f18, 0xc035941d, 0xaef3f0ea, 0x4dfc27ca, 0x3b9a3ba5, 0x0be120ac, +0x3be36789, 0x0a5119f0, 0x87c726b9, 0xfc5f253e, 0x316bfa18, 0xb781ed7d, 0x3151729d, 0x7d79f36c, +0xe29b9f74, 0x6b5d1945, 0x814c4862, 0xd137fc75, 0xde2cf8ba, 0x6d981463, 0x89ec7133, 0x244b7e74, +0xca67bad5, 0x42e1572c, 0xe0cc4edd, 0x22723b4d, 0x0f7b5637, 0xcaa4d7a8, 0x20939d38, 0xb3fa57c9, +0xdb40d2c7, 0xa56842a7, 0x23b1dc4a, 0x76a6c142, 0x75957b95, 0x1c88efd2, 0x474aabec, 0xdd64c7d9, +0x7b7af462, 0xfb8becc4, 0x253b460e, 0x5e30ea57, 0x6fde8164, 0x445880d4, 0x9aa1e840, 0x9647d819, +0xce5aaa18, 0x2bfadc27, 0xc03125bf, 0xb7747c00, 0x38964e8b, 0x38c21e10, 0xfa82a5f1, 0x5c52051a, +0x3349a05f, 0x137a8e49, 0x93534899, 0x8ad17547, 0x796fcded, 0x9597502d, 0x2a7d8732, 0xf7727077, +0x5359e13d, 0x27041ae4, 0xdfa05d40, 0x2e4ac04a, 0x4041ff37, 0x2a729f49, 0xc27fd299, 0xbfa8e384, +0x9ba85c81, 0x5c5a4992, 0xfb37a677, 0xca908601, 0x226947f2, 0x91d5c8cd, 0x6c77c172, 0xba6d0427, +0x5d10a9ef, 0xedc2b707, 0x81e75cdd, 0xda2aee14, 0x131d2260, 0x3ea2ffb9, 0xc8898110, 0x63dd39fa, +0x89d93abb, 0x4e58fb47, 0x220c9301, 0x65633322, 0xc9d3541f, 0xc01901ba, 0xca7fa0ff, 0x5ffcb976, +0x0aa82473, 0xb3d4e716, 0xb546a254, 0xc748f3d4, 0x6419e517, 0x0e5e63d5, 0xcec671b8, 0x0a91e10e, +0x14ab1ba6, 0xdce0d59c, 0xbf8fcdee, 0xe513fef3, 0x7d950f51, 0x95f4d55a, 0x4386f226, 0xcc373edc, +0xdca46e63, 0x98e6d1a2, 0x8ca77f40, 0x193cc148, 0x8e2ad7fe, 0xc01ede01, 0xd2440ded, 0xda8c8d52, +0x93dcd063, 0x53916334, 0xf8208a54, 0x92d94b0e, 0xeea097dc, 0x264916d1, 0xbcb943ca, 0x31938475, +0x2ebfaf57, 0xef78e891, 0xa83931a3, 0xf6921ff3, 0x178f1373, 0xa48fe882, 0xda6cc367, 0x5759b350, +0xfec71d2a, 0xef614290, 0xc96852ab, 0x3cb31a88, 0x6f66dc0e, 0xf72fccfc, 0x23adb282, 0x18693ad7, +0x9b94938f, 0x96f658a9, 0x3ac6199f, 0x77305aae, 0x6366691f, 0x8c933c8e, 0xd9b98545, 0xd909411f, +0xefc7663e, 0x35ea0dae, 0xa5bc1ef4, 0xb03c39b1, 0x69b3d1fc, 0xc040d02b, 0x5a7db8f0, 0x00bcebc7, +0x0276f258, 0x5f904832, 0x3bba0c61, 0xba5f952b, 0x908f5ed3, 0x16572a07, 0xbff00fd3, 0xaab41f96, +0x913cc7da, 0x13c010e3, 0xee82213c, 0xdea296c0, 0x8addd3d3, 0xd2615b26, 0x6536a0a4, 0x0b8295e1, +0x0b9f820b, 0x7c86c4b7, 0x2ce62cba, 0x5fa391bb, 0xbae4c3a8, 0x0dd2e316, 0x853598eb, 0xfc7c72e5, +0xe09259be, 0x0029c25b, 0x82b6c98d, 0x617175e7, 0xbf745f18, 0x6e72d7ff, 0xaca5248a, 0x495ece7c, +0x3d73d20d, 0x64553f72, 0x52dcc787, 0xc0875aad, 0x6ca56335, 0xeefc0be8, 0x79df339c, 0xe4538a88, +0xcfabfbe6, 0xa4d3735b, 0xcbe90994, 0x99c93144, 0xe2c0ec75, 0x1da85ee5, 0x10058338, 0x3c95dd37, +0xb8dd19f5, 0x7cb41b59, 0x0cbfe332, 0x0db88c1a, 0xc75b1820, 0xcef99013, 0x7c68d434, 0xb50f28e6, +0xad3e0cd3, 0xdea2fbfd, 0x32aee281, 0x1f97b387, 0x271467eb, 0x9fb04999, 0x34befaea, 0x0cd2833d, +0x7a057371, 0x696c0476, 0x295d9119, 0xd37825d0, 0x4d5cca28, 0x0b19f782, 0x9c10f380, 0x389b63c6, +0x8cb5145c, 0x076d5df1, 0x9b1ef391, 0xf6f27f9f, 0x7ad4763e, 0x282258ca, 0xd43b6a78, 0xe1dd4fa5, +0xe6aca89f, 0xa68ba12e, 0xfcda14de, 0xb59fe4a4, 0xeafcd76c, 0xeb59a642, 0x96361d47, 0x59c8bb5b, +0x8902ba21, 0x1fd038df, 0x142f2d4f, 0x3e6b6743, 0x6280987d, 0xc415b758, 0xd78497f3, 0x8cfaa21b, +0xcad85f1a, 0x3a3e011e, 0xbfaeb19f, 0xe1bb6dd8, 0xc94a1f36, 0x056794a1, 0x73d04f6a, 0x36e57618, +0x94ba1d36, 0xcdb808f0, 0x836b063c, 0xb743c5fd, 0x8e90bee5, 0x84d5260d, 0x35c22810, 0x0e2553fb, +0x3c207370, 0xf516ea0b, 0xb898d4cc, 0xf3b06d89, 0x8d02c0ef, 0x97f2ff5b, 0x7b720eac, 0xcadda54a, +0xbd5bb36e, 0x194c0962, 0x6f9dabb0, 0x09a8b7a6, 0x8d3cf3ba, 0x312024e4, 0x58757d48, 0xaeda503c, +0x0a887160, 0x749c41be, 0x2ad1d602, 0x235ab171, 0xdd1ec388, 0x74c44261, 0x338d8fb2, 0x6a5e4ceb, +0x70a59f94, 0x458c246f, 0xa991bbd2, 0x2e430135, 0x36fc3ee6, 0xc4d5d668, 0x13dff20f, 0x8de15ac7, +0x6d860423, 0x1e08a389, 0xf55f5e95, 0xa02bcfa5, 0xda1f61e7, 0xca675a68, 0x616543e3, 0x83cdafd4 + +basegraph= +2 + +z_c= +384 + +n_cb= +19200 + +q_m= +2 + +n_filler= +160 + +ea = +5460 + +eb = +5462 + +c = +12 + +r = +0 + +cab = +4 + +rv_index = +0 + +code_block_mode = +0 + +op_flags = +RTE_BBDEV_LDPC_CRC_24B_ATTACH + +expected_status = +OK