Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp5882124pxu; Wed, 23 Dec 2020 07:45:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJz4r/UZGfydybBD7wxBBxfPro5Xz/RS7fI92iGmi02T1pwJJ2zqKTBsrPPbgI1PRtOA20Ql X-Received: by 2002:a17:906:26ca:: with SMTP id u10mr20673192ejc.165.1608738318841; Wed, 23 Dec 2020 07:45:18 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1608738318; cv=pass; d=google.com; s=arc-20160816; b=LG7fXLCxEllbc/tkXI/Ns68O9tdDOb+TBVr3klkA4WpiCFDhU0OGlxX6Wm45INSfyp fAxgDXioy0waJ7CT9Vu7JfIEZI+y7eX8wQg7EuONaEEf9pI4sHE9sR6ZGTlO3cdNzwsW Ho167o8fbYpf3jbL618gM6c6jtCRQP1eqRO4QNyLkkggdmTDC0cnkmuoxV1q+aZ6bcDk LEWdnlqB0tC0rLcvi1iVe7YpzzlPA77gg/1DjvGvoGyIfFtnKFfce5xWcqlt/RUNb734 vBxuuhW4WG4tpcKx1+UNdPrmoTipfoccj7rZJE6xymCyD5/KYCZ0bJEsyprXoLAvTgRy 9QYw== 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=ZAib2jtrMZjg1UlQsP68c95nonp6N2jyocDrTdwb9kw=; b=Jbgzhutl8AFrzCQw325EZ2UMklpfd83EmB+PK5NCz4vohk2gQYfsLFQMYGta75HKY9 gT9BJtzT2g5He2SlI9jDSu0VO7ex2IMCn0UGnLQMFrcLzQna+/HHm55uw9LWFzfduLFx N0fveWut2xdvRUVCibtiVk3cgHBJRbijR/8xVhQCDcUBKZYWLjcqp2GBN2eBQ2O51jvv W2j/8yZBpelV73ppIaHb2GdmF5anp8PvzOio52tN61TUSWXYNOdafPkP/Ay/+7IrlZwE 8+wSILvD/mEJZQEQSP3XIhvtF02QZhyUuAAfxJZjIjM5V5625UQhDW2HVwjD0t/i7Gvs K8IA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=B7YDTduI; 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-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-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 p23si12133000ejf.90.2020.12.23.07.44.55; Wed, 23 Dec 2020 07:45:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-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=B7YDTduI; 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-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728964AbgLWPnm (ORCPT + 99 others); Wed, 23 Dec 2020 10:43:42 -0500 Received: from mail-mw2nam12on2063.outbound.protection.outlook.com ([40.107.244.63]:15105 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729206AbgLWPln (ORCPT ); Wed, 23 Dec 2020 10:41:43 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eUmg8rLMgzILNxACGN4tN93F1UxRe0H9oHOpecQEAeOPu3BTj3NrgIgrcXSA0hlLhLE4RmNZKWfjvTXkHzhkM0NThNx88r3E1YI2dVRCCohzArHuKHx2kzUW+JzDAZ+VI1xQs+mmYJWVd0Az93cei/kwCUp93OrwGTH8Kpy84//qRY2DmjJLv6wVqKlQdZy3blC5FtT3GrHZvL/Ao6ZlXKkK3q0KW6rvSo64U1AQZMPiJ9PAiHIyNfH+XShiJAJVk9/yhvbJVv4mhZqpHRMDJkWg6I9U2kjpDeLhLx7GPjYrlnqgKWYcH1ZrmdF4jMzJiRd3TSOnaKFHcpK5JH5TEw== 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=ZAib2jtrMZjg1UlQsP68c95nonp6N2jyocDrTdwb9kw=; b=TQ5GipJ+U9X4Vrkf75xWUlD91KufaRjhV+c0+4VISDz+bLvv7BGZp0FXXABWyzJpy9DKH2j5INMLZUw8EG75ojnnZFyYXDH0KLpMN6x9CUnYj7THvMZWDzfnrOS48xidC+Wxc+aLYwMGYzr4kBSW7r8tEwMF0zVwODz1PB6UMmG3mMaaQ1T3y8gsgTOYR8tFPAFrI8J/xSHRA60TXc8DzyRJNq7Kbhlq3YvrOdkpxuehxkZTMCtO1pfKuxOwgBeBa3QQTniocZbBrCOGKkLQMt4oWwq14ttD+mcW0Gf6LRABuFM/axj1q/r2xJazqkxiZCY6Suq5MKZ8qmAZlv3Gng== 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=ZAib2jtrMZjg1UlQsP68c95nonp6N2jyocDrTdwb9kw=; b=B7YDTduI5DABeTScpD2VGZHjLdlKL7rPXhppSZWvkQXC9XyDx/uzROi2OKC+ICUI1CdFaX42H+Lzzz8pXJFD4a8YeXUkuAPZAXbR9XAJerQ+cJljifYhXeVPE4IEbXeimlm0d7ZVZAYOlujXlhZIhkRaU0DQFeygFp+K23YT2QQ= 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:16 +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:16 +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 15/24] wfx: add hif_rx.c/hif_rx.h Date: Wed, 23 Dec 2020 16:39:16 +0100 Message-Id: <20201223153925.73742-16-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:14 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4a1bd562-d073-4938-a61a-08d8a7590bfc X-MS-TrafficTypeDiagnostic: SN6PR11MB2815: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1417; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VmZiLgnmPENYJQTpsbxAJ5XqqB5nk+i8NMHi5LwPeoqunFJKJDbtSx04uetlnV3mcWOQXhSVU+ByjrI+t3pOJxvno9ovq5GdBIRvCe4ps27FJD+C+lfMKfQ7X9txepHOxVv3DoehVEaPv4VoYM0I8S6zNC3WFivYjZs9Mi0Jc2LdzTIQdOo5vNEQyspVhW5t3GJ7ROc4l0BGx6eBpfV48p01rCYNXHnOk/7WQMm7KwZu+2rndC7l4CFXtJW5jFFdeDhxvIrrzsV41VvjgXa1n0+xUS+M9eb4SkfjeWw0hhF5gPx5RLIavTwpsbrw4kgYCvnFzYD70K8RGL3LZ5f2y4EcmOoCArD2OggeZQL89cEZufUgZ1Z5df4m6qTPyCM2TcDNSzVumozDRjCnOAA0AA== 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?S1Q1UDYxUFA0QzZUd1N6amxjazdQOVdQaUhmRkZVWjBCMGk0TnZpK2g2enF5?= =?utf-8?B?b3VVRTRiUDFpVVFjNXNPbVNacktRWmoxWmI2QzdyaXFHWnVqUnFUMFBGeGkr?= =?utf-8?B?VncralcySjdJbmVEMWM3NGRGSDB6M2hhQXR5MXU2Sy8rRFVXdmlpbzBpOEh2?= =?utf-8?B?RitMNS8vYndKMGVnT2JidEdpWFJFSzJjc1E2M0FRZnVBbmMvYWY2TGdPRWtj?= =?utf-8?B?c1VxRlZ6eHpjWnRCc0VOdmNVblZsaWFwM1Y4TmordEx5dmlsVXhWZ2tKN2Z4?= =?utf-8?B?ZjAzTDR5WXlsYjlZMURKZ3htdFo3dStCOUlmMVIzaVpZajM5WmdaU1NOZ2lz?= =?utf-8?B?QW9xbnc2Yk1HQkVlclNGSXR0aE4zbDRaRkJMRGlnVjJjOTBZWFprdjRET3hX?= =?utf-8?B?UGd3NkdkM05oU1JETG9lb0hFbUJoY05qajF0Z2dMYUtsZWxVZTRPeitkd2Fp?= =?utf-8?B?cjQ0OXJDemZKc2RtRlRvR0R4Y1NYbFExT29qS0hPVkthT0pqbHhnOHdMVFZi?= =?utf-8?B?dkFWUURhU04rN3p1YmFQUGl0Mmk3bTFhZi94V3JPMEt5YURKT1ZEenRReDlT?= =?utf-8?B?dGZZRVZuL2VCMmY0SVdpS3p5TTFIVzFQNk5zRkI3YjM4UlNLYXRvc3oxZUxa?= =?utf-8?B?SkVTbThhb3l4Wk4zbmFJQllMSlluTUdWSksxNmFlRXYxSjNhRDVOVTg0K1Jn?= =?utf-8?B?RkxheGNtaDZJdmFFay9IcmZFcXk5N3JvR25PY1cyN3c2NXFqTVpuT0UxdElC?= =?utf-8?B?bEt2RGpEVmZTWFlsdDIzdkg0R24wRGZlZzNMQkxBVENZcXlzYzhKYnQzZHZ1?= =?utf-8?B?Mm9TNkxMSFpCeXYyakNkTHFySGVsdTRLNGx3OTZ5K1QrVjBvVWhWVkRMMEpJ?= =?utf-8?B?NU1FanJpbFRwVXVWbUtrNXFXSlR0MkFMbm5nOHNWdVdyVHMvY2FEbCtrbFJz?= =?utf-8?B?Zm4rZFNId3J6M05OMlhuTG1mdHo4UEp1M2Z0NmEvcEFvTEFzODdSVkN2RnRI?= =?utf-8?B?emFTODg4bmhCSTN1ejFGdkRXbmZMbjJyS1haWWhIdUgyby90NHBQdU12M0Jw?= =?utf-8?B?QTlvbE5aTG1MT1lOdXNWbytOTGlUTS9xaTR6Q0JNOVNYRG51dWdaVkFJRUQx?= =?utf-8?B?b0hVbWpRMHhjWXY5SzNBZGtwV0pZYU55T3RHVmszR1pJRDZzY01GdldmTmJw?= =?utf-8?B?anZ2WGpLUXRnTVJKU2RzQzJndlVtSldobVpmTDBYM1QyZmU0WE1WWXFMRG1w?= =?utf-8?B?TmMvc1VWcURucVc5L0hwS0lXT1VjeWlpNnNrTzJpVDBuRzg5RzArRVYxdkl4?= =?utf-8?Q?GUSE1BHZcXYm7eMsKtRJKijk0EWZ4+oEXr?= 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:16.7100 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-Network-Message-Id: 4a1bd562-d073-4938-a61a-08d8a7590bfc X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ralLBopVf1EfMqynk/zAQyutPSqQzsz3RugWq5leDj34xVQ9XhH75Fx9UoNW27rFgRm/lLygQP0TznquOC7wEw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB2815 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4LmMgfCA0MTYgKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlm X3J4LmggfCAgMTggKwogMiBmaWxlcyBjaGFuZ2VkLCA0MzQgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9yeC5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfcnguYyBi L2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yYTljMDljNWVlMWYKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9yeC5jCkBAIC0wLDAgKzEsNDE2 IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogSW1w bGVtZW50YXRpb24gb2YgY2hpcC10by1ob3N0IGV2ZW50IChha2EgaW5kaWNhdGlvbnMpIG9mIFdG eHh4IFNwbGl0IE1hYworICogKFdTTSkgQVBJLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0y MDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBT VC1Fcmljc3NvbgorICovCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGlu dXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgImhpZl9yeC5oIgorI2luY2x1ZGUgIndmeC5o IgorI2luY2x1ZGUgInNjYW4uaCIKKyNpbmNsdWRlICJiaC5oIgorI2luY2x1ZGUgInN0YS5oIgor I2luY2x1ZGUgImRhdGFfcnguaCIKKyNpbmNsdWRlICJoaWZfYXBpX2NtZC5oIgorCitzdGF0aWMg aW50IGhpZl9nZW5lcmljX2NvbmZpcm0oc3RydWN0IHdmeF9kZXYgKndkZXYsCisJCQkgICAgICAg Y29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQoreworCS8qIEFsbCBj b25maXJtIG1lc3NhZ2VzIHN0YXJ0IHdpdGggc3RhdHVzICovCisJaW50IHN0YXR1cyA9IGxlMzJf dG9fY3B1cCgoX19sZTMyICopYnVmKTsKKwlpbnQgY21kID0gaGlmLT5pZDsKKwlpbnQgbGVuID0g bGUxNl90b19jcHUoaGlmLT5sZW4pIC0gNDsgLyogZHJvcCBoZWFkZXIgKi8KKworCVdBUk4oIW11 dGV4X2lzX2xvY2tlZCgmd2Rldi0+aGlmX2NtZC5sb2NrKSwgImRhdGEgbG9ja2luZyBlcnJvciIp OworCisJaWYgKCF3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kKSB7CisJCWRldl93YXJuKHdkZXYtPmRl diwgInVuZXhwZWN0ZWQgY29uZmlybWF0aW9uOiAweCUuMnhcbiIsIGNtZCk7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCWlmIChjbWQgIT0gd2Rldi0+aGlmX2NtZC5idWZfc2VuZC0+aWQpIHsK KwkJZGV2X3dhcm4od2Rldi0+ZGV2LAorCQkJICJjaGlwIHJlc3BvbnNlIG1pc21hdGNoIHJlcXVl c3Q6IDB4JS4yeCB2cyAweCUuMnhcbiIsCisJCQkgY21kLCB3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5k LT5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3ZGV2LT5oaWZfY21kLmJ1Zl9y ZWN2KSB7CisJCWlmICh3ZGV2LT5oaWZfY21kLmxlbl9yZWN2ID49IGxlbiAmJiBsZW4gPiAwKQor CQkJbWVtY3B5KHdkZXYtPmhpZl9jbWQuYnVmX3JlY3YsIGJ1ZiwgbGVuKTsKKwkJZWxzZQorCQkJ c3RhdHVzID0gLUVJTzsKKwl9CisJd2Rldi0+aGlmX2NtZC5yZXQgPSBzdGF0dXM7CisKKwljb21w bGV0ZSgmd2Rldi0+aGlmX2NtZC5kb25lKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMg aW50IGhpZl90eF9jb25maXJtKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAorCQkJICBjb25zdCBzdHJ1 Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCit7CisJY29uc3Qgc3RydWN0IGhpZl9j bmZfdHggKmJvZHkgPSBidWY7CisKKwl3ZnhfdHhfY29uZmlybV9jYih3ZGV2LCBib2R5KTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWZfbXVsdGlfdHhfY29uZmlybShzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiwKKwkJCQljb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpi dWYpCit7CisJY29uc3Qgc3RydWN0IGhpZl9jbmZfbXVsdGlfdHJhbnNtaXQgKmJvZHkgPSBidWY7 CisJaW50IGk7CisKKwlXQVJOKGJvZHktPm51bV90eF9jb25mcyA8PSAwLCAiY29ycnVwdGVkIG1l c3NhZ2UiKTsKKwlmb3IgKGkgPSAwOyBpIDwgYm9keS0+bnVtX3R4X2NvbmZzOyBpKyspCisJCXdm eF90eF9jb25maXJtX2NiKHdkZXYsICZib2R5LT50eF9jb25mX3BheWxvYWRbaV0pOworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGhpZl9zdGFydHVwX2luZGljYXRpb24oc3RydWN0IHdmeF9k ZXYgKndkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpi dWYpCit7CisJY29uc3Qgc3RydWN0IGhpZl9pbmRfc3RhcnR1cCAqYm9keSA9IGJ1ZjsKKworCWlm IChib2R5LT5zdGF0dXMgfHwgYm9keS0+ZmlybXdhcmVfdHlwZSA+IDQpIHsKKwkJZGV2X2Vycih3 ZGV2LT5kZXYsICJyZWNlaXZlZCBpbnZhbGlkIHN0YXJ0dXAgaW5kaWNhdGlvbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisJbWVtY3B5KCZ3ZGV2LT5od19jYXBzLCBib2R5LCBzaXplb2Yoc3Ry dWN0IGhpZl9pbmRfc3RhcnR1cCkpOworCWxlMTZfdG9fY3B1cygoX19sZTE2ICopJndkZXYtPmh3 X2NhcHMuaGFyZHdhcmVfaWQpOworCWxlMTZfdG9fY3B1cygoX19sZTE2ICopJndkZXYtPmh3X2Nh cHMubnVtX2lucF9jaF9idWZzKTsKKwlsZTE2X3RvX2NwdXMoKF9fbGUxNiAqKSZ3ZGV2LT5od19j YXBzLnNpemVfaW5wX2NoX2J1Zik7CisJbGUzMl90b19jcHVzKChfX2xlMzIgKikmd2Rldi0+aHdf Y2Fwcy5zdXBwb3J0ZWRfcmF0ZV9tYXNrKTsKKworCWNvbXBsZXRlKCZ3ZGV2LT5maXJtd2FyZV9y ZWFkeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlmX3dha2V1cF9pbmRpY2F0aW9u KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBj b25zdCB2b2lkICpidWYpCit7CisJaWYgKCF3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCB8fAorCSAg ICBncGlvZF9nZXRfdmFsdWUod2Rldi0+cGRhdGEuZ3Bpb193YWtldXApID09IDApIHsKKwkJZGV2 X3dhcm4od2Rldi0+ZGV2LCAidW5leHBlY3RlZCB3YWtlLXVwIGluZGljYXRpb25cbiIpOworCQly ZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlmX3JlY2VpdmVf aW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBoaWZf bXNnICpoaWYsCisJCQkJICBjb25zdCB2b2lkICpidWYsIHN0cnVjdCBza19idWZmICpza2IpCit7 CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZh Y2UpOworCWNvbnN0IHN0cnVjdCBoaWZfaW5kX3J4ICpib2R5ID0gYnVmOworCisJaWYgKCF3dmlm KSB7CisJCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiBpZ25vcmUgcnggZGF0YSBmb3Igbm9uLWV4 aXN0ZW50IHZpZiAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgaGlmLT5pbnRlcmZhY2UpOworCQlyZXR1 cm4gLUVJTzsKKwl9CisJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGhpZl9tc2cpICsgc2l6 ZW9mKHN0cnVjdCBoaWZfaW5kX3J4KSk7CisJd2Z4X3J4X2NiKHd2aWYsIGJvZHksIHNrYik7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWZfZXZlbnRfaW5kaWNhdGlvbihzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwKKwkJCQljb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lk ICpidWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlm LT5pbnRlcmZhY2UpOworCWNvbnN0IHN0cnVjdCBoaWZfaW5kX2V2ZW50ICpib2R5ID0gYnVmOwor CWludCB0eXBlID0gbGUzMl90b19jcHUoYm9keS0+ZXZlbnRfaWQpOworCisJaWYgKCF3dmlmKSB7 CisJCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiByZWNlaXZlZCBldmVudCBmb3Igbm9uLWV4aXN0 ZW50IHZpZlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzd2l0Y2ggKHR5 cGUpIHsKKwljYXNlIEhJRl9FVkVOVF9JTkRfUkNQSV9SU1NJOgorCQl3ZnhfZXZlbnRfcmVwb3J0 X3Jzc2kod3ZpZiwgYm9keS0+ZXZlbnRfZGF0YS5yY3BpX3Jzc2kpOworCQlicmVhazsKKwljYXNl IEhJRl9FVkVOVF9JTkRfQlNTTE9TVDoKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ3dmlmLT5i ZWFjb25fbG9zc193b3JrLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBISUZfRVZFTlRfSU5EX0JTU1JF R0FJTkVEOgorCQljYW5jZWxfZGVsYXllZF93b3JrKCZ3dmlmLT5iZWFjb25fbG9zc193b3JrKTsK KwkJZGV2X2RiZyh3ZGV2LT5kZXYsICJpZ25vcmUgQlNTUkVHQUlORUQgaW5kaWNhdGlvblxuIik7 CisJCWJyZWFrOworCWNhc2UgSElGX0VWRU5UX0lORF9QU19NT0RFX0VSUk9SOgorCQlkZXZfd2Fy bih3ZGV2LT5kZXYsICJlcnJvciB3aGlsZSBwcm9jZXNzaW5nIHBvd2VyIHNhdmUgcmVxdWVzdDog JWRcbiIsCisJCQkgbGUzMl90b19jcHUoYm9keS0+ZXZlbnRfZGF0YS5wc19tb2RlX2Vycm9yKSk7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKHdkZXYtPmRldiwgInVuaGFuZGxlZCBl dmVudCBpbmRpY2F0aW9uOiAlLjJ4XG4iLAorCQkJIHR5cGUpOworCQlicmVhazsKKwl9CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlmX3BtX21vZGVfY29tcGxldGVfaW5kaWNhdGlvbihz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwK KwkJCQkJICAgY29uc3Qgdm9pZCAqYnVmKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gd2Rl dl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsKKworCWlmICghd3ZpZikgeworCQlkZXZf d2Fybih3ZGV2LT5kZXYsICIlczogcmVjZWl2ZWQgZXZlbnQgZm9yIG5vbi1leGlzdGVudCB2aWZc biIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWNvbXBsZXRlKCZ3dmlmLT5zZXRf cG1fbW9kZV9jb21wbGV0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWZfc2Nh bl9jb21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAorCQkJCQljb25zdCBz dHJ1Y3QgaGlmX21zZyAqaGlmLAorCQkJCQljb25zdCB2b2lkICpidWYpCit7CisJc3RydWN0IHdm eF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOworCisJaWYg KCF3dmlmKSB7CisJCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiByZWNlaXZlZCBldmVudCBmb3Ig bm9uLWV4aXN0ZW50IHZpZlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwl3 Znhfc2Nhbl9jb21wbGV0ZSh3dmlmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhp Zl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCisJCQkJCWNv bnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsCisJCQkJCWNvbnN0IHZvaWQgKmJ1ZikKK3sKKwlzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7CisK KwlpZiAoIXd2aWYpIHsKKwkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IHJlY2VpdmVkIGV2ZW50 IGZvciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOworCX0K KwlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bmF0dGVuZGVkIEpvaW5Db21wbGV0ZUluZFxuIik7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWZfc3VzcGVuZF9yZXN1bWVfaW5kaWNhdGlv bihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKKwkJCQkJIGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYs CisJCQkJCSBjb25zdCB2b2lkICpidWYpCit7CisJY29uc3Qgc3RydWN0IGhpZl9pbmRfc3VzcGVu ZF9yZXN1bWVfdHggKmJvZHkgPSBidWY7CisJc3RydWN0IHdmeF92aWYgKnd2aWY7CisKKwlpZiAo Ym9keS0+YmNfbWNfb25seSkgeworCQl3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50 ZXJmYWNlKTsKKwkJaWYgKCF3dmlmKSB7CisJCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogcmVj ZWl2ZWQgZXZlbnQgZm9yIG5vbi1leGlzdGVudCB2aWZcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVy biAtRUlPOworCQl9CisJCWlmIChib2R5LT5yZXN1bWUpCisJCQl3Znhfc3VzcGVuZF9yZXN1bWVf bWMod3ZpZiwgU1RBX05PVElGWV9BV0FLRSk7CisJCWVsc2UKKwkJCXdmeF9zdXNwZW5kX3Jlc3Vt ZV9tYyh3dmlmLCBTVEFfTk9USUZZX1NMRUVQKTsKKwl9IGVsc2UgeworCQlXQVJOKGJvZHktPnBl ZXJfc3RhX3NldCwgIm1pc3VuZGVyc3Rvb2QgaW5kaWNhdGlvbiIpOworCQlXQVJOKGhpZi0+aW50 ZXJmYWNlICE9IDIsICJtaXN1bmRlcnN0b29kIGluZGljYXRpb24iKTsKKwkJaWYgKGJvZHktPnJl c3VtZSkKKwkJCXdmeF9zdXNwZW5kX2hvdF9kZXYod2RldiwgU1RBX05PVElGWV9BV0FLRSk7CisJ CWVsc2UKKwkJCXdmeF9zdXNwZW5kX2hvdF9kZXYod2RldiwgU1RBX05PVElGWV9TTEVFUCk7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlmX2dlbmVyaWNfaW5kaWNhdGlvbihz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNv bnN0IHZvaWQgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgaGlmX2luZF9nZW5lcmljICpib2R5ID0g YnVmOworCWludCB0eXBlID0gbGUzMl90b19jcHUoYm9keS0+dHlwZSk7CisKKwlzd2l0Y2ggKHR5 cGUpIHsKKwljYXNlIEhJRl9HRU5FUklDX0lORElDQVRJT05fVFlQRV9SQVc6CisJCXJldHVybiAw OworCWNhc2UgSElGX0dFTkVSSUNfSU5ESUNBVElPTl9UWVBFX1NUUklORzoKKwkJZGV2X2luZm8o d2Rldi0+ZGV2LCAiZmlybXdhcmUgc2F5czogJXNcbiIsIChjaGFyICopJmJvZHktPmRhdGEpOwor CQlyZXR1cm4gMDsKKwljYXNlIEhJRl9HRU5FUklDX0lORElDQVRJT05fVFlQRV9SWF9TVEFUUzoK KwkJbXV0ZXhfbG9jaygmd2Rldi0+cnhfc3RhdHNfbG9jayk7CisJCS8qIE9sZGVyIGZpcm13YXJl IHNlbmQgYSBnZW5lcmljIGluZGljYXRpb24gYmVzaWRlIFJ4U3RhdHMgKi8KKwkJaWYgKCF3Znhf YXBpX29sZGVyX3RoYW4od2RldiwgMSwgNCkpCisJCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJSeCB0 ZXN0IG9uZ29pbmcuIFRlbXBlcmF0dXJlOiAlZCBkZWdyZWVzIENcbiIsCisJCQkJIGJvZHktPmRh dGEucnhfc3RhdHMuY3VycmVudF90ZW1wKTsKKwkJbWVtY3B5KCZ3ZGV2LT5yeF9zdGF0cywgJmJv ZHktPmRhdGEucnhfc3RhdHMsCisJCSAgICAgICBzaXplb2Yod2Rldi0+cnhfc3RhdHMpKTsKKwkJ bXV0ZXhfdW5sb2NrKCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBI SUZfR0VORVJJQ19JTkRJQ0FUSU9OX1RZUEVfVFhfUE9XRVJfTE9PUF9JTkZPOgorCQltdXRleF9s b2NrKCZ3ZGV2LT50eF9wb3dlcl9sb29wX2luZm9fbG9jayk7CisJCW1lbWNweSgmd2Rldi0+dHhf cG93ZXJfbG9vcF9pbmZvLAorCQkgICAgICAgJmJvZHktPmRhdGEudHhfcG93ZXJfbG9vcF9pbmZv LAorCQkgICAgICAgc2l6ZW9mKHdkZXYtPnR4X3Bvd2VyX2xvb3BfaW5mbykpOworCQltdXRleF91 bmxvY2soJndkZXYtPnR4X3Bvd2VyX2xvb3BfaW5mb19sb2NrKTsKKwkJcmV0dXJuIDA7CisJZGVm YXVsdDoKKwkJZGV2X2Vycih3ZGV2LT5kZXYsICJnZW5lcmljX2luZGljYXRpb246IHVua25vd24g aW5kaWNhdGlvbiB0eXBlOiAlIy44eFxuIiwKKwkJCXR5cGUpOworCQlyZXR1cm4gLUVJTzsKKwl9 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWludCB2YWw7CisJY29uc3QgY2hhciAqc3Ry OworCWJvb2wgaGFzX3BhcmFtOworfSBoaWZfZXJyb3JzW10gPSB7CisJeyBISUZfRVJST1JfRklS TVdBUkVfUk9MTEJBQ0ssCisJCSJyb2xsYmFjayBzdGF0dXMiIH0sCisJeyBISUZfRVJST1JfRklS TVdBUkVfREVCVUdfRU5BQkxFRCwKKwkJImRlYnVnIGZlYXR1cmUgZW5hYmxlZCIgfSwKKwl7IEhJ Rl9FUlJPUl9QRFNfUEFZTE9BRCwKKwkJIlBEUyB2ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQiIH0s CisJeyBISUZfRVJST1JfUERTX1RFU1RGRUFUVVJFLAorCQkiUERTIGFzayBmb3IgYW4gdW5rbm93 biB0ZXN0IG1vZGUiIH0sCisJeyBISUZfRVJST1JfT09SX1ZPTFRBR0UsCisJCSJvdXQtb2YtcmFu Z2UgcG93ZXIgc3VwcGx5IHZvbHRhZ2UiLCB0cnVlIH0sCisJeyBISUZfRVJST1JfT09SX1RFTVBF UkFUVVJFLAorCQkib3V0LW9mLXJhbmdlIHRlbXBlcmF0dXJlIiwgdHJ1ZSB9LAorCXsgSElGX0VS Uk9SX1NMS19SRVFfRFVSSU5HX0tFWV9FWENIQU5HRSwKKwkJInNlY3VyZSBsaW5rIGRvZXMgbm90 IGV4cGVjdCByZXF1ZXN0IGR1cmluZyBrZXkgZXhjaGFuZ2UiIH0sCisJeyBISUZfRVJST1JfU0xL X1NFU1NJT05fS0VZLAorCQkic2VjdXJlIGxpbmsgc2Vzc2lvbiBrZXkgaXMgaW52YWxpZCIgfSwK Kwl7IEhJRl9FUlJPUl9TTEtfT1ZFUkZMT1csCisJCSJzZWN1cmUgbGluayBvdmVyZmxvdyIgfSwK Kwl7IEhJRl9FUlJPUl9TTEtfV1JPTkdfRU5DUllQVElPTl9TVEFURSwKKwkJInNlY3VyZSBsaW5r IG1lc3NhZ2VzIGxpc3QgZG9lcyBub3QgbWF0Y2ggbWVzc2FnZSBlbmNyeXB0aW9uIiB9LAorCXsg SElGX0VSUk9SX1NMS19VTkNPTkZJR1VSRUQsCisJCSJzZWN1cmUgbGluayBub3QgeWV0IGNvbmZp Z3VyZWQiIH0sCisJeyBISUZfRVJST1JfSElGX0JVU19GUkVRVUVOQ1lfVE9PX0xPVywKKwkJImJ1 cyBjbG9jayBpcyB0b28gc2xvdyAoPDFrSHopIiB9LAorCXsgSElGX0VSUk9SX0hJRl9SWF9EQVRB X1RPT19MQVJHRSwKKwkJIkhJRiBtZXNzYWdlIHRvbyBsYXJnZSIgfSwKKwkvKiBGb2xsb3dpbmcg ZXJyb3JzIG9ubHkgZXhpc3RzIGluIG9sZCBmaXJtd2FyZSB2ZXJzaW9uczogKi8KKwl7IEhJRl9F UlJPUl9ISUZfVFhfUVVFVUVfRlVMTCwKKwkJIkhJRiBtZXNzYWdlcyBxdWV1ZSBpcyBmdWxsIiB9 LAorCXsgSElGX0VSUk9SX0hJRl9CVVMsCisJCSJISUYgYnVzIiB9LAorCXsgSElGX0VSUk9SX1NM S19NVUxUSV9UWF9VTlNVUFBPUlRFRCwKKwkJInNlY3VyZSBsaW5rIGRvZXMgbm90IHN1cHBvcnQg bXVsdGktdHggY29uZmlybWF0aW9ucyIgfSwKKwl7IEhJRl9FUlJPUl9TTEtfT1VUREFURURfU0VT U0lPTl9LRVksCisJCSJzZWN1cmUgbGluayBzZXNzaW9uIGtleSBpcyBvdXRkYXRlZCIgfSwKKwl7 IEhJRl9FUlJPUl9TTEtfREVDUllQVElPTiwKKwkJInNlY3VyZSBsaW5rIHBhcmFtcyAobm9uY2Ug b3IgdGFnKSBtaXNtYXRjaCIgfSwKK307CisKK3N0YXRpYyBpbnQgaGlmX2Vycm9yX2luZGljYXRp b24oc3RydWN0IHdmeF9kZXYgKndkZXYsCisJCQkJY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwg Y29uc3Qgdm9pZCAqYnVmKQoreworCWNvbnN0IHN0cnVjdCBoaWZfaW5kX2Vycm9yICpib2R5ID0g YnVmOworCWludCB0eXBlID0gbGUzMl90b19jcHUoYm9keS0+dHlwZSk7CisJaW50IHBhcmFtID0g KHM4KWJvZHktPmRhdGFbMF07CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShoaWZfZXJyb3JzKTsgaSsrKQorCQlpZiAodHlwZSA9PSBoaWZfZXJyb3JzW2ldLnZhbCkKKwkJ CWJyZWFrOworCWlmIChpIDwgQVJSQVlfU0laRShoaWZfZXJyb3JzKSkKKwkJaWYgKGhpZl9lcnJv cnNbaV0uaGFzX3BhcmFtKQorCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJhc3luY2hyb25vdXMgZXJy b3I6ICVzOiAlZFxuIiwKKwkJCQloaWZfZXJyb3JzW2ldLnN0ciwgcGFyYW0pOworCQllbHNlCisJ CQlkZXZfZXJyKHdkZXYtPmRldiwgImFzeW5jaHJvbm91cyBlcnJvcjogJXNcbiIsCisJCQkJaGlm X2Vycm9yc1tpXS5zdHIpOworCWVsc2UKKwkJZGV2X2Vycih3ZGV2LT5kZXYsICJhc3luY2hyb25v dXMgZXJyb3I6IHVua25vd246ICUwOHhcbiIsIHR5cGUpOworCXByaW50X2hleF9kdW1wKEtFUk5f SU5GTywgImhpZjogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULAorCQkgICAgICAgMTYsIDEsIGhpZiwg bGUxNl90b19jcHUoaGlmLT5sZW4pLCBmYWxzZSk7CisJd2Rldi0+Y2hpcF9mcm96ZW4gPSB0cnVl OworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IGhpZl9leGNlcHRpb25faW5kaWNhdGlv bihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhp ZiwgY29uc3Qgdm9pZCAqYnVmKQoreworCWNvbnN0IHN0cnVjdCBoaWZfaW5kX2V4Y2VwdGlvbiAq Ym9keSA9IGJ1ZjsKKwlpbnQgdHlwZSA9IGxlMzJfdG9fY3B1KGJvZHktPnR5cGUpOworCisJaWYg KHR5cGUgPT0gNCkKKwkJZGV2X2Vycih3ZGV2LT5kZXYsICJmaXJtd2FyZSBhc3NlcnQgJWRcbiIs CisJCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKWJvZHktPmRhdGEpKTsKKwllbHNlCisJCWRldl9l cnIod2Rldi0+ZGV2LCAiZmlybXdhcmUgZXhjZXB0aW9uXG4iKTsKKwlwcmludF9oZXhfZHVtcChL RVJOX0lORk8sICJoaWY6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJICAgICAgIDE2LCAxLCBo aWYsIGxlMTZfdG9fY3B1KGhpZi0+bGVuKSwgZmFsc2UpOworCXdkZXYtPmNoaXBfZnJvemVuID0g dHJ1ZTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJaW50IG1z Z19pZDsKKwlpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKKwkJICAgICAgIGNv bnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1Zik7Cit9IGhpZl9oYW5kbGVy c1tdID0geworCS8qIENvbmZpcm1hdGlvbnMgKi8KKwl7IEhJRl9DTkZfSURfVFgsICAgICAgICAg ICAgICAgICAgIGhpZl90eF9jb25maXJtIH0sCisJeyBISUZfQ05GX0lEX01VTFRJX1RSQU5TTUlU LCAgICAgICBoaWZfbXVsdGlfdHhfY29uZmlybSB9LAorCS8qIEluZGljYXRpb25zICovCisJeyBI SUZfSU5EX0lEX1NUQVJUVVAsICAgICAgICAgICAgICBoaWZfc3RhcnR1cF9pbmRpY2F0aW9uIH0s CisJeyBISUZfSU5EX0lEX1dBS0VVUCwgICAgICAgICAgICAgICBoaWZfd2FrZXVwX2luZGljYXRp b24gfSwKKwl7IEhJRl9JTkRfSURfSk9JTl9DT01QTEVURSwgICAgICAgIGhpZl9qb2luX2NvbXBs ZXRlX2luZGljYXRpb24gfSwKKwl7IEhJRl9JTkRfSURfU0VUX1BNX01PREVfQ01QTCwgICAgIGhp Zl9wbV9tb2RlX2NvbXBsZXRlX2luZGljYXRpb24gfSwKKwl7IEhJRl9JTkRfSURfU0NBTl9DTVBM LCAgICAgICAgICAgIGhpZl9zY2FuX2NvbXBsZXRlX2luZGljYXRpb24gfSwKKwl7IEhJRl9JTkRf SURfU1VTUEVORF9SRVNVTUVfVFgsICAgIGhpZl9zdXNwZW5kX3Jlc3VtZV9pbmRpY2F0aW9uIH0s CisJeyBISUZfSU5EX0lEX0VWRU5ULCAgICAgICAgICAgICAgICBoaWZfZXZlbnRfaW5kaWNhdGlv biB9LAorCXsgSElGX0lORF9JRF9HRU5FUklDLCAgICAgICAgICAgICAgaGlmX2dlbmVyaWNfaW5k aWNhdGlvbiB9LAorCXsgSElGX0lORF9JRF9FUlJPUiwgICAgICAgICAgICAgICAgaGlmX2Vycm9y X2luZGljYXRpb24gfSwKKwl7IEhJRl9JTkRfSURfRVhDRVBUSU9OLCAgICAgICAgICAgIGhpZl9l eGNlcHRpb25faW5kaWNhdGlvbiB9LAorCS8qIEZJWE1FOiBhbGxvY2F0ZSBza2JfcCBmcm9tIGhp Zl9yZWNlaXZlX2luZGljYXRpb24gYW5kIG1ha2UgaXQgZ2VuZXJpYyAqLworCS8veyBISUZfSU5E X0lEX1JYLCAgICAgICAgICAgICAgICAgaGlmX3JlY2VpdmVfaW5kaWNhdGlvbiB9LAorfTsKKwor dm9pZCB3ZnhfaGFuZGxlX3J4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKQoreworCWludCBpOworCWNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYgPSAoY29uc3Qgc3Ry dWN0IGhpZl9tc2cgKilza2ItPmRhdGE7CisJaW50IGhpZl9pZCA9IGhpZi0+aWQ7CisKKwlpZiAo aGlmX2lkID09IEhJRl9JTkRfSURfUlgpIHsKKwkJLyogaGlmX3JlY2VpdmVfaW5kaWNhdGlvbiB0 YWtlIGNhcmUgb2Ygc2tiIGxpZmV0aW1lICovCisJCWhpZl9yZWNlaXZlX2luZGljYXRpb24od2Rl diwgaGlmLCBoaWYtPmJvZHksIHNrYik7CisJCXJldHVybjsKKwl9CisJLyogTm90ZTogbXV0ZXhf aXNfbG9jayBjYXVzZSBhbiBpbXBsaWNpdCBtZW1vcnkgYmFycmllciB0aGF0IHByb3RlY3QKKwkg KiBidWZfc2VuZAorCSAqLworCWlmIChtdXRleF9pc19sb2NrZWQoJndkZXYtPmhpZl9jbWQubG9j aykKKwkgICAgJiYgd2Rldi0+aGlmX2NtZC5idWZfc2VuZAorCSAgICAmJiB3ZGV2LT5oaWZfY21k LmJ1Zl9zZW5kLT5pZCA9PSBoaWZfaWQpIHsKKwkJaGlmX2dlbmVyaWNfY29uZmlybSh3ZGV2LCBo aWYsIGhpZi0+Ym9keSk7CisJCWdvdG8gZnJlZTsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoaGlmX2hhbmRsZXJzKTsgaSsrKSB7CisJCWlmIChoaWZfaGFuZGxlcnNbaV0ubXNnX2lk ID09IGhpZl9pZCkgeworCQkJaWYgKGhpZl9oYW5kbGVyc1tpXS5oYW5kbGVyKQorCQkJCWhpZl9o YW5kbGVyc1tpXS5oYW5kbGVyKHdkZXYsIGhpZiwgaGlmLT5ib2R5KTsKKwkJCWdvdG8gZnJlZTsK KwkJfQorCX0KKwlpZiAoaGlmX2lkICYgMHg4MCkKKwkJZGV2X2Vycih3ZGV2LT5kZXYsICJ1bnN1 cHBvcnRlZCBISUYgaW5kaWNhdGlvbjogSUQgJTAyeFxuIiwKKwkJCWhpZl9pZCk7CisJZWxzZQor CQlkZXZfZXJyKHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgSElGIGNvbmZpcm1hdGlvbjogSUQgJTAy eFxuIiwKKwkJCWhpZl9pZCk7CitmcmVlOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4LmggYi9kcml2ZXJz L25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9yeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uZjA3YzEwYzhjNmJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfcnguaApAQCAtMCwwICsxLDE4IEBACisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogSW1wbGVtZW50 YXRpb24gb2YgY2hpcC10by1ob3N0IGV2ZW50IChha2EgaW5kaWNhdGlvbnMpIG9mIFdGeHh4IFNw bGl0IE1hYworICogKFdTTSkgQVBJLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBT aWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmlj c3NvbgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBTVC1Fcmljc3NvbiBTQQorICovCisjaWZuZGVm IFdGWF9ISUZfUlhfSAorI2RlZmluZSBXRlhfSElGX1JYX0gKKworc3RydWN0IHdmeF9kZXY7Citz dHJ1Y3Qgc2tfYnVmZjsKKwordm9pZCB3ZnhfaGFuZGxlX3J4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworI2VuZGlmCi0tIAoyLjI5LjIKCg==