From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [2/2] dmaengine: mediatek: Add MediaTek Command-Queue DMA controller for MT6765 SoC From: sean.wang@mediatek.com Message-Id: <1536138820.6414.36.camel@mtkswgap22> Date: Wed, 5 Sep 2018 17:13:40 +0800 To: shun-chih.yu@mediatek.com Cc: Vinod Koul , Rob Herring , Matthias Brugger , Dan Williams , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, srv_wsdupstream@mediatek.com List-ID: T24gVHVlLCAyMDE4LTA5LTA0IGF0IDE2OjQzICswODAwLCBzaHVuLWNoaWgueXVAbWVkaWF0ZWsu Y29tIHdyb3RlOgo+IEZyb206IFNodW4tQ2hpaCBZdSA8c2h1bi1jaGloLnl1QG1lZGlhdGVrLmNv bT4KPiAKPiBNZWRpYVRlayBDb21tYW5kLVF1ZXVlIERNQSBjb250cm9sbGVyIChDUURNQSkgb24g TVQ2NzY1IFNvQyBpcyBkZWRpY2F0ZWQKPiB0byBtZW1vcnktdG8tbWVtb3J5IHRyYW5zZmVyIHRo cm91Z2ggcXVldWUgYmFzZWQgZGVzY3JpcHRvciBtYW5hZ2VtZW50Lgo+IAo+IFRoZXJlIGFyZSBv bmx5IDMgcGh5c2ljYWwgY2hhbm5lbHMgaW5zaWRlIENRRE1BLCB3aGlsZSB0aGUgZHJpdmVyIGlz Cj4gZXh0ZW5kZWQgdG8gc3VwcG9ydCAzMiB2aXJ0dWFsIGNoYW5uZWxzIGZvciBtdWx0aXBsZSBk bWEgdXNlcnMgdG8gaXNzdWUKPiBkbWEgcmVxdWVzdHMgb250byB0aGUgQ1FETUEgc2ltdWx0YW5l b3VzbHkuCj4gCj4gU2lnbmVkLW9mZi1ieTogU2h1bi1DaGloIFl1IDxzaHVuLWNoaWgueXVAbWVk aWF0ZWsuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnICAgICB8ICAg MTIgKwo+ICBkcml2ZXJzL2RtYS9tZWRpYXRlay9NYWtlZmlsZSAgICB8ICAgIDEgKwo+ICBkcml2 ZXJzL2RtYS9tZWRpYXRlay9tdGstY3FkbWEuYyB8ICA5NTIgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCA5NjUgaW5zZXJ0aW9ucygrKQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvbWVkaWF0ZWsvbXRrLWNxZG1hLmMKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZG1h L21lZGlhdGVrL0tjb25maWcKPiBpbmRleCAyN2JhYzBiLi40YTE1ODJkIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZG1hL21lZGlhdGVrL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2RtYS9tZWRpYXRl ay9LY29uZmlnCj4gQEAgLTExLDMgKzExLDE1IEBAIGNvbmZpZyBNVEtfSFNETUEKPiAgCSAgVGhp cyBjb250cm9sbGVyIHByb3ZpZGVzIHRoZSBjaGFubmVscyB3aGljaCBpcyBkZWRpY2F0ZWQgdG8K PiAgCSAgbWVtb3J5LXRvLW1lbW9yeSB0cmFuc2ZlciB0byBvZmZsb2FkIGZyb20gQ1BVIHRocm91 Z2ggcmluZy0KPiAgCSAgYmFzZWQgZGVzY3JpcHRvciBtYW5hZ2VtZW50Lgo+ICsKPiArY29uZmln IE1US19DUURNQQo+ICsJdHJpc3RhdGUgIk1lZGlhVGVrIENvbW1hbmQtUXVldWUgRE1BIGNvbnRy b2xsZXIgc3VwcG9ydCIKPiArCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RF U1QKPiArCXNlbGVjdCBETUFfRU5HSU5FCj4gKwlzZWxlY3QgRE1BX1ZJUlRVQUxfQ0hBTk5FTFMK PiArCWhlbHAKPiArCSAgRW5hYmxlIHN1cHBvcnQgZm9yIENvbW1hbmQtUXVldWUgRE1BIGNvbnRy b2xsZXIgb24gTWVkaWFUZWsKPiArCSAgU29Dcy4KPiArCj4gKwkgIFRoaXMgY29udHJvbGxlciBw cm92aWRlcyB0aGUgY2hhbm5lbHMgd2hpY2ggaXMgZGVkaWNhdGVkIHRvCj4gKwkgIG1lbW9yeS10 by1tZW1vcnkgdHJhbnNmZXIgdG8gb2ZmbG9hZCBmcm9tIENQVS4KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9kbWEvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9NYWtlZmls ZQo+IGluZGV4IDZlNzc4ZjguLjQxYmIzODEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9kbWEvbWVk aWF0ZWsvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9NYWtlZmlsZQo+IEBA IC0xICsxLDIgQEAKPiAgb2JqLSQoQ09ORklHX01US19IU0RNQSkgKz0gbXRrLWhzZG1hLm8KPiAr b2JqLSQoQ09ORklHX01US19DUURNQSkgKz0gbXRrLWNxZG1hLm8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9kbWEvbWVkaWF0ZWsvbXRrLWNxZG1hLmMgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9tdGst Y3FkbWEuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYzc0YWFhMwo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9tdGstY3FkbWEuYwo+ IEBAIC0wLDAgKzEsOTUyIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4gKy8vIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IE1lZGlhVGVrIEluYy4KPiArCj4gKy8qCj4g KyAqIERyaXZlciBmb3IgTWVkaWFUZWsgQ29tbWFuZC1RdWV1ZSBETUEgQ29udHJvbGxlcgo+ICsg Kgo+ICsgKiBBdXRob3I6IFNodW4tQ2hpaCBZdSA8c2h1bi1jaGloLnl1QG1lZGlhdGVrLmNvbT4K PiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsjaW5j bHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgo+ICsjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50 aW1lLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWZjb3VudC5oPgo+ICsjaW5jbHVkZSA8bGludXgv c2xhYi5oPgo+ICsKPiArI2luY2x1ZGUgIi4uL3ZpcnQtZG1hLmgiCj4gKwo+ICsjZGVmaW5lIE1U S19DUURNQV9VU0VDX1BPTEwJCTEwCj4gKyNkZWZpbmUgTVRLX0NRRE1BX1RJTUVPVVRfUE9MTAkJ MTAwMAo+ICsjZGVmaW5lIE1US19DUURNQV9ETUFfQlVTV0lEVEhTCQlCSVQoRE1BX1NMQVZFX0JV U1dJRFRIXzRfQllURVMpCj4gKyNkZWZpbmUgTVRLX0NRRE1BX0FMSUdOX1NJWkUJCTEKPiArCj4g Ky8qIFRoZSBkZWZhdWx0IG51bWJlciBvZiB2aXJ0dWFsIGNoYW5uZWwgKi8KPiArI2RlZmluZSBN VEtfQ1FETUFfTlJfVkNIQU5TCQkzCj4gKwoKY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgdGhlcmUg YXJlIDMyIHZpcnR1YWwgY2hhbm5lbHMgYXZhaWxhYmxlCgo+ICsvKiBUaGUgZGVmYXVsdCBudW1i ZXIgb2YgcGh5c2ljYWwgY2hhbm5lbCAqLwo+ICsjZGVmaW5lIE1US19DUURNQV9OUl9QQ0hBTlMJ CTMKPiArCj4gKy8qIFJlZ2lzdGVycyBmb3IgdW5kZXJseWluZyBkbWEgbWFuaXB1bGF0aW9uICov Cj4gKyNkZWZpbmUgTVRLX0NRRE1BX0lOVF9GTEFHCQkweDAKPiArI2RlZmluZSBNVEtfQ1FETUFf SU5UX0VOCQkweDQKPiArI2RlZmluZSBNVEtfQ1FETUFfRU4JCQkweDgKPiArI2RlZmluZSBNVEtf Q1FETUFfUkVTRVQJCQkweGMKPiArI2RlZmluZSBNVEtfQ1FETUFfU1RPUAkJCTB4MTAKPiArI2Rl ZmluZSBNVEtfQ1FETUFfRkxVU0gJCQkweDE0Cj4gKyNkZWZpbmUgTVRLX0NRRE1BX1NSQwkJCTB4 MWMKPiArI2RlZmluZSBNVEtfQ1FETUFfRFNUCQkJMHgyMAo+ICsjZGVmaW5lIE1US19DUURNQV9M RU4xCQkJMHgyNAo+ICsjZGVmaW5lIE1US19DUURNQV9MRU4yCQkJMHgyOAo+ICsjZGVmaW5lIE1U S19DUURNQV9TUkMyCQkJMHg2MAo+ICsjZGVmaW5lIE1US19DUURNQV9EU1QyCQkJMHg2NAo+ICsK PiArLyogUmVnaXN0ZXJzIHNldHRpbmcgKi8KPiArI2RlZmluZSBNVEtfQ1FETUFfRU5fQklUCQlC SVQoMCkKPiArI2RlZmluZSBNVEtfQ1FETUFfSU5UX0ZMQUdfQklUCQlCSVQoMCkKPiArI2RlZmlu ZSBNVEtfQ1FETUFfSU5UX0VOX0JJVAkJQklUKDApCj4gKyNkZWZpbmUgTVRLX0NRRE1BX0ZMVVNI X0JJVAkJQklUKDApCj4gKwo+ICsjZGVmaW5lIE1US19DUURNQV9XQVJNX1JTVF9CSVQJCUJJVCgw KQo+ICsjZGVmaW5lIE1US19DUURNQV9IQVJEX1JTVF9CSVQJCUJJVCgxKQo+ICsKPiArI2RlZmlu ZSBNVEtfQ1FETUFfTUFYX0xFTgkJKDB4ZmZmZmZmZikKPiArI2RlZmluZSBNVEtfQ1FETUFfQURE Ul9MSU1JVAkJKDB4ZmZmZmZmZmYpCj4gKyNkZWZpbmUgTVRLX0NRRE1BX0FERFIyX1NIRklUCQko MzIpCgpyZW1vdmUgdGhlc2UgdW51c2VkIG1hY3JvcwoKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3Qg bXRrX2NxZG1hX3ZkZXNjIC0gVGhlIHN0cnVjdCBob2xkaW5nIGluZm8gZGVzY3JpYmluZyBwaHlz aWNhbAo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yIChQRCkKPiArICog QGxlbjogICAgICAgICAgICAgICAgICAgVGhlIHRvdGFsIGRhdGEgc2l6ZSBkZXZpY2Ugd2FudHMg dG8gbW92ZQo+ICsgKiBAc3JjOiAgICAgICAgICAgICAgICAgICBUaGUgc291cmNlIGFkZHJlc3Mg ZGV2aWNlIHdhbnRzIHRvIG1vdmUgZnJvbQo+ICsgKiBAZGVzdDogICAgICAgICAgICAgICAgICBU aGUgZGVzdGluYXRpb24gYWRkcmVzcyBkZXZpY2Ugd2FudHMgdG8gbW92ZSB0bwo+ICsgKi8KPiAr c3RydWN0IG10a19jcWRtYV9wZGVzYyB7Cj4gKwlzaXplX3QgbGVuOwo+ICsJZG1hX2FkZHJfdCBz cmM7Cj4gKwlkbWFfYWRkcl90IGRlc3Q7Cj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IG10 a19jcWRtYV92ZGVzYyAtIFRoZSBzdHJ1Y3QgaG9sZGluZyBpbmZvIGRlc2NyaWJpbmcgdmlydHVh bAo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yIChWRCkKPiArICogQHZk OiAgICAgICAgICAgICAgICAgICAgQW4gaW5zdGFuY2UgZm9yIHN0cnVjdCB2aXJ0X2RtYV9kZXNj Cj4gKyAqIEBsZW46ICAgICAgICAgICAgICAgICAgIFRoZSB0b3RhbCBkYXRhIHNpemUgZGV2aWNl IHdhbnRzIHRvIG1vdmUKPiArICogQHJlc2lkdWU6ICAgICAgICAgICAgICAgVGhlIHJlbWFpbmlu ZyBkYXRhIHNpemUgZGV2aWNlIHdpbGwgbW92ZQo+ICsgKiBAZGVzdDogICAgICAgICAgICAgICAg ICBUaGUgZGVzdGluYXRpb24gYWRkcmVzcyBkZXZpY2Ugd2FudHMgdG8gbW92ZSB0bwo+ICsgKiBA c3JjOiAgICAgICAgICAgICAgICAgICBUaGUgc291cmNlIGFkZHJlc3MgZGV2aWNlIHdhbnRzIHRv IG1vdmUgZnJvbQo+ICsgKiBAY2g6ICAgICAgICAgICAgICAgICAgICBUaGUgcG9pbnRlciB0byB0 aGUgY29ycmVzcG9uZGluZyBkbWEgY2hhbm5lbAo+ICsgKiBAcGRfbGlzdAkJICAgVGhlIGFycmF5 IGZvciBQRHMKPiArICogQHBkX2xpc3RfbGVuCQkgICBUaGUgc2l6ZSBvZiBQRCBsaXN0Cj4gKyAq IEBwZF9saXN0X3B0ciAgICAgICAgICAgIFRoZSBpbmRleCBvZiB0aGUgUEQgYmVpbmcgcHJvY2Vz c2VkCj4gKyAqIEBub2RlICAgICAgICAgICAgICAgICAgIFRoZSBsaXNlX2hlYWQgc3RydWN0IHRv IGJ1aWxkIGxpbmstbGlzdCBmb3IgVkRzCj4gKyAqLwo+ICtzdHJ1Y3QgbXRrX2NxZG1hX3ZkZXNj IHsKPiArCXN0cnVjdCB2aXJ0X2RtYV9kZXNjIHZkOwo+ICsJc2l6ZV90IGxlbjsKPiArCXNpemVf dCByZXNpZHVlOwo+ICsJZG1hX2FkZHJfdCBkZXN0Owo+ICsJZG1hX2FkZHJfdCBzcmM7Cgp5b3Ug YWxyZWFkeSBoYXZlIHNyYywgZGVzdCwgYW5kIGxlbiBrZXB0IGluIGNxZG1hX3BkZXNjLCBpIHRo b3VnaHQgd2UgY2FuIHJldXNlIHRoZW0gaW5zdGVhZCBvZiBob2xkaW5nIGFub3RoZXIgY29weSBo ZXJlCgo+ICsJc3RydWN0IGRtYV9jaGFuICpjaDsKPiArCj4gKwlzaXplX3QgcGRfbGlzdF9sZW47 Cj4gKwlzaXplX3QgcGRfbGlzdF9wdHI7Cj4gKwlzdHJ1Y3QgbXRrX2NxZG1hX3BkZXNjICoqcGRf bGlzdDsKPiArCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cgp5b3UgY3JlYXRlIGFub3RoZXIg bGlzdCB0byBob2xkIGRlc2NyaXB0b3JzIGluIHRoZSBkcml2ZXIsIAoKaW4gZ2VuZXJhbCwgeW91 IGNhbiB0b3RhbGx5IHVzZSBsaXN0IGRlc2NfW2FsbG9jYXRlZCwgc3VibWl0dGVkLCBpc3N1ZWQs IGFuZCBjb21wbGV0ZWRdIHZjaGFuIHByb3ZpZGVzIHRvIG1haW5hdGFpbiB0aGUgY3ljbGUgb2Yg ZGVzY3JpcHRvcnMuCgo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBtdGtfY3FkbWFfcGNo YW4gLSBUaGUgc3RydWN0IGhvbGRpbmcgaW5mbyBkZXNjcmliaW5nIHBoeXNpY2FsCj4gKyAqICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwgKFBDKQo+ICsgKiBAcXVldWU6ICAgICAgICAg ICAgICAgICBRdWV1ZSBmb3IgdGhlIFBEcyBpc3N1ZWQgdG8gdGhpcyBQQwo+ICsgKiBAYmFzZTog ICAgICAgICAgICAgICAgICBUaGUgbWFwcGVkIHJlZ2lzdGVyIEkvTyBiYXNlIG9mIHRoaXMgUEMK PiArICogQGlycTogICAgICAgICAgICAgICAgICAgVGhlIElSUSB0aGF0IHRoaXMgUEMgYXJlIHVz aW5nCj4gKyAqIEByZWZjbnQ6ICAgICAgICAgICAgICAgIFRyYWNrIGhvdyBtYW55IFZDcyBhcmUg dXNpbmcgdGhpcyBQQwo+ICsgKiBAbG9jazogICAgICAgICAgICAgICAgICBMb2NrIHByb3RlY3Qg YWdhaXN0aW5nIG11bHRpcGxlIFZDcyBhY2Nlc3MgUEMKPiArICovCj4gK3N0cnVjdCBtdGtfY3Fk bWFfcGNoYW4gewo+ICsJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKPiArCXZvaWQgX19pb21lbSAq YmFzZTsKPiArCXUzMiBpcnE7Cj4gKwo+ICsJcmVmY291bnRfdCByZWZjbnQ7Cj4gKwo+ICsJLyog bG9jayB0byBwcm90ZWN0IFBDICovCj4gKwlzcGlubG9ja190IGxvY2s7Cj4gK307Cj4gKwo+ICsv KioKPiArICogc3RydWN0IG10a19jcWRtYV92Y2hhbiAtIFRoZSBzdHJ1Y3QgaG9sZGluZyBpbmZv IGRlc2NyaWJpbmcgdmlydHVhbAo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVs IChWQykKPiArICogQHZjOiAgICAgICAgICAgICAgICAgICAgQW4gaW5zdGFuY2UgZm9yIHN0cnVj dCB2aXJ0X2RtYV9jaGFuCj4gKyAqIEBwYzogICAgICAgICAgICAgICAgICAgIFRoZSBwb2ludGVy IHRvIHRoZSB1bmRlcmx5aW5nIFBDCj4gKyAqIEBpc3N1ZV9jb21wbGV0aW9uOgkgICBUaGUgd2Fp dCBmb3IgYWxsIGlzc3VlZCBkZXNjcmlwdG9ycyBjb21wbGV0aXRlZAo+ICsgKiBAaXNzdWVfc3lu Y2hyb25pemU6CSAgIEJvb2wgaW5kaWNhdGluZyBjaGFubmVsIHN5bmNocm9uaXphdGlvbiBzdGFy dHMKPiArICovCj4gK3N0cnVjdCBtdGtfY3FkbWFfdmNoYW4gewo+ICsJc3RydWN0IHZpcnRfZG1h X2NoYW4gdmM7Cj4gKwlzdHJ1Y3QgbXRrX2NxZG1hX3BjaGFuICpwYzsKPiArCXN0cnVjdCBjb21w bGV0aW9uIGlzc3VlX2NvbXBsZXRpb247Cj4gKwlib29sIGlzc3VlX3N5bmNocm9uaXplOwo+ICt9 Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBtdGtfY3FkbWFfZGV2aWNlIC0gVGhlIHN0cnVjdCBo b2xkaW5nIGluZm8gZGVzY3JpYmluZyBDUURNQQo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgZGV2aWNlCj4gKyAqIEBkZGV2OiAgICAgICAgICAgICAgICAgICBBbiBpbnN0YW5jZSBmb3Ig c3RydWN0IGRtYV9kZXZpY2UKPiArICogQGNsazogICAgICAgICAgICAgICAgICAgIFRoZSBjbG9j ayB0aGF0IGRldmljZSBpbnRlcm5hbCBpcyB1c2luZwo+ICsgKiBAZG1hX3JlcXVlc3RzOiAgICAg ICAgICAgVGhlIG51bWJlciBvZiBWQ3MgdGhlIGRldmljZSBzdXBwb3J0cyB0bwo+ICsgKiBAZG1h X2NoYW5uZWxzOiAgICAgICAgICAgVGhlIG51bWJlciBvZiBQQ3MgdGhlIGRldmljZSBzdXBwb3J0 cyB0bwo+ICsgKiBAdmM6ICAgICAgICAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gYWxsIGF2 YWlsYWJsZSBWQ3MKPiArICogQHBjOiAgICAgICAgICAgICAgICAgICAgIFRoZSBwb2ludGVyIHRv IGFsbCB0aGUgdW5kZXJseWluZyBQQ3MKPiArICovCj4gK3N0cnVjdCBtdGtfY3FkbWFfZGV2aWNl IHsKPiArCXN0cnVjdCBkbWFfZGV2aWNlIGRkZXY7Cj4gKwlzdHJ1Y3QgY2xrICpjbGs7Cj4gKwo+ ICsJdTMyIGRtYV9yZXF1ZXN0czsKPiArCXUzMiBkbWFfY2hhbm5lbHM7Cj4gKwlzdHJ1Y3QgbXRr X2NxZG1hX3ZjaGFuICp2YzsKPiArCXN0cnVjdCBtdGtfY3FkbWFfcGNoYW4gKipwYzsKPiArfTsK PiArCj4gK3N0YXRpYyBzdHJ1Y3QgbXRrX2NxZG1hX2RldmljZSAqdG9fY3FkbWFfZGV2KHN0cnVj dCBkbWFfY2hhbiAqY2hhbikKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFuLT5kZXZp Y2UsIHN0cnVjdCBtdGtfY3FkbWFfZGV2aWNlLCBkZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIHN0 cnVjdCBtdGtfY3FkbWFfdmNoYW4gKnRvX2NxZG1hX3ZjaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hh bikKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgbXRrX2NxZG1hX3Zj aGFuLCB2Yy5jaGFuKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBtdGtfY3FkbWFfdmRlc2Mg KnRvX2NxZG1hX3ZkZXNjKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKPiArewo+ICsJcmV0dXJu IGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IG10a19jcWRtYV92ZGVzYywgdmQpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgc3RydWN0IGRldmljZSAqY3FkbWEyZGV2KHN0cnVjdCBtdGtfY3FkbWFfZGV2aWNl ICpjcWRtYSkKPiArewo+ICsJcmV0dXJuIGNxZG1hLT5kZGV2LmRldjsKPiArfQo+ICsKPiArc3Rh dGljIHUzMiBtdGtfZG1hX3JlYWQoc3RydWN0IG10a19jcWRtYV9wY2hhbiAqcGMsIHUzMiByZWcp Cj4gK3sKPiArCXJldHVybiByZWFkbChwYy0+YmFzZSArIHJlZyk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIG10a19kbWFfd3JpdGUoc3RydWN0IG10a19jcWRtYV9wY2hhbiAqcGMsIHUzMiByZWcs IHUzMiB2YWwpCj4gK3sKPiArCXdyaXRlbF9yZWxheGVkKHZhbCwgcGMtPmJhc2UgKyByZWcpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZG1hX3JtdyhzdHJ1Y3QgbXRrX2NxZG1hX3BjaGFu ICpwYywgdTMyIHJlZywKPiArCQkJdTMyIG1hc2ssIHUzMiBzZXQpCj4gK3sKPiArCXUzMiB2YWw7 Cj4gKwo+ICsJdmFsID0gbXRrX2RtYV9yZWFkKHBjLCByZWcpOwo+ICsJdmFsICY9IH5tYXNrOwo+ ICsJdmFsIHw9IHNldDsKPiArCW10a19kbWFfd3JpdGUocGMsIHJlZywgdmFsKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgbXRrX2RtYV9zZXQoc3RydWN0IG10a19jcWRtYV9wY2hhbiAqcGMsIHUz MiByZWcsIHUzMiB2YWwpCj4gK3sKPiArCW10a19kbWFfcm13KHBjLCByZWcsIDAsIHZhbCk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kbWFfY2xyKHN0cnVjdCBtdGtfY3FkbWFfcGNoYW4g KnBjLCB1MzIgcmVnLCB1MzIgdmFsKQo+ICt7Cj4gKwltdGtfZG1hX3JtdyhwYywgcmVnLCB2YWws IDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfY3FkbWFfdmRlc2NfZnJlZShzdHJ1Y3Qg dmlydF9kbWFfZGVzYyAqdmQpCj4gK3sKPiArCXN0cnVjdCBtdGtfY3FkbWFfdmRlc2MgKmN2ZCA9 IHRvX2NxZG1hX3ZkZXNjKHZkKTsKPiArCXNpemVfdCBpOwo+ICsKPiArCS8qIGZyZWUgUEQgbGlz dCAqLwo+ICsJZm9yIChpID0gMDsgaSA8IGN2ZC0+cGRfbGlzdF9sZW47ICsraSkKPiArCQlrZnJl ZShjdmQtPnBkX2xpc3RbaV0pOwo+ICsJa2ZyZWUoY3ZkLT5wZF9saXN0KTsKPiArCj4gKwkvKiBm cmVlIFZEICovCj4gKwlrZnJlZShjdmQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19jcWRt YV9wb2xsX2VuZ2luZV9kb25lKHN0cnVjdCBtdGtfY3FkbWFfcGNoYW4gKnBjKQo+ICt7Cj4gKwl1 MzIgc3RhdHVzID0gMDsKPiArCj4gKwlyZXR1cm4gcmVhZGxfcG9sbF90aW1lb3V0KHBjLT5iYXNl ICsgTVRLX0NRRE1BX0VOLCBzdGF0dXMsCj4gKwkJCQkgICEoc3RhdHVzICYgTVRLX0NRRE1BX0VO X0JJVCksCj4gKwkJCQkgIE1US19DUURNQV9VU0VDX1BPTEwsCj4gKwkJCQkgIE1US19DUURNQV9U SU1FT1VUX1BPTEwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19jcWRtYV93YXJtX3Jlc2V0 KHN0cnVjdCBtdGtfY3FkbWFfcGNoYW4gKnBjKQo+ICt7Cj4gKwltdGtfZG1hX3NldChwYywgTVRL X0NRRE1BX1JFU0VULCBNVEtfQ1FETUFfV0FSTV9SU1RfQklUKTsKPiArCj4gKwlyZXR1cm4gbXRr X2NxZG1hX3BvbGxfZW5naW5lX2RvbmUocGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19j cWRtYV9oYXJkX3Jlc2V0KHN0cnVjdCBtdGtfY3FkbWFfcGNoYW4gKnBjKQo+ICt7Cj4gKwltdGtf ZG1hX3NldChwYywgTVRLX0NRRE1BX1JFU0VULCBNVEtfQ1FETUFfSEFSRF9SU1RfQklUKTsKPiAr CW10a19kbWFfY2xyKHBjLCBNVEtfQ1FETUFfUkVTRVQsIE1US19DUURNQV9IQVJEX1JTVF9CSVQp Owo+ICsKPiArCXJldHVybiBtdGtfY3FkbWFfcG9sbF9lbmdpbmVfZG9uZShwYyk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIG10a19jcWRtYV9zdGFydChzdHJ1Y3QgbXRrX2NxZG1hX3BjaGFuICpw YykKPiArewo+ICsJbXRrX2RtYV9zZXQocGMsIE1US19DUURNQV9FTiwgTVRLX0NRRE1BX0VOX0JJ VCk7Cgp0aGVyZSBpcyBvbmx5IGEgdXNlciBmb3IgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgbG9naWMg aXMgcXVpdGUgc2ltcGxlLCBzbyBsZXRzIG1lcmdlIGludG8gd2hlcmUgdGhlIHVzZXIgaXMKCj4g K30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2NxZG1hX3N0b3Aoc3RydWN0IG10a19jcWRtYV9wY2hh biAqcGMpCj4gK3sKPiArCWludCBlcnI7Cj4gKwo+ICsJbXRrX2RtYV9zZXQocGMsIE1US19DUURN QV9GTFVTSCwgTVRLX0NRRE1BX0ZMVVNIX0JJVCk7Cj4gKwo+ICsJZXJyID0gbXRrX2NxZG1hX3Bv bGxfZW5naW5lX2RvbmUocGMpOwo+ICsKPiArCW10a19kbWFfY2xyKHBjLCBNVEtfQ1FETUFfRkxV U0gsIE1US19DUURNQV9GTFVTSF9CSVQpOwo+ICsJbXRrX2RtYV9jbHIocGMsIE1US19DUURNQV9J TlRfRkxBRywgTVRLX0NRRE1BX0lOVF9GTEFHX0JJVCk7Cj4gKwo+ICsJcmV0dXJuIGVycjsKCnRo ZXJlIGlzIG9ubHkgYSB1c2VyIGZvciB0aGUgZnVuY3Rpb24gYW5kIHRoZSBsb2dpYyBpcyBxdWl0 ZSBzaW1wbGUsIHNvIGxldHMgbWVyZ2UgaW50byB3aGVyZSB0aGUgdXNlciBpcwoKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgbXRrX2NxZG1hX3NldF90cmFuKHN0cnVjdCBtdGtfY3FkbWFfcGNoYW4g KnBjLCBkbWFfYWRkcl90IHNyYywKPiArCQkJICAgICAgIGRtYV9hZGRyX3QgZGVzdCwgc2l6ZV90 IGxlbikKPiArewo+ICsJLyogc2V0dXAgc291cmNlICovCj4gKwltdGtfZG1hX3NldChwYywgTVRL X0NRRE1BX1NSQywgc3JjICYgTVRLX0NRRE1BX0FERFJfTElNSVQpOwo+ICsJbXRrX2RtYV9zZXQo cGMsIE1US19DUURNQV9TUkMyLCBzcmMgPj4gTVRLX0NRRE1BX0FERFIyX1NIRklUKTsKPiArCj4g KwkvKiBzZXR1cCBkZXN0aW5hdGlvbiAqLwo+ICsJbXRrX2RtYV9zZXQocGMsIE1US19DUURNQV9E U1QsIGRlc3QgJiBNVEtfQ1FETUFfQUREUl9MSU1JVCk7Cj4gKwltdGtfZG1hX3NldChwYywgTVRL X0NRRE1BX0RTVDIsIGRlc3QgPj4gTVRLX0NRRE1BX0FERFIyX1NIRklUKTsKPiArCj4gKwkvKiBz ZXR1cCBsZW5ndGggKi8KPiArCW10a19kbWFfc2V0KHBjLCBNVEtfQ1FETUFfTEVOMSwgbGVuKTsK CnRoZXJlIGlzIG9ubHkgYSB1c2VyIGZvciB0aGUgZnVuY3Rpb24gYW5kIHRoZSBsb2dpYyBpcyBx dWl0ZSBzaW1wbGUsIHNvIGxldHMgbWVyZ2UgaW50byB3aGVyZSB0aGUgdXNlciBpcwoKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgbXRrX2NxZG1hX2FsbG9jX3BjaGFuKHN0cnVjdCBtdGtfY3FkbWFf cGNoYW4gKnBjKQo+ICt7Cj4gKwkvKiBoYXJkIHJlc2V0IHRoZSBkbWEgZW5naW5lICovCj4gKwlt dGtfY3FkbWFfaGFyZF9yZXNldChwYyk7Cj4gKwo+ICsJLyogZW5hYmxlIGludGVycnVwdCBmb3Ig dGhpcyBQQyAqLwo+ICsJbXRrX2RtYV9zZXQocGMsIE1US19DUURNQV9JTlRfRU4sIE1US19DUURN QV9JTlRfRU5fQklUKTsKCnRoZXJlIGlzIG9ubHkgYSB1c2VyIGZvciB0aGUgZnVuY3Rpb24gYW5k IHRoZSBsb2dpYyBpcyBxdWl0ZSBzaW1wbGUsIHNvIGxldHMgbWVyZ2UgaW50byB3aGVyZSB0aGUg dXNlciBpcwoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2NxZG1hX2ZyZWVfcGNoYW4oc3Ry dWN0IG10a19jcWRtYV9wY2hhbiAqcGMpCj4gK3sKPiArCS8qIHN0b3AgdGhlIGVuZ2luZSBhbmQg d2FpdCBmb3IgZW5naW5lIHN0b3AgKi8KPiArCWlmIChtdGtfY3FkbWFfc3RvcChwYykgPCAwKQo+ ICsJCXByX3dhcm4oImNxZG1hIHN0b3AgdGltZW91dFxuIik7CgpkZXZfZXJyCgo+ICsJLyogZGlz YWJsZSBpbnRlcnJ1cHQgZm9yIHRoaXMgUEMgKi8KPiArCW10a19kbWFfY2xyKHBjLCBNVEtfQ1FE TUFfSU5UX0VOLCBNVEtfQ1FETUFfSU5UX0VOX0JJVCk7Cgp0aGVyZSBpcyBvbmx5IGEgdXNlciBm b3IgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgbG9naWMgaXMgcXVpdGUgc2ltcGxlLCBzbyBsZXRzIG1l cmdlIGludG8gd2hlcmUgdGhlIHVzZXIgaXMKCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19j cWRtYV9zdGFydF90cmFuKHN0cnVjdCBtdGtfY3FkbWFfcGNoYW4gKnBjLAo+ICsJCQkJIHN0cnVj dCBtdGtfY3FkbWFfcGRlc2MgKmNwZCkKPiArewo+ICsJLyogcmVzZXQgdGhlIGRtYSBlbmdpbmUg Zm9yIHRoZSB0cmFuc2FjdGlvbiAqLwo+ICsJaWYgKG10a19jcWRtYV93YXJtX3Jlc2V0KHBjKSA8 IDApCj4gKwkJcHJfd2FybigiY3FkbWEgd2FybSByZXNldCB0aW1lb3V0XG4iKTsKCmRldl9lcnIK Cj4gKwo+ICsJLyogc2V0dXAgZG1hIGVuZ2luZSBmb3IgdGhpcyBQRCAqLwo+ICsJbXRrX2NxZG1h X3NldF90cmFuKHBjLCBjcGQtPnNyYywgY3BkLT5kZXN0LCBjcGQtPmxlbik7Cj4gKwo+ICsJLyog c3RhcnQgZG1hIGVuZ2luZSAqLwo+ICsJbXRrX2NxZG1hX3N0YXJ0KHBjKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBtdGtfY3FkbWFfaXNzdWVfcGVuZGluZ192ZGVzYyhzdHJ1Y3QgbXRrX2NxZG1h X2RldmljZSAqY3FkbWEsCj4gKwkJCQkJIHN0cnVjdCBtdGtfY3FkbWFfcGNoYW4gKnBjLAo+ICsJ CQkJCSBzdHJ1Y3QgbXRrX2NxZG1hX3ZkZXNjICpjdmQpCj4gK3sKPiArCWJvb2wgdHJpZ2dlcl9l bmdpbmUgPSBmYWxzZTsKPiArCj4gKwlpZiAoIWN2ZC0+cGRfbGlzdCkKPiArCQlyZXR1cm4gMDsK PiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwYy0+bG9jayk7Cj4gKwo+ICsJLyogbmVlZCB0 byB0cmlnZ2VyIGRtYSBlbmdpbmUgaWYgUEMncyBxdWV1ZSBpcyBlbXB0eSAqLwo+ICsJaWYgKGxp c3RfZW1wdHkoJnBjLT5xdWV1ZSkpCj4gKwkJdHJpZ2dlcl9lbmdpbmUgPSB0cnVlOwo+ICsKPiAr CS8qIGFkZCBWRCBpbnRvIFBDJ3MgcXVldWUgKi8KPiArCWxpc3RfYWRkX3RhaWwoJmN2ZC0+bm9k ZSwgJnBjLT5xdWV1ZSk7Cgp0aGUgaGFyZHdhcmUgb25seSBjYW4gaGFuZGxlIGEgZGVzY3JpcHRv ciBhdCBhIHRpbWUKCnNvIEkgdGhvdWdodCB0aGUgcGMtPnF1ZXVlIHNlZW1zIGNvbXBsZXRlIG5v IG5lZWQsIGluc3RlYWQsIHlvdSBjYW4ganVzdCBnZXQgYSBkZXNjcmlwdG9yIGZyb20gLT5kZXNj X2lzc3VlZCBsaXN0IHRvIGhhbmRsZQosIGxlYXZlIG90aGVycyBkZXNjcmlwdG9ycyBzdGlsbCBp biAtPmRlc2NfaXNzdWVkIGxpc3QgdW50aWwgdGhlIHRoZSBhY3RpdmUgZGVzY3JpcHRvciBmaW5p c2hlcyBhbmQgdGhlbiBmaXJlIHRoZW0KaW4gc2VxdWVuY2UuCgo+ICsKPiArCS8qIHN0YXJ0IHRy YW5zYWN0aW9uIGZvciB0aGlzIFZEICovCj4gKwlpZiAodHJpZ2dlcl9lbmdpbmUpCj4gKwkJbXRr X2NxZG1hX3N0YXJ0X3RyYW4ocGMsIGN2ZC0+cGRfbGlzdFtjdmQtPnBkX2xpc3RfcHRyXSk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19jcWRtYV9pc3N1ZV92 Y2hhbl9wZW5kaW5nKHN0cnVjdCBtdGtfY3FkbWFfZGV2aWNlICpjcWRtYSwKPiArCQkJCQkgIHN0 cnVjdCBtdGtfY3FkbWFfdmNoYW4gKmN2YykKPiArewo+ICsJc3RydWN0IHZpcnRfZG1hX2Rlc2Mg KnZkLCAqdmQyOwo+ICsJaW50IGVycjsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZjdmMt PnZjLmxvY2spOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2ZCwgdmQyLCAmY3Zj LT52Yy5kZXNjX2lzc3VlZCwgbm9kZSkgewo+ICsJCXN0cnVjdCBtdGtfY3FkbWFfdmRlc2MgKmN2 ZDsKPiArCj4gKwkJY3ZkID0gdG9fY3FkbWFfdmRlc2ModmQpOwo+ICsKPiArCQkvKiBpc3N1ZSBW RCB0byBQQydzIHF1ZXVlICovCj4gKwkJZXJyID0gbXRrX2NxZG1hX2lzc3VlX3BlbmRpbmdfdmRl c2MoY3FkbWEsIGN2Yy0+cGMsIGN2ZCk7Cj4gKwo+ICsJCWlmIChlcnIgPT0gLUVOT1NQQykKCnRo ZSBlcnJvciBzZWVtcyBuZXZlciBoYXBwZW5zIAoKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCS8qIHJl bW92ZSBWRCBmcm9tIGxpc3QgZGVzY19pc3N1ZWQgKi8KPiArCQlsaXN0X2RlbCgmdmQtPm5vZGUp Owo+ICsJfQo+ICt9Cj4gKwo+ICsvKgo+ICsgKiByZXR1cm4gdHJ1ZSBpZiB0aGlzIFZDIGlzIGFj dGl2ZSwKPiArICogbWVhbmluZyB0aGF0IHRoZXJlIGFyZSBWRHMgdW5kZXIgcHJvY2Vzc2luZyBi eSB0aGUgUEMKPiArICovCj4gK3N0YXRpYyBib29sIG10a19jcWRtYV9pc192Y2hhbl9hY3RpdmUo c3RydWN0IG10a19jcWRtYV92Y2hhbiAqY3ZjKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2NxZG1hX3Zk ZXNjICpjdmQ7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjdmQsICZjdmMtPnBjLT5xdWV1 ZSwgbm9kZSkKPiArCQlpZiAoY3ZjID09IHRvX2NxZG1hX3ZjaGFuKGN2ZC0+Y2gpKQo+ICsJCQly ZXR1cm4gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IG10a19jcWRtYV9jb25zdW1lX3dvcmtfcXVldWUoc3RydWN0IG10a19jcWRtYV9wY2hhbiAqcGMp Cj4gK3sKPiArCXN0cnVjdCBtdGtfY3FkbWFfdmNoYW4gKmN2YzsKPiArCXN0cnVjdCBtdGtfY3Fk bWFfdmRlc2MgKmN2ZDsKPiArCj4gKwkvKiBjb25zdW1lIGEgVkQgZnJvbSBxdWV1ZSAqLwo+ICsJ Y3ZkID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZwYy0+cXVldWUsCj4gKwkJCQkgICAgICAg c3RydWN0IG10a19jcWRtYV92ZGVzYywgbm9kZSk7Cj4gKwlpZiAodW5saWtlbHkoIWN2ZCkpCj4g KwkJcmV0dXJuOwo+ICsKPiArCS8qIHVwZGF0ZSByZXNpZHVlIG9mIFZEICovCj4gKwljdmQtPnJl c2lkdWUgLT0gY3ZkLT5wZF9saXN0W2N2ZC0+cGRfbGlzdF9wdHJdLT5sZW47Cj4gKwo+ICsJY3Zj ID0gdG9fY3FkbWFfdmNoYW4oY3ZkLT5jaCk7Cj4gKwo+ICsJaWYgKGN2ZC0+cGRfbGlzdF9wdHIg PT0gY3ZkLT5wZF9saXN0X2xlbiAtIDEpIHsKPiArCQkvKiBkZWxldGUgVkQgZnJvbSBxdWV1ZSBp ZiBpdHMgUEQgbGlzdCBjb21wbGV0ZWQgKi8KPiArCQlsaXN0X2RlbCgmY3ZkLT5ub2RlKTsKPiAr Cj4gKwkJc3Bpbl9sb2NrKCZjdmMtPnZjLmxvY2spOwo+ICsKPiArCQkvKiBhZGQgVkQgaW50byBs aXN0IGRlc2NfY29tcGxldGVkICovCj4gKwkJdmNoYW5fY29va2llX2NvbXBsZXRlKCZjdmQtPnZk KTsKPiArCj4gKwkJLyogc2V0dXAgY29tcGxldGlvbiBpZiB0aGlzIFZDIGlzIHVuZGVyIHN5bmNo cm9uaXphdGlvbiAqLwo+ICsJCWlmIChjdmMtPmlzc3VlX3N5bmNocm9uaXplICYmICFtdGtfY3Fk bWFfaXNfdmNoYW5fYWN0aXZlKGN2YykpIHsKPiArCQkJY29tcGxldGUoJmN2Yy0+aXNzdWVfY29t cGxldGlvbik7Cj4gKwkJCWN2Yy0+aXNzdWVfc3luY2hyb25pemUgPSBmYWxzZTsKPiArCQl9Cj4g Kwo+ICsJCXNwaW5fdW5sb2NrKCZjdmMtPnZjLmxvY2spOwo+ICsJfSBlbHNlIHsKPiArCQkvKiB0 aGVyZSBhcmUgcGh5c2ljYWwgZGVzY3MgcXVldWVpbmcgdG8gYmUgc2VydmVkICovCj4gKwkJY3Zk LT5wZF9saXN0X3B0cisrOwo+ICsJfQo+ICsKPiArCS8qIHN0YXJ0IHRyYW5zYWN0aW9uIGZvciBu ZXh0IFBEIGlmIHF1ZXVlIGlzIG5vdCBlbXB0eSAqLwo+ICsJY3ZkID0gbGlzdF9maXJzdF9lbnRy eV9vcl9udWxsKCZwYy0+cXVldWUsCj4gKwkJCQkgICAgICAgc3RydWN0IG10a19jcWRtYV92ZGVz Yywgbm9kZSk7Cj4gKwlpZiAoY3ZkKQo+ICsJCW10a19jcWRtYV9zdGFydF90cmFuKHBjLCBjdmQt PnBkX2xpc3RbY3ZkLT5wZF9saXN0X3B0cl0pOwoKSSByZWFsbHkgdGhpbmtzIHJldXNlIGRlc2Nf aXNzdWVkIGxpc3QgY2FuIHNpbXBsaWZ5IHRoZSB3aG9sZSBsb2dpYywgb3RoZXJ3aXNlIHlvdSBz aG91bGQgCgp0YWtlIGNhcmUgdGhlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGRlc2NfY29tcGxl dGVkIGxpc3QgYW5kIHBjLT5xdWV1ZQoKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IG10 a19jcWRtYV9pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpCj4gK3sKPiArCXN0cnVjdCBtdGtfY3Fk bWFfZGV2aWNlICpjcWRtYSA9IGRldmlkOwo+ICsJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7 Cj4gKwl1MzIgaTsKPiArCj4gKwkvKiBjbGVhciBpbnRlcnJ1cHQgZmxhZ3MgZm9yIGVhY2ggUEMg Ki8KPiArCWZvciAoaSA9IDA7IGkgPCBjcWRtYS0+ZG1hX2NoYW5uZWxzOyArK2kpIHsKPiArCQlz cGluX2xvY2soJmNxZG1hLT5wY1tpXS0+bG9jayk7Cj4gKwkJaWYgKG10a19kbWFfcmVhZChjcWRt YS0+cGNbaV0sCj4gKwkJCQkgTVRLX0NRRE1BX0lOVF9GTEFHKSAmIE1US19DUURNQV9JTlRfRkxB R19CSVQpIHsKPiArCQkJLyogY2xlYXIgaW50ZXJydXB0ICovCj4gKwkJCW10a19kbWFfY2xyKGNx ZG1hLT5wY1tpXSwgTVRLX0NRRE1BX0lOVF9GTEFHLAo+ICsJCQkJICAgIE1US19DUURNQV9JTlRf RkxBR19CSVQpOwo+ICsKPiArCQkJLyogY29uc3VtZSB0aGUgcXVldWUgKi8KPiArCQkJbXRrX2Nx ZG1hX2NvbnN1bWVfd29ya19xdWV1ZShjcWRtYS0+cGNbaV0pOwo+ICsJCQlyZXQgPSBJUlFfSEFO RExFRDsKPiArCQl9Cj4gKwkJc3Bpbl91bmxvY2soJmNxZG1hLT5wY1tpXS0+bG9jayk7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCB2aXJ0X2RtYV9k ZXNjICptdGtfY3FkbWFfZmluZF9hY3RpdmVfZGVzYyhzdHJ1Y3QgZG1hX2NoYW4gKmMsCj4gKwkJ CQkJCQlkbWFfY29va2llX3QgY29va2llKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2NxZG1hX3ZjaGFu ICpjdmMgPSB0b19jcWRtYV92Y2hhbihjKTsKPiArCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZDsK PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmN2Yy0+ cGMtPmxvY2ssIGZsYWdzKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkodmQsICZjdmMtPnBjLT5x dWV1ZSwgbm9kZSkKPiArCQlpZiAodmQtPnR4LmNvb2tpZSA9PSBjb29raWUpIHsKPiArCQkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmY3ZjLT5wYy0+bG9jaywgZmxhZ3MpOwo+ICsJCQlyZXR1cm4g dmQ7Cj4gKwkJfQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3ZjLT5wYy0+bG9jaywgZmxh Z3MpOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkodmQsICZjdmMtPnZjLmRlc2NfaXNzdWVk LCBub2RlKQo+ICsJCWlmICh2ZC0+dHguY29va2llID09IGNvb2tpZSkKPiArCQkJcmV0dXJuIHZk Owo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZW51bSBkbWFfc3RhdHVz IG10a19jcWRtYV90eF9zdGF0dXMoc3RydWN0IGRtYV9jaGFuICpjLAo+ICsJCQkJCSAgIGRtYV9j b29raWVfdCBjb29raWUsCj4gKwkJCQkJICAgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkK PiArewo+ICsJc3RydWN0IG10a19jcWRtYV92Y2hhbiAqY3ZjID0gdG9fY3FkbWFfdmNoYW4oYyk7 Cj4gKwlzdHJ1Y3QgbXRrX2NxZG1hX3ZkZXNjICpjdmQ7Cj4gKwlzdHJ1Y3QgdmlydF9kbWFfZGVz YyAqdmQ7Cj4gKwllbnVtIGRtYV9zdGF0dXMgcmV0Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsK PiArCXNpemVfdCBieXRlcyA9IDA7Cj4gKwo+ICsJcmV0ID0gZG1hX2Nvb2tpZV9zdGF0dXMoYywg Y29va2llLCB0eHN0YXRlKTsKPiArCWlmIChyZXQgPT0gRE1BX0NPTVBMRVRFIHx8ICF0eHN0YXRl KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmN2Yy0+dmMubG9j aywgZmxhZ3MpOwo+ICsJdmQgPSBtdGtfY3FkbWFfZmluZF9hY3RpdmVfZGVzYyhjLCBjb29raWUp Owo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3ZjLT52Yy5sb2NrLCBmbGFncyk7Cj4gKwo+ ICsJaWYgKHZkKSB7Cj4gKwkJY3ZkID0gdG9fY3FkbWFfdmRlc2ModmQpOwo+ICsJCWJ5dGVzID0g Y3ZkLT5yZXNpZHVlOwo+ICsJfQo+ICsKPiArCWRtYV9zZXRfcmVzaWR1ZSh0eHN0YXRlLCBieXRl cyk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2NxZG1h X2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2Nx ZG1hX2RldmljZSAqY3FkbWEgPSB0b19jcWRtYV9kZXYoYyk7Cj4gKwlzdHJ1Y3QgbXRrX2NxZG1h X3ZjaGFuICpjdmMgPSB0b19jcWRtYV92Y2hhbihjKTsKPiArCXVuc2lnbmVkIGxvbmcgcGNfZmxh Z3M7Cj4gKwl1bnNpZ25lZCBsb25nIHZjX2ZsYWdzOwo+ICsKPiArCS8qIGFjcXVpcmUgUEMncyBs b2NrIGZpcnN0IGR1ZSB0byBsb2NrIGRlcGVuZGVuY3kgaW4gSVNSICovCj4gKwlzcGluX2xvY2tf aXJxc2F2ZSgmY3ZjLT5wYy0+bG9jaywgcGNfZmxhZ3MpOwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUo JmN2Yy0+dmMubG9jaywgdmNfZmxhZ3MpOwo+ICsKPiArCWlmICh2Y2hhbl9pc3N1ZV9wZW5kaW5n KCZjdmMtPnZjKSkKPiArCQltdGtfY3FkbWFfaXNzdWVfdmNoYW5fcGVuZGluZyhjcWRtYSwgY3Zj KTsKPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdmMtPnZjLmxvY2ssIHZjX2ZsYWdz KTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN2Yy0+cGMtPmxvY2ssIHBjX2ZsYWdzKTsK PiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCj4gK210 a19jcWRtYV9wcmVwX2RtYV9tZW1jcHkoc3RydWN0IGRtYV9jaGFuICpjLCBkbWFfYWRkcl90IGRl c3QsCj4gKwkJCSAgZG1hX2FkZHJfdCBzcmMsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxh Z3MpCj4gK3sKPiArCXN0cnVjdCBtdGtfY3FkbWFfdmRlc2MgKmN2ZDsKPiArCXNpemVfdCBwZF9s aXN0X2xlbiwgdGxlbiwgaTsKPiArCj4gKwljdmQgPSBremFsbG9jKHNpemVvZigqY3ZkKSwgR0ZQ X05PV0FJVCk7Cj4gKwlpZiAoIWN2ZCkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwkvKiBzZXR1 cCBkbWEgY2hhbm5lbCAqLwo+ICsJY3ZkLT5jaCA9IGM7Cj4gKwo+ICsJLyogc2V0dXAgc291cmVj ZSwgZGVzdGluYXRpb24sIGFuZCBsZW5ndGggKi8KPiArCWN2ZC0+bGVuID0gbGVuOwo+ICsJY3Zk LT5yZXNpZHVlID0gbGVuOwo+ICsJY3ZkLT5zcmMgPSBzcmM7Cj4gKwljdmQtPmRlc3QgPSBkZXN0 Owo+ICsKPiArCS8qIHNldHVwIFBEIGxpc3QgKi8KPiArCXBkX2xpc3RfbGVuID0gRElWX1JPVU5E X1VQKGxlbiwgTVRLX0NRRE1BX01BWF9MRU4pOwo+ICsJY3ZkLT5wZF9saXN0X2xlbiA9IHBkX2xp c3RfbGVuOwo+ICsJY3ZkLT5wZF9saXN0X3B0ciA9IDA7Cj4gKwo+ICsJY3ZkLT5wZF9saXN0ID0g a2NhbGxvYyhwZF9saXN0X2xlbiwgc2l6ZW9mKHN0cnVjdCBtdGtfY3FkbWFfcGRlc2MgKiopLAo+ ICsJCQkgICAgICAgR0ZQX05PV0FJVCk7Cj4gKwlpZiAoIWN2ZC0+cGRfbGlzdCkgewo+ICsJCWtm cmVlKGN2ZCk7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IHBkX2xpc3RfbGVuOyArK2kpIHsKPiArCQljdmQtPnBkX2xpc3RbaV0gPSBremFsbG9jKHNpemVv ZihzdHJ1Y3QgbXRrX2NxZG1hX3BkZXNjICopLAo+ICsJCQkJCSAgR0ZQX05PV0FJVCk7Cj4gKwkJ aWYgKCFjdmQtPnBkX2xpc3RbaV0pIHsKPiArCQkJZm9yICg7IGkgPiAwOyAtLWkpCj4gKwkJCQlr ZnJlZShjdmQtPnBkX2xpc3RbaSAtIDFdKTsKPiArCQkJa2ZyZWUoY3ZkLT5wZF9saXN0KTsKPiAr CQkJa2ZyZWUoY3ZkKTsKPiArCQkJcmV0dXJuIE5VTEw7Cj4gKwkJfQo+ICsKPiArCQl0bGVuID0g KGxlbiA+IE1US19DUURNQV9NQVhfTEVOKSA/IE1US19DUURNQV9NQVhfTEVOIDogbGVuOwo+ICsK PiArCQljdmQtPnBkX2xpc3RbaV0tPnNyYyA9IGN2ZC0+c3JjICsgY3ZkLT5sZW4gLSB0bGVuOwo+ ICsJCWN2ZC0+cGRfbGlzdFtpXS0+ZGVzdCA9IGN2ZC0+ZGVzdCArIGN2ZC0+bGVuIC0gdGxlbjsK PiArCQljdmQtPnBkX2xpc3RbaV0tPmxlbiA9IHRsZW47Cj4gKwkJbGVuIC09IHRsZW47Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIHZjaGFuX3R4X3ByZXAodG9fdmlydF9jaGFuKGMpLCAmY3ZkLT52ZCwg ZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfY3FkbWFfZnJlZV9pbmFjdGl2ZV9k ZXNjKHN0cnVjdCBkbWFfY2hhbiAqYykKPiArewo+ICsJc3RydWN0IHZpcnRfZG1hX2NoYW4gKnZj ID0gdG9fdmlydF9jaGFuKGMpOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCUxJU1RfSEVB RChoZWFkKTsKPiArCj4gKwkvKgo+ICsJICogc2V0IGRlc2NfYWxsb2NhdGVkLCBkZXNjX3N1Ym1p dHRlZCwKPiArCSAqIGFuZCBkZXNjX2lzc3VlZCBhcyB0aGUgY2FuZGljYXRlcyB0byBiZSBmcmVl ZAo+ICsJICovCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmMtPmxvY2ssIGZsYWdzKTsKPiArCWxp c3Rfc3BsaWNlX3RhaWxfaW5pdCgmdmMtPmRlc2NfYWxsb2NhdGVkLCAmaGVhZCk7Cj4gKwlsaXN0 X3NwbGljZV90YWlsX2luaXQoJnZjLT5kZXNjX3N1Ym1pdHRlZCwgJmhlYWQpOwo+ICsJbGlzdF9z cGxpY2VfdGFpbF9pbml0KCZ2Yy0+ZGVzY19pc3N1ZWQsICZoZWFkKTsKPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnZjLT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJLyogZnJlZSBkZXNjcmlwdG9y IGxpc3RzICovCj4gKwl2Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QodmMsICZoZWFkKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgbXRrX2NxZG1hX2ZyZWVfYWN0aXZlX2Rlc2Moc3RydWN0IGRtYV9j aGFuICpjKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2NxZG1hX3ZjaGFuICpjdmMgPSB0b19jcWRtYV92 Y2hhbihjKTsKPiArCWJvb2wgc3luY19uZWVkZWQgPSBmYWxzZTsKPiArCXVuc2lnbmVkIGxvbmcg cGNfZmxhZ3M7Cj4gKwl1bnNpZ25lZCBsb25nIHZjX2ZsYWdzOwo+ICsKPiArCS8qIGFjcXVpcmUg UEMncyBsb2NrIGZpcnN0IGR1ZSB0byBsb2NrIGRlcGVuZGVuY3kgaW4gZG1hIElTUiAqLwo+ICsJ c3Bpbl9sb2NrX2lycXNhdmUoJmN2Yy0+cGMtPmxvY2ssIHBjX2ZsYWdzKTsKPiArCXNwaW5fbG9j a19pcnFzYXZlKCZjdmMtPnZjLmxvY2ssIHZjX2ZsYWdzKTsKPiArCj4gKwkvKiBzeW5jaHJvbml6 YXRpb24gaXMgcmVxdWlyZWQgaWYgdGhpcyBWQyBpcyBhY3RpdmUgKi8KPiArCWlmIChtdGtfY3Fk bWFfaXNfdmNoYW5fYWN0aXZlKGN2YykpIHsKPiArCQljdmMtPmlzc3VlX3N5bmNocm9uaXplID0g dHJ1ZTsKPiArCQlzeW5jX25lZWRlZCA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmY3ZjLT52Yy5sb2NrLCB2Y19mbGFncyk7Cj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjdmMtPnBjLT5sb2NrLCBwY19mbGFncyk7Cj4gKwo+ICsJLyogd2FpdGluZyBmb3Ig dGhlIGNvbXBsZXRpb24gb2YgdGhpcyBWQyAqLwo+ICsJaWYgKHN5bmNfbmVlZGVkKQo+ICsJCXdh aXRfZm9yX2NvbXBsZXRpb24oJmN2Yy0+aXNzdWVfY29tcGxldGlvbik7Cj4gKwo+ICsJLyogZnJl ZSBhbGwgZGVzY3JpcHRvcnMgaW4gbGlzdCBkZXNjX2NvbXBsZXRlZCAqLwo+ICsJdmNoYW5fc3lu Y2hyb25pemUoJmN2Yy0+dmMpOwo+ICsKPiArCVdBUk5fT05DRSghbGlzdF9lbXB0eSgmY3ZjLT52 Yy5kZXNjX2NvbXBsZXRlZCksCj4gKwkJICAiRGVzYyBwZW5kaW5nIHN0aWxsIGluIGxpc3QgZGVz Y19jb21wbGV0ZWRcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19jcWRtYV90ZXJtaW5h dGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqYykKPiArewo+ICsJLyogZnJlZSBkZXNjcmlwdG9ycyBu b3QgcHJvY2Vzc2VkIHlldCBieSBoYXJkd2FyZSAqLwo+ICsJbXRrX2NxZG1hX2ZyZWVfaW5hY3Rp dmVfZGVzYyhjKTsKPiArCj4gKwkvKiBmcmVlIGRlc2NyaXB0b3JzIGJlaW5nIHByb2Nlc3NlZCBi eSBoYXJkd2FyZSAqLwo+ICsJbXRrX2NxZG1hX2ZyZWVfYWN0aXZlX2Rlc2MoYyk7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2NxZG1hX2FsbG9jX2NoYW5fcmVz b3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqYykKPiArewo+ICsJc3RydWN0IG10a19jcWRtYV9kZXZp Y2UgKmNxZG1hID0gdG9fY3FkbWFfZGV2KGMpOwo+ICsJc3RydWN0IG10a19jcWRtYV92Y2hhbiAq dmMgPSB0b19jcWRtYV92Y2hhbihjKTsKPiArCXN0cnVjdCBtdGtfY3FkbWFfcGNoYW4gKnBjID0g TlVMTDsKPiArCXUzMiBpLCBtaW5fcmVmY250ID0gVTMyX01BWCwgcmVmY250Owo+ICsJdW5zaWdu ZWQgbG9uZyBmbGFnczsKPiArCj4gKwkvKiBhbGxvY2F0ZSBQQyB3aXRoIHRoZSBtaW5pbXVuIHJl ZmNvdW50ICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgY3FkbWEtPmRtYV9jaGFubmVsczsgKytpKSB7 Cj4gKwkJcmVmY250ID0gcmVmY291bnRfcmVhZCgmY3FkbWEtPnBjW2ldLT5yZWZjbnQpOwo+ICsJ CWlmIChyZWZjbnQgPCBtaW5fcmVmY250KSB7Cj4gKwkJCXBjID0gY3FkbWEtPnBjW2ldOwo+ICsJ CQltaW5fcmVmY250ID0gcmVmY250Owo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIXBjKQo+ICsJ CXJldHVybiAtRU5PU1BDOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZwYy0+bG9jaywgZmxh Z3MpOwo+ICsKPiArCWlmICghcmVmY291bnRfcmVhZCgmcGMtPnJlZmNudCkpIHsKPiArCQkvKiBh bGxvY2F0ZSBQQyB3aGVuIHRoZSByZWZjb3VudCBpcyB6ZXJvICovCj4gKwkJbXRrX2NxZG1hX2Fs bG9jX3BjaGFuKHBjKTsKPiArCQkvKgo+ICsJCSAqIHJlZmNvdW50X2luYyB3b3VsZCBjb21wbGFp biBpbmNyZW1lbnQgb24gMDsgdXNlLWFmdGVyLWZyZWUuCj4gKwkJICogVGh1cywgd2UgbmVlZCB0 byBleHBsaWNpdGx5IHNldCBpdCBhcyAxIGluaXRpYWxseS4KPiArCQkgKi8KPiArCQlyZWZjb3Vu dF9zZXQoJnBjLT5yZWZjbnQsIDEpOwo+ICsJfSBlbHNlIHsKPiArCQlyZWZjb3VudF9pbmMoJnBj LT5yZWZjbnQpOwo+ICsJfQo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjLT5sb2Nr LCBmbGFncyk7Cj4gKwo+ICsJdmMtPnBjID0gcGM7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIG10a19jcWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFf Y2hhbiAqYykKPiArewo+ICsJc3RydWN0IG10a19jcWRtYV92Y2hhbiAqY3ZjID0gdG9fY3FkbWFf dmNoYW4oYyk7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCS8qIGZyZWUgYWxsIGRl c2NyaXB0b3JzIGluIGFsbCBsaXN0cyBvbiB0aGUgVkMgKi8KPiArCW10a19jcWRtYV90ZXJtaW5h dGVfYWxsKGMpOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZjdmMtPnBjLT5sb2NrLCBmbGFn cyk7Cj4gKwo+ICsJLyogUEMgaXMgbm90IGZyZWVkIHVudGlsIHRoZXJlIGlzIG5vIFZDIG1hcHBl ZCB0byBpdCAqLwo+ICsJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmY3ZjLT5wYy0+cmVmY250 KSkKPiArCQltdGtfY3FkbWFfZnJlZV9wY2hhbihjdmMtPnBjKTsKPiArCj4gKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZjdmMtPnBjLT5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgbXRrX2NxZG1hX2h3X2luaXQoc3RydWN0IG10a19jcWRtYV9kZXZpY2UgKmNxZG1hKQo+ICt7 Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJaW50IGVycjsKPiArCXUzMiBpOwo+ICsKPiAr CXBtX3J1bnRpbWVfZW5hYmxlKGNxZG1hMmRldihjcWRtYSkpOwo+ICsJcG1fcnVudGltZV9nZXRf c3luYyhjcWRtYTJkZXYoY3FkbWEpKTsKPiArCj4gKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUo Y3FkbWEtPmNsayk7Cj4gKwo+ICsJaWYgKGVycikgewo+ICsJCXBtX3J1bnRpbWVfcHV0X3N5bmMo Y3FkbWEyZGV2KGNxZG1hKSk7Cj4gKwkJcG1fcnVudGltZV9kaXNhYmxlKGNxZG1hMmRldihjcWRt YSkpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJLyogcmVzZXQgYWxsIFBDcyAqLwo+ ICsJZm9yIChpID0gMDsgaSA8IGNxZG1hLT5kbWFfY2hhbm5lbHM7ICsraSkgewo+ICsJCXNwaW5f bG9ja19pcnFzYXZlKCZjcWRtYS0+cGNbaV0tPmxvY2ssIGZsYWdzKTsKPiArCQlpZiAobXRrX2Nx ZG1hX2hhcmRfcmVzZXQoY3FkbWEtPnBjW2ldKSA8IDApIHsKPiArCQkJcHJfd2FybigiY3FkbWEg aGFyZCByZXNldCB0aW1lb3V0XG4iKTsKPiArCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Fk bWEtPnBjW2ldLT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJCQljbGtfZGlzYWJsZV91bnByZXBhcmUo Y3FkbWEtPmNsayk7Cj4gKwkJCXBtX3J1bnRpbWVfcHV0X3N5bmMoY3FkbWEyZGV2KGNxZG1hKSk7 Cj4gKwkJCXBtX3J1bnRpbWVfZGlzYWJsZShjcWRtYTJkZXYoY3FkbWEpKTsKPiArCQkJcmV0dXJu IC1FSU5WQUw7Cj4gKwkJfQo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNxZG1hLT5wY1tp XS0+bG9jaywgZmxhZ3MpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBtdGtfY3FkbWFfaHdfZGVpbml0KHN0cnVjdCBtdGtfY3FkbWFfZGV2aWNlICpjcWRt YSkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCXUzMiBpOwo+ICsKPiArCS8qIHJl c2V0IGFsbCBQQ3MgKi8KPiArCWZvciAoaSA9IDA7IGkgPCBjcWRtYS0+ZG1hX2NoYW5uZWxzOyAr K2kpIHsKPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3FkbWEtPnBjW2ldLT5sb2NrLCBmbGFncyk7 Cj4gKwkJaWYgKG10a19jcWRtYV9oYXJkX3Jlc2V0KGNxZG1hLT5wY1tpXSkgPCAwKQo+ICsJCQlw cl93YXJuKCJjcWRtYSBoYXJkIHJlc2V0IHRpbWVvdXRcbiIpOwoKZGV2X2VycgoKPiArCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZjcWRtYS0+cGNbaV0tPmxvY2ssIGZsYWdzKTsKPiArCX0KPiAr Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY3FkbWEtPmNsayk7Cj4gKwo+ICsJcG1fcnVudGlt ZV9wdXRfc3luYyhjcWRtYTJkZXYoY3FkbWEpKTsKPiArCXBtX3J1bnRpbWVfZGlzYWJsZShjcWRt YTJkZXYoY3FkbWEpKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbXRrX2NxZG1hX21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10 Njc2NS1jcWRtYSIgfSwKPiArCXsgLyogc2VudGluZWwgKi8gfQo+ICt9Owo+ICtNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBtdGtfY3FkbWFfbWF0Y2gpOwo+ICsKPiArc3RhdGljIGludCBtdGtfY3Fk bWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IG10 a19jcWRtYV9kZXZpY2UgKmNxZG1hOwo+ICsJc3RydWN0IG10a19jcWRtYV92Y2hhbiAqdmM7Cj4g KwlzdHJ1Y3QgZG1hX2RldmljZSAqZGQ7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiArCWlu dCBlcnI7Cj4gKwl1MzIgaTsKPiArCj4gKwljcWRtYSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2 LCBzaXplb2YoKmNxZG1hKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNxZG1hKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsKPiArCWRkID0gJmNxZG1hLT5kZGV2Owo+ICsKPiArCWNxZG1hLT5jbGsg PSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImNxZG1hIik7Cj4gKwlpZiAoSVNfRVJSKGNxZG1h LT5jbGspKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gY2xvY2sgZm9yICVzXG4iLAo+ ICsJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoY3FkbWEtPmNs ayk7Cj4gKwl9Cj4gKwo+ICsJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgZGQtPmNhcF9tYXNrKTsK PiArCj4gKwlkZC0+Y29weV9hbGlnbiA9IE1US19DUURNQV9BTElHTl9TSVpFOwo+ICsJZGQtPmRl dmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IG10a19jcWRtYV9hbGxvY19jaGFuX3Jlc291cmNl czsKPiArCWRkLT5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9IG10a19jcWRtYV9mcmVlX2No YW5fcmVzb3VyY2VzOwo+ICsJZGQtPmRldmljZV90eF9zdGF0dXMgPSBtdGtfY3FkbWFfdHhfc3Rh dHVzOwo+ICsJZGQtPmRldmljZV9pc3N1ZV9wZW5kaW5nID0gbXRrX2NxZG1hX2lzc3VlX3BlbmRp bmc7Cj4gKwlkZC0+ZGV2aWNlX3ByZXBfZG1hX21lbWNweSA9IG10a19jcWRtYV9wcmVwX2RtYV9t ZW1jcHk7Cj4gKwlkZC0+ZGV2aWNlX3Rlcm1pbmF0ZV9hbGwgPSBtdGtfY3FkbWFfdGVybWluYXRl X2FsbDsKPiArCWRkLT5zcmNfYWRkcl93aWR0aHMgPSBNVEtfQ1FETUFfRE1BX0JVU1dJRFRIUzsK PiArCWRkLT5kc3RfYWRkcl93aWR0aHMgPSBNVEtfQ1FETUFfRE1BX0JVU1dJRFRIUzsKPiArCWRk LT5kaXJlY3Rpb25zID0gQklUKERNQV9NRU1fVE9fTUVNKTsKPiArCWRkLT5yZXNpZHVlX2dyYW51 bGFyaXR5ID0gRE1BX1JFU0lEVUVfR1JBTlVMQVJJVFlfU0VHTUVOVDsKPiArCWRkLT5kZXYgPSAm cGRldi0+ZGV2Owo+ICsJSU5JVF9MSVNUX0hFQUQoJmRkLT5jaGFubmVscyk7Cj4gKwo+ICsJaWYg KHBkZXYtPmRldi5vZl9ub2RlICYmIG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9u b2RlLAo+ICsJCQkJCQkgICAgICAiZG1hLXJlcXVlc3RzIiwKPiArCQkJCQkJICAgICAgJmNxZG1h LT5kbWFfcmVxdWVzdHMpKSB7Cj4gKwkJZGV2X2luZm8oJnBkZXYtPmRldiwKPiArCQkJICJVc2lu ZyAldSBhcyBtaXNzaW5nIGRtYS1yZXF1ZXN0cyBwcm9wZXJ0eVxuIiwKPiArCQkJIE1US19DUURN QV9OUl9WQ0hBTlMpOwo+ICsKPiArCQljcWRtYS0+ZG1hX3JlcXVlc3RzID0gTVRLX0NRRE1BX05S X1ZDSEFOUzsKPiArCX0KPiArCj4gKwlpZiAocGRldi0+ZGV2Lm9mX25vZGUgJiYgb2ZfcHJvcGVy dHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUsCj4gKwkJCQkJCSAgICAgICJkbWEtY2hhbm5l bHMiLAo+ICsJCQkJCQkgICAgICAmY3FkbWEtPmRtYV9jaGFubmVscykpIHsKPiArCQlkZXZfaW5m bygmcGRldi0+ZGV2LAo+ICsJCQkgIlVzaW5nICV1IGFzIG1pc3NpbmcgZG1hLWNoYW5uZWxzIHBy b3BlcnR5XG4iLAo+ICsJCQkgTVRLX0NRRE1BX05SX1BDSEFOUyk7Cj4gKwo+ICsJCWNxZG1hLT5k bWFfY2hhbm5lbHMgPSBNVEtfQ1FETUFfTlJfUENIQU5TOwo+ICsJfQo+ICsKPiArCWNxZG1hLT5w YyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LCBjcWRtYS0+ZG1hX2NoYW5uZWxzLAo+ICsJCQkJ IHNpemVvZigqY3FkbWEtPnBjKSwgR0ZQX0tFUk5FTCk7Cgp3aGF0IGhhcHBlbnMgd2hlbiBjcWRt YS0+ZG1hX2NoYW5uZWxzIGlzIG1vcmUgdGhhbiBNVEtfQ1FETUFfTlJfUENIQU5TID8KCj4gKwlp ZiAoIWNxZG1hLT5wYykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkvKiBpbml0aWFsaXph dGlvbiBmb3IgUENzICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgY3FkbWEtPmRtYV9jaGFubmVsczsg KytpKSB7Cj4gKwkJY3FkbWEtPnBjW2ldID0gZGV2bV9rY2FsbG9jKCZwZGV2LT5kZXYsIDEsCj4g KwkJCQkJICAgIHNpemVvZigqKmNxZG1hLT5wYyksIEdGUF9LRVJORUwpOwo+ICsJCWlmICghY3Fk bWEtPnBjW2ldKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkJSU5JVF9MSVNUX0hFQUQo JmNxZG1hLT5wY1tpXS0+cXVldWUpOwo+ICsJCXNwaW5fbG9ja19pbml0KCZjcWRtYS0+cGNbaV0t PmxvY2spOwo+ICsJCXJlZmNvdW50X3NldCgmY3FkbWEtPnBjW2ldLT5yZWZjbnQsIDApOwo+ICsK PiArCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkp Owo+ICsJCWlmICghcmVzKSB7Cj4gKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIG1lbSByZXNv dXJjZSBmb3IgJXNcbiIsCj4gKwkJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7Cj4gKwkJCXJldHVy biAtRUlOVkFMOwo+ICsJCX0KPiArCj4gKwkJY3FkbWEtPnBjW2ldLT5iYXNlID0gZGV2bV9pb3Jl bWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7Cj4gKwkJaWYgKElTX0VSUihjcWRtYS0+cGNb aV0tPmJhc2UpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihjcWRtYS0+cGNbaV0tPmJhc2UpOwo+ICsK PiArCQkvKiBhbGxvY2F0ZSBJUlEgcmVzb3VyY2UgKi8KPiArCQlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIGkpOwo+ICsJCWlmICghcmVzKSB7Cj4gKwkJ CWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIGlycSByZXNvdXJjZSBmb3IgJXNcbiIsCj4gKwkJCQlk ZXZfbmFtZSgmcGRldi0+ZGV2KSk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQlj cWRtYS0+cGNbaV0tPmlycSA9IHJlcy0+c3RhcnQ7Cj4gKwo+ICsJCWVyciA9IGRldm1fcmVxdWVz dF9pcnEoJnBkZXYtPmRldiwgY3FkbWEtPnBjW2ldLT5pcnEsCj4gKwkJCQkgICAgICAgbXRrX2Nx ZG1hX2lycSwgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksCj4gKwkJCQkgICAgICAgY3FkbWEpOwo+ ICsJCWlmIChlcnIpIHsKPiArCQkJZGV2X2VycigmcGRldi0+ZGV2LAo+ICsJCQkJInJlcXVlc3Rf aXJxIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwgZXJyKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCS8qIGFsbG9jYXRlIHJlc291cmNlIGZvciBWQ3MgKi8KPiArCWNx ZG1hLT52YyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LCBjcWRtYS0+ZG1hX3JlcXVlc3RzLAo+ ICsJCQkJIHNpemVvZigqY3FkbWEtPnZjKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNxZG1hLT52 YykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgY3FkbWEtPmRt YV9yZXF1ZXN0czsgaSsrKSB7Cj4gKwkJdmMgPSAmY3FkbWEtPnZjW2ldOwo+ICsJCXZjLT52Yy5k ZXNjX2ZyZWUgPSBtdGtfY3FkbWFfdmRlc2NfZnJlZTsKPiArCQl2Y2hhbl9pbml0KCZ2Yy0+dmMs IGRkKTsKPiArCQlpbml0X2NvbXBsZXRpb24oJnZjLT5pc3N1ZV9jb21wbGV0aW9uKTsKPiArCX0K PiArCj4gKwllcnIgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKGRkKTsKPiArCWlmIChlcnIp Cj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwllcnIgPSBvZl9kbWFfY29udHJvbGxlcl9yZWdpc3Rl cihwZGV2LT5kZXYub2Zfbm9kZSwKPiArCQkJCQkgb2ZfZG1hX3hsYXRlX2J5X2NoYW5faWQsIGNx ZG1hKTsKPiArCWlmIChlcnIpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsCj4gKwkJCSJNZWRp YVRlayBDUURNQSBPRiByZWdpc3RyYXRpb24gZmFpbGVkICVkXG4iLCBlcnIpOwo+ICsJCWdvdG8g ZXJyX3VucmVnaXN0ZXI7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gbXRrX2NxZG1hX2h3X2luaXQoY3Fk bWEpOwo+ICsJaWYgKGVycikgewo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwKPiArCQkJIk1lZGlh VGVrIENRRE1BIEhXIGluaXRpYWxpemF0aW9uIGZhaWxlZCAlZFxuIiwgZXJyKTsKPiArCQlnb3Rv IGVycl91bnJlZ2lzdGVyOwo+ICsJfQo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IGNxZG1hKTsKPiArCj4gKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTWVkaWFUZWsgQ1FETUEgZHJp dmVyIHJlZ2lzdGVyZWRcbiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX3VucmVnaXN0 ZXI6Cj4gKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoZGQpOwo+ICsKPiArCXJldHVybiBl cnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2NxZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2NxZG1hX2RldmljZSAqY3FkbWEg PSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCXN0cnVjdCBtdGtfY3FkbWFfdmNoYW4g KnZjOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCWludCBpOwo+ICsKPiArCS8qIGtpbGwg VkMgdGFzayAqLwo+ICsJZm9yIChpID0gMDsgaSA8IGNxZG1hLT5kbWFfcmVxdWVzdHM7IGkrKykg ewo+ICsJCXZjID0gJmNxZG1hLT52Y1tpXTsKPiArCj4gKwkJbGlzdF9kZWwoJnZjLT52Yy5jaGFu LmRldmljZV9ub2RlKTsKPiArCQl0YXNrbGV0X2tpbGwoJnZjLT52Yy50YXNrKTsKPiArCX0KPiAr Cj4gKwkvKiBkaXNhYmxlIGludGVycnVwdCAqLwo+ICsJZm9yIChpID0gMDsgaSA8IGNxZG1hLT5k bWFfY2hhbm5lbHM7IGkrKykgewo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZjcWRtYS0+cGNbaV0t PmxvY2ssIGZsYWdzKTsKPiArCQltdGtfZG1hX2NscihjcWRtYS0+cGNbaV0sIE1US19DUURNQV9J TlRfRU4sCj4gKwkJCSAgICBNVEtfQ1FETUFfSU5UX0VOX0JJVCk7Cj4gKwkJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmY3FkbWEtPnBjW2ldLT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJCS8qIFdhaXRz IGZvciBhbnkgcGVuZGluZyBJUlEgaGFuZGxlcnMgdG8gY29tcGxldGUgKi8KPiArCQlzeW5jaHJv bml6ZV9pcnEoY3FkbWEtPnBjW2ldLT5pcnEpOwo+ICsJfQo+ICsKPiArCS8qIGRpc2FibGUgaGFy ZHdhcmUgKi8KPiArCW10a19jcWRtYV9od19kZWluaXQoY3FkbWEpOwo+ICsKPiArCWRtYV9hc3lu Y19kZXZpY2VfdW5yZWdpc3RlcigmY3FkbWEtPmRkZXYpOwo+ICsJb2ZfZG1hX2NvbnRyb2xsZXJf ZnJlZShwZGV2LT5kZXYub2Zfbm9kZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19jcWRtYV9kcml2ZXIgPSB7Cj4gKwkucHJv YmUgPSBtdGtfY3FkbWFfcHJvYmUsCj4gKwkucmVtb3ZlID0gbXRrX2NxZG1hX3JlbW92ZSwKPiAr CS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgICAgICAgICAgID0gS0JVSUxEX01PRE5BTUUsCj4gKwkJ Lm9mX21hdGNoX3RhYmxlID0gbXRrX2NxZG1hX21hdGNoLAo+ICsJfSwKPiArfTsKPiArbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihtdGtfY3FkbWFfZHJpdmVyKTsKPiArCj4gK01PRFVMRV9ERVNDUklQ VElPTigiTWVkaWFUZWsgQ1FETUEgQ29udHJvbGxlciBEcml2ZXIiKTsKPiArTU9EVUxFX0FVVEhP UigiU2h1bi1DaGloIFl1IDxzaHVuLWNoaWgueXVAbWVkaWF0ZWsuY29tPiIpOwo+ICtNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7Cg==