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: [v4,2/6] dmaengine: fsl-qdma: Add qDMA controller driver for Layerscape SoCs From: Vinod Koul Message-Id: <20180517060430.GU13271@vkoul-mobl> Date: Thu, 17 May 2018 11:34:30 +0530 To: Wen He Cc: vinod.koul@intel.com, dmaengine@vger.kernel.org, robh+dt@kernel.org, devicetree@vger.kernel.org, leoyang.li@nxp.com, jiafei.pan@nxp.com, jiaheng.fan@nxp.com List-ID: T24gMTQtMDUtMTgsIDIwOjAzLCBXZW4gSGUgd3JvdGU6Cgo+ICsKPiArLyogUmVnaXN0ZXJzIGZv ciBiaXQgYW5kIGdlbm1hc2sgKi8KPiArI2RlZmluZSBGU0xfUURNQV9DUUlEUl9TUVQJCTB4ODAw MAoKQklUKCkgPwoKPiArI2RlZmluZSBRRE1BX0NDREZfTUFTSwkJCUdFTk1BU0soMjgsIDIwKQo+ ICsjZGVmaW5lIFFETUFfQ0NERl9GT1RNQVQJCUJJVCgyOSkKPiArI2RlZmluZSBRRE1BX0NDREZf U0VSCQkJQklUKDMwKQo+ICsjZGVmaW5lIFFETUFfU0dfRklOCQkJQklUKDMwKQo+ICsjZGVmaW5l IFFETUFfU0dfRVhUCQkJQklUKDMxKQo+ICsjZGVmaW5lIFFETUFfU0dfTEVOX01BU0sJCUdFTk1B U0soMjksIDApCj4gKwo+ICsjZGVmaW5lIFFETUFfQ0NERl9TVEFUVVMJCTIwCj4gKyNkZWZpbmUg UURNQV9DQ0RGX09GRlNFVAkJMjAKPiArI2RlZmluZSBGU0xfUURNQV9CQ1FJRVJfQ1FUSUUJCTB4 ODAwMAo+ICsjZGVmaW5lIEZTTF9RRE1BX0JDUUlFUl9DUVBFSUUJCTB4ODAwMDAwCj4gKyNkZWZp bmUgRlNMX1FETUFfQlNRSUNSX0lDRU4JCTB4ODAwMDAwMDAKCmhlcmUgYW5kIGZldyBvdGhlciBw bGFjZXMgYXMgd2VsbAoKPiArCj4gK3U2NCBwcmVfYWRkciwgcHJlX3F1ZXVlOwoKd2h5IGRvIHdl IGhhdmUgYSBnbG9iYWw/Cgo+ICtzdGF0aWMgdm9pZCBmc2xfcWRtYV9jb21wX2ZpbGxfbWVtY3B5 KHN0cnVjdCBmc2xfcWRtYV9jb21wICpmc2xfY29tcCwKPiArCQkJCQlkbWFfYWRkcl90IGRzdCwg ZG1hX2FkZHJfdCBzcmMsIHUzMiBsZW4pCj4gK3sKPiArCXN0cnVjdCBmc2xfcWRtYV9mb3JtYXQg KmNjZGYsICpjc2dmX2Rlc2MsICpjc2dmX3NyYywgKmNzZ2ZfZGVzdDsKPiArCXN0cnVjdCBmc2xf cWRtYV9zZGYgKnNkZjsKPiArCXN0cnVjdCBmc2xfcWRtYV9kZGYgKmRkZjsKPiArCj4gKwljY2Rm ID0gKHN0cnVjdCBmc2xfcWRtYV9mb3JtYXQgKilmc2xfY29tcC0+dmlydF9hZGRyOwoKQ2FzdCBh cmUgbm90IHJlcXVpcmVkIHRvL2F3YXkgZnJvbSB2b2lkCgo+ICsJY3NnZl9kZXNjID0gKHN0cnVj dCBmc2xfcWRtYV9mb3JtYXQgKilmc2xfY29tcC0+dmlydF9hZGRyICsgMTsKPiArCWNzZ2Zfc3Jj ID0gKHN0cnVjdCBmc2xfcWRtYV9mb3JtYXQgKilmc2xfY29tcC0+dmlydF9hZGRyICsgMjsKPiAr CWNzZ2ZfZGVzdCA9IChzdHJ1Y3QgZnNsX3FkbWFfZm9ybWF0ICopZnNsX2NvbXAtPnZpcnRfYWRk ciArIDM7Cj4gKwlzZGYgPSAoc3RydWN0IGZzbF9xZG1hX3NkZiAqKWZzbF9jb21wLT52aXJ0X2Fk ZHIgKyA0Owo+ICsJZGRmID0gKHN0cnVjdCBmc2xfcWRtYV9kZGYgKilmc2xfY29tcC0+dmlydF9h ZGRyICsgNTsKPiArCj4gKwltZW1zZXQoZnNsX2NvbXAtPnZpcnRfYWRkciwgMCwgRlNMX1FETUFf QkFTRV9CVUZGRVJfU0laRSk7Cj4gKwkvKiBIZWFkIENvbW1hbmQgRGVzY3JpcHRvcihGcmFtZSBE ZXNjcmlwdG9yKSAqLwo+ICsJcWRtYV9kZXNjX2FkZHJfc2V0NjQoY2NkZiwgZnNsX2NvbXAtPmJ1 c19hZGRyICsgMTYpOwo+ICsJcWRtYV9jY2RmX3NldF9mb3JtYXQoY2NkZiwgcWRtYV9jY2RmX2dl dF9vZmZzZXQoY2NkZikpOwo+ICsJcWRtYV9jY2RmX3NldF9zZXIoY2NkZiwgcWRtYV9jY2RmX2dl dF9zdGF0dXMoY2NkZikpOwo+ICsKPiArCS8qIFN0YXR1cyBub3RpZmljYXRpb24gaXMgZW5xdWV1 ZWQgdG8gc3RhdHVzIHF1ZXVlLiAqLwo+ICsJLyogQ29tcG91bmQgQ29tbWFuZCBEZXNjcmlwdG9y KEZyYW1lIExpc3QgVGFibGUpICovCj4gKwlxZG1hX2Rlc2NfYWRkcl9zZXQ2NChjc2dmX2Rlc2Ms IGZzbF9jb21wLT5idXNfYWRkciArIDY0KTsKPiArCS8qIEl0IG11c3QgYmUgMzIgYXMgQ29tcG91 bmQgUy9HIERlc2NyaXB0b3IgKi8KPiArCXFkbWFfY3NnZl9zZXRfbGVuKGNzZ2ZfZGVzYywgMzIp Owo+ICsJcWRtYV9kZXNjX2FkZHJfc2V0NjQoY3NnZl9zcmMsIHNyYyk7Cj4gKwlxZG1hX2NzZ2Zf c2V0X2xlbihjc2dmX3NyYywgbGVuKTsKPiArCXFkbWFfZGVzY19hZGRyX3NldDY0KGNzZ2ZfZGVz dCwgZHN0KTsKPiArCXFkbWFfY3NnZl9zZXRfbGVuKGNzZ2ZfZGVzdCwgbGVuKTsKPiArCS8qIFRo aXMgZW50cnkgaXMgdGhlIGxhc3QgZW50cnkuICovCj4gKwlxZG1hX2NzZ2Zfc2V0X2YoY3NnZl9k ZXN0LCBsZW4pOwo+ICsJLyogRGVzY3JpcHRvciBCdWZmZXIgKi8KPiArCXNkZi0+Y21kID0gY3B1 X3RvX2xlMzIoCj4gKwkJCUZTTF9RRE1BX0NNRF9SV1RUWVBFIDw8IEZTTF9RRE1BX0NNRF9SV1RU WVBFX09GRlNFVCk7Cj4gKwlkZGYtPmNtZCA9IGNwdV90b19sZTMyKAo+ICsJCQlGU0xfUURNQV9D TURfUldUVFlQRSA8PCBGU0xfUURNQV9DTURfUldUVFlQRV9PRkZTRVQpOwo+ICsJZGRmLT5jbWQg fD0gY3B1X3RvX2xlMzIoCj4gKwkJCUZTTF9RRE1BX0NNRF9MV0MgPDwgRlNMX1FETUFfQ01EX0xX Q19PRkZTRVQpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBQcmUtcmVxdWVzdCBmdWxsIGNvbW1hbmQg ZGVzY3JpcHRvciBmb3IgZW5xdWV1ZS4KPiArICovCj4gK3N0YXRpYyBpbnQgZnNsX3FkbWFfcHJl X3JlcXVlc3RfZW5xdWV1ZV9kZXNjKHN0cnVjdCBmc2xfcWRtYV9xdWV1ZSAqcXVldWUpCj4gK3sK PiArCXN0cnVjdCBmc2xfcWRtYV9jb21wICpjb21wX3RlbXA7Cj4gKwlpbnQgaTsKPiArCj4gKwlm b3IgKGkgPSAwOyBpIDwgcXVldWUtPm5fY3E7IGkrKykgewo+ICsJCWNvbXBfdGVtcCA9IGt6YWxs b2Moc2l6ZW9mKCpjb21wX3RlbXApLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIWNvbXBfdGVtcCkK PiArCQkJcmV0dXJuIC1FTk9NRU07Cgp3aGVyZSBpcyB0aGUgcHJldmlvdXMgYWxsb2NhdGlvbnMg ZnJlZWQ/IFJldHVybiBvZiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBldmVuCmNoZWNrZWQ/PwoKPiAr CQljb21wX3RlbXAtPnZpcnRfYWRkciA9IGRtYV9wb29sX2FsbG9jKHF1ZXVlLT5jb21wX3Bvb2ws Cj4gKwkJCQkJCSAgICAgIEdGUF9LRVJORUwsCj4gKwkJCQkJCSAgICAgICZjb21wX3RlbXAtPmJ1 c19hZGRyKTsKPiArCQlpZiAoIWNvbXBfdGVtcC0+dmlydF9hZGRyKQo+ICsJCQlyZXR1cm4gLUVO T01FTTsKCmFuZCBoZXJlIHRvbwo+ICsJCWxpc3RfYWRkX3RhaWwoJmNvbXBfdGVtcC0+bGlzdCwg JnF1ZXVlLT5jb21wX2ZyZWUpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsv Kgo+ICsgKiBSZXF1ZXN0IGEgY29tbWFuZCBkZXNjcmlwdG9yIGZvciBlbnF1ZXVlLgo+ICsgKi8K PiArc3RhdGljIHN0cnVjdCBmc2xfcWRtYV9jb21wICpmc2xfcWRtYV9yZXF1ZXN0X2VucXVldWVf ZGVzYygKPiArCQkJCQlzdHJ1Y3QgZnNsX3FkbWFfY2hhbiAqZnNsX2NoYW4sCj4gKwkJCQkJdW5z aWduZWQgaW50IGRzdF9uZW50cywKPiArCQkJCQl1bnNpZ25lZCBpbnQgc3JjX25lbnRzKQo+ICt7 Cj4gKwlzdHJ1Y3QgZnNsX3FkbWFfY29tcCAqY29tcF90ZW1wOwo+ICsJc3RydWN0IGZzbF9xZG1h X3NnICpzZ19ibG9jazsKPiArCXN0cnVjdCBmc2xfcWRtYV9xdWV1ZSAqcXVldWUgPSBmc2xfY2hh bi0+cXVldWU7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJdW5zaWduZWQgaW50IGRzdF9z Z19lbnRyeV9ibG9jaywgc3JjX3NnX2VudHJ5X2Jsb2NrLCBzZ19lbnRyeV90b3RhbCwgaTsKPiAr Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKPiArCWlm IChsaXN0X2VtcHR5KCZxdWV1ZS0+Y29tcF9mcmVlKSkgewo+ICsJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnF1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Cj4gKwkJY29tcF90ZW1wID0ga3phbGxv YyhzaXplb2YoKmNvbXBfdGVtcCksIEdGUF9LRVJORUwpOwo+ICsJCWlmICghY29tcF90ZW1wKQo+ ICsJCQlyZXR1cm4gTlVMTDsKPiArCQljb21wX3RlbXAtPnZpcnRfYWRkciA9IGRtYV9wb29sX2Fs bG9jKHF1ZXVlLT5jb21wX3Bvb2wsCj4gKwkJCQkJCSAgICAgIEdGUF9LRVJORUwsCj4gKwkJCQkJ CSAgICAgICZjb21wX3RlbXAtPmJ1c19hZGRyKTsKPiArCQlpZiAoIWNvbXBfdGVtcC0+dmlydF9h ZGRyKSB7Cj4gKwkJCWtmcmVlKGNvbXBfdGVtcCk7Cj4gKwkJCXJldHVybiBOVUxMOwo+ICsJCX0K PiArCj4gKwl9IGVsc2Ugewo+ICsJCWNvbXBfdGVtcCA9IGxpc3RfZmlyc3RfZW50cnkoJnF1ZXVl LT5jb21wX2ZyZWUsCj4gKwkJCQkJICAgICBzdHJ1Y3QgZnNsX3FkbWFfY29tcCwKPiArCQkJCQkg ICAgIGxpc3QpOwo+ICsJCWxpc3RfZGVsKCZjb21wX3RlbXAtPmxpc3QpOwo+ICsJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Cj4gKwl9Cj4gKwo+ICsJ aWYgKGRzdF9uZW50cyAhPSAwKQo+ICsJCWRzdF9zZ19lbnRyeV9ibG9jayA9IGRzdF9uZW50cyAv Cj4gKwkJCQkJKEZTTF9RRE1BX0VYUEVDVF9TR19FTlRSWV9OVU0gLSAxKSArIDE7CgpESVZfUk9V TkRfVVAoKT8KCj4gKwllbHNlCj4gKwkJZHN0X3NnX2VudHJ5X2Jsb2NrID0gMDsKPiArCj4gKwlp ZiAoc3JjX25lbnRzICE9IDApCj4gKwkJc3JjX3NnX2VudHJ5X2Jsb2NrID0gc3JjX25lbnRzIC8K PiArCQkJCQkoRlNMX1FETUFfRVhQRUNUX1NHX0VOVFJZX05VTSAtIDEpICsgMTsKPiArCWVsc2UK PiArCQlzcmNfc2dfZW50cnlfYmxvY2sgPSAwOwo+ICsKPiArCXNnX2VudHJ5X3RvdGFsID0gZHN0 X3NnX2VudHJ5X2Jsb2NrICsgc3JjX3NnX2VudHJ5X2Jsb2NrOwo+ICsJaWYgKHNnX2VudHJ5X3Rv dGFsKSB7Cj4gKwkJc2dfYmxvY2sgPSBremFsbG9jKHNpemVvZigqc2dfYmxvY2spICoKPiArCQkJ CQkgICAgICBzZ19lbnRyeV90b3RhbCwKPiArCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKCmtjYWxs b2M/Cgo+ICsJCWlmICghc2dfYmxvY2spIHsKPiArCQkJZG1hX3Bvb2xfZnJlZShxdWV1ZS0+Y29t cF9wb29sLAo+ICsJCQkJCWNvbXBfdGVtcC0+dmlydF9hZGRyLAo+ICsJCQkJCWNvbXBfdGVtcC0+ YnVzX2FkZHIpOwo+ICsJCQlyZXR1cm4gTlVMTDsKPiArCQl9Cj4gKwkJY29tcF90ZW1wLT5zZ19i bG9jayA9IHNnX2Jsb2NrOwo+ICsJCWZvciAoaSA9IDA7IGkgPCBzZ19lbnRyeV90b3RhbDsgaSsr KSB7Cj4gKwkJCXNnX2Jsb2NrLT52aXJ0X2FkZHIgPSBkbWFfcG9vbF9hbGxvYyhxdWV1ZS0+c2df cG9vbCwKPiArCQkJCQkJCUdGUF9LRVJORUwsCj4gKwkJCQkJCQkmc2dfYmxvY2stPmJ1c19hZGRy KTsKCm5vIGNoZWNrIGlmIHRoaXMgc3VjY2VlZGVkPwoKPiArCQkJbWVtc2V0KHNnX2Jsb2NrLT52 aXJ0X2FkZHIsIDAsCj4gKwkJCQkJRlNMX1FETUFfRVhQRUNUX1NHX0VOVFJZX05VTSAqIDE2KTsK CndoeSBGU0xfUURNQV9FWFBFQ1RfU0dfRU5UUllfTlVNICogMTY/IGFuZCBub3Qgd2hhdCB5b3Ug YWxsb2NhdGVkPwoKPiArc3RhdGljIHN0cnVjdCBmc2xfcWRtYV9xdWV1ZSAqZnNsX3FkbWFfYWxs b2NfcXVldWVfcmVzb3VyY2VzKAo+ICsJCQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs Cj4gKwkJCQkJdW5zaWduZWQgaW50IHF1ZXVlX251bSkKPiArewo+ICsJc3RydWN0IGZzbF9xZG1h X3F1ZXVlICpxdWV1ZV9oZWFkLCAqcXVldWVfdGVtcDsKPiArCWludCByZXQsIGxlbiwgaTsKPiAr CXVuc2lnbmVkIGludCBxdWV1ZV9zaXplW0ZTTF9RRE1BX1FVRVVFX01BWF07Cj4gKwo+ICsJaWYg KHF1ZXVlX251bSA+IEZTTF9RRE1BX1FVRVVFX01BWCkKPiArCQlxdWV1ZV9udW0gPSBGU0xfUURN QV9RVUVVRV9NQVg7Cj4gKwlsZW4gPSBzaXplb2YoKnF1ZXVlX2hlYWQpICogcXVldWVfbnVtOwo+ ICsJcXVldWVfaGVhZCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBsZW4sIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFxdWV1ZV9oZWFkKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCXJldCA9IGRl dmljZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheSgmcGRldi0+ZGV2LCAicXVldWUtc2l6ZXMiLAo+ ICsJCQkJCXF1ZXVlX3NpemUsIHF1ZXVlX251bSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IHF1ZXVlLXNpemVzLlxuIik7Cj4gKwkJcmV0dXJuIE5V TEw7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHF1ZXVlX251bTsgaSsrKSB7Cj4gKwkJ aWYgKHF1ZXVlX3NpemVbaV0gPiBGU0xfUURNQV9DSVJDVUxBUl9ERVNDX1NJWkVfTUFYCj4gKwkJ CXx8IHF1ZXVlX3NpemVbaV0gPCBGU0xfUURNQV9DSVJDVUxBUl9ERVNDX1NJWkVfTUlOKSB7Cj4g KwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkdldCB3cm9uZyBxdWV1ZS1zaXplcy5cbiIpOwo+ICsJ CQlyZXR1cm4gTlVMTDsKPiArCQl9Cj4gKwkJcXVldWVfdGVtcCA9IHF1ZXVlX2hlYWQgKyBpOwo+ ICsJCXF1ZXVlX3RlbXAtPmNxID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsCj4gKwkJ CQkJCXNpemVvZihzdHJ1Y3QgZnNsX3FkbWFfZm9ybWF0KSAqCj4gKwkJCQkJCXF1ZXVlX3NpemVb aV0sCj4gKwkJCQkJCSZxdWV1ZV90ZW1wLT5idXNfYWRkciwKPiArCQkJCQkJR0ZQX0tFUk5FTCk7 Cj4gKwkJaWYgKCFxdWV1ZV90ZW1wLT5jcSkKPiArCQkJcmV0dXJuIE5VTEw7Cj4gKwkJcXVldWVf dGVtcC0+bl9jcSA9IHF1ZXVlX3NpemVbaV07Cj4gKwkJcXVldWVfdGVtcC0+aWQgPSBpOwo+ICsJ CXF1ZXVlX3RlbXAtPnZpcnRfaGVhZCA9IHF1ZXVlX3RlbXAtPmNxOwo+ICsJCXF1ZXVlX3RlbXAt PnZpcnRfdGFpbCA9IHF1ZXVlX3RlbXAtPmNxOwo+ICsJCS8qCj4gKwkJICogVGhlIGRtYSBwb29s IGZvciBxdWV1ZSBjb21tYW5kIGJ1ZmZlcgo+ICsJCSAqLwo+ICsJCXF1ZXVlX3RlbXAtPmNvbXBf cG9vbCA9IGRtYV9wb29sX2NyZWF0ZSgiY29tcF9wb29sIiwKPiArCQkJCQkJJnBkZXYtPmRldiwK PiArCQkJCQkJRlNMX1FETUFfQkFTRV9CVUZGRVJfU0laRSwKPiArCQkJCQkJMTYsIDApOwo+ICsJ CWlmICghcXVldWVfdGVtcC0+Y29tcF9wb29sKQo+ICsJCQlnb3RvIGVycl9mcmVlX2NvbXA7Cj4g Kwo+ICsJCS8qCj4gKwkJICogVGhlIGRtYSBwb29sIGZvciBxdWV1ZSBjb21tYW5kIGJ1ZmZlcgoK c2FtZSBjb21tZW50IGFzIHByZXY/Cgo+ICtzdGF0aWMgaW50IGZzbF9xZG1hX3F1ZXVlX3RyYW5z ZmVyX2NvbXBsZXRlKHN0cnVjdCBmc2xfcWRtYV9lbmdpbmUgKmZzbF9xZG1hKQo+ICt7Cj4gKwlz dHJ1Y3QgZnNsX3FkbWFfcXVldWUgKmZzbF9xdWV1ZSA9IGZzbF9xZG1hLT5xdWV1ZTsKPiArCXN0 cnVjdCBmc2xfcWRtYV9xdWV1ZSAqZnNsX3N0YXR1cyA9IGZzbF9xZG1hLT5zdGF0dXM7Cj4gKwlz dHJ1Y3QgZnNsX3FkbWFfcXVldWUgKnRlbXBfcXVldWU7Cj4gKwlzdHJ1Y3QgZnNsX3FkbWFfY29t cCAqZnNsX2NvbXA7Cj4gKwlzdHJ1Y3QgZnNsX3FkbWFfZm9ybWF0ICpzdGF0dXNfYWRkcjsKPiAr CXN0cnVjdCBmc2xfcWRtYV9mb3JtYXQgKmNzZ2Zfc3JjOwo+ICsJdm9pZCBfX2lvbWVtICpibG9j ayA9IGZzbF9xZG1hLT5ibG9ja19iYXNlOwo+ICsJdTMyIHJlZywgaTsKPiArCWJvb2wgZHVwbGlj YXRlLCBkdXBsaWNhdGVfaGFuZGxlOwo+ICsKPiArCXdoaWxlICgxKSB7Cj4gKwkJZHVwbGljYXRl ID0gMDsKPiArCQlkdXBsaWNhdGVfaGFuZGxlID0gMDsKPiArCQlyZWcgPSBxZG1hX3JlYWRsKGZz bF9xZG1hLCBibG9jayArIEZTTF9RRE1BX0JTUVNSKTsKPiArCQlpZiAocmVnICYgRlNMX1FETUFf QlNRU1JfUUUpCj4gKwkJCXJldHVybiAwOwo+ICsJCXN0YXR1c19hZGRyID0gZnNsX3N0YXR1cy0+ dmlydF9oZWFkOwo+ICsJCWlmIChxZG1hX2NjZGZfZ2V0X3F1ZXVlKHN0YXR1c19hZGRyKSA9PSBw cmVfcXVldWUgJiYKPiArCQkJcWRtYV9jY2RmX2FkZHJfZ2V0NjQoc3RhdHVzX2FkZHIpID09IHBy ZV9hZGRyKQo+ICsJCQlkdXBsaWNhdGUgPSAxOwo+ICsJCWkgPSBxZG1hX2NjZGZfZ2V0X3F1ZXVl KHN0YXR1c19hZGRyKTsKPiArCQlwcmVfcXVldWUgPSBxZG1hX2NjZGZfZ2V0X3F1ZXVlKHN0YXR1 c19hZGRyKTsKPiArCQlwcmVfYWRkciA9IHFkbWFfY2NkZl9hZGRyX2dldDY0KHN0YXR1c19hZGRy KTsKPiArCQl0ZW1wX3F1ZXVlID0gZnNsX3F1ZXVlICsgaTsKPiArCQlzcGluX2xvY2soJnRlbXBf cXVldWUtPnF1ZXVlX2xvY2spOwo+ICsJCWlmIChsaXN0X2VtcHR5KCZ0ZW1wX3F1ZXVlLT5jb21w X3VzZWQpKSB7Cj4gKwkJCWlmIChkdXBsaWNhdGUpCj4gKwkJCQlkdXBsaWNhdGVfaGFuZGxlID0g MTsKPiArCQkJZWxzZSB7Cj4gKwkJCQlzcGluX3VubG9jaygmdGVtcF9xdWV1ZS0+cXVldWVfbG9j ayk7Cj4gKwkJCQlyZXR1cm4gLTE7CgotMT8gcmVhbGx5LiBZb3UgYXJlIGluIHdoaWxlKDEpIHdv dWxkbid0IGJyZWFrIG1ha2Ugc2Vuc2UgaGVyZT8KCj4gK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMg ZnNsX3FkbWFfdHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKPiArCQlkbWFfY29va2ll X3QgY29va2llLCBzdHJ1Y3QgZG1hX3R4X3N0YXRlICp0eHN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZnNsX3FkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfcWRtYV9jaGFuKGNoYW4pOwoKd2h5IGRv IHlvdSBuZWVkIHRoaXMgaGVyZSwgaXRzIHVudXNlZAo=