Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp5880406pxu; Wed, 23 Dec 2020 07:42:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJx7qzBZNYNEaFWeXxmkz5fECeaOlrBho8UBJ7RhqZy27PtnrjRnPUgrV3DUeoO7KtEmgrPb X-Received: by 2002:aa7:c4c2:: with SMTP id p2mr25380739edr.63.1608738161393; Wed, 23 Dec 2020 07:42:41 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1608738161; cv=pass; d=google.com; s=arc-20160816; b=IHWDSOiIlpqx0aZU6HRGysoc3IuvrKMIXJmMHyv0NUOCdgCj7ZF5tJ4enLr/0WRRlx HwsG4w3YszTcU/xcoRd76qTgPN2e34xq5w/XK8s/KBGEBeaFq4jK1xzOEmvXxdjS48qw 1QDTy6PWOkJq/mt4lrN8TeQGjkV53/ScGZ67WxWIiO+Sw0V87Jy7FAvhJJO2qHnVVn5T 1zg+Y7DdyuBITe4F8qAY79u6V3+0k6H2qKdapLhOzqaI5gpeXeuKL7XDZ6747+HffZz7 FlMDN02UrLqSQrpCHp57dubL0T1CFcx1AJxQlPDqr2ap8FY+FI1g7TxYR9F5Pt+X6Cjh +FbA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=MHBzxRZExM50VLm97Eg2Meqlxto+1gyZ+F2qzxfBd6U=; b=EVi0Mtw2f2CwKmzc7ClVB4sK1fndV0CebhsAo3twRk96JxMcBd9B4w22j/LdWPli7P MAci3jU5vOUi4qarEPoGapUMTITLIt01BIzm5SHMh/BV7J3OXq9eRns2ruNPzplcQ551 aN4cQXJDNqHr794bNjVF6JJy0TzgDPCNi1syXOVsWKgSN+XzBlaoZgXn36sOkeu9xy0h sPnWnKEu6lNkPrltpV6vJ53+71JYeWqnGQrfROy2UjqlA0ironxyBhPFY+2kP1/ew71T Osy4QT53zgg88jJgRPVxuk7IuYmI0c2hI3ou0CLSF2GMd4voZFPV0JqcQUXX5/rHRda+ QJZQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=XlVh1MNh; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r20si14026611edi.479.2020.12.23.07.42.17; Wed, 23 Dec 2020 07:42:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=XlVh1MNh; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729311AbgLWPmA (ORCPT + 99 others); Wed, 23 Dec 2020 10:42:00 -0500 Received: from mail-mw2nam12on2068.outbound.protection.outlook.com ([40.107.244.68]:31200 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729278AbgLWPl4 (ORCPT ); Wed, 23 Dec 2020 10:41:56 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R/1f6NNP800muAK0Hziply4OShN9tu6fdnbwCEQXcWZ0kXRgngDMq5xTkNjr+xCjFS1zxRbdxqfHgjhOCGwLFdJfol/r4QMBvKiT+XG3gsQq7xP49izo4P7Vpi1NPwfZ+792QkMMI+ZT+3/fTNq0KAv7203Hgo1ukmudH0LH7rWkZS+vwbi4vEknddd8seiGinr6uTi5C3vnW662N4B422I7gOco0rXkinwcPuAIfFy4KQsseCQoCrMD4DPtqjxLgEFY7WS+l93XHzghQkcW0C4jKYGgvVm8I72jA8GOH1qBmTiaExhx7IXPnvSXwB+sx0jYMWjmbDLuphZSBr5OnA== 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=MHBzxRZExM50VLm97Eg2Meqlxto+1gyZ+F2qzxfBd6U=; b=SomM8NBsuBQHyRxhhGn1K/QSHcGpHqCc2IHsuhdD9xuwr+bJvr868knGLL8VHjOgJAeRMQgF4CHuiVlL/GMwDp6LX22oqfAIvNcvqpC4jG2zrTrIBWy1vDpQtd6SPw/jbHpQLERU1RH+GXwWtGd/RIR7/4x9UN2WpmDbUq0O/P9QCMoDG5Vo4DPNC7dxoLEuJRzihZk+T+svTOmjp15xprORAdIbM46x5Pxi+pK9uoseIXlNnczX9DBPbuSDsm5cschGF/FNoO67aHOKhwwBuYi4mHXYBM824WH0L/bCq0bygNuHjTw0Isnufs6e4noXSJxSdTz9XrcDViwZ23mvwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MHBzxRZExM50VLm97Eg2Meqlxto+1gyZ+F2qzxfBd6U=; b=XlVh1MNhfpd1hyAh/ahe1KlKy6oxpYOv5F5nAQJGIZd/tulbNwELdF3iiViejavHkgL069u49Lgm5FKF1DXHOyUz1dkpcU5xAoArqQ4AyREh+pI1Iti8CxAG5lNmTiOKvA5uc8eqy1ybGxjCcudOy1XaalqwYmVts5GZ3wmFXIM= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SN6PR11MB2815.namprd11.prod.outlook.com (2603:10b6:805:62::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3676.25; Wed, 23 Dec 2020 15:40:23 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::a989:f850:6736:97ca]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::a989:f850:6736:97ca%5]) with mapi id 15.20.3700.026; Wed, 23 Dec 2020 15:40:23 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v4 18/24] wfx: add data_tx.c/data_tx.h Date: Wed, 23 Dec 2020 16:39:19 +0100 Message-Id: <20201223153925.73742-19-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201223153925.73742-1-Jerome.Pouiller@silabs.com> References: <20201223153925.73742-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [82.67.86.106] X-ClientProxiedBy: SA0PR12CA0024.namprd12.prod.outlook.com (2603:10b6:806:6f::29) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (82.67.86.106) by SA0PR12CA0024.namprd12.prod.outlook.com (2603:10b6:806:6f::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3700.27 via Frontend Transport; Wed, 23 Dec 2020 15:40:21 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c5020766-fb2a-4589-a257-08d8a7590ff9 X-MS-TrafficTypeDiagnostic: SN6PR11MB2815: 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: dG3XaERqYu6hNVgDkngWsfI3Lf9atgMNbRk/UJH+jQGraiwt5xvv2tDEHU6aphdZGXoTzYagmGhcydQsA8MI8wrAQqbnVDnn8Ml1L8MI+cbYaYHugSxH7W43mozZaURqV9CEUAC1cuWK/i5higdugXMME2Yy8uZ5kmvbwSHEeZ29Y2XmuHCtiSUokoqUJ2Dx10JPikRpvRgdR8wEyhC2ye87JDo9Gis6Njt9EZXQOvo/ShY4rU5/+fChCEGvZa+1Z4f7o6tZZjOfTquYzbznoPCQ/S45DKdc7UMUNb+EXQ7z/eIQcEAt7AvOGJ3clPbW/nphN579ngWC58xNkODOlnEC6ulovcYa7E97omDbAo1989b4nBfXAU/pDVRFjVHghrZLl4bAyd9RfTykyldgnQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2718.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(136003)(366004)(376002)(39850400004)(346002)(66574015)(478600001)(83380400001)(8676002)(186003)(2906002)(8936002)(26005)(52116002)(107886003)(16526019)(7696005)(66946007)(7416002)(6486002)(956004)(2616005)(54906003)(66476007)(316002)(4326008)(36756003)(5660300002)(1076003)(86362001)(66556008)(30864003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?SHBvVHY3cVFOMWRia2NmTzYwTDltUkNyck9FZGQwdWNxMjdkRXBvcFphcWxl?= =?utf-8?B?TjJuTEpuR3Z4VklvMTlnUmlyWllmM2JCOXgvd1hBczlFSlpkN2ZMZkFQd3E2?= =?utf-8?B?TTdBSmJ5Tmk2NkJFOXdsUHNDTXRvYmhVS1dEQjhjdnpxMWxkc09naDM2bVJJ?= =?utf-8?B?bGIxRXZYN2hjK2ttU3dmS1NHdUJ4KzFQcnFxSG90QlRqYmJ5Y1k1YzlaRmpq?= =?utf-8?B?dWxaUGVFckpQOENDU1grODUvcEJxQzZ0VG1GZ0FyVmFpU0tTYUdTTjUrUFR5?= =?utf-8?B?UHZSczZ0cGFTUFlkM1JCN3hiazhUMjB5V0VYOU05VGVlUWxSS25mMXpBUVRo?= =?utf-8?B?bmN2b3FWdURwSUdFS1l2OGd4N0svemQ1K0czOTIwQ3hHRXNZTU05ZDhxQnVo?= =?utf-8?B?OFg4cHpXcDRzVi95Rm8yc0d4TWdVZEtoT2RIb09uMmpLbE1xTTg0TjNUUHA2?= =?utf-8?B?ekJjTUN2anc2R0M1ZzdRVzdkam9hRHVBSGw4TU9mdk1kSHI2V1htZHhnVHA1?= =?utf-8?B?RHRseHNwaW5kL0NvL0dwdmViSkZ2b0ZyY05ZcFJoVnpBMmI4VzBoU3dqRC9j?= =?utf-8?B?by8yNW1yRGFXc3JHZGFQYkZ0akprUmFHZVRlM1ExNHhCdmhxNlB6Zm8xOWJU?= =?utf-8?B?TVFRRFhjNnZyYk1CRW5RM0Zld3pjNFUzeExpVnBVeXZ2ZWFjS1ExT3M1SzVP?= =?utf-8?B?cXB1ajJZMlRYQ2tmS3JjN3RTK0ZSaHkvK0dwZE4wMlV1eTc1TUVodkhrcmxS?= =?utf-8?B?TG81c2doWFEwUHFRR3BGY0tvZ2hDZTZyOG1lV29YUDRFSGZHZ1c3dzlTY0JC?= =?utf-8?B?MWpDbENiZkNVb0gwWDdsVmN3U2JQVEM1NVU2U3FneXlFVGNLejNzQVd4Vy9Y?= =?utf-8?B?MHU2WCtFZFR3R2czRUQrUkZReC9GSFR0N2h2Uzl6TDZ0Y21va1pJdXRSWDBZ?= =?utf-8?B?a0lpajhUVnBLWTlKRFBkWUNFTHY3a0JBclplblhocXp5R2FhaHJNT3ZEYitz?= =?utf-8?B?SDQvaEhzTXgzVGZzVm1xdzJnczZhY3A5bzBpMlpiaEFuZDlaTmR4Ky9LSkE5?= =?utf-8?B?dGJCYldSL21BMUZGSDJCSm5NaGkzZ1JNNFVnSUhselZPS1JlbHAvTzVKb3k4?= =?utf-8?B?akRESC9XR3VUa0ZlbHVXTWR5aWt5ODBRSnV4UytDOEIrTit0d05CcUhHWGhJ?= =?utf-8?B?MWEwVW9jYmxleTVLTlZzV1F4UzNhc3VGN0hSSlVxMW1uTWRsOGZzcE1nTEJN?= =?utf-8?B?WldDaW8rKzNrbnhiaUp3Tm9XY0FWUENmYUhxMkRlS1haK1VyQTNRbXFJZE91?= =?utf-8?Q?KMgWdaeIqXBw+pXOTggEAy17WeSzL8ufaq?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Dec 2020 15:40:23.3682 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-Network-Message-Id: c5020766-fb2a-4589-a257-08d8a7590ff9 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jPRPmT4Vsuq7wUuRKoyR141FEka5fZJxVnV/7+fEf6OJAWlHuJZKiuWmuzlQDYydrwKFBqEGohtmYKlJxbFh9w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB2815 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5jIHwgNTkwICsr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0 YV90eC5oIHwgIDY3ICsrKwogMiBmaWxlcyBjaGFuZ2VkLCA2NTcgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRh X3R4LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFf dHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWYzOTMxZmI4NTlkCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmMKQEAgLTAs MCArMSw1OTAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8q CisgKiBEYXRhcGF0aCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTct MjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwg U1QtRXJpY3Nzb24KKyAqLworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxp bnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJkYXRhX3R4LmgiCisjaW5jbHVkZSAid2Z4 LmgiCisjaW5jbHVkZSAiYmguaCIKKyNpbmNsdWRlICJzdGEuaCIKKyNpbmNsdWRlICJxdWV1ZS5o IgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidHJhY2VzLmgiCisjaW5jbHVkZSAiaGlm X3R4X21pYi5oIgorCitzdGF0aWMgaW50IHdmeF9nZXRfaHdfcmF0ZShzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSkKK3sKKwlz dHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOworCisJaWYgKHJhdGUtPmlkeCA8 IDApCisJCXJldHVybiAtMTsKKwlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNT KSB7CisJCWlmIChyYXRlLT5pZHggPiA3KSB7CisJCQlXQVJOKDEsICJ3cm9uZyByYXRlLT5pZHgg dmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyZXR1cm4gcmF0 ZS0+aWR4ICsgMTQ7CisJfQorCS8qIFdGeCBvbmx5IHN1cHBvcnQgMkdIeiwgZWxzZSBiYW5kIGlu Zm9ybWF0aW9uIHNob3VsZCBiZSByZXRyaWV2ZWQKKwkgKiBmcm9tIGllZWU4MDIxMV90eF9pbmZv CisJICovCisJYmFuZCA9IHdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpd OworCWlmIChyYXRlLT5pZHggPj0gYmFuZC0+bl9iaXRyYXRlcykgeworCQlXQVJOKDEsICJ3cm9u ZyByYXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKwly ZXR1cm4gYmFuZC0+Yml0cmF0ZXNbcmF0ZS0+aWR4XS5od192YWx1ZTsKK30KKworLyogVFggcG9s aWN5IGNhY2hlIGltcGxlbWVudGF0aW9uICovCisKK3N0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lf YnVpbGQoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCB0eF9wb2xpY3kgKnBvbGljeSwKKwkJ CQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzKQoreworCXN0cnVjdCB3ZnhfZGV2ICp3 ZGV2ID0gd3ZpZi0+d2RldjsKKwlpbnQgaSwgcmF0ZWlkOworCXU4IGNvdW50OworCisJV0FSTihy YXRlc1swXS5pZHggPCAwLCAiaW52YWxpZCByYXRlIHBvbGljeSIpOworCW1lbXNldChwb2xpY3ks IDAsIHNpemVvZigqcG9saWN5KSk7CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhf UkFURVM7ICsraSkgeworCQlpZiAocmF0ZXNbaV0uaWR4IDwgMCkKKwkJCWJyZWFrOworCQlXQVJO X09OKHJhdGVzW2ldLmNvdW50ID4gMTUpOworCQlyYXRlaWQgPSB3ZnhfZ2V0X2h3X3JhdGUod2Rl diwgJnJhdGVzW2ldKTsKKwkJLyogUGFjayB0d28gdmFsdWVzIGluIGVhY2ggYnl0ZSBvZiBwb2xp Y3ktPnJhdGVzICovCisJCWNvdW50ID0gcmF0ZXNbaV0uY291bnQ7CisJCWlmIChyYXRlaWQgJSAy KQorCQkJY291bnQgPDw9IDQ7CisJCXBvbGljeS0+cmF0ZXNbcmF0ZWlkIC8gMl0gfD0gY291bnQ7 CisJfQorfQorCitzdGF0aWMgYm9vbCB0eF9wb2xpY3lfaXNfZXF1YWwoY29uc3Qgc3RydWN0IHR4 X3BvbGljeSAqYSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHhfcG9saWN5ICpiKQoreworCXJl dHVybiAhbWVtY21wKGEtPnJhdGVzLCBiLT5yYXRlcywgc2l6ZW9mKGEtPnJhdGVzKSk7Cit9CisK K3N0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV9maW5kKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNh Y2hlLAorCQkJICAgICAgc3RydWN0IHR4X3BvbGljeSAqd2FudGVkKQoreworCXN0cnVjdCB0eF9w b2xpY3kgKml0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdCwgJmNhY2hlLT51c2VkLCBsaW5r KQorCQlpZiAodHhfcG9saWN5X2lzX2VxdWFsKHdhbnRlZCwgaXQpKQorCQkJcmV0dXJuIGl0IC0g Y2FjaGUtPmNhY2hlOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXQsICZjYWNoZS0+ZnJlZSwgbGlu aykKKwkJaWYgKHR4X3BvbGljeV9pc19lcXVhbCh3YW50ZWQsIGl0KSkKKwkJCXJldHVybiBpdCAt IGNhY2hlLT5jYWNoZTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF90eF9wb2xp Y3lfdXNlKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLAorCQkJICAgICAgc3RydWN0IHR4 X3BvbGljeSAqZW50cnkpCit7CisJKytlbnRyeS0+dXNhZ2VfY291bnQ7CisJbGlzdF9tb3ZlKCZl bnRyeS0+bGluaywgJmNhY2hlLT51c2VkKTsKK30KKworc3RhdGljIGludCB3ZnhfdHhfcG9saWN5 X3JlbGVhc2Uoc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUsCisJCQkJIHN0cnVjdCB0eF9w b2xpY3kgKmVudHJ5KQoreworCWludCByZXQgPSAtLWVudHJ5LT51c2FnZV9jb3VudDsKKworCWlm ICghcmV0KQorCQlsaXN0X21vdmUoJmVudHJ5LT5saW5rLCAmY2FjaGUtPmZyZWUpOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV9nZXQoc3RydWN0IHdmeF92aWYg Knd2aWYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMsIGJvb2wgKnJl bmV3KQoreworCWludCBpZHg7CisJc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUgPSAmd3Zp Zi0+dHhfcG9saWN5X2NhY2hlOworCXN0cnVjdCB0eF9wb2xpY3kgd2FudGVkOworCisJd2Z4X3R4 X3BvbGljeV9idWlsZCh3dmlmLCAmd2FudGVkLCByYXRlcyk7CisKKwlzcGluX2xvY2tfYmgoJmNh Y2hlLT5sb2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmY2FjaGUtPmZyZWUpKSB7CisJCVdBUk4oMSwg InVuYWJsZSB0byBnZXQgYSB2YWxpZCBUeCBwb2xpY3kiKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmNh Y2hlLT5sb2NrKTsKKwkJcmV0dXJuIEhJRl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJRDsKKwl9CisJ aWR4ID0gd2Z4X3R4X3BvbGljeV9maW5kKGNhY2hlLCAmd2FudGVkKTsKKwlpZiAoaWR4ID49IDAp IHsKKwkJKnJlbmV3ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJc3RydWN0IHR4X3BvbGljeSAqZW50 cnk7CisJCSpyZW5ldyA9IHRydWU7CisJCS8qIElmIHBvbGljeSBpcyBub3QgZm91bmQgY3JlYXRl IGEgbmV3IG9uZQorCQkgKiB1c2luZyB0aGUgb2xkZXN0IGVudHJ5IGluICJmcmVlIiBsaXN0CisJ CSAqLworCQllbnRyeSA9IGxpc3RfZW50cnkoY2FjaGUtPmZyZWUucHJldiwgc3RydWN0IHR4X3Bv bGljeSwgbGluayk7CisJCW1lbWNweShlbnRyeS0+cmF0ZXMsIHdhbnRlZC5yYXRlcywgc2l6ZW9m KGVudHJ5LT5yYXRlcykpOworCQllbnRyeS0+dXBsb2FkZWQgPSBmYWxzZTsKKwkJZW50cnktPnVz YWdlX2NvdW50ID0gMDsKKwkJaWR4ID0gZW50cnkgLSBjYWNoZS0+Y2FjaGU7CisJfQorCXdmeF90 eF9wb2xpY3lfdXNlKGNhY2hlLCAmY2FjaGUtPmNhY2hlW2lkeF0pOworCWlmIChsaXN0X2VtcHR5 KCZjYWNoZS0+ZnJlZSkpCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3dmlmLT53ZGV2LT5odyk7 CisJc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsKKwlyZXR1cm4gaWR4OworfQorCitzdGF0 aWMgdm9pZCB3ZnhfdHhfcG9saWN5X3B1dChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGlkeCkK K3sKKwlpbnQgdXNhZ2UsIGxvY2tlZDsKKwlzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlICpjYWNoZSA9 ICZ3dmlmLT50eF9wb2xpY3lfY2FjaGU7CisKKwlpZiAoaWR4ID09IEhJRl9UWF9SRVRSWV9QT0xJ Q1lfSU5WQUxJRCkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19iaCgmY2FjaGUtPmxvY2spOworCWxv Y2tlZCA9IGxpc3RfZW1wdHkoJmNhY2hlLT5mcmVlKTsKKwl1c2FnZSA9IHdmeF90eF9wb2xpY3lf cmVsZWFzZShjYWNoZSwgJmNhY2hlLT5jYWNoZVtpZHhdKTsKKwlpZiAobG9ja2VkICYmICF1c2Fn ZSkKKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKHd2aWYtPndkZXYtPmh3KTsKKwlzcGluX3VubG9j a19iaCgmY2FjaGUtPmxvY2spOworfQorCitzdGF0aWMgaW50IHdmeF90eF9wb2xpY3lfdXBsb2Fk KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCB0eF9wb2xpY3kgKnBvbGljaWVzID0g d3ZpZi0+dHhfcG9saWN5X2NhY2hlLmNhY2hlOworCXU4IHRtcF9yYXRlc1sxMl07CisJaW50IGks IGlzX3VzZWQ7CisKKwlkbyB7CisJCXNwaW5fbG9ja19iaCgmd3ZpZi0+dHhfcG9saWN5X2NhY2hl LmxvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3dmlmLT50eF9wb2xpY3lfY2Fj aGUuY2FjaGUpOyArK2kpIHsKKwkJCWlzX3VzZWQgPSBtZW16Y21wKHBvbGljaWVzW2ldLnJhdGVz LAorCQkJCQkgIHNpemVvZihwb2xpY2llc1tpXS5yYXRlcykpOworCQkJaWYgKCFwb2xpY2llc1tp XS51cGxvYWRlZCAmJiBpc191c2VkKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpIDwgQVJSQVlf U0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpKSB7CisJCQlwb2xpY2llc1tpXS51cGxv YWRlZCA9IHRydWU7CisJCQltZW1jcHkodG1wX3JhdGVzLCBwb2xpY2llc1tpXS5yYXRlcywgc2l6 ZW9mKHRtcF9yYXRlcykpOworCQkJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnR4X3BvbGljeV9jYWNo ZS5sb2NrKTsKKwkJCWhpZl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3kod3ZpZiwgaSwgdG1wX3Jh dGVzKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ3dmlmLT50eF9wb2xpY3lfY2Fj aGUubG9jayk7CisJCX0KKwl9IHdoaWxlIChpIDwgQVJSQVlfU0laRSh3dmlmLT50eF9wb2xpY3lf Y2FjaGUuY2FjaGUpKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3ZnhfdHhfcG9saWN5X3VwbG9h ZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgdHhfcG9saWN5X3VwbG9h ZF93b3JrKTsKKworCXdmeF90eF9wb2xpY3lfdXBsb2FkKHd2aWYpOworCXdmeF90eF91bmxvY2so d3ZpZi0+d2Rldik7Cit9CisKK3ZvaWQgd2Z4X3R4X3BvbGljeV9pbml0KHN0cnVjdCB3Znhfdmlm ICp3dmlmKQoreworCXN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlID0gJnd2aWYtPnR4X3Bv bGljeV9jYWNoZTsKKwlpbnQgaTsKKworCW1lbXNldChjYWNoZSwgMCwgc2l6ZW9mKCpjYWNoZSkp OworCisJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY2Fj aGUtPnVzZWQpOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+ZnJlZSk7CisKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShjYWNoZS0+Y2FjaGUpOyArK2kpCisJCWxpc3RfYWRkKCZjYWNoZS0+ Y2FjaGVbaV0ubGluaywgJmNhY2hlLT5mcmVlKTsKK30KKworLyogVHggaW1wbGVtZW50YXRpb24g Ki8KKworc3RhdGljIGJvb2wgd2Z4X2lzX2FjdGlvbl9iYWNrKHN0cnVjdCBpZWVlODAyMTFfaGRy ICpoZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAy MTFfbWdtdCAqKWhkcjsKKworCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9j b250cm9sKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChtZ210LT51LmFjdGlvbi5jYXRlZ29yeSAh PSBXTEFOX0NBVEVHT1JZX0JBQ0spCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIHU4IHdmeF90eF9nZXRfbGlua19pZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhk cikKK3sKKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9CisJCXN0YSA/IChzdHJ1Y3Qg d2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3ByaXYgOiBOVUxMOworCWNvbnN0IHU4ICpkYSA9IGll ZWU4MDIxMV9nZXRfREEoaGRyKTsKKworCWlmIChzdGFfcHJpdiAmJiBzdGFfcHJpdi0+bGlua19p ZCkKKwkJcmV0dXJuIHN0YV9wcml2LT5saW5rX2lkOworCWlmICh3dmlmLT52aWYtPnR5cGUgIT0g Tkw4MDIxMV9JRlRZUEVfQVApCisJCXJldHVybiAwOworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJf YWRkcihkYSkpCisJCXJldHVybiAwOworCXJldHVybiBISUZfTElOS19JRF9OT1RfQVNTT0NJQVRF RDsKK30KKworc3RhdGljIHZvaWQgd2Z4X3R4X2ZpeHVwX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFf dHhfcmF0ZSAqcmF0ZXMpCit7CisJaW50IGk7CisJYm9vbCBmaW5pc2hlZDsKKworCS8qIEZpcm13 YXJlIGlzIG5vdCBhYmxlIHRvIG1peCByYXRlcyB3aXRoIGRpZmZlcmVudCBmbGFncyAqLworCWZv ciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHsKKwkJaWYgKHJhdGVz WzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQorCQkJcmF0ZXNbaV0uZmxhZ3Mg fD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOworCQlpZiAoIShyYXRlc1swXS5mbGFncyAmIElF RUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkpCisJCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjEx X1RYX1JDX1NIT1JUX0dJOworCQlpZiAoIShyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9S Q19VU0VfUlRTX0NUUykpCisJCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1VT RV9SVFNfQ1RTOworCX0KKworCS8qIFNvcnQgcmF0ZXMgYW5kIHJlbW92ZSBkdXBsaWNhdGVzICov CisJZG8geworCQlmaW5pc2hlZCA9IHRydWU7CisJCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFf VFhfTUFYX1JBVEVTIC0gMTsgaSsrKSB7CisJCQlpZiAocmF0ZXNbaSArIDFdLmlkeCA9PSByYXRl c1tpXS5pZHggJiYKKwkJCSAgICByYXRlc1tpXS5pZHggIT0gLTEpIHsKKwkJCQlyYXRlc1tpXS5j b3VudCArPSByYXRlc1tpICsgMV0uY291bnQ7CisJCQkJaWYgKHJhdGVzW2ldLmNvdW50ID4gMTUp CisJCQkJCXJhdGVzW2ldLmNvdW50ID0gMTU7CisJCQkJcmF0ZXNbaSArIDFdLmlkeCA9IC0xOwor CQkJCXJhdGVzW2kgKyAxXS5jb3VudCA9IDA7CisKKwkJCQlmaW5pc2hlZCA9IGZhbHNlOworCQkJ fQorCQkJaWYgKHJhdGVzW2kgKyAxXS5pZHggPiByYXRlc1tpXS5pZHgpIHsKKwkJCQlzd2FwKHJh dGVzW2kgKyAxXSwgcmF0ZXNbaV0pOworCQkJCWZpbmlzaGVkID0gZmFsc2U7CisJCQl9CisJCX0K Kwl9IHdoaWxlICghZmluaXNoZWQpOworCS8qIEVuc3VyZSB0aGF0IE1DUzAgb3IgMU1icHMgaXMg cHJlc2VudCBhdCB0aGUgZW5kIG9mIHRoZSByZXRyeSBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8 IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgeworCQlpZiAocmF0ZXNbaV0uaWR4ID09IDAp CisJCQlicmVhazsKKwkJaWYgKHJhdGVzW2ldLmlkeCA9PSAtMSkgeworCQkJcmF0ZXNbaV0uaWR4 ID0gMDsKKwkJCXJhdGVzW2ldLmNvdW50ID0gODsgLyogPT0gaHctPm1heF9yYXRlX3RyaWVzICov CisJCQlyYXRlc1tpXS5mbGFncyA9IHJhdGVzW2kgLSAxXS5mbGFncyAmCisJCQkJCSBJRUVFODAy MTFfVFhfUkNfTUNTOworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogQWxsIHJldHJpZXMgdXNlIGxv bmcgR0kgKi8KKwlmb3IgKGkgPSAxOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKQor CQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOworfQorCitzdGF0 aWMgdTggd2Z4X3R4X2dldF9yYXRlX2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJICAgICBz dHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pCit7CisJYm9vbCB0eF9wb2xpY3lfcmVu ZXcgPSBmYWxzZTsKKwl1OCByYXRlX2lkOworCisJcmF0ZV9pZCA9IHdmeF90eF9wb2xpY3lfZ2V0 KHd2aWYsCisJCQkJICAgIHR4X2luZm8tPmRyaXZlcl9yYXRlcywgJnR4X3BvbGljeV9yZW5ldyk7 CisJaWYgKHJhdGVfaWQgPT0gSElGX1RYX1JFVFJZX1BPTElDWV9JTlZBTElEKQorCQlkZXZfd2Fy bih3dmlmLT53ZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGEgdmFsaWQgVHggcG9saWN5Iik7CisK KwlpZiAodHhfcG9saWN5X3JlbmV3KSB7CisJCXdmeF90eF9sb2NrKHd2aWYtPndkZXYpOworCQlp ZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPnR4X3BvbGljeV91cGxvYWRfd29yaykpCisJCQl3Znhf dHhfdW5sb2NrKHd2aWYtPndkZXYpOworCX0KKwlyZXR1cm4gcmF0ZV9pZDsKK30KKworc3RhdGlj IGludCB3ZnhfdHhfZ2V0X2ZyYW1lX2Zvcm1hdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4 X2luZm8pCit7CisJaWYgKCEodHhfaW5mby0+ZHJpdmVyX3JhdGVzWzBdLmZsYWdzICYgSUVFRTgw MjExX1RYX1JDX01DUykpCisJCXJldHVybiBISUZfRlJBTUVfRk9STUFUX05PTl9IVDsKKwllbHNl IGlmICghKHR4X2luZm8tPmRyaXZlcl9yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19H UkVFTl9GSUVMRCkpCisJCXJldHVybiBISUZfRlJBTUVfRk9STUFUX01JWEVEX0ZPUk1BVF9IVDsK KwllbHNlCisJCXJldHVybiBISUZfRlJBTUVfRk9STUFUX0dGX0hUXzExTjsKK30KKworc3RhdGlj IGludCB3ZnhfdHhfZ2V0X2ljdl9sZW4oc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5 KQoreworCWludCBtaWNfc3BhY2U7CisKKwlpZiAoIWh3X2tleSkKKwkJcmV0dXJuIDA7CisJaWYg KGh3X2tleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDKQorCQlyZXR1cm4g MDsKKwltaWNfc3BhY2UgPSAoaHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJ UCkgPyA4IDogMDsKKwlyZXR1cm4gaHdfa2V5LT5pY3ZfbGVuICsgbWljX3NwYWNlOworfQorCitz dGF0aWMgaW50IHdmeF90eF9pbm5lcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YSwKKwkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhpZl9t c2cgKmhpZl9tc2c7CisJc3RydWN0IGhpZl9yZXFfdHggKnJlcTsKKwlzdHJ1Y3QgaWVlZTgwMjEx X3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4 MDIxMV9rZXlfY29uZiAqaHdfa2V5ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXk7CisJc3RydWN0 IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsK KwlpbnQgcXVldWVfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwlzaXplX3Qgb2Zm c2V0ID0gKHNpemVfdClza2ItPmRhdGEgJiAzOworCWludCB3bXNnX2xlbiA9IHNpemVvZihzdHJ1 Y3QgaGlmX21zZykgKworCQkJc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3R4KSArIG9mZnNldDsKKwor CVdBUk4ocXVldWVfaWQgPj0gSUVFRTgwMjExX05VTV9BQ1MsICJ1bnN1cHBvcnRlZCBxdWV1ZV9p ZCIpOworCXdmeF90eF9maXh1cF9yYXRlcyh0eF9pbmZvLT5kcml2ZXJfcmF0ZXMpOworCisJLyog RnJvbSBub3cgdHhfaW5mby0+Y29udHJvbCBpcyB1bnVzYWJsZSAqLworCW1lbXNldCh0eF9pbmZv LT5yYXRlX2RyaXZlcl9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHdmeF90eF9wcml2KSk7CisKKwkv KiBGaWxsIGhpZl9tc2cgKi8KKwlXQVJOKHNrYl9oZWFkcm9vbShza2IpIDwgd21zZ19sZW4sICJu b3QgZW5vdWdoIHNwYWNlIGluIHNrYiIpOworCVdBUk4ob2Zmc2V0ICYgMSwgImF0dGVtcHQgdG8g dHJhbnNtaXQgYW4gdW5hbGlnbmVkIGZyYW1lIik7CisJc2tiX3B1dChza2IsIHdmeF90eF9nZXRf aWN2X2xlbihod19rZXkpKTsKKwlza2JfcHVzaChza2IsIHdtc2dfbGVuKTsKKwltZW1zZXQoc2ti LT5kYXRhLCAwLCB3bXNnX2xlbik7CisJaGlmX21zZyA9IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ ZGF0YTsKKwloaWZfbXNnLT5sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisJaGlmX21zZy0+ aWQgPSBISUZfUkVRX0lEX1RYOworCWhpZl9tc2ctPmludGVyZmFjZSA9IHd2aWYtPmlkOworCWlm IChza2ItPmxlbiA+IHd2aWYtPndkZXYtPmh3X2NhcHMuc2l6ZV9pbnBfY2hfYnVmKSB7CisJCWRl dl93YXJuKHd2aWYtPndkZXYtPmRldiwKKwkJCSAicmVxdWVzdGVkIGZyYW1lIHNpemUgKCVkKSBp cyBsYXJnZXIgdGhhbiBtYXhpbXVtIHN1cHBvcnRlZCAoJWQpXG4iLAorCQkJIHNrYi0+bGVuLCB3 dmlmLT53ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1Zik7CisJCXNrYl9wdWxsKHNrYiwgd21z Z19sZW4pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBGaWxsIHR4IHJlcXVlc3QgKi8KKwly ZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWZfbXNnLT5ib2R5OworCS8qIHBhY2tldF9pZCBq dXN0IG5lZWQgdG8gYmUgdW5pcXVlIG9uIGRldmljZS4gMzJiaXRzIGFyZSBtb3JlIHRoYW4KKwkg KiBuZWNlc3NhcnkgZm9yIHRoYXQgdGFzaywgc28gd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgaXQgdG8g YWRkIHNvbWUgZXh0cmEKKwkgKiBkYXRhIGZvciBkZWJ1Zy4KKwkgKi8KKwlyZXEtPnBhY2tldF9p ZCA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZ3dmlmLT53ZGV2LT5wYWNrZXRfaWQpICYgMHhGRkZG OworCXJlcS0+cGFja2V0X2lkIHw9IElFRUU4MDIxMV9TRVFfVE9fU04obGUxNl90b19jcHUoaGRy LT5zZXFfY3RybCkpIDw8IDE2OworCXJlcS0+cGFja2V0X2lkIHw9IHF1ZXVlX2lkIDw8IDI4Owor CisJcmVxLT5mY19vZmZzZXQgPSBvZmZzZXQ7CisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgw MjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pCisJCXJlcS0+YWZ0ZXJfZHRpbSA9IDE7CisJcmVx LT5wZWVyX3N0YV9pZCA9IHdmeF90eF9nZXRfbGlua19pZCh3dmlmLCBzdGEsIGhkcik7CisJLyog UXVldWUgaW5kZXggYXJlIGludmVydGVkIGJldHdlZW4gZmlybXdhcmUgYW5kIExpbnV4ICovCisJ cmVxLT5xdWV1ZV9pZCA9IDMgLSBxdWV1ZV9pZDsKKwlyZXEtPnJldHJ5X3BvbGljeV9pbmRleCA9 IHdmeF90eF9nZXRfcmF0ZV9pZCh3dmlmLCB0eF9pbmZvKTsKKwlyZXEtPmZyYW1lX2Zvcm1hdCA9 IHdmeF90eF9nZXRfZnJhbWVfZm9ybWF0KHR4X2luZm8pOworCWlmICh0eF9pbmZvLT5kcml2ZXJf cmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpCisJCXJlcS0+c2hvcnRf Z2kgPSAxOworCisJLyogQXV4aWxpYXJ5IG9wZXJhdGlvbnMgKi8KKwl3ZnhfdHhfcXVldWVzX3B1 dCh3dmlmLCBza2IpOworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VO RF9BRlRFUl9EVElNKQorCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT51cGRhdGVfdGltX3dvcmspOwor CXdmeF9iaF9yZXF1ZXN0X3R4KHd2aWYtPndkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHdm eF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9s ICpjb250cm9sLAorCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3ZnhfZGV2 ICp3ZGV2ID0gaHctPnByaXY7CisJc3RydWN0IHdmeF92aWYgKnd2aWY7CisJc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YSA9IGNvbnRyb2wgPyBjb250cm9sLT5zdGEgOiBOVUxMOworCXN0cnVjdCBp ZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1 Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRh OworCXNpemVfdCBkcml2ZXJfZGF0YV9yb29tID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpZWVlODAy MTFfdHhfaW5mbywKKwkJCQkJICAgICAgIHJhdGVfZHJpdmVyX2RhdGEpOworCisJQlVJTERfQlVH X09OX01TRyhzaXplb2Yoc3RydWN0IHdmeF90eF9wcml2KSA+IGRyaXZlcl9kYXRhX3Jvb20sCisJ CQkgInN0cnVjdCB0eF9wcml2IGlzIHRvbyBsYXJnZSIpOworCVdBUk4oc2tiLT5uZXh0IHx8IHNr Yi0+cHJldiwgInNrYiBpcyBhbHJlYWR5IG1lbWJlciBvZiBhIGxpc3QiKTsKKwkvKiBjb250cm9s LnZpZiBjYW4gYmUgTlVMTCBmb3IgaW5qZWN0ZWQgZnJhbWVzICovCisJaWYgKHR4X2luZm8tPmNv bnRyb2wudmlmKQorCQl3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdHhfaW5mby0+Y29udHJvbC52 aWYtPmRydl9wcml2OworCWVsc2UKKwkJd3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCBOVUxMKTsK KwlpZiAoV0FSTl9PTighd3ZpZikpCisJCWdvdG8gZHJvcDsKKwkvKiBCZWNhdXNlIG9mIFRYX0FN UERVX1NFVFVQX0lOX0hXLCBtYWM4MDIxMSBkb2VzIG5vdCB0cnkgdG8gc2VuZCBhbnkKKwkgKiBC bG9ja0FjayBzZXNzaW9uIG1hbmFnZW1lbnQgZnJhbWUuIFRoZSBjaGVjayBiZWxvdyBleGlzdCBq dXN0IGluIGNhc2UuCisJICovCisJaWYgKHdmeF9pc19hY3Rpb25fYmFjayhoZHIpKSB7CisJCWRl dl9pbmZvKHdkZXYtPmRldiwgImRyb3AgQkEgYWN0aW9uXG4iKTsKKwkJZ290byBkcm9wOworCX0K KwlpZiAod2Z4X3R4X2lubmVyKHd2aWYsIHN0YSwgc2tiKSkKKwkJZ290byBkcm9wOworCisJcmV0 dXJuOworCitkcm9wOgorCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZSh3ZGV2LT5odywgc2ti KTsKK30KKworc3RhdGljIHZvaWQgd2Z4X3NrYl9kdG9yKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoaWZfbXNnICpoaWYgPSAoc3RydWN0IGhp Zl9tc2cgKilza2ItPmRhdGE7CisJc3RydWN0IGhpZl9yZXFfdHggKnJlcSA9IChzdHJ1Y3QgaGlm X3JlcV90eCAqKWhpZi0+Ym9keTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2l6ZW9mKHN0cnVj dCBoaWZfbXNnKSArCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGhpZl9yZXFfdHgpICsKKwkJCSAg ICAgIHJlcS0+ZmNfb2Zmc2V0OworCisJaWYgKCF3dmlmKSB7CisJCXByX3dhcm4oInZpZiBhc3Nv Y2lhdGVkIHdpdGggdGhlIHNrYiBkb2VzIG5vdCBleGlzdCBhbnltb3JlXG4iKTsKKwkJcmV0dXJu OworCX0KKwl3ZnhfdHhfcG9saWN5X3B1dCh3dmlmLCByZXEtPnJldHJ5X3BvbGljeV9pbmRleCk7 CisJc2tiX3B1bGwoc2tiLCBvZmZzZXQpOworCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZSh3 dmlmLT53ZGV2LT5odywgc2tiKTsKK30KKworc3RhdGljIHZvaWQgd2Z4X3R4X2ZpbGxfcmF0ZXMo c3RydWN0IHdmeF9kZXYgKndkZXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8g KnR4X2luZm8sCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaGlmX2NuZl90eCAqYXJnKQoreworCXN0 cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZTsKKwlpbnQgdHhfY291bnQ7CisJaW50IGk7CisK Kwl0eF9jb3VudCA9IGFyZy0+YWNrX2ZhaWx1cmVzOworCWlmICghYXJnLT5zdGF0dXMgfHwgYXJn LT5hY2tfZmFpbHVyZXMpCisJCXR4X2NvdW50ICs9IDE7IC8qIEFsc28gcmVwb3J0IHN1Y2Nlc3Mg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7CisJCXJh dGUgPSAmdHhfaW5mby0+c3RhdHVzLnJhdGVzW2ldOworCQlpZiAocmF0ZS0+aWR4IDwgMCkKKwkJ CWJyZWFrOworCQlpZiAodHhfY291bnQgPCByYXRlLT5jb3VudCAmJgorCQkgICAgYXJnLT5zdGF0 dXMgPT0gSElGX1NUQVRVU19UWF9GQUlMX1JFVFJJRVMgJiYKKwkJICAgIGFyZy0+YWNrX2ZhaWx1 cmVzKQorCQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJhbGwgcmV0cmllcyB3ZXJlIG5vdCBjb25zdW1l ZDogJWQgIT0gJWRcbiIsCisJCQkJcmF0ZS0+Y291bnQsIHR4X2NvdW50KTsKKwkJaWYgKHR4X2Nv dW50IDw9IHJhdGUtPmNvdW50ICYmIHR4X2NvdW50ICYmCisJCSAgICBhcmctPnR4ZWRfcmF0ZSAh PSB3ZnhfZ2V0X2h3X3JhdGUod2RldiwgcmF0ZSkpCisJCQlkZXZfZGJnKHdkZXYtPmRldiwgImlu Y29uc2lzdGVudCB0eF9pbmZvIHJhdGVzOiAlZCAhPSAlZFxuIiwKKwkJCQlhcmctPnR4ZWRfcmF0 ZSwgd2Z4X2dldF9od19yYXRlKHdkZXYsIHJhdGUpKTsKKwkJaWYgKHR4X2NvdW50ID4gcmF0ZS0+ Y291bnQpIHsKKwkJCXR4X2NvdW50IC09IHJhdGUtPmNvdW50OworCQl9IGVsc2UgaWYgKCF0eF9j b3VudCkgeworCQkJcmF0ZS0+Y291bnQgPSAwOworCQkJcmF0ZS0+aWR4ID0gLTE7CisJCX0gZWxz ZSB7CisJCQlyYXRlLT5jb3VudCA9IHR4X2NvdW50OworCQkJdHhfY291bnQgPSAwOworCQl9CisJ fQorCWlmICh0eF9jb3VudCkKKwkJZGV2X2RiZyh3ZGV2LT5kZXYsICIlZCBtb3JlIHJldHJpZXMg dGhhbiBleHBlY3RlZFxuIiwgdHhfY291bnQpOworfQorCit2b2lkIHdmeF90eF9jb25maXJtX2Ni KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCBzdHJ1Y3QgaGlmX2NuZl90eCAqYXJnKQorewor CXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiID0gd2Z4X3BlbmRpbmdfZ2V0KHdkZXYs IGFyZy0+cGFja2V0X2lkKTsKKwlpZiAoIXNrYikgeworCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJy ZWNlaXZlZCB1bmtub3duIHBhY2tldF9pZCAoJSMuOHgpIGZyb20gY2hpcFxuIiwKKwkJCSBhcmct PnBhY2tldF9pZCk7CisJCXJldHVybjsKKwl9CisJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Io c2tiKTsKKwl3dmlmID0gd2Rldl90b193dmlmKHdkZXYsICgoc3RydWN0IGhpZl9tc2cgKilza2It PmRhdGEpLT5pbnRlcmZhY2UpOworCVdBUk5fT04oIXd2aWYpOworCWlmICghd3ZpZikKKwkJcmV0 dXJuOworCisJLyogTm90ZSB0aGF0IHdmeF9wZW5kaW5nX2dldF9wa3RfdXNfZGVsYXkoKSBnZXQg ZGF0YSBmcm9tIHR4X2luZm8gKi8KKwlfdHJhY2VfdHhfc3RhdHMoYXJnLCBza2IsIHdmeF9wZW5k aW5nX2dldF9wa3RfdXNfZGVsYXkod2Rldiwgc2tiKSk7CisJd2Z4X3R4X2ZpbGxfcmF0ZXMod2Rl diwgdHhfaW5mbywgYXJnKTsKKwkvKiBGcm9tIG5vdywgeW91IGNhbiB0b3VjaCB0byB0eF9pbmZv LT5zdGF0dXMsIGJ1dCBkbyBub3QgdG91Y2ggdG8KKwkgKiB0eF9wcml2IGFueW1vcmUKKwkgKi8K KwkvKiBGSVhNRTogdXNlIGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cygpICovCisJbWVt c2V0KHR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGEsIDAsIHNpemVvZih0eF9pbmZvLT5yYXRlX2Ry aXZlcl9kYXRhKSk7CisJbWVtc2V0KHR4X2luZm8tPnBhZCwgMCwgc2l6ZW9mKHR4X2luZm8tPnBh ZCkpOworCisJaWYgKCFhcmctPnN0YXR1cykgeworCQl0eF9pbmZvLT5zdGF0dXMudHhfdGltZSA9 CisJCQlsZTMyX3RvX2NwdShhcmctPm1lZGlhX2RlbGF5KSAtCisJCQlsZTMyX3RvX2NwdShhcmct PnR4X3F1ZXVlX2RlbGF5KTsKKwkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NU TF9OT19BQ0spCisJCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9OT0FDS19U UkFOU01JVFRFRDsKKwkJZWxzZQorCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NU QVRfQUNLOworCX0gZWxzZSBpZiAoYXJnLT5zdGF0dXMgPT0gSElGX1NUQVRVU19UWF9GQUlMX1JF UVVFVUUpIHsKKwkJV0FSTighYXJnLT5yZXF1ZXVlLCAiaW5jb2hlcmVudCBzdGF0dXMgYW5kIHJl c3VsdF9mbGFncyIpOworCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NF TkRfQUZURVJfRFRJTSkgeworCQkJLyogRFRJTSBwZXJpb2QgZWxhcHNlZCAqLworCQkJd3ZpZi0+ YWZ0ZXJfZHRpbV90eF9hbGxvd2VkID0gZmFsc2U7CisJCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT51 cGRhdGVfdGltX3dvcmspOworCQl9CisJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9T VEFUX1RYX0ZJTFRFUkVEOworCX0KKwl3Znhfc2tiX2R0b3Iod3ZpZiwgc2tiKTsKK30KKworc3Rh dGljIHZvaWQgd2Z4X2ZsdXNoX3ZpZihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTMyIHF1ZXVlcywK KwkJCSAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCkKK3sKKwlzdHJ1Y3Qgd2Z4X3F1ZXVl ICpxdWV1ZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsg aSsrKSB7CisJCWlmICghKEJJVChpKSAmIHF1ZXVlcykpCisJCQljb250aW51ZTsKKwkJcXVldWUg PSAmd3ZpZi0+dHhfcXVldWVbaV07CisJCWlmIChkcm9wcGVkKQorCQkJd2Z4X3R4X3F1ZXVlX2Ry b3Aod3ZpZiwgcXVldWUsIGRyb3BwZWQpOworCX0KKwlpZiAod3ZpZi0+d2Rldi0+Y2hpcF9mcm96 ZW4pCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykg eworCQlpZiAoIShCSVQoaSkgJiBxdWV1ZXMpKQorCQkJY29udGludWU7CisJCXF1ZXVlID0gJnd2 aWYtPnR4X3F1ZXVlW2ldOworCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KHd2aWYtPndkZXYtPnR4 X2RlcXVldWUsCisJCQkJICAgICAgIHdmeF90eF9xdWV1ZV9lbXB0eSh3dmlmLCBxdWV1ZSksCisJ CQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpIDw9IDApCisJCQlkZXZfd2Fybih3dmlm LT53ZGV2LT5kZXYsCisJCQkJICJmcmFtZXMgcXVldWVkIHdoaWxlIGZsdXNoaW5nIHR4IHF1ZXVl cz8iKTsKKwl9Cit9CisKK3ZvaWQgd2Z4X2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCSAgICAgICB1MzIgcXVldWVzLCBib29sIGRyb3Ap Cit7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZl9o ZWFkIGRyb3BwZWQ7CisJc3RydWN0IHdmeF92aWYgKnd2aWY7CisJc3RydWN0IGhpZl9tc2cgKmhp ZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZHJvcHBl ZCk7CisJaWYgKHZpZikgeworCQl3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJp djsKKwkJd2Z4X2ZsdXNoX3ZpZih3dmlmLCBxdWV1ZXMsIGRyb3AgPyAmZHJvcHBlZCA6IE5VTEwp OworCX0gZWxzZSB7CisJCXd2aWYgPSBOVUxMOworCQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJh dGUod2Rldiwgd3ZpZikpICE9IE5VTEwpCisJCQl3ZnhfZmx1c2hfdmlmKHd2aWYsIHF1ZXVlcywg ZHJvcCA/ICZkcm9wcGVkIDogTlVMTCk7CisJfQorCXdmeF90eF9mbHVzaCh3ZGV2KTsKKwlpZiAo d2Rldi0+Y2hpcF9mcm96ZW4pCisJCXdmeF9wZW5kaW5nX2Ryb3Aod2RldiwgJmRyb3BwZWQpOwor CXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmRyb3BwZWQpKSAhPSBOVUxMKSB7CisJCWhpZiA9 IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKKwkJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2 LCBoaWYtPmludGVyZmFjZSk7CisJCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhJRUVF ODAyMTFfU0tCX0NCKHNrYikpOworCQl3Znhfc2tiX2R0b3Iod3ZpZiwgc2tiKTsKKwl9Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfdHguaCBiL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDExYjJlNWRhM2M2Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgKQEAgLTAsMCArMSw2NyBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAqIERh dGFwYXRoIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBT aWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmlj c3NvbgorICovCisjaWZuZGVmIFdGWF9EQVRBX1RYX0gKKyNkZWZpbmUgV0ZYX0RBVEFfVFhfSAor CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisj aW5jbHVkZSAiaGlmX2FwaV9jbWQuaCIKKyNpbmNsdWRlICJoaWZfYXBpX21pYi5oIgorCitzdHJ1 Y3Qgd2Z4X3R4X3ByaXY7CitzdHJ1Y3Qgd2Z4X2RldjsKK3N0cnVjdCB3ZnhfdmlmOworCitzdHJ1 Y3QgdHhfcG9saWN5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJaW50IHVzYWdlX2NvdW50 OworCXU4IHJhdGVzWzEyXTsKKwlib29sIHVwbG9hZGVkOworfTsKKworc3RydWN0IHR4X3BvbGlj eV9jYWNoZSB7CisJc3RydWN0IHR4X3BvbGljeSBjYWNoZVtISUZfVFhfUkVUUllfUE9MSUNZX01B WF07CisJLyogRklYTUU6IHVzZSBhIHRyZWVzIGFuZCBkcm9wIGhhc2ggZnJvbSB0eF9wb2xpY3kg Ki8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZWQ7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlOworCXNw aW5sb2NrX3QgbG9jazsKK307CisKK3N0cnVjdCB3ZnhfdHhfcHJpdiB7CisJa3RpbWVfdCB4bWl0 X3RpbWVzdGFtcDsKK307CisKK3ZvaWQgd2Z4X3R4X3BvbGljeV9pbml0KHN0cnVjdCB3Znhfdmlm ICp3dmlmKTsKK3ZvaWQgd2Z4X3R4X3BvbGljeV91cGxvYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspOworCit2b2lkIHdmeF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0 IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAorCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2ti KTsKK3ZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0 cnVjdCBoaWZfY25mX3R4ICphcmcpOwordm9pZCB3ZnhfZmx1c2goc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJICAgICAgIHUzMiBxdWV1ZXMsIGJv b2wgZHJvcCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdmeF90eF9wcml2ICp3Znhfc2tiX3R4 X3ByaXYoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8g KnR4X2luZm87CisKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisJdHhfaW5mbyA9IElFRUU4 MDIxMV9TS0JfQ0Ioc2tiKTsKKwlyZXR1cm4gKHN0cnVjdCB3ZnhfdHhfcHJpdiAqKXR4X2luZm8t PnJhdGVfZHJpdmVyX2RhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhpZl9yZXFfdHgg KndmeF9za2JfdHhyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGlmX21zZyAq aGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOworCXN0cnVjdCBoaWZfcmVxX3R4ICpy ZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWYtPmJvZHk7CisKKwlyZXR1cm4gcmVxOworfQor CisjZW5kaWYKLS0gCjIuMjkuMgoK