Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp4303973pxy; Tue, 27 Apr 2021 01:34:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzeU2BIAHIyxEzuosEjrc5ptejr7XpG0D4+7AyPm83uHqidMda1NVFVZ5cGBXrfhJZ4UppV X-Received: by 2002:a05:6402:2753:: with SMTP id z19mr2965133edd.158.1619512456713; Tue, 27 Apr 2021 01:34:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619512456; cv=none; d=google.com; s=arc-20160816; b=ZsQ4cqV474gtobFiKt/7RDjXfLJX2D6ed8K+jCZerzWWZdo0ePUABgISqNfDasNIt2 kX2Y12lnFQ7LVLdaYi0B7i0g79hWR1/3MKHaPRYeahKIh/fo3CjMOSEXSCLqNzlRR9Eh 1WM9HZ19ebwqGiokL/J+xFteld3a/7jiG/3ROJspnGCWEbSECybMghXYOIfmxd3rtCzg m0lLBl0Oy1Q2MHV9B7/Hhrq0GR7cW89hAU6TBoiaC//eUPCTmrlzOqScKruhjtZE4uVj Tz5vlLFZE05eTYQZstDcf27PP/nDrLqyRJUDmWAECRO6KGYOKYHqbBnhpTECWHj5R+Yo rMnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from; bh=TqwblO8bNVAAFiqiDgC3+tHR9lHfMrSIYouP6AWwJ8M=; b=08F4q2zyeE7ssLwW41xRBJNvvr6KGZOMrWmP80i7M8vN6k0oKxUiS5XRe1Rsp805rM ZFCGVWAn6FLhrX7hy6Zc3vLLM0UqWM/5AjiqpV/IFMiahj11yrqY00vu71IxXqDl/fXv uMmuKhJ6h9dj73ux8cYvNjM0SbzssXQJJ9yMNsU9iNz/zIgjMfLm0AOMkizQGMETIdML gtZPDKZy5h72fkwAweVHdnf/mpuzaNttit+Rr7Ghj4bHzlufG3jy2004wqBPjIAmeGOP bkDjYRL3VA5zC8mezSxo9Y4Mo1CHfH4lvRII+j8pHtFI7VzmplX9BtKSayc8UgoFCagP DQ9A== ARC-Authentication-Results: i=1; mx.google.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 bz20si17084188ejc.70.2021.04.27.01.33.52; Tue, 27 Apr 2021 01:34:16 -0700 (PDT) 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; 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 S235217AbhD0IdG (ORCPT + 99 others); Tue, 27 Apr 2021 04:33:06 -0400 Received: from [58.211.163.100] ([58.211.163.100]:57774 "EHLO mail.advantech.com.cn" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S235169AbhD0Ic4 (ORCPT ); Tue, 27 Apr 2021 04:32:56 -0400 Received: from ACNMB1.ACN.ADVANTECH.CORP (unverified [172.21.128.147]) by ACNSWEEPER.acn.advantech.com.cn (Clearswift SMTPRS 5.6.0) with ESMTP id ; Tue, 27 Apr 2021 16:32:05 +0800 Received: from ACNMB2.ACN.ADVANTECH.CORP (172.21.128.148) by ACNMB1.ACN.ADVANTECH.CORP (172.21.128.147) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 27 Apr 2021 16:32:05 +0800 Received: from ACNMB2.ACN.ADVANTECH.CORP ([172.21.128.148]) by ACNMB2.ACN.ADVANTECH.CORP ([172.21.128.148]) with mapi id 15.00.1497.015; Tue, 27 Apr 2021 16:32:05 +0800 From: =?gb2312?B?eXVlY2hhby56aGFvKNXU1L2zrCk=?= To: "345351830@qq.com" <345351830@qq.com> CC: =?gb2312?B?UmFpbmJvdy5aaGFuZyiPiNPxKQ==?= , =?gb2312?B?eXVueGlhLmxpKMDu1MbPvCk=?= , =?gb2312?B?SmlhLlN1aSi81u6hKQ==?= , Hans de Goede , Mark Gross , "linux-kernel@vger.kernel.org" , "platform-driver-x86@vger.kernel.org" Subject: [v2,1/1] adv_mix955x is a scheme that multiplexes PCA9554/PCA9555 into LED and GPIO Thread-Topic: [v2,1/1] adv_mix955x is a scheme that multiplexes PCA9554/PCA9555 into LED and GPIO Thread-Index: AQHXOz981K/BvEnnv0OEKvSLDGNQn6rICP6w Date: Tue, 27 Apr 2021 08:32:05 +0000 Message-ID: References: In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [172.21.188.84] Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogWXVlY2hhbyBaaGFvIDx5dWVjaGFvLnpoYW9AYWR2YW50ZWNoLmNvbS5jbj4NCg0KV2l0 aCB0aGlzIGRyaXZlciwgd2UgY2FuIG11bHRpcGxleCBQQ0E5NTU0L1BDQTk1NTUgaW50byBMRUQg YW5kIEdQSU8gYmFzZWQgb24gdGhlIEFDUEkgZGF0YSBvZiBCSU9TLg0KDQpTaWduZWQtb2ZmLWJ5 OiBZdWVjaGFvIFpoYW8gPHl1ZWNoYW8uemhhb0BhZHZhbnRlY2guY29tLmNuPg0KU2lnbmVkLW9m Zi1ieTogU3VpIEppYSA8amlhLnN1aUBhZHZhbnRlY2guY29tLmNuPg0KDQp2MjogDQoJLSBhbHBo YWJldGljYWwgb3JkZXIgdGl0bGUgKCJBRFZBTlRFQ0ggTUlYOTk1WCBEUklWRVIiKQ0KLS0tDQog TUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArDQogZHJpdmVycy9wbGF0 Zm9ybS94ODYvS2NvbmZpZyAgICAgICB8ICAxNCArDQogZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFr ZWZpbGUgICAgICB8ICAgMyArDQogZHJpdmVycy9wbGF0Zm9ybS94ODYvYWR2X21peDk1NXguYyB8 IDcwMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDQgZmlsZXMgY2hhbmdlZCwgNzI2 IGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wbGF0Zm9ybS94ODYv YWR2X21peDk1NXguYw0KDQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0K aW5kZXggZDkyZjg1Y2E4MzFkLi45MDAzMzY5OTMzNGMgMTAwNjQ0DQotLS0gYS9NQUlOVEFJTkVS Uw0KKysrIGIvTUFJTlRBSU5FUlMNCkBAIC01NzMsNiArNTczLDEyIEBAIFM6CU1haW50YWluZWQN CiBGOglEb2N1bWVudGF0aW9uL3Njc2kvYWR2YW5zeXMucnN0DQogRjoJZHJpdmVycy9zY3NpL2Fk dmFuc3lzLmMNCiANCitBRFZBTlRFQ0ggTUlYOTk1WCBEUklWRVINCitNOglZdWVjaGFvIFpoYW8g PHl1ZWNoYW8uemhhb0BhZHZhbnRlY2guY29tLmNuPg0KK006CVN1aSBKaWEgPGppYS5zdWlAYWR2 YW50ZWNoLmNvbS5jbj4NCitTOglNYWludGFpbmVkDQorRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYv YWR2X21peDk1NXguYw0KKw0KIEFEWEwzNFggVEhSRUUtQVhJUyBESUdJVEFMIEFDQ0VMRVJPTUVU RVIgRFJJVkVSIChBRFhMMzQ1L0FEWEwzNDYpDQogTToJTWljaGFlbCBIZW5uZXJpY2ggPG1pY2hh ZWwuaGVubmVyaWNoQGFuYWxvZy5jb20+DQogUzoJU3VwcG9ydGVkDQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcg aW5kZXggYWQ0ZTYzMGU3M2UyLi5jY2VhZDc1Yzc2NGIgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3Bs YXRmb3JtL3g4Ni9LY29uZmlnDQorKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnDQpA QCAtMTI4NCw2ICsxMjg0LDIwIEBAIGNvbmZpZyBJTlRFTF9URUxFTUVUUlkNCiAJICBkaXJlY3Rs eSB2aWEgZGVidWdmcyBmaWxlcy4gVmFyaW91cyB0b29scyBtYXkgdXNlDQogCSAgdGhpcyBpbnRl cmZhY2UgZm9yIFNvQyBzdGF0ZSBtb25pdG9yaW5nLg0KIA0KK2NvbmZpZyBBRFZfTUlYOTU1WA0K KyAgICB0cmlzdGF0ZSAiQWR2YW50ZWNoIExFRHMgYW5kIEdQSU9zIERyaXZlciINCisgICAgZGVw ZW5kcyBvbiBYODZfNjQNCisgICAgZGVwZW5kcyBvbiBBQ1BJICYmIEdQSU9MSUINCisgICAgc2Vs ZWN0IExFRFNfQ0xBU1MNCisgICAgc2VsZWN0IExFRFNfVFJJR0dFUlMNCisgICAgaGVscA0KKyAg ICAgIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSBrZXJuZWwgZHJpdmVyIGxlZHMtcGNhOTU1 eA0KKyAgICAgIGFuZCBncGlvLXBjYTk1M3ggYnV0IHJld3JpdGUgZm9yIFBDQTk1NTQvUENBOTU1 NS4NCisgICAgICBUaGlzIGRyaXZlciByZXF1aXJlcyBMRUQgZGF0YSB3aGljaCBpcyBkZWZpbmVk IGluc2lkZQ0KKyAgICAgIEFDUEkgRFNEVCBvciBkZXZpY2V0cmVlLg0KKyAgICAgIEluIGFkZGl0 aW9uLCB0aGUgcGluIHRoYXQgaXMgbm90IGRlZmluZWQgYXMgTEVEIHdpbGwNCisgICAgICBiZSBk ZWNsYXJlZCBhcyBHUElPLg0KKw0KIGVuZGlmICMgWDg2X1BMQVRGT1JNX0RFVklDRVMNCiANCiBj b25maWcgUE1DX0FUT00NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmls ZSBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlIGluZGV4IDYwZDU1NDA3Mzc0OS4uNWVj YWQwYWU5MjVlIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUNCisr KyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlDQpAQCAtMTM4LDMgKzEzOCw2IEBAIG9i ai0kKENPTkZJR19JTlRFTF9URUxFTUVUUlkpCQkrPSBpbnRlbF90ZWxlbWV0cnlfY29yZS5vIFwN CiAJCQkJCSAgIGludGVsX3RlbGVtZXRyeV9wbHRkcnYubyBcDQogCQkJCQkgICBpbnRlbF90ZWxl bWV0cnlfZGVidWdmcy5vDQogb2JqLSQoQ09ORklHX1BNQ19BVE9NKQkJCSs9IHBtY19hdG9tLm8N CisNCisjIEFkdmFudGVjaA0KK29iai0kKENPTkZJR19BRFZfTUlYOTU1WCkJCSs9IGFkdl9taXg5 NTV4Lm8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hZHZfbWl4OTU1eC5jIGIv ZHJpdmVycy9wbGF0Zm9ybS94ODYvYWR2X21peDk1NXguYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAwMC4uOTlmYzE0MjdkNGQ5DQotLS0gL2Rldi9udWxsDQorKysgYi9k cml2ZXJzL3BsYXRmb3JtL3g4Ni9hZHZfbWl4OTU1eC5jDQpAQCAtMCwwICsxLDcwMyBAQA0KKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyDQorLyoNCisgKiBDb3B5 cmlnaHQgMjAxOSBBZHZhbnRlY2ggQ29ycC4NCisgKg0KKyAqIEF1dGhvcjoNCisgKglKaWEgU3Vp IDxqaWEuc3VpQGFkdmFudGVjaC5jb20uY24+DQorICoJWXVlY2hhbyBaaGFvIDx5dWVjaGFvLnpo YW9AYWR2YW50ZWNoLmNvbS5jbj4NCisgKg0KKyAqIEEgZHJpdmVyIGZvciBBTUlYOTU1PFg+KEFk dmFudGVjaCBtaXhlZCBkZXZpY2UgYmFzZWQgb24gUENBOTU1WCkuDQorICogVGhpcyBkcml2ZXIg cHJvdmlkZXMgTEVEIGFuZCBHUElPIGZ1bmN0aW9ucy4NCisgKg0KKyAqIFN1cHBvcnRlZCBkZXZp Y2VzOg0KKyAqDQorICoJRGV2aWNlCQlBQ1BJX0RFVklDRV9JRAlEZXNjcmlwdGlvbgk3LWJpdCBz bGF2ZSBhZGRyZXNzDQorICoJLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0t CS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKglBTUlYOTU1NAlBSEMwMzIwCQlCYXNlIG9uIFBDQTk1 NTQJMHgyMCAuLiAweDI3DQorICoJQU1JWDk1NTUJQUhDMDMyMQkJQmFzZSBvbiBQQ0E5NTU1CTB4 MjAgLi4gMHgyNw0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCisjaW5jbHVkZSA8 bGludXgvbGVkcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGlu dXgvdmVyc2lvbi5oPg0KKyNpbmNsdWRlIDxsaW51eC9md25vZGUuaD4NCisjaW5jbHVkZSA8bGlu dXgvYWNwaS5oPg0KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2RyaXZlci5oPg0KKyNpbmNsdWRlIDxs aW51eC9ncGlvL2NvbnN1bWVyLmg+DQorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4NCisNCisj ZGVmaW5lIFZFUlNJT04gIjAuMDUiDQorDQorZW51bSBBTUlYOTU1WF9MRUQgew0KKwlBTUlYOTU1 WF9MRURfT04gPSAwLA0KKwlBTUlYOTU1WF9MRURfT0ZGID0gMSwNCit9Ow0KKw0KKyNkZWZpbmUg QkFOS19TSVpFIDgNCisvKg0KKyAqIE9ubHkgc3VwcG9ydCBwY2E5NTU0IGFuZCBwY2E5NTU1LA0K KyAqIFRoZSBtYXggcGluIG51bWJlcnMgaXMgMTYNCisgKiBEZWZpbmQgTUFYX0JBTksgPSAyDQor ICovDQorI2RlZmluZSBNQVhfQkFOSyAyDQorDQorLyogUENBOTU1NCBHUElPIHJlZ2lzdGVyICov DQorI2RlZmluZSBBTUlYOTU1WF9JTlBVVCAweDAwDQorI2RlZmluZSBBTUlYOTU1WF9PVVRQVVQg MHgwMQ0KKyNkZWZpbmUgQU1JWDk1NVhfSU5WRVJUIDB4MDINCisjZGVmaW5lIEFNSVg5NTVYX0RJ UkVDVElPTiAweDAzDQorDQorLyogRGVmYXVsdCBWYWx1ZSBvZiBHUElPIHJlZ2lzdGVyICovDQor I2RlZmluZSBBTUlYOTU1WF9PVVRQVVRfREVGQVVMVCAweEZGDQorI2RlZmluZSBBTUlYOTU1WF9E SVJFQ1RJT05fREVGQVVMVCAweEZGRkYNCisNCitlbnVtIGNoaXBfaWQgew0KKwlhbWl4OTU1NCwN CisJYW1peDk1NTUsDQorfTsNCisNCitzdHJ1Y3QgY2hpcF9pbmZvX3Qgew0KKwl1OCBiaXRzOw0K Kwl1OCBzbHZfYWRkcjsgLyogNy1iaXQgc2xhdmUgYWRkcmVzcyBtYXNrICovDQorCWludCBzbHZf YWRkcl9zaGlmdDsgLyogTnVtYmVyIG9mIGJpdHMgdG8gaWdub3JlICovIH07DQorDQorc3RhdGlj IHN0cnVjdCBjaGlwX2luZm9fdCBjaGlwX2luZm9fdGFibGVzW10gPSB7DQorCVthbWl4OTU1NF0g PSB7DQorCQkuYml0cyA9IDgsDQorCQkuc2x2X2FkZHIgPSAvKiAwMTAweHh4ICovIDB4MjAsDQor CQkuc2x2X2FkZHJfc2hpZnQgPSAzLA0KKwl9LA0KKwlbYW1peDk1NTVdID0gew0KKwkJLmJpdHMg PSAxNiwNCisJCS5zbHZfYWRkciA9IC8qIDAxMDB4eHggKi8gMHgyMCwNCisJCS5zbHZfYWRkcl9z aGlmdCA9IDMsDQorCX0sDQorfTsNCisNCitzdHJ1Y3QgYW1peDk1NXhfcmVnX2NvbmZpZyB7DQor CWludCBkaXJlY3Rpb247DQorCWludCBvdXRwdXQ7DQorCWludCBpbnB1dDsNCisJaW50IGludmVy dDsNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYW1peDk1NXhfcmVnX2NvbmZpZyBhbWl4 OTU1eF9yZWdzID0gew0KKwkuZGlyZWN0aW9uID0gQU1JWDk1NVhfRElSRUNUSU9OLA0KKwkub3V0 cHV0ID0gQU1JWDk1NVhfT1VUUFVULA0KKwkuaW5wdXQgPSBBTUlYOTU1WF9JTlBVVCwNCisJLmlu dmVydCA9IEFNSVg5NTVYX0lOVkVSVCwNCit9Ow0KKw0KK3N0cnVjdCBkcml2ZXJfZGF0YSB7DQor CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IHJlYWQvd3JpdGUgUENBOTU1WCAqLw0KKwlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50Ow0KKwlzdHJ1Y3QgY2hpcF9pbmZvX3QgKmNoaXBfaW5m bzsNCisJc3RydWN0IGFtaXg5NTV4X2xlZCAqbGVkczsNCisJc3RydWN0IGFtaXg5NTV4X2dwaW8g KmdwaW87DQorCWludCAoKndyaXRlX3JlZ3MpKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBy ZWcsIHU4ICp2YWwpOw0KKwlpbnQgKCpyZWFkX3JlZ3MpKHN0cnVjdCBpMmNfY2xpZW50ICppMmMs IGludCByZWcsIHU4ICp2YWwpOyB9Ow0KKw0KK3N0cnVjdCBhbWl4OTU1eF9sZWQgew0KKwlzdHJ1 Y3QgZHJpdmVyX2RhdGEgKmRhdGE7DQorCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7DQor CWludCBsZWRfaWQ7DQorCWNoYXIgbmFtZVszMl07DQorCWNvbnN0IGNoYXIgKmRlZmF1bHRfdHJp Z2dlcjsNCit9Ow0KKw0KK3N0cnVjdCBhbWl4OTU1eF9ncGlvIHsNCisJdTggcmVnX291dHB1dFtN QVhfQkFOS107DQorCXU4IHJlZ19kaXJlY3Rpb25bTUFYX0JBTktdOw0KKwlpbnQgZ3Bpb19pZFtN QVhfQkFOSyAqIEJBTktfU0laRV07Ly90aGUgaWQgbGlzdCBvZiBncGlvIHBpbg0KKw0KKwlzdHJ1 Y3QgZ3Bpb19jaGlwIGdwaW9fY2hpcDsNCisJY29uc3Qgc3RydWN0IGFtaXg5NTV4X3JlZ19jb25m aWcgKnJlZ3M7IH07DQorDQorc3RydWN0IGFtaXg5NTV4X3BsYXRmb3JtX2RhdGEgew0KKwlzdHJ1 Y3QgZHJpdmVyX2RhdGEgKmRhdGE7DQorCXN0cnVjdCBhbWl4OTU1eF9sZWQgKmxlZHM7DQorCXN0 cnVjdCBhbWl4OTU1eF9ncGlvICpncGlvOw0KKwlpbnQgbnVtX2xlZHM7DQorCWludCBncGlvX3N0 YXJ0Ow0KKwlpbnQgbnVtX2dwaW87DQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlf ZGV2aWNlX2lkIGFjcGlfYW1peDk1NXhfbWF0Y2hbXSA9IHsNCisJeyAiQUhDMDMyMCIsIGFtaXg5 NTU0IH0sDQorCXsgIkFIQzAzMjEiLCBhbWl4OTU1NSB9LA0KKwl7fSwNCit9Ow0KK01PRFVMRV9E RVZJQ0VfVEFCTEUoYWNwaSwgYWNwaV9hbWl4OTU1eF9tYXRjaCk7DQorDQorc3RhdGljIGludCBn ZXRfZGV2aWNlX2luZGV4KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsDQorCQkJICAgIGNvbnN0 IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkNCit7DQorCWNvbnN0IHN0cnVjdCBhY3BpX2Rldmlj ZV9pZCAqYWNwaV9pZDsNCisNCisJaWYgKGlkKQ0KKwkJcmV0dXJuIGlkLT5kcml2ZXJfZGF0YTsN CisNCisJYWNwaV9pZCA9IGFjcGlfbWF0Y2hfZGV2aWNlKGFjcGlfYW1peDk1NXhfbWF0Y2gsICZj bGllbnQtPmRldik7DQorCWlmICghYWNwaV9pZCkNCisJCXJldHVybiAtRU5PREVWOw0KKw0KKwly ZXR1cm4gYWNwaV9pZC0+ZHJpdmVyX2RhdGE7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdTggYW1p eDk1NXhfc2V0X2JpdCh1OCB2YWwsIGludCBsZWRfaWQsIGVudW0gQU1JWDk1NVhfTEVEIA0KK3N0 YXRlKSB7DQorCWxlZF9pZCAlPSBCQU5LX1NJWkU7DQorDQorCXN3aXRjaCAoc3RhdGUpIHsNCisJ Y2FzZSBBTUlYOTU1WF9MRURfT046DQorCQl2YWwgJj0gfigxIDw8IGxlZF9pZCk7IC8vQ2xlYXIg Yml0DQorCQlicmVhazsNCisJY2FzZSBBTUlYOTU1WF9MRURfT0ZGOg0KKwkJdmFsIHw9IDEgPDwg bGVkX2lkOyAvL1NldCBiaXQNCisJCWJyZWFrOw0KKwl9DQorDQorCXJldHVybiB2YWw7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgYW1peDk1NXhfcmVhZF9yZWdzXzgoc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCwgaW50IHJlZywgdTggDQorKnZhbCkgew0KKwlpbnQgcmV0ID0gaTJjX3NtYnVzX3JlYWRf Ynl0ZV9kYXRhKGNsaWVudCwgcmVnKTsNCisJKnZhbCA9IHJldDsNCisJcmV0dXJuIHJldDsNCit9 DQorDQorc3RhdGljIGludCBhbWl4OTU1eF9yZWFkX3JlZ3NfMTYoc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCwgaW50IHJlZywgdTggDQorKnZhbCkgew0KKwlpbnQgcmV0ID0gaTJjX3NtYnVzX3Jl YWRfd29yZF9kYXRhKGNsaWVudCwgcmVnIDw8IDEpOw0KKw0KKwl2YWxbMF0gPSAodTE2KXJldCAm IDB4RkY7DQorCXZhbFsxXSA9ICh1MTYpcmV0ID4+IDg7DQorDQorCXJldHVybiByZXQ7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgYW1peDk1NXhfcmVhZF9yZWdzKHN0cnVjdCBkcml2ZXJfZGF0YSAqZGF0 YSwgaW50IHJlZywgdTggDQorKnZhbCkgew0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBkYXRhLT5y ZWFkX3JlZ3MoZGF0YS0+Y2xpZW50LCByZWcsIHZhbCk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlk ZXZfZXJyKCZkYXRhLT5jbGllbnQtPmRldiwgImZhaWxlZCByZWFkaW5nIHJlZ2lzdGVyXG4iKTsN CisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg YW1peDk1NXhfcmVhZF9zaW5nbGUoc3RydWN0IGRyaXZlcl9kYXRhICpkYXRhLCBpbnQgcmVnLCB1 MzIgKnZhbCwNCisJCQkJaW50IG9mZikNCit7DQorCWludCByZXQ7DQorCWludCBiYW5rX3NoaWZ0 ID0gZmxzKChkYXRhLT5jaGlwX2luZm8tPmJpdHMgLSAxKSAvIEJBTktfU0laRSk7DQorCWludCBv ZmZzZXQgPSBvZmYgLyBCQU5LX1NJWkU7DQorDQorCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVf ZGF0YShkYXRhLT5jbGllbnQsDQorCQkJCSAgICAgICAocmVnIDw8IGJhbmtfc2hpZnQpICsgb2Zm c2V0KTsNCisNCisJKnZhbCA9IHJldDsNCisNCisJaWYgKHJldCA8IDApDQorCQlkZXZfZXJyKCZk YXRhLT5jbGllbnQtPmRldiwgImZhaWxlZCByZWFkaW5nIHJlZ2lzdGVyXG4iKTsNCisNCisJcmV0 dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBhbWl4OTU1eF93cml0ZV9yZWdzXzgoc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywgdTggDQorKnZhbCkgew0KKwlyZXR1cm4gaTJj X3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgKnZhbCk7IH0NCisNCitzdGF0aWMg aW50IGFtaXg5NTV4X3dyaXRlX3JlZ3NfMTYoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50 IHJlZywgDQordTggKnZhbCkgew0KKwlfX2xlMTYgd29yZCA9IGNwdV90b19sZTE2KGdldF91bmFs aWduZWQoKHUxNiAqKXZhbCkpOw0KKw0KKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0 YShjbGllbnQsIHJlZyA8PCAxLCAoX19mb3JjZSB1MTYpd29yZCk7IA0KK30NCisNCitzdGF0aWMg aW50IGFtaXg5NTV4X3dyaXRlX3JlZ3Moc3RydWN0IGRyaXZlcl9kYXRhICpkYXRhLCBpbnQgcmVn LCB1OCANCisqdmFsKSB7DQorCWludCByZXQ7DQorDQorCXJldCA9IGRhdGEtPndyaXRlX3JlZ3Mo ZGF0YS0+Y2xpZW50LCByZWcsIHZhbCk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlkZXZfZXJyKCZk YXRhLT5jbGllbnQtPmRldiwgImZhaWxlZCB3cml0aW5nIHJlZ2lzdGVyXG4iKTsNCisJCXJldHVy biByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgYW1peDk1NXhf d3JpdGVfc2luZ2xlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZGF0YSwgaW50IHJlZywgdTMyIHZhbCwN CisJCQkJIGludCBvZmYpDQorew0KKwlpbnQgcmV0Ow0KKwlpbnQgYmFua19zaGlmdCA9IGZscygo ZGF0YS0+Y2hpcF9pbmZvLT5iaXRzIC0gMSkgLyBCQU5LX1NJWkUpOw0KKwlpbnQgb2Zmc2V0ID0g b2ZmIC8gQkFOS19TSVpFOw0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRh dGEtPmNsaWVudCwNCisJCQkJCShyZWcgPDwgYmFua19zaGlmdCkgKyBvZmZzZXQsIHZhbCk7DQor DQorCWlmIChyZXQgPCAwKQ0KKwkJZGV2X2VycigmZGF0YS0+Y2xpZW50LT5kZXYsICJmYWlsZWQg d3JpdGluZyByZWdpc3RlclxuIik7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBp bnQgYW1peDk1NXhfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwNCisJCQkg ICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkNCit7DQorCXN0cnVjdCBhbWl4OTU1eF9sZWQg KmxlZDsNCisJc3RydWN0IGRyaXZlcl9kYXRhICpkYXRhOw0KKwlpbnQgbGVkX2lkOw0KKwlpbnQg cmV0ID0gMDsNCisJdTMyIHJlZ192YWwgPSAwOw0KKw0KKwlsZWQgPSBjb250YWluZXJfb2YobGVk X2NkZXYsIHN0cnVjdCBhbWl4OTU1eF9sZWQsIGxlZF9jZGV2KTsNCisJZGF0YSA9IGxlZC0+ZGF0 YTsNCisJbGVkX2lkID0gbGVkLT5sZWRfaWQ7DQorDQorCW11dGV4X2xvY2soJmRhdGEtPmxvY2sp Ow0KKw0KKwkvL2dldCBjdXJyZW50IHZhbHVlDQorCXJldCA9IGFtaXg5NTV4X3JlYWRfc2luZ2xl KGRhdGEsIEFNSVg5NTVYX09VVFBVVCwgJnJlZ192YWwsIGxlZF9pZCk7DQorCWlmIChyZXQgPCAw KQ0KKwkJZ290byBzZXRfZmFpbGVkOw0KKw0KKwkvL2NoYW5nZSBiaXQNCisJc3dpdGNoICh2YWx1 ZSkgew0KKwljYXNlIExFRF9PRkY6DQorCQlyZWdfdmFsID0gYW1peDk1NXhfc2V0X2JpdChyZWdf dmFsLCBsZWRfaWQsIEFNSVg5NTVYX0xFRF9PRkYpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQor CQlyZWdfdmFsID0gYW1peDk1NXhfc2V0X2JpdChyZWdfdmFsLCBsZWRfaWQsIEFNSVg5NTVYX0xF RF9PTik7DQorCQlicmVhazsNCisJfQ0KKw0KKwkvL3NldCBuZXcgdmFsdWUNCisJcmV0ID0gYW1p eDk1NXhfd3JpdGVfc2luZ2xlKGRhdGEsIEFNSVg5NTVYX09VVFBVVCwgcmVnX3ZhbCwgbGVkX2lk KTsNCisNCitzZXRfZmFpbGVkOg0KKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOw0KKw0KKwly ZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IGFtaXg5NTV4X2dwaW9fZGlyZWN0aW9uX2lu cHV0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCANCitpbnQgb2ZmKSB7DQorCXN0cnVj dCBkcml2ZXJfZGF0YSAqZGF0YSA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTsNCisJdTggcmVnX3Zh bDsNCisJdW5zaWduZWQgaW50IGluZGV4Ow0KKwlpbnQgcmV0Ow0KKw0KKwlpbmRleCA9IGRhdGEt PmdwaW8tPmdwaW9faWRbb2ZmXTsNCisNCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7DQorCXJl Z192YWwgPSBkYXRhLT5ncGlvLT5yZWdfZGlyZWN0aW9uW2luZGV4IC8gQkFOS19TSVpFXQ0KKwkJ CQkJfCAoMXUgPDwgKGluZGV4ICUgQkFOS19TSVpFKSk7DQorDQorCXJldCA9IGFtaXg5NTV4X3dy aXRlX3NpbmdsZShkYXRhLCBkYXRhLT5ncGlvLT5yZWdzLT5kaXJlY3Rpb24sDQorCQkJCSAgICBy ZWdfdmFsLCBpbmRleCk7DQorCWlmIChyZXQpDQorCQlnb3RvIGV4aXQ7DQorDQorCWRhdGEtPmdw aW8tPnJlZ19kaXJlY3Rpb25baW5kZXggLyBCQU5LX1NJWkVdID0gcmVnX3ZhbDsNCitleGl0Og0K KwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0 aWMgaW50IGFtaXg5NTV4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpn YywNCisJCQkJCSAgdW5zaWduZWQgaW50IG9mZiwgaW50IHZhbCkNCit7DQorCXN0cnVjdCBkcml2 ZXJfZGF0YSAqZGF0YSA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTsNCisJdTggcmVnX3ZhbDsNCisJ dW5zaWduZWQgaW50IGluZGV4Ow0KKwlpbnQgcmV0Ow0KKw0KKwlpbmRleCA9IGRhdGEtPmdwaW8t PmdwaW9faWRbb2ZmXTsNCisNCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7DQorCWlmICh2YWwp IHsNCisJCXJlZ192YWwgPSBkYXRhLT5ncGlvLT5yZWdfb3V0cHV0W2luZGV4IC8gQkFOS19TSVpF XQ0KKwkJCXwgKDF1IDw8IChpbmRleCAmIEJBTktfU0laRSkpOw0KKwl9IGVsc2Ugew0KKwkJcmVn X3ZhbCA9IGRhdGEtPmdwaW8tPnJlZ19vdXRwdXRbaW5kZXggLyBCQU5LX1NJWkVdDQorCQkJJiB+ KDF1IDw8IChpbmRleCAlIEJBTktfU0laRSkpOw0KKwl9DQorDQorCXJldCA9IGFtaXg5NTV4X3dy aXRlX3NpbmdsZShkYXRhLCBkYXRhLT5ncGlvLT5yZWdzLT5vdXRwdXQsDQorCQkJCSAgICByZWdf dmFsLCBpbmRleCk7DQorCWlmIChyZXQpDQorCQlnb3RvIGV4aXQ7DQorDQorCWRhdGEtPmdwaW8t PnJlZ19vdXRwdXRbaW5kZXggLyBCQU5LX1NJWkVdID0gcmVnX3ZhbDsNCisNCisJcmVnX3ZhbCA9 IGRhdGEtPmdwaW8tPnJlZ19kaXJlY3Rpb25baW5kZXggLyBCQU5LX1NJWkVdDQorCQkJCQkmIH4o MXUgPDwgKGluZGV4ICUgQkFOS19TSVpFKSk7DQorDQorCXJldCA9IGFtaXg5NTV4X3dyaXRlX3Np bmdsZShkYXRhLCBkYXRhLT5ncGlvLT5yZWdzLT5kaXJlY3Rpb24sDQorCQkJCSAgICByZWdfdmFs LCBpbmRleCk7DQorCWlmIChyZXQpDQorCQlnb3RvIGV4aXQ7DQorDQorCWRhdGEtPmdwaW8tPnJl Z19kaXJlY3Rpb25baW5kZXggLyBCQU5LX1NJWkVdID0gcmVnX3ZhbDsNCitleGl0Og0KKwltdXRl eF91bmxvY2soJmRhdGEtPmxvY2spOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50 IGFtaXg5NTV4X2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBp bnQgDQorb2ZmKSB7DQorCXN0cnVjdCBkcml2ZXJfZGF0YSAqZGF0YSA9IGdwaW9jaGlwX2dldF9k YXRhKGdjKTsNCisJdTMyIHJlZ192YWw7DQorCWludCByZXQ7DQorCXVuc2lnbmVkIGludCBpbmRl eDsNCisNCisJaW5kZXggPSBkYXRhLT5ncGlvLT5ncGlvX2lkW29mZl07DQorDQorCW11dGV4X2xv Y2soJmRhdGEtPmxvY2spOw0KKwlyZXQgPSBhbWl4OTU1eF9yZWFkX3NpbmdsZShkYXRhLCBkYXRh LT5ncGlvLT5yZWdzLT5pbnB1dCwNCisJCQkJICAgJnJlZ192YWwsIGluZGV4KTsNCisJbXV0ZXhf dW5sb2NrKCZkYXRhLT5sb2NrKTsNCisNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gMDsNCisN CisJcmV0dXJuIChyZWdfdmFsICYgKDF1IDw8IChpbmRleCAlIEJBTktfU0laRSkpKSA/IDEgOiAw OyB9DQorDQorc3RhdGljIHZvaWQgYW1peDk1NXhfZ3Bpb19zZXRfdmFsdWUoc3RydWN0IGdwaW9f Y2hpcCAqZ2MsIHVuc2lnbmVkIGludCBvZmYsDQorCQkJCSAgICBpbnQgdmFsKQ0KK3sNCisJc3Ry dWN0IGRyaXZlcl9kYXRhICpkYXRhID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOw0KKwl1OCByZWdf dmFsOw0KKwlpbnQgcmV0Ow0KKwl1bnNpZ25lZCBpbnQgaW5kZXg7DQorDQorCWluZGV4ID0gZGF0 YS0+Z3Bpby0+Z3Bpb19pZFtvZmZdOw0KKw0KKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsNCisJ aWYgKHZhbCkNCisJCXJlZ192YWwgPSBkYXRhLT5ncGlvLT5yZWdfb3V0cHV0W2luZGV4IC8gQkFO S19TSVpFXQ0KKwkJCQkJCXwgKDF1IDw8IChpbmRleCAlIEJBTktfU0laRSkpOw0KKwllbHNlDQor CQlyZWdfdmFsID0gZGF0YS0+Z3Bpby0+cmVnX291dHB1dFtpbmRleCAvIEJBTktfU0laRV0NCisJ CQkJCQkmIH4oMXUgPDwgKGluZGV4ICUgQkFOS19TSVpFKSk7DQorDQorCXJldCA9IGFtaXg5NTV4 X3dyaXRlX3NpbmdsZShkYXRhLCBkYXRhLT5ncGlvLT5yZWdzLT5vdXRwdXQsDQorCQkJCSAgICBy ZWdfdmFsLCBpbmRleCk7DQorCWlmIChyZXQpDQorCQlnb3RvIGV4aXQ7DQorDQorCWRhdGEtPmdw aW8tPnJlZ19vdXRwdXRbaW5kZXggLyBCQU5LX1NJWkVdID0gcmVnX3ZhbDsNCisNCitleGl0Og0K KwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOw0KK30NCisNCitzdGF0aWMgaW50IGFtaXg5NTV4 X2dwaW9fZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgDQoraW50 IG9mZikgew0KKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRhdGEgPSBncGlvY2hpcF9nZXRfZGF0YShn Yyk7DQorCXUzMiByZWdfdmFsOw0KKwlpbnQgcmV0Ow0KKwl1bnNpZ25lZCBpbnQgaW5kZXg7DQor DQorCWluZGV4ID0gZGF0YS0+Z3Bpby0+Z3Bpb19pZFtvZmZdOw0KKw0KKwltdXRleF9sb2NrKCZk YXRhLT5sb2NrKTsNCisJcmV0ID0gYW1peDk1NXhfcmVhZF9zaW5nbGUoZGF0YSwgZGF0YS0+Z3Bp by0+cmVncy0+ZGlyZWN0aW9uLA0KKwkJCQkgICAmcmVnX3ZhbCwgaW5kZXgpOw0KKwltdXRleF91 bmxvY2soJmRhdGEtPmxvY2spOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQor CXJldHVybiAhIShyZWdfdmFsICYgKDF1IDw8IChpbmRleCAlIEJBTktfU0laRSkpKTsgfQ0KKw0K K3N0YXRpYyB2b2lkIGFtaXg5NTV4X3NldHVwX2dwaW8oc3RydWN0IGFtaXg5NTV4X3BsYXRmb3Jt X2RhdGEgKnBkYXRhLA0KKwkJCQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRhdGEpDQorew0KKwlzdHJ1 Y3QgZ3Bpb19jaGlwICpnYzsNCisNCisJZ2MgPSAmcGRhdGEtPmdwaW8tPmdwaW9fY2hpcDsNCisN CisJZ2MtPmRpcmVjdGlvbl9pbnB1dCA9IGFtaXg5NTV4X2dwaW9fZGlyZWN0aW9uX2lucHV0Ow0K KwlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IGFtaXg5NTV4X2dwaW9fZGlyZWN0aW9uX291dHB1dDsN CisJZ2MtPmdldCA9IGFtaXg5NTV4X2dwaW9fZ2V0X3ZhbHVlOw0KKwlnYy0+c2V0ID0gYW1peDk1 NXhfZ3Bpb19zZXRfdmFsdWU7DQorCWdjLT5nZXRfZGlyZWN0aW9uID0gYW1peDk1NXhfZ3Bpb19n ZXRfZGlyZWN0aW9uOw0KKwkvL2djLT5zZXRfY29uZmlnDQorCS8vZ2MtPnNldF9tdWx0aXBsZQ0K KwlnYy0+Y2FuX3NsZWVwID0gdHJ1ZTsNCisNCisJZ2MtPmJhc2UgPSBwZGF0YS0+Z3Bpb19zdGFy dDsNCisJZ2MtPm5ncGlvID0gcGRhdGEtPm51bV9ncGlvOw0KKw0KKwlnYy0+bGFiZWwgPSBkZXZf bmFtZSgmZGF0YS0+Y2xpZW50LT5kZXYpOw0KKwlnYy0+cGFyZW50ID0gJmRhdGEtPmNsaWVudC0+ ZGV2Ow0KKw0KKwlnYy0+b3duZXIgPSBUSElTX01PRFVMRTsNCit9DQorDQorc3RhdGljIHN0cnVj dCBhbWl4OTU1eF9wbGF0Zm9ybV9kYXRhICoNCithbWl4OTU1eF9nZXRfcGRhdGEoc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCwgc3RydWN0IGNoaXBfaW5mb190ICpjaGlwKSANCit7DQorCXN0cnVj dCBhbWl4OTU1eF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsNCisJc3RydWN0IGZ3bm9kZV9oYW5kbGUg KmNoaWxkOw0KKwl1MzIgYml0bWFzayA9IDA7DQorCWludCBwaW5faWQgPSAwOw0KKwlpbnQgY291 bnQgPSAwOw0KKwlpbnQgaW5kZXggPSAwOw0KKw0KKwljb3VudCA9IGRldmljZV9nZXRfY2hpbGRf bm9kZV9jb3VudCgmY2xpZW50LT5kZXYpOw0KKwlpZiAoY291bnQgPiBjaGlwLT5iaXRzKQ0KKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7DQorDQorCXBkYXRhID0gZGV2bV9remFsbG9jKCZjbGll bnQtPmRldiwgc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOw0KKwlpZiAoIXBkYXRhKQ0KKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQorDQorCXBkYXRhLT5udW1fbGVkcyA9IDA7DQorCS8v QklPUyBkZWNsYXJlcyB0aGF0IHRoZSBMRUQgaW5mb3JtYXRpb24gaXMgaW4gdGhlIEFDUEkgdGFi bGUNCisJaWYgKGNvdW50ID4gMCkgew0KKwkJcGRhdGEtPmxlZHMgPSBkZXZtX2tjYWxsb2MoJmNs aWVudC0+ZGV2LCBjb3VudCwNCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgYW1peDk1NXhfbGVkKSwN CisJCQkJCSAgIEdGUF9LRVJORUwpOw0KKwkJaWYgKCFwZGF0YS0+bGVkcykNCisJCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsNCisNCisJCWRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlKCZjbGll bnQtPmRldiwgY2hpbGQpIHsNCisJCQljb25zdCBjaGFyICpuYW1lOw0KKwkJCXUzMiByZWc7DQor CQkJaW50IHJlczsNCisNCisJCQlyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQs ICJyZWciLCAmcmVnKTsNCisJCQlpZiAocmVzICE9IDAgfHwgcmVnID49IGNoaXAtPmJpdHMpDQor CQkJCWNvbnRpbnVlOw0KKw0KKwkJCXBkYXRhLT5sZWRzW2luZGV4XS5sZWRfaWQgPSByZWc7DQor CQkJYml0bWFzayB8PSAxIDw8IHJlZzsNCisNCisJCQlyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVh ZF9zdHJpbmcoY2hpbGQsICJsYWJlbCIsDQorCQkJCQkJCSAgJm5hbWUpOw0KKwkJCWlmIChyZXMg IT0gMCAmJiBpc19vZl9ub2RlKGNoaWxkKSkNCisJCQkJbmFtZSA9IHRvX29mX25vZGUoY2hpbGQp LT5uYW1lOw0KKw0KKwkJCXNucHJpbnRmKHBkYXRhLT5sZWRzW2luZGV4XS5uYW1lLA0KKwkJCQkg c2l6ZW9mKHBkYXRhLT5sZWRzW2luZGV4XS5uYW1lKSwgIiVzIiwgbmFtZSk7DQorDQorCQkJaW5k ZXgrKzsNCisJCX0NCisNCisJCXBkYXRhLT5udW1fbGVkcyA9IGNvdW50Ow0KKwl9DQorDQorCS8v Tm8gcGluIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIHRvIGdwaW8NCisJaWYgKGNvdW50ID09IGNo aXAtPmJpdHMpDQorCQlyZXR1cm4gcGRhdGE7DQorDQorCXBkYXRhLT5ncGlvID0gZGV2bV9remFs bG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKHN0cnVjdCBhbWl4OTU1eF9ncGlvKSwNCisJCQkJICAg R0ZQX0tFUk5FTCk7DQorCWlmICghcGRhdGEtPmdwaW8pDQorCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsNCisNCisJZm9yIChwaW5faWQgPSAwLCBpbmRleCA9IDA7IHBpbl9pZCA8IGNoaXAtPmJp dHM7IHBpbl9pZCsrKSB7DQorCQkvL3RoaXMgcGluIGlzIHVzZWQgYmUgbGVkDQorCQlpZiAoKGJp dG1hc2sgPj4gcGluX2lkKSAmIDB4MDEpDQorCQkJY29udGludWU7DQorDQorCQlwZGF0YS0+Z3Bp by0+Z3Bpb19pZFtpbmRleF0gPSBwaW5faWQ7DQorCQlpbmRleCsrOw0KKwl9DQorDQorCXBkYXRh LT5udW1fZ3BpbyA9IGluZGV4Ow0KKw0KKwkvKg0KKwkgKiBQbGVhc2UgcGFzcyAtMSBhcyBiYXNl IHRvIGxldCBncGlvbGliIHNlbGVjdCB0aGUgY2hpcCBiYXNlDQorCSAqIGluIGFsbCBwb3NzaWJs ZSBjYXNlcw0KKwkgKi8NCisJcGRhdGEtPmdwaW9fc3RhcnQgPSAtMTsNCisNCisJcmV0dXJuIHBk YXRhOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK2FtaXg5NTV4X3NldF9kaXJlY3Rpb25fYXNfb3V0 cHV0KHN0cnVjdCBhbWl4OTU1eF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkgDQorew0KKwl1OCBpOw0K Kwl1MTYgdmFsID0gQU1JWDk1NVhfRElSRUNUSU9OX0RFRkFVTFQ7DQorCXN0cnVjdCBkcml2ZXJf ZGF0YSAqZGF0YSA9IHBkYXRhLT5kYXRhOw0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0g ZGF0YS0+Y2xpZW50Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9sZWRzOyBpKysp DQorCQl2YWwgJj0gfigxIDw8IHBkYXRhLT5sZWRzW2ldLmxlZF9pZCk7DQorDQorCWRhdGEtPndy aXRlX3JlZ3MoY2xpZW50LCBBTUlYOTU1WF9ESVJFQ1RJT04sICh1OCAqKSZ2YWwpOyB9DQorDQor c3RhdGljIHZvaWQgYW1peDk1NXhfaW5pdF9vdXRwdXRfcmVnKHN0cnVjdCBkcml2ZXJfZGF0YSAq ZGF0YSkgew0KKwl1OCB2YWxbTUFYX0JBTktdID0ge0FNSVg5NTVYX09VVFBVVF9ERUZBVUxUfTsN CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsNCisNCisJZGF0YS0+ d3JpdGVfcmVncyhjbGllbnQsIEFNSVg5NTVYX09VVFBVVCwgdmFsKTsgfQ0KKw0KK3N0YXRpYyBp bnQgZGV2aWNlX2FtaXg5NTV4X2luaXQoc3RydWN0IGFtaXg5NTV4X3BsYXRmb3JtX2RhdGEgKnBk YXRhKSB7DQorCWludCByZXQ7DQorCXU4IHZhbFtNQVhfQkFOS10gPSB7MH07DQorDQorCXBkYXRh LT5ncGlvLT5yZWdzID0gJmFtaXg5NTV4X3JlZ3M7DQorDQorCXJldCA9IGFtaXg5NTV4X3JlYWRf cmVncyhwZGF0YS0+ZGF0YSwgcGRhdGEtPmdwaW8tPnJlZ3MtPm91dHB1dCwNCisJCQkJIHBkYXRh LT5ncGlvLT5yZWdfb3V0cHV0KTsNCisJaWYgKHJldCkNCisJCWdvdG8gb3V0Ow0KKw0KKwlyZXQg PSBhbWl4OTU1eF9yZWFkX3JlZ3MocGRhdGEtPmRhdGEsIHBkYXRhLT5ncGlvLT5yZWdzLT5kaXJl Y3Rpb24sDQorCQkJCSBwZGF0YS0+Z3Bpby0+cmVnX2RpcmVjdGlvbik7DQorCWlmIChyZXQpDQor CQlnb3RvIG91dDsNCisNCisJLy9ub3Qgc2V0IGludmVydA0KKwlyZXQgPSBhbWl4OTU1eF93cml0 ZV9yZWdzKHBkYXRhLT5kYXRhLCBBTUlYOTU1WF9JTlZFUlQsIHZhbCk7DQorb3V0Og0KKwlyZXR1 cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IGFtaXg5NTV4X3Byb2JlKHN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQsDQorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpDQorew0K KwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRhdGE7DQorCXN0cnVjdCBjaGlwX2luZm9fdCAqY2hpcDsN CisJaW50IHJldDsNCisJaW50IGksIGVycjsNCisJc3RydWN0IGFtaXg5NTV4X3BsYXRmb3JtX2Rh dGEgKnBkYXRhOw0KKw0KKwlpbnQgZGV2aWNlX2lkID0gMDsNCisNCisJZGV2aWNlX2lkID0gZ2V0 X2RldmljZV9pbmRleChjbGllbnQsIGlkKTsNCisJaWYgKGRldmljZV9pZCA8IDAgfHwgZGV2aWNl X2lkID49IEFSUkFZX1NJWkUoY2hpcF9pbmZvX3RhYmxlcykpDQorCQlyZXR1cm4gLUVOT0RFVjsN CisNCisJY2hpcCA9ICZjaGlwX2luZm9fdGFibGVzW2RldmljZV9pZF07DQorDQorCXBkYXRhID0g YW1peDk1NXhfZ2V0X3BkYXRhKGNsaWVudCwgY2hpcCk7DQorCWlmIChJU19FUlIocGRhdGEpKQ0K KwkJcmV0dXJuIFBUUl9FUlIocGRhdGEpOw0KKw0KKwkvKiBNYWtlIHN1cmUgdGhlIHNsYXZlIGFk ZHJlc3MgZ2l2ZW4gaXMgcG9zc2libGUgKi8NCisJaWYgKChjbGllbnQtPmFkZHIgJiB+KCgxIDw8 IGNoaXAtPnNsdl9hZGRyX3NoaWZ0KSAtIDEpKSAhPQ0KKwkgICAgY2hpcC0+c2x2X2FkZHIpIHsN CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaW52YWxpZCBzbGF2ZSBhZGRyZXNzICUwMnhcbiIs DQorCQkJY2xpZW50LT5hZGRyKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQorCWRldl9p bmZvKCZjbGllbnQtPmRldiwNCisJCSAiJXM6IFVzaW5nICVzICVkLWJpdCBMRUQgZHJpdmVyIGF0 IHNsYXZlIGFkZHJlc3MgMHglMDJ4XG4iLA0KKwkJIGNsaWVudC0+ZGV2LmRyaXZlci0+bmFtZSwg Y2xpZW50LT5uYW1lLCBjaGlwLT5iaXRzLA0KKwkJIGNsaWVudC0+YWRkcik7DQorDQorCWlmICgh aTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19C WVRFX0RBVEEpKQ0KKwkJcmV0dXJuIC1FSU87DQorDQorCS8vSW5pdGlhbCBkcml2ZXIgZGF0YQ0K KwlkYXRhID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKHN0cnVjdCBkcml2ZXJf ZGF0YSksDQorCQkJICAgIEdGUF9LRVJORUwpOw0KKwlpZiAoIWRhdGEpDQorCQlyZXR1cm4gLUVO T01FTTsNCisNCisJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7DQorDQorCWRhdGEtPmxlZHMgPSBw ZGF0YS0+bGVkczsNCisJZGF0YS0+Z3BpbyA9IHBkYXRhLT5ncGlvOw0KKwlkYXRhLT5jbGllbnQg PSBjbGllbnQ7DQorCWRhdGEtPmNoaXBfaW5mbyA9IGNoaXA7DQorDQorCXN3aXRjaCAoY2hpcC0+ Yml0cykgew0KKwljYXNlIDg6DQorCQlkYXRhLT5yZWFkX3JlZ3MgPSBhbWl4OTU1eF9yZWFkX3Jl Z3NfODsNCisJCWRhdGEtPndyaXRlX3JlZ3MgPSBhbWl4OTU1eF93cml0ZV9yZWdzXzg7DQorCQli cmVhazsNCisJY2FzZSAxNjoNCisJCWRhdGEtPnJlYWRfcmVncyA9IGFtaXg5NTV4X3JlYWRfcmVn c18xNjsNCisJCWRhdGEtPndyaXRlX3JlZ3MgPSBhbWl4OTU1eF93cml0ZV9yZWdzXzE2Ow0KKwkJ YnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlwZGF0YS0+ ZGF0YSA9IGRhdGE7DQorDQorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOw0KKw0K KwkvKiBTZXQgR1BJTyBkaXJlY3Rpb24gYXMgb3V0cHV0ICovDQorCWFtaXg5NTV4X3NldF9kaXJl Y3Rpb25fYXNfb3V0cHV0KHBkYXRhKTsNCisNCisJLyogVHVybiBvZmYgYWxsIExFRHMgKi8NCisJ YW1peDk1NXhfaW5pdF9vdXRwdXRfcmVnKGRhdGEpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgcGRh dGEtPm51bV9sZWRzOyBpKyspIHsNCisJCXN0cnVjdCBhbWl4OTU1eF9sZWQgKmxlZDsNCisJCXN0 cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2Ow0KKw0KKwkJbGVkID0gJmRhdGEtPmxlZHNbaV07 DQorCQlsZWRfY2RldiA9ICZsZWQtPmxlZF9jZGV2Ow0KKw0KKwkJbGVkLT5kYXRhID0gZGF0YTsN CisNCisJCWxlZF9jZGV2LT5uYW1lID0gbGVkLT5uYW1lOw0KKwkJbGVkX2NkZXYtPmJyaWdodG5l c3Nfc2V0X2Jsb2NraW5nID0gYW1peDk1NXhfbGVkX3NldDsNCisNCisJCWlmIChwZGF0YS0+bGVk c1tpXS5kZWZhdWx0X3RyaWdnZXIpIHsNCisJCQlsZWRfY2Rldi0+ZGVmYXVsdF90cmlnZ2VyID0N CisJCQkJcGRhdGEtPmxlZHNbaV0uZGVmYXVsdF90cmlnZ2VyOw0KKwkJfQ0KKw0KKwkJZXJyID0g ZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2LCBsZWRfY2Rldik7DQorCQlp ZiAoZXJyKQ0KKwkJCXJldHVybiBlcnI7DQorDQorCQlhbWl4OTU1eF9sZWRfc2V0KGxlZF9jZGV2 LCBMRURfT0ZGKTsNCisJfQ0KKw0KKwlhbWl4OTU1eF9zZXR1cF9ncGlvKHBkYXRhLCBkYXRhKTsN CisNCisJcmV0ID0gZGV2aWNlX2FtaXg5NTV4X2luaXQocGRhdGEpOw0KKwlpZiAocmV0IDwgMCkN CisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IGRldm1fZ3Bpb2NoaXBfYWRkX2RhdGEoJmNsaWVu dC0+ZGV2LCAmZGF0YS0+Z3Bpby0+Z3Bpb19jaGlwLA0KKwkJCQkgICAgIGRhdGEpOw0KKwlpZiAo cmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg c3RydWN0IGkyY19kcml2ZXIgYW1peDk1NXhfZHJpdmVyID0gew0KKwkuZHJpdmVyID0gew0KKwkJ Lm5hbWUgPSAiYW1peDk1NXgiLA0KKwkJLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUihhY3Bp X2FtaXg5NTV4X21hdGNoKSwNCisJfSwNCisJLnByb2JlID0gYW1peDk1NXhfcHJvYmUsDQorfTsN CisNCittb2R1bGVfaTJjX2RyaXZlcihhbWl4OTU1eF9kcml2ZXIpOw0KKw0KK01PRFVMRV9BVVRI T1IoIkppYSBTdWkgPGppYS5zdWlAYWR2YW50ZWNoLmNvbS5jbj4iKTsgDQorTU9EVUxFX0RFU0NS SVBUSU9OKCJBTUlYOTU1WCBMRUQgYW5kIEdQSU8gZHJpdmVyIik7IE1PRFVMRV9MSUNFTlNFKCJH UEwgDQordjIiKTsgTU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7DQotLQ0KMi4yNy4wDQoNCg==