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: [v5,2/3] dmaengine: mediatek: Add MediaTek High-Speed DMA controller for MT7622 and MT7623 SoC From: sean.wang@mediatek.com Message-Id: <1519900021.8089.136.camel@mtkswgap22> Date: Thu, 1 Mar 2018 18:27:01 +0800 To: Vinod Koul Cc: dan.j.williams@intel.com, robh+dt@kernel.org, mark.rutland@arm.com, dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Randy Dunlap , Fengguang Wu , Julia Lawall List-ID: T24gVGh1LCAyMDE4LTAzLTAxIGF0IDEzOjUzICswNTMwLCBWaW5vZCBLb3VsIHdyb3RlOgo+IE9u IFN1biwgRmViIDE4LCAyMDE4IGF0IDAzOjA4OjMwQU0gKzA4MDAsIHNlYW4ud2FuZ0BtZWRpYXRl ay5jb20gd3JvdGU6Cj4gCj4gPiBAQCAtMCwwICsxLDEwNTQgQEAKPiA+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAo+IC8vIENvcHlyaWdodCAuLi4KPiAKPiBUaGUgY29weXJp Z2h0IGxpbmUgbmVlZHMgdG8gZm9sbG93IFNQRFggdGFnIGxpbmUKPiAKCm9rYXksIEkgd2lsbCBt YWtlIGl0IHJlb3JkZXIgYW5kIGJlIHNvbWV0aGluZyBsaWtlIHRoYXQKCi8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCi8qCiAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4IE1lZGlh VGVrIEluYy4KICogQXV0aG9yOiBTZWFuIFdhbmcgPHNlYW4ud2FuZ0BtZWRpYXRlay5jb20+CiAq CiAqIERyaXZlciBmb3IgTWVkaWFUZWsgSGlnaC1TcGVlZCBETUEgQ29udHJvbGxlcgogKgogKi8K Cgo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xr Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Rt YWVuZ2luZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9lcnIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9pb3BvbGwuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgo+ID4g KyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZG1hLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L3JlZmNvdW50Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K PiAKPiB0aGF0J3MgYSBsb3Qgb2YgaGVhZGVycywgZG8gdSBuZWVkIGFsbCB0aG9zZT8KPiAKCm9r YXksIEkgd2lsbCBoYXZlIG1vcmUgY2hlY2tzIHdoZXRoZXIgc29tZSBoZWFkZXIgbGlzdGVkIGhl cmUgaXMgbm90Cm5lY2Vzc2FyeQoKPiA+ICsKPiA+ICsjaW5jbHVkZSAiLi4vdmlydC1kbWEuaCIK PiA+ICsKPiA+ICsjZGVmaW5lIE1US19ETUFfREVWIEtCVUlMRF9NT0ROQU1FCj4gCj4gd2h5IGRv IHlvdSBuZWVkIHRoaXM/Cj4gCgp0aGUgcG9pbnQgaXMgSSBsZWFybmVkIGZyb20gb3RoZXIgc3Vi c3lzdGVtIG1ha2VzIHRoZSBkcml2ZXIgbmFtZSBiZQpzYW1lIHdpdGggdGhlIG1vZHVsZSBuYW1l IHdpdGggS0JVSUxEX01PRE5BTUUuCgpJZiB5b3UgcmVhbGx5IGRvbid0IGxpa2UgaXQsIEkgY2Fu IGp1c3QgY2hhbmdlIGl0IGludG8gCgojZGVmaW5lIE1US19ETUFfREVWICJtdGstaHNkbWEiCgo+ ID4gKwo+ID4gKyNkZWZpbmUgTVRLX0hTRE1BX1VTRUNfUE9MTAkJMjAKPiA+ICsjZGVmaW5lIE1U S19IU0RNQV9USU1FT1VUX1BPTEwJCTIwMDAwMAo+ID4gKyNkZWZpbmUgTVRLX0hTRE1BX0RNQV9C VVNXSURUSFMJCUJJVChETUFfU0xBVkVfQlVTV0lEVEhfVU5ERUZJTkVEKQo+IAo+IFVuZGVmaW5l ZCBidXN3aWR0aD8/Cj4gCj4gPiArLyoqCj4gPiArICogc3RydWN0IG10a19oc2RtYV9wZGVzYyAt IFRoaXMgaXMgdGhlIHN0cnVjdCBob2xkaW5nIGluZm8gZGVzY3JpYmluZyBwaHlzaWNhbAo+ID4g KyAqCQkJICAgIGRlc2NyaXB0b3IgKFBEKSBhbmQgaXRzIHBsYWNlbWVudCBtdXN0IGJlIGtlcHQg YXQKPiA+ICsgKgkJCSAgICA0LWJ5dGVzIGFsaWdubWVudCBpbiBsaXR0bGUgZW5kaWFuIG9yZGVy Lgo+ID4gKyAqIEBkZXNjWzEtNF06CQkgICAgVGhlIGNvbnRyb2wgcGFkIHVzZWQgdG8gaW5kaWNh dGUgaGFyZHdhcmUgaG93IHRvCj4gCj4gcGxzIGFsaWduIHRvIDgwY2hhciBvciBsZXNzZXIKPiAK CndlaXJkLCBpdCBzZWVtcyB0aGUgbGluZSBpcyBhbHJlYWR5IHdpdGggODAgY2hhciBhbmQgcGFz cyB0aGUKY2hlY2twYXRjaC5wbC4gb3IgZG8gSSBtaXN1bmRlcnN0YW5kIHNvbWV0aGluZyA/Cgo+ ID4gKy8qKgo+ID4gKyAqIHN0cnVjdCBtdGtfaHNkbWFfcmluZyAtIFRoaXMgc3RydWN0IGhvbGRz IGluZm8gZGVzY3JpYmluZyB1bmRlcmx5aW5nIHJpbmcKPiA+ICsgKgkJCSAgIHNwYWNlCj4gPiAr ICogQHR4ZDoJCSAgIFRoZSBkZXNjcmlwdG9yIFRYIHJpbmcgd2hpY2ggZGVzY3JpYmVzIERNQSBz b3VyY2UKPiA+ICsgKgkJCSAgIGluZm9ybWF0aW9uCj4gPiArICogQHJ4ZDoJCSAgIFRoZSBkZXNj cmlwdG9yIFJYIHJpbmcgd2hpY2ggZGVzY3JpYmVzIERNQQo+ID4gKyAqCQkJICAgZGVzdGluYXRp b24gaW5mb3JtYXRpb24KPiA+ICsgKiBAY2I6CQkJICAgVGhlIGV4dHJhIGluZm9ybWF0aW9uIHBv aW50ZWQgYXQgYnkgUlggcmluZwo+ID4gKyAqIEB0cGh5czoJCSAgIFRoZSBwaHlzaWNhbCBhZGRy IG9mIFRYIHJpbmcKPiA+ICsgKiBAcnBoeXM6CQkgICBUaGUgcGh5c2ljYWwgYWRkciBvZiBSWCBy aW5nCj4gPiArICogQGN1cl90cHRyOgkJICAgUG9pbnRlciB0byB0aGUgbmV4dCBmcmVlIGRlc2Ny aXB0b3IgdXNlZCBieSB0aGUgaG9zdAo+ID4gKyAqIEBjdXJfcnB0cjoJCSAgIFBvaW50ZXIgdG8g dGhlIGxhc3QgZG9uZSBkZXNjcmlwdG9yIGJ5IHRoZSBkZXZpY2UKPiAKPiBoZXJlIGFsaWdubWVu dCBhbmQgODAgY2hhciB3cmFwIHdpbGwgaGVscCB0b28gYW5kIGZldyBvdGhlciBwbGFjZXMuLi4K PiAKCkFsc28gd2VpcmQsIGl0IHNlZW1zIHRoZSBsaW5lIGlzIGFscmVhZHkgd2l0aCA4MCBjaGFy IGFuZCBwYXNzIHRoZQpjaGVja3BhdGNoLnBsLiBvciBkbyBJIG1pc3VuZGVyc3RhbmQgc29tZXRo aW5nID8KCj4gCj4gPiArc3RydWN0IG10a19oc2RtYV92Y2hhbiB7Cj4gPiArCXN0cnVjdCB2aXJ0 X2RtYV9jaGFuIHZjOwo+ID4gKwlzdHJ1Y3QgY29tcGxldGlvbiBpc3N1ZV9jb21wbGV0aW9uOwo+ ID4gKwlib29sIGlzc3VlX3N5bmNocm9uaXplOwo+ID4gKwkvKiBwcm90ZWN0ZWQgYnkgdmMubG9j ayAqLwo+IAo+IHRoaXMgc2hvdWxkIGJlIGF0IGNvbW1lbnRzIGFib3ZlLi4uCj4gCj4gPiArc3Rh dGljIHN0cnVjdCBtdGtfaHNkbWFfZGV2aWNlICp0b19oc2RtYV9kZXYoc3RydWN0IGRtYV9jaGFu ICpjaGFuKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFuLT5kZXZpY2UsIHN0 cnVjdCBtdGtfaHNkbWFfZGV2aWNlLAo+ID4gKwkJCSAgICBkZGV2KTsKPiAKPiBhbmQgdGhpcyBj YW4gZml0IGluIGEgbGluZQo+IAoKVGhhbmtzLCBJIHdpbGwgaW1wcm92ZSBpdC4KCj4gPiArc3Rh dGljIGludCBtdGtfaHNkbWFfYWxsb2NfcGNoYW4oc3RydWN0IG10a19oc2RtYV9kZXZpY2UgKmhz ZG1hLAo+ID4gKwkJCQkgc3RydWN0IG10a19oc2RtYV9wY2hhbiAqcGMpCj4gPiArewo+ID4gKwlz dHJ1Y3QgbXRrX2hzZG1hX3JpbmcgKnJpbmcgPSAmcGMtPnJpbmc7Cj4gPiArCWludCBlcnI7Cj4g PiArCj4gPiArCW1lbXNldChwYywgMCwgc2l6ZW9mKCpwYykpOwo+ID4gKwo+ID4gKwkvKgo+ID4g KwkgKiBBbGxvY2F0ZSByaW5nIHNwYWNlIHdoZXJlIFswIC4uLiBNVEtfRE1BX1NJWkUgLSAxXSBp cyBmb3IgVFggcmluZwo+ID4gKwkgKiBhbmQgW01US19ETUFfU0laRSAuLi4gMiAqIE1US19ETUFf U0laRSAtIDFdIGlzIGZvciBSWCByaW5nLgo+ID4gKwkgKi8KPiA+ICsJcGMtPnN6X3JpbmcgPSAy ICogTVRLX0RNQV9TSVpFICogc2l6ZW9mKCpyaW5nLT50eGQpOwo+ID4gKwlyaW5nLT50eGQgPSBk bWFfemFsbG9jX2NvaGVyZW50KGhzZG1hMmRldihoc2RtYSksIHBjLT5zel9yaW5nLAo+ID4gKwkJ CQkJJnJpbmctPnRwaHlzLCBHRlBfQVRPTUlDKTsKPiAKPiBHRlBfTk9XQUlUIHBsZWFzZQo+IAoK VGhhbmtzLCBJIHdpbGwgaW1wcm92ZSBpdCB3aXRoIEdGUF9OT1dBSVQuCgo+ID4gKwlpZiAoIXJp bmctPnR4ZCkKPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gKwlyaW5nLT5yeGQgPSAm cmluZy0+dHhkW01US19ETUFfU0laRV07Cj4gPiArCXJpbmctPnJwaHlzID0gcmluZy0+dHBoeXMg KyBNVEtfRE1BX1NJWkUgKiBzaXplb2YoKnJpbmctPnR4ZCk7Cj4gPiArCXJpbmctPmN1cl90cHRy ID0gMDsKPiA+ICsJcmluZy0+Y3VyX3JwdHIgPSBNVEtfRE1BX1NJWkUgLSAxOwo+ID4gKwo+ID4g KwlyaW5nLT5jYiA9IGtjYWxsb2MoTVRLX0RNQV9TSVpFLCBzaXplb2YoKnJpbmctPmNiKSwgR0ZQ X0tFUk5FTCk7Cj4gCj4gdGhpcyBpcyBpbmNvbnNpc3RlbnQgd2l0aCB5b3VyIG93biBwYXR0ZXJu ISBtYWtlIGl0IEdGUF9OT1dBSVQgcGxzCj4gCgpEaXR0bywgSSB3aWxsIGltcHJvdmUgaXQgd2l0 aCBHRlBfTk9XQUlULgoKPiA+ICtzdGF0aWMgaW50IG10a19oc2RtYV9pc3N1ZV9wZW5kaW5nX3Zk ZXNjKHN0cnVjdCBtdGtfaHNkbWFfZGV2aWNlICpoc2RtYSwKPiA+ICsJCQkJCSBzdHJ1Y3QgbXRr X2hzZG1hX3BjaGFuICpwYywKPiA+ICsJCQkJCSBzdHJ1Y3QgbXRrX2hzZG1hX3ZkZXNjICpodmQp Cj4gPiArewo+ID4gKwlzdHJ1Y3QgbXRrX2hzZG1hX3JpbmcgKnJpbmcgPSAmcGMtPnJpbmc7Cj4g PiArCXN0cnVjdCBtdGtfaHNkbWFfcGRlc2MgKnR4ZCwgKnJ4ZDsKPiA+ICsJdTE2IHJlc2VydmVk LCBwcmV2LCB0bGVuLCBudW1fc2dzOwo+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKwo+ ID4gKwkvKiBQcm90ZWN0IGFnYWluc3QgUEMgaXMgYWNjZXNzZWQgYnkgbXVsdGlwbGUgVkNzIHNp bXVsdGFuZW91c2x5ICovCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZoc2RtYS0+bG9jaywgZmxh Z3MpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBSZXNlcnZlIHJvb21zLCB3aGVyZSBwYy0+bnJf ZnJlZSBpcyB1c2VkIHRvIHRyYWNrIGhvdyBtYW55IGZyZWUKPiA+ICsJICogcm9vbXMgaW4gdGhl IHJpbmcgYmVpbmcgdXBkYXRlZCBpbiB1c2VyIGFuZCBJUlEgY29udGV4dC4KPiA+ICsJICovCj4g PiArCW51bV9zZ3MgPSBESVZfUk9VTkRfVVAoaHZkLT5sZW4sIE1US19IU0RNQV9NQVhfTEVOKTsK PiA+ICsJcmVzZXJ2ZWQgPSBtaW5fdCh1MTYsIG51bV9zZ3MsIGF0b21pY19yZWFkKCZwYy0+bnJf ZnJlZSkpOwo+ID4gKwo+ID4gKwlpZiAoIXJlc2VydmVkKSB7Cj4gPiArCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZoc2RtYS0+bG9jaywgZmxhZ3MpOwo+ID4gKwkJcmV0dXJuIC1FTk9TUEM7Cj4g PiArCX0KPiA+ICsKPiA+ICsJYXRvbWljX3N1YihyZXNlcnZlZCwgJnBjLT5ucl9mcmVlKTsKPiA+ ICsKPiA+ICsJd2hpbGUgKHJlc2VydmVkLS0pIHsKPiA+ICsJCS8qIExpbWl0IHNpemUgYnkgUEQg Y2FwYWJpbGl0eSBmb3IgdmFsaWQgZGF0YSBtb3ZpbmcgKi8KPiA+ICsJCXRsZW4gPSAoaHZkLT5s ZW4gPiBNVEtfSFNETUFfTUFYX0xFTikgPwo+ID4gKwkJICAgICAgIE1US19IU0RNQV9NQVhfTEVO IDogaHZkLT5sZW47Cj4gPiArCj4gPiArCQkvKgo+ID4gKwkJICogU2V0dXAgUERzIHVzaW5nIHRo ZSByZW1haW5pbmcgVkQgaW5mbyBtYXBwZWQgb24gdGhvc2UKPiA+ICsJCSAqIHJlc2VydmVkIHJv b21zLiBBbmQgc2luY2UgUlhEIGlzIHNoYXJlZCBtZW1vcnkgYmV0d2VlbiB0aGUKPiA+ICsJCSAq IGhvc3QgYW5kIHRoZSBkZXZpY2UgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb2hlcmVudCBjYWxs LAo+ID4gKwkJICogdGhlIGhlbHBlciBtYWNybyBXUklURV9PTkNFIGNhbiBlbnN1cmUgdGhlIGRh dGEgd3JpdHRlbiB0bwo+ID4gKwkJICogUkFNIHdvdWxkIHJlYWxseSBoYXBwZW5zLgo+ID4gKwkJ ICovCj4gPiArCQl0eGQgPSAmcmluZy0+dHhkW3JpbmctPmN1cl90cHRyXTsKPiA+ICsJCVdSSVRF X09OQ0UodHhkLT5kZXNjMSwgaHZkLT5zcmMpOwo+ID4gKwkJV1JJVEVfT05DRSh0eGQtPmRlc2My LAo+ID4gKwkJCSAgIGhzZG1hLT5zb2MtPmxzMCB8IE1US19IU0RNQV9ERVNDX1BMRU4odGxlbikp Owo+ID4gKwo+ID4gKwkJcnhkID0gJnJpbmctPnJ4ZFtyaW5nLT5jdXJfdHB0cl07Cj4gPiArCQlX UklURV9PTkNFKHJ4ZC0+ZGVzYzEsIGh2ZC0+ZGVzdCk7Cj4gPiArCQlXUklURV9PTkNFKHJ4ZC0+ ZGVzYzIsIE1US19IU0RNQV9ERVNDX1BMRU4odGxlbikpOwo+ID4gKwo+ID4gKwkJLyogQXNzb2Np YXRlIFZELCB0aGUgUEQgYmVsb25nZWQgdG8gKi8KPiA+ICsJCXJpbmctPmNiW3JpbmctPmN1cl90 cHRyXS52ZCA9ICZodmQtPnZkOwo+ID4gKwo+ID4gKwkJLyogTW92ZSBmb3J3YXJkIHRoZSBwb2lu dGVyIG9mIFRYIHJpbmcgKi8KPiA+ICsJCXJpbmctPmN1cl90cHRyID0gTVRLX0hTRE1BX05FWFRf REVTUF9JRFgocmluZy0+Y3VyX3RwdHIsCj4gPiArCQkJCQkJCSBNVEtfRE1BX1NJWkUpOwo+ID4g Kwo+ID4gKwkJLyogVXBkYXRlIFZEIHdpdGggcmVtYWluaW5nIGRhdGEgKi8KPiA+ICsJCWh2ZC0+ c3JjICArPSB0bGVuOwo+ID4gKwkJaHZkLT5kZXN0ICs9IHRsZW47Cj4gPiArCQlodmQtPmxlbiAg LT0gdGxlbjsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBUYWdnaW5nIGZsYWcgZm9y IHRoZSBsYXN0IFBEIGZvciBWRCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvcgo+ID4gKwkgKiBjb21w bGV0aW5nIFZELgo+ID4gKwkgKi8KPiA+ICsJaWYgKCFodmQtPmxlbikgewo+ID4gKwkJcHJldiA9 IE1US19IU0RNQV9MQVNUX0RFU1BfSURYKHJpbmctPmN1cl90cHRyLCBNVEtfRE1BX1NJWkUpOwo+ ID4gKwkJcmluZy0+Y2JbcHJldl0uZmxhZyA9IE1US19IU0RNQV9WREVTQ19GSU5JU0hFRDsKPiA+ ICsJfQo+ID4gKwo+ID4gKwkvKiBFbnN1cmUgYWxsIGNoYW5nZXMgaW5kZWVkIGRvbmUgYmVmb3Jl IHdlJ3JlIGdvaW5nIG9uICovCj4gPiArCXdtYigpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBV cGRhdGluZyBpbnRvIGhhcmR3YXJlIHRoZSBwb2ludGVyIG9mIFRYIHJpbmcgbGV0cyBIU0RNQSB0 byB0YWtlCj4gPiArCSAqIGFjdGlvbiBmb3IgdGhvc2UgcGVuZGluZyBQRHMuCj4gPiArCSAqLwo+ ID4gKwltdGtfZG1hX3dyaXRlKGhzZG1hLCBNVEtfSFNETUFfVFhfQ1BVLCByaW5nLT5jdXJfdHB0 cik7Cj4gPiArCj4gPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhzZG1hLT5sb2NrLCBmbGFn cyk7Cj4gPiArCj4gPiArCXJldHVybiAhaHZkLT5sZW4gPyAwIDogLUVOT1NQQzsKPiAKPiB5b3Ug YWxyZWFkeSB3cm90ZSBhbmQgc3RhcnRlZCB0eG4sIHNvIHdoeSB0aGlzPwo+IAoKaXQncyBwb3Nz aWJsZSBqdXN0IHBhcnRpYWwgdmlydHVhbCBkZXNjcmlwdG9yIGZpdHMgaW50byBoYXJkd2FyZSBh bmQKdGhlbiByZXR1cm4gLUVOT1NQQy4gQW5kIGl0IHdpbGwgc3RhcnQgaXQgdG8gY29tcGxldGUg dGhlIHJlbWFpbmluZyBwYXJ0CmFzIHNvb24gYXMgcG9zc2libGUgd2hlbiBzb21lIHJvb21zIGlz IGJlaW5nIGZyZWVkLgoKCj4gPiArc3RhdGljIHZvaWQgbXRrX2hzZG1hX2ZyZWVfcm9vbXNfaW5f cmluZyhzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSAqaHNkbWEpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg bXRrX2hzZG1hX3ZjaGFuICpodmM7Cj4gPiArCXN0cnVjdCBtdGtfaHNkbWFfcGRlc2MgKnJ4ZDsK PiA+ICsJc3RydWN0IG10a19oc2RtYV92ZGVzYyAqaHZkOwo+ID4gKwlzdHJ1Y3QgbXRrX2hzZG1h X3BjaGFuICpwYzsKPiA+ICsJc3RydWN0IG10a19oc2RtYV9jYiAqY2I7Cj4gPiArCV9fbGUzMiBk ZXNjMjsKPiA+ICsJdTMyIHN0YXR1czsKPiA+ICsJdTE2IG5leHQ7Cj4gPiArCWludCBpOwo+ID4g Kwo+ID4gKwlwYyA9IGhzZG1hLT5wYzsKPiA+ICsKPiA+ICsJLyogUmVhZCBJUlEgc3RhdHVzICov Cj4gPiArCXN0YXR1cyA9IG10a19kbWFfcmVhZChoc2RtYSwgTVRLX0hTRE1BX0lOVF9TVEFUVVMp Owo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBBY2sgdGhlIHBlbmRpbmcgSVJRIGFsbCB0byBsZXQg aGFyZHdhcmUga25vdyBzb2Z0d2FyZSBpcyBoYW5kbGluZwo+ID4gKwkgKiB0aG9zZSBmaW5pc2hl ZCBwaHlzaWNhbCBkZXNjcmlwdG9ycy4gT3RoZXJ3aXNlLCB0aGUgaGFyZHdhcmUgd291bGQKPiA+ ICsJICoga2VlcCB0aGUgdXNlZCBJUlEgbGluZSBpbiBjZXJ0YWluIHRyaWdnZXIgc3RhdGUuCj4g PiArCSAqLwo+ID4gKwltdGtfZG1hX3dyaXRlKGhzZG1hLCBNVEtfSFNETUFfSU5UX1NUQVRVUywg c3RhdHVzKTsKPiA+ICsKPiA+ICsJd2hpbGUgKDEpIHsKPiA+ICsJCW5leHQgPSBNVEtfSFNETUFf TkVYVF9ERVNQX0lEWChwYy0+cmluZy5jdXJfcnB0ciwKPiA+ICsJCQkJCSAgICAgICBNVEtfRE1B X1NJWkUpOwo+IAo+IHNob3VsZG4ndCB3ZSBjaGVjayBpZiBuZXh0IGlzIGluIHJhbmdlLCB3ZSBj YW4gY3Jhc2ggaWYgd2UgZ2V0IGJhZCB2YWx1ZQo+IGZyb20gaGFyZHdhcmUuLgoKb2theSwgdGhl cmUgYXJlIGNoZWNrcyBmb3IgbmV4dCB3aXRoIGRkb25lIGJpdCBjaGVjayBhbmQgbnVsbCBjaGVj ayBpbgp0aGUgY29ycmVzcG9uZGluZyBkZXNjcmlwdG9yIGFzIHRoZSBmb2xsb3dpbmcuCgo+ID4g KwkJcnhkID0gJnBjLT5yaW5nLnJ4ZFtuZXh0XTsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBJ ZiBNVEtfSFNETUFfREVTQ19ERE9ORSBpcyBubyBzcGVjaWZpZWQsIHRoYXQgbWVhbnMgZGF0YQo+ ID4gKwkJICogbW92aW5nIGZvciB0aGUgUEQgaXMgc3RpbGwgdW5kZXIgZ29pbmcuCj4gPiArCQkg Ki8KPiA+ICsJCWRlc2MyID0gUkVBRF9PTkNFKHJ4ZC0+ZGVzYzIpOwo+ID4gKwkJaWYgKCEoZGVz YzIgJiBoc2RtYS0+c29jLT5kZG9uZSkpCj4gPiArCQkJYnJlYWs7Cj4gCj4gb2theSB0aGlzIGlz IG9uZSBicmVhawo+IAo+ID4gKwo+ID4gKwkJY2IgPSAmcGMtPnJpbmcuY2JbbmV4dF07Cj4gPiAr CQlpZiAodW5saWtlbHkoIWNiLT52ZCkpIHsKPiA+ICsJCQlkZXZfZXJyKGhzZG1hMmRldihoc2Rt YSksICJjYi0+dmQgY2Fubm90IGJlIG51bGxcbiIpOwo+ID4gKwkJCWJyZWFrOwo+IAo+IGFuZCBv dGhlciBmb3IgbnVsbCwgaSBmZWVsIHdlIG5lZWQgdG8gaGF2ZSBjaGVja3MgZm9yIHdoaWxlKDEp IHRvIGJyZWFrLAo+IHRoaXMgY2FuIHJ1biBpbmZpbml0ZWx5IGlmIHNvbWV0aGluZyBiYWQgaGFw cGVucywgYSBmYWlsIHNhZmUgd291bGQgYmUgZ29vZCwKPiB0aGF0IHRvbyB0aGlzIGJlaW5nIGlu dm9rZWQgZnJvbSBpc3IuCj4gCgpBZ3JlZWQsIEkgd2lsbCBoYXZlIG1vcmUgY29uc2lkZXJhdGlv biB0byBhZGQgYSB3YXkgZm9yIGZhaWwgc2FmZSwgc3VjaAphcyB0aW1lb3V0LgoKPiA+ICtzdGF0 aWMgZW51bSBkbWFfc3RhdHVzIG10a19oc2RtYV90eF9zdGF0dXMoc3RydWN0IGRtYV9jaGFuICpj LAo+ID4gKwkJCQkJICAgZG1hX2Nvb2tpZV90IGNvb2tpZSwKPiA+ICsJCQkJCSAgIHN0cnVjdCBk bWFfdHhfc3RhdGUgKnR4c3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbXRrX2hzZG1hX3ZjaGFu ICpodmMgPSB0b19oc2RtYV92Y2hhbihjKTsKPiA+ICsJc3RydWN0IG10a19oc2RtYV92ZGVzYyAq aHZkOwo+ID4gKwlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQ7Cj4gPiArCWVudW0gZG1hX3N0YXR1 cyByZXQ7Cj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiArCXNpemVfdCBieXRlcyA9IDA7 Cj4gPiArCj4gPiArCXJldCA9IGRtYV9jb29raWVfc3RhdHVzKGMsIGNvb2tpZSwgdHhzdGF0ZSk7 Cj4gPiArCWlmIChyZXQgPT0gRE1BX0NPTVBMRVRFIHx8ICF0eHN0YXRlKQo+ID4gKwkJcmV0dXJu IHJldDsKPiA+ICsKPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmh2Yy0+dmMubG9jaywgZmxhZ3Mp Owo+ID4gKwl2ZCA9IG10a19oc2RtYV9maW5kX2FjdGl2ZV9kZXNjKGMsIGNvb2tpZSk7Cj4gPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh2Yy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4g KwlpZiAodmQpIHsKPiA+ICsJCWh2ZCA9IHRvX2hzZG1hX3ZkZXNjKHZkKTsKPiA+ICsJCWJ5dGVz ID0gaHZkLT5yZXNpZHVlOwo+IAo+IGZvciBhY3RpdmUgZGVzY3JpcHRvciwgc2hvdWxkbid0IHlv dSByZWFkIGNvdW50ZXJzIGZyb20gaGFyZHdhcmU/Cj4gCgp0aGUgaGFyZHdhcmUgZG9lc24ndCBz dXBwb3J0IGNvdW50ZXJzIGZvciByZXNpZHVlIGZvciBhbnkgYWN0aXZlCmRlc2NyaXB0b3IuIHRo aXMgcmVzaWR1ZSBpcyBjb21wbGV0ZWx5IG1haW50YWluZWQgaW4gc29mdHdhcmUgd2F5LgoKPiA+ ICtzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKPiA+ICttdGtfaHNkbWFf cHJlcF9kbWFfbWVtY3B5KHN0cnVjdCBkbWFfY2hhbiAqYywgZG1hX2FkZHJfdCBkZXN0LAo+ID4g KwkJCSAgZG1hX2FkZHJfdCBzcmMsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4g PiArewo+ID4gKwlzdHJ1Y3QgbXRrX2hzZG1hX3ZkZXNjICpodmQ7Cj4gPiArCj4gPiArCWh2ZCA9 IGt6YWxsb2Moc2l6ZW9mKCpodmQpLCBHRlBfTk9XQUlUKTsKPiAKPiBHRlBfTk9XQUlUIGhlcmUg dG9vCgpJdCdzIGFscmVhZHkgR0ZQX05PV0FJVC4gQW5kIEkgd2lsbCBjaGVjayBtb3JlIHdpdGgg YWxsIG1lbW9yeQphbGxvY2F0aW9uIHdpdGggdGhlIEdGUF9OT1dBSVQuCgo+IAo+ID4gK3N0YXRp YyBpbnQgbXRrX2hzZG1hX3Rlcm1pbmF0ZV9hbGwoc3RydWN0IGRtYV9jaGFuICpjKQo+ID4gK3sK PiA+ICsJbXRrX2hzZG1hX2ZyZWVfaW5hY3RpdmVfZGVzYyhjLCBmYWxzZSk7Cj4gCj4gb25seSBp bmFjdGl2ZSwgYWN0aXZlIG9uZXMgbmVlZCB0byBiZSBmcmVlZCBhbmQgY2hhbm5lbCBjbGVhbmVk Cj4gCgpva2F5LCBhbHNvIG1ha2UgYWxsIGFjdGl2ZSBvbmVzIHRvIGJlIGZyZWVkLgotLS0KVG8g dW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGRt YWVuZ2luZSIgaW4KdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5l bC5vcmcKTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpv cmRvbW8taW5mby5odG1sCg==