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: [v3,2/4] dmaengine: fsl-edma: add fsl-edma-common From: Angelo Dureghello Message-Id: <20180612163455.GA12066@jerusalem> Date: Tue, 12 Jun 2018 18:34:56 +0200 To: dmaengine@vger.kernel.org, vkoul@kernel.org Cc: linux-m68k@vger.kernel.org List-ID: VGhpcyBwYXRjaCBhZGRzIGEgbmV3IGZzbC1lZG1hLWNvbW1vbiBtb2R1bGUgdG8gYWxsb3cgbmV3 Cm1jZi1lZG1hIG1vZHVsZSBjb2RlIHRvIHVzZSBtb3N0IG9mIHRoZSBmc2wtZWRtYSBjb2RlLgoK RHVlIHRvIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiBDb2xkRmlyZSBlZG1hICg2NCBjaGFubmVs cykgYW5kCmZzbC1lZG1hICgzMiBjaGFubmVscyksIGFzIHJlZ2lzdGVyIHNldCBvZmZzZXRzIGFu ZCBzb21lIG90aGVyCnBvaW50cyBhcyB0aGUgZGlmZmVyZW50IGludGVycnVwdCBvcmdhbml6YXRp b24gYW5kIG90aGVyIG1pbm9yCnRoaW5ncywgYSBjb21tb24gbW9kdWxlIGNhbiBjb2xsZWN0IG1v c3Qgb2YgdGhlIGNvZGUgZm9yIGJvdGgKMzIgYW5kIDY0IGNoYW5uZWwgZWRtYSBtb2R1bGUgdmVy c2lvbnMuCgpTaWduZWQtb2ZmLWJ5OiBBbmdlbG8gRHVyZWdoZWxsbyA8YW5nZWxvQHN5c2FtLml0 PgotLS0KQ2hhbmdlcyBmb3IgdjI6Ci0gcGF0Y2ggc3BsaXR0ZWQgaW50byA0Ci0gYWRkIGZzbC1l ZG1hLWNvbW1vbiBtb2R1bGUKCkNoYW5nZXMgZm9yIHYzOgpub25lCi0tLQogZHJpdmVycy9kbWEv ZnNsLWVkbWEtY29tbW9uLmMgfCA2NjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmggfCAxNzUgKysrKysrKysrCiAyIGZpbGVz IGNoYW5nZWQsIDgzNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9k bWEvZnNsLWVkbWEtY29tbW9uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wt ZWRtYS1jb21tb24uaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5j IGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi5jMjA1Y2IwN2YxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2RtYS9mc2wtZWRtYS1jb21tb24uYwpAQCAtMCwwICsxLDY2MiBAQAorLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IEZyZWVzY2Fs ZSBTZW1pY29uZHVjdG9yLCBJbmMKKy8vIENvcHlyaWdodCAoYykgMjAxNyBTeXNhbSwgQW5nZWxv IER1cmVnaGVsbG8gIDxhbmdlbG9Ac3lzYW0uaXQ+CisvKgorICogZHJpdmVycy9kbWEvZnNsLWVk bWEtY29tbW9uLmMKKyAqCisgKiBDb21tb24gY29kZSBmb3IgRnJlZXNjYWxlIHRoZSBlZG1hIDMy IG9yIDY0IGNoYW5uZWwgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9m IGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImZzbC1lZG1hLWNvbW1vbi5o IgorCisjZGVmaW5lIEVETUFfQ1IJCQkweDAwCisjZGVmaW5lIEVETUFfRVMJCQkweDA0CisjZGVm aW5lIEVETUFfRVJRCQkweDBDCisjZGVmaW5lIEVETUFfRUVJCQkweDE0CisjZGVmaW5lIEVETUFf Q0VFSQkJMHgxOAorI2RlZmluZSBFRE1BX1NFRUkJCTB4MTkKKyNkZWZpbmUgRURNQV9DRVJRCQkw eDFBCisjZGVmaW5lIEVETUFfU0VSUQkJMHgxQgorI2RlZmluZSBFRE1BX0NJTlQJCTB4MUYKKyNk ZWZpbmUgRURNQV9DRVJSCQkweDFFCisjZGVmaW5lIEVETUFfU1NSVAkJMHgxRAorI2RlZmluZSBF RE1BX0NETkUJCTB4MUMKKyNkZWZpbmUgRURNQV9JTlRSCQkweDI0CisjZGVmaW5lIEVETUFfRVJS CQkweDJDCisKKyNkZWZpbmUgRURNQTY0X0VSUUgJCTB4MDgKKyNkZWZpbmUgRURNQTY0X0VFSUgJ CTB4MTAKKyNkZWZpbmUgRURNQTY0X1NFUlEJCTB4MTgKKyNkZWZpbmUgRURNQTY0X0NFUlEJCTB4 MTkKKyNkZWZpbmUgRURNQTY0X1NFRUkJCTB4MWEKKyNkZWZpbmUgRURNQTY0X0NFRUkJCTB4MWIK KyNkZWZpbmUgRURNQTY0X0NJTlQJCTB4MWMKKyNkZWZpbmUgRURNQTY0X0NFUlIJCTB4MWQKKyNk ZWZpbmUgRURNQTY0X1NTUlQJCTB4MWUKKyNkZWZpbmUgRURNQTY0X0NETkUJCTB4MWYKKyNkZWZp bmUgRURNQTY0X0lOVEgJCTB4MjAKKyNkZWZpbmUgRURNQTY0X0lOVEwJCTB4MjQKKyNkZWZpbmUg RURNQTY0X0VSUkgJCTB4MjgKKyNkZWZpbmUgRURNQTY0X0VSUkwJCTB4MmMKKworI2RlZmluZSBF RE1BX1RDRAkJMHgxMDAwCisjZGVmaW5lIEVETUFfVENEX1NJWkUJCTMyCisjZGVmaW5lIEVETUFf VENEX01FTV9BTElHTglFRE1BX1RDRF9TSVpFCisKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0la RV84QklUCTAKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV8xNkJJVAlCSVQoMCkKKyNkZWZp bmUgRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVAlCSVQoMSkKKyNkZWZpbmUgRURNQV9UQ0RfQVRU Ul9TU0laRV82NEJJVAkoQklUKDEpIHwgQklUKDApKQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NT SVpFXzE2QllURQlCSVQoMikKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJZVEUJKEJJ VCgyKSB8IEJJVCgwKSkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV84QklUCShFRE1BX1RD RF9BVFRSX1NTSVpFXzhCSVQgPDwgOCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJJ VAkoRURNQV9UQ0RfQVRUUl9TU0laRV8xNkJJVCA8PCA4KQorI2RlZmluZSBFRE1BX1RDRF9BVFRS X0RTSVpFXzMyQklUCShFRE1BX1RDRF9BVFRSX1NTSVpFXzMyQklUIDw8IDgpCisjZGVmaW5lIEVE TUFfVENEX0FUVFJfRFNJWkVfNjRCSVQJKEVETUFfVENEX0FUVFJfU1NJWkVfNjRCSVQgPDwgOCkK KyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJZVEUJKEVETUFfVENEX0FUVFJfU1NJWkVf MTZCWVRFIDw8IDgpCisjZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfMzJCWVRFCShFRE1BX1RD RF9BVFRSX1NTSVpFXzMyQllURSA8PCA4KQorCisjZGVmaW5lIEVETUFfVENEX0NJVEVSX0NJVEVS KHgpCQkoKHgpICYgR0VOTUFTSygxNCwgMCkpCisjZGVmaW5lIEVETUFfVENEX0JJVEVSX0JJVEVS KHgpCQkoKHgpICYgR0VOTUFTSygxNCwgMCkpCisKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX1NUQVJU CQlCSVQoMCkKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX0lOVF9NQUpPUgkJQklUKDEpCisjZGVmaW5l IEVETUFfVENEX0NTUl9JTlRfSEFMRgkJQklUKDIpCisjZGVmaW5lIEVETUFfVENEX0NTUl9EX1JF UQkJQklUKDMpCisjZGVmaW5lIEVETUFfVENEX0NTUl9FX1NHCQlCSVQoNCkKKyNkZWZpbmUgRURN QV9UQ0RfQ1NSX0VfTElOSwkJQklUKDUpCisjZGVmaW5lIEVETUFfVENEX0NTUl9BQ1RJVkUJCUJJ VCg2KQorI2RlZmluZSBFRE1BX1RDRF9DU1JfRE9ORQkJQklUKDcpCisKK3N0cnVjdCBmc2xfZWRt YV9jaGFuICp0b19mc2xfZWRtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlyZXR1 cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBmc2xfZWRtYV9jaGFuLCB2Y2hhbi5jaGFuKTsK K30KKworc3RydWN0IGZzbF9lZG1hX2Rlc2MgKnRvX2ZzbF9lZG1hX2Rlc2Moc3RydWN0IHZpcnRf ZG1hX2Rlc2MgKnZkKQoreworCXJldHVybiBjb250YWluZXJfb2YodmQsIHN0cnVjdCBmc2xfZWRt YV9kZXNjLCB2ZGVzYyk7Cit9CisKKy8qCisgKiBSL1cgZnVuY3Rpb25zIGZvciBiaWctIG9yIGxp dHRsZS1lbmRpYW4gcmVnaXN0ZXJzOgorICogVGhlIGVETUEgY29udHJvbGxlcidzIGVuZGlhbiBp cyBpbmRlcGVuZGVudCBvZiB0aGUgQ1BVIGNvcmUncyBlbmRpYW4uCisgKiBGb3IgdGhlIGJpZy1l bmRpYW4gSVAgbW9kdWxlLCB0aGUgb2Zmc2V0IGZvciA4LWJpdCBvciAxNi1iaXQgcmVnaXN0ZXJz CisgKiBzaG91bGQgYWxzbyBiZSBzd2FwcGVkIG9wcG9zaXRlIHRvIHRoYXQgaW4gbGl0dGxlLWVu ZGlhbiBJUC4KKyAqLwordTMyIGVkbWFfcmVhZGwoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRt YSwKKwkJCXZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoZWRtYS0+YmlnX2VuZGlhbikKKwkJ cmV0dXJuIGlvcmVhZDMyYmUoYWRkcik7CisJZWxzZQorCQlyZXR1cm4gaW9yZWFkMzIoYWRkcik7 Cit9CisKK3ZvaWQgZWRtYV93cml0ZWIoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTgg dmFsLAorCQkJdm9pZCBfX2lvbWVtICphZGRyKQoreworCS8qIHN3YXAgdGhlIHJlZyBvZmZzZXQg Zm9yIHRoZXNlIGluIGJpZy1lbmRpYW4gbW9kZSAqLworCWlmIChlZG1hLT5iaWdfZW5kaWFuKQor CQlpb3dyaXRlOCh2YWwsICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpYWRkciBeIDB4 MykpOworCWVsc2UKKwkJaW93cml0ZTgodmFsLCBhZGRyKTsKK30KKwordm9pZCBlZG1hX3dyaXRl dyhzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1MTYgdmFsLAorCQkJdm9pZCBfX2lvbWVt ICphZGRyKQoreworCS8qIHN3YXAgdGhlIHJlZyBvZmZzZXQgZm9yIHRoZXNlIGluIGJpZy1lbmRp YW4gbW9kZSAqLworCWlmIChlZG1hLT5iaWdfZW5kaWFuKQorCQlpb3dyaXRlMTZiZSh2YWwsICh2 b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpYWRkciBeIDB4MikpOworCWVsc2UKKwkJaW93 cml0ZTE2KHZhbCwgYWRkcik7Cit9CisKK3ZvaWQgZWRtYV93cml0ZWwoc3RydWN0IGZzbF9lZG1h X2VuZ2luZSAqZWRtYSwgdTMyIHZhbCwKKwkJCXZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAo ZWRtYS0+YmlnX2VuZGlhbikKKwkJaW93cml0ZTMyYmUodmFsLCBhZGRyKTsKKwllbHNlCisJCWlv d3JpdGUzMih2YWwsIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCBmc2xfZWRtYV9maWxsX3RjZChz dHJ1Y3QgZnNsX2VkbWFfaHdfdGNkICp0Y2QsCisJCQl1MzIgc3JjLCB1MzIgZHN0LCB1MTYgYXR0 ciwgdTE2IHNvZmYsCisJCQl1MzIgbmJ5dGVzLCB1MzIgc2xhc3QsIHUxNiBjaXRlciwgdTE2IGJp dGVyLAorCQkJdTE2IGRvZmYsIHUzMiBkbGFzdF9zZ2EsIGJvb2wgbWFqb3JfaW50LAorCQkJYm9v bCBkaXNhYmxlX3JlcSwgYm9vbCBlbmFibGVfc2cpCit7CisJdTE2IGNzciA9IDA7CisKKwkvKgor CSAqIGVETUEgaGFyZHdhcmUgU0dzIHJlcXVpcmUgdGhlIFRDRHMgdG8gYmUgc3RvcmVkIGluIGxp dHRsZQorCSAqIGVuZGlhbiBmb3JtYXQgaXJyZXNwZWN0aXZlIG9mIHRoZSByZWdpc3RlciBlbmRp YW4gbW9kZWwuCisJICogU28gd2UgcHV0IHRoZSB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGluIG1l bW9yeSwgd2FpdGluZworCSAqIGZvciBmc2xfZWRtYV9zZXRfdGNkX3JlZ3MgZG9pbmcgdGhlIHN3 YXAuCisJICovCisJdGNkLT5zYWRkciA9IGNwdV90b19sZTMyKHNyYyk7CisJdGNkLT5kYWRkciA9 IGNwdV90b19sZTMyKGRzdCk7CisJdGNkLT5hdHRyID0gY3B1X3RvX2xlMTYoYXR0cik7CisJdGNk LT5zb2ZmID0gY3B1X3RvX2xlMTYoc29mZik7CisJdGNkLT5uYnl0ZXMgPSBjcHVfdG9fbGUzMihu Ynl0ZXMpOworCXRjZC0+c2xhc3QgPSBjcHVfdG9fbGUzMihzbGFzdCk7CisJdGNkLT5jaXRlciA9 IGNwdV90b19sZTE2KEVETUFfVENEX0NJVEVSX0NJVEVSKGNpdGVyKSk7CisJdGNkLT5kb2ZmID0g Y3B1X3RvX2xlMTYoZG9mZik7CisJdGNkLT5kbGFzdF9zZ2EgPSBjcHVfdG9fbGUzMihkbGFzdF9z Z2EpOworCXRjZC0+Yml0ZXIgPSBjcHVfdG9fbGUxNihFRE1BX1RDRF9CSVRFUl9CSVRFUihiaXRl cikpOworCisJaWYgKG1ham9yX2ludCkKKwkJY3NyIHw9IEVETUFfVENEX0NTUl9JTlRfTUFKT1I7 CisJaWYgKGRpc2FibGVfcmVxKQorCQljc3IgfD0gRURNQV9UQ0RfQ1NSX0RfUkVROworCWlmIChl bmFibGVfc2cpCisJCWNzciB8PSBFRE1BX1RDRF9DU1JfRV9TRzsKKworCXRjZC0+Y3NyID0gY3B1 X3RvX2xlMTYoY3NyKTsKK30KKwordm9pZCBmc2xfZWRtYV9lbmFibGVfcmVxdWVzdChzdHJ1Y3Qg ZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJc3RydWN0IGVkbWFfcmVncyAqcmVncyA9ICZm c2xfY2hhbi0+ZWRtYS0+cmVnczsKKwl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFu X2lkOworCisJaWYgKGZzbF9jaGFuLT5lZG1hLT52ZXJzaW9uID09IHYxKSB7CisJCWVkbWFfd3Jp dGViKGZzbF9jaGFuLT5lZG1hLCBFRE1BX1NFRUlfU0VFSShjaCksIHJlZ3MtPnNlZWkpOworCQll ZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgY2gsIHJlZ3MtPnNlcnEpOworCX0gZWxzZSB7CisJ CS8qIENvbGRGaXJlIGlzIGJpZyBlbmRpYW4sIGFuZCBhY2Nlc3NlcyBuYXRpdmVseQorCQkgKiBi aWcgZW5kaWFuIEkvTyBwZXJpcGhlcmFscworCQkgKi8KKwkJaW93cml0ZTgoRURNQV9TRUVJX1NF RUkoY2gpLCByZWdzLT5zZWVpKTsKKwkJaW93cml0ZTgoY2gsIHJlZ3MtPnNlcnEpOworCX0KK30K Kwordm9pZCBmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZz bF9jaGFuKQoreworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmZnNsX2NoYW4tPmVkbWEtPnJl Z3M7CisJdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsKKworCWlmIChmc2xf Y2hhbi0+ZWRtYS0+dmVyc2lvbiA9PSB2MSkgeworCQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRt YSwgY2gsIHJlZ3MtPmNlcnEpOworCQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9D RUVJX0NFRUkoY2gpLCByZWdzLT5jZWVpKTsKKwl9IGVsc2UgeworCQkvKiBDb2xkRmlyZSBpcyBi aWcgZW5kaWFuLCBhbmQgYWNjZXNzZXMgbmF0aXZlbHkKKwkJICogYmlnIGVuZGlhbiBJL08gcGVy aXBoZXJhbHMKKwkJICovCisJCWlvd3JpdGU4KGNoLCByZWdzLT5jZXJxKTsKKwkJaW93cml0ZTgo RURNQV9DRUVJX0NFRUkoY2gpLCByZWdzLT5jZWVpKTsKKwl9Cit9CisKK3ZvaWQgZnNsX2VkbWFf Y2xlYW51cF92Y2hhbihzdHJ1Y3QgZG1hX2RldmljZSAqZG1hZGV2KQoreworCXN0cnVjdCBmc2xf ZWRtYV9jaGFuICpjaGFuLCAqX2NoYW47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hh biwgX2NoYW4sCisJCQkJJmRtYWRldi0+Y2hhbm5lbHMsIHZjaGFuLmNoYW4uZGV2aWNlX25vZGUp IHsKKwkJbGlzdF9kZWwoJmNoYW4tPnZjaGFuLmNoYW4uZGV2aWNlX25vZGUpOworCQl0YXNrbGV0 X2tpbGwoJmNoYW4tPnZjaGFuLnRhc2spOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBm c2xfZWRtYV9nZXRfdGNkX2F0dHIoZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggYWRkcl93aWR0aCkK K3sKKwlzd2l0Y2ggKGFkZHJfd2lkdGgpIHsKKwljYXNlIDE6CisJCXJldHVybiBFRE1BX1RDRF9B VFRSX1NTSVpFXzhCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzhCSVQ7CisJY2FzZSAyOgorCQly ZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV8xNkJJVCB8IEVETUFfVENEX0FUVFJfRFNJWkVfMTZC SVQ7CisJY2FzZSA0OgorCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVCB8IEVETUFf VENEX0FUVFJfRFNJWkVfMzJCSVQ7CisJY2FzZSA4OgorCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9T U0laRV82NEJJVCB8IEVETUFfVENEX0FUVFJfRFNJWkVfNjRCSVQ7CisJZGVmYXVsdDoKKwkJcmV0 dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfMzJCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQklU OworCX0KK30KKworc3RhdGljIHN0cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZWRtYV9hbGxvY19k ZXNjKHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiwKKwkJaW50IHNnX2xlbikKK3sKKwlz dHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2Rlc2M7CisJaW50IGk7CisKKwlmc2xfZGVzYyA9IGt6 YWxsb2Moc2l6ZW9mKCpmc2xfZGVzYykgKworCQkJc2l6ZW9mKHN0cnVjdCBmc2xfZWRtYV9zd190 Y2QpICogc2dfbGVuLCBHRlBfTk9XQUlUKTsKKwlpZiAoIWZzbF9kZXNjKQorCQlyZXR1cm4gTlVM TDsKKworCWZzbF9kZXNjLT5lY2hhbiA9IGZzbF9jaGFuOworCWZzbF9kZXNjLT5uX3RjZHMgPSBz Z19sZW47CisJZm9yIChpID0gMDsgaSA8IHNnX2xlbjsgaSsrKSB7CisJCWZzbF9kZXNjLT50Y2Rb aV0udnRjZCA9IGRtYV9wb29sX2FsbG9jKGZzbF9jaGFuLT50Y2RfcG9vbCwKKwkJCQkJR0ZQX05P V0FJVCwgJmZzbF9kZXNjLT50Y2RbaV0ucHRjZCk7CisJCWlmICghZnNsX2Rlc2MtPnRjZFtpXS52 dGNkKQorCQkJZ290byBlcnI7CisJfQorCXJldHVybiBmc2xfZGVzYzsKKworZXJyOgorCXdoaWxl ICgtLWkgPj0gMCkKKwkJZG1hX3Bvb2xfZnJlZShmc2xfY2hhbi0+dGNkX3Bvb2wsIGZzbF9kZXNj LT50Y2RbaV0udnRjZCwKKwkJCQlmc2xfZGVzYy0+dGNkW2ldLnB0Y2QpOworCWtmcmVlKGZzbF9k ZXNjKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZnNsX2VkbWFfc2V0X3RjZF9y ZWdzKHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiwKKwkJCSAgIHN0cnVjdCBmc2xfZWRt YV9od190Y2QgKnRjZCkKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hID0gZnNsX2No YW4tPmVkbWE7CisJc3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqbXRjZCA9IGVkbWEtPnJlZ3MudGNk CisJCQkJCSsgZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsKKworCS8qCisJICogVENEIHBh cmFtZXRlcnMgYXJlIHN0b3JlZCBpbiBzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkIGluIGxpdHRsZQor CSAqIGVuZGlhbiBmb3JtYXQuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gbG9hZCB0aGUgVENEIHJlZ2lz dGVycyBpbgorCSAqIGJpZy0gb3IgbGl0dGxlLWVuZGlhbiBvYmV5aW5nIHRoZSBlRE1BIGVuZ2lu ZSBtb2RlbCBlbmRpYW4uCisJICovCisJZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNk LT5zYWRkciksICZtdGNkLT5zYWRkcik7CisJZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUo dGNkLT5kYWRkciksICZtdGNkLT5kYWRkcik7CisJZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19j cHUodGNkLT5hdHRyKSwgJm10Y2QtPmF0dHIpOworCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9f Y3B1KHRjZC0+c29mZiksICZtdGNkLT5zb2ZmKTsKKwllZG1hX3dyaXRlbChlZG1hLCBsZTMyX3Rv X2NwdSh0Y2QtPm5ieXRlcyksICZtdGNkLT5uYnl0ZXMpOworCWVkbWFfd3JpdGVsKGVkbWEsIGxl MzJfdG9fY3B1KHRjZC0+c2xhc3QpLCAmbXRjZC0+c2xhc3QpOworCWVkbWFfd3JpdGV3KGVkbWEs IGxlMTZfdG9fY3B1KHRjZC0+Y2l0ZXIpLCAmbXRjZC0+Y2l0ZXIpOworCWVkbWFfd3JpdGV3KGVk bWEsIGxlMTZfdG9fY3B1KHRjZC0+Yml0ZXIpLCAmbXRjZC0+Yml0ZXIpOworCWVkbWFfd3JpdGV3 KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+ZG9mZiksICZtdGNkLT5kb2ZmKTsKKwllZG1hX3dyaXRl bChlZG1hLCBsZTMyX3RvX2NwdSh0Y2QtPmRsYXN0X3NnYSksICZtdGNkLT5kbGFzdF9zZ2EpOwor CWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+Y3NyKSwgJm10Y2QtPmNzcik7Cit9 CisKK3N0YXRpYyBzaXplX3QgZnNsX2VkbWFfZGVzY19yZXNpZHVlKHN0cnVjdCBmc2xfZWRtYV9j aGFuICpmc2xfY2hhbiwKKwkJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjLCBib29sIGluX3By b2dyZXNzKQoreworCXN0cnVjdCBmc2xfZWRtYV9kZXNjICplZGVzYyA9IGZzbF9jaGFuLT5lZGVz YzsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9jaGFuLT5lZG1hLT5yZWdzOworCXUz MiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7CisJZW51bSBkbWFfdHJhbnNmZXJf ZGlyZWN0aW9uIGRpciA9IGZzbF9jaGFuLT5kaXI7CisJZG1hX2FkZHJfdCBjdXJfYWRkciwgZG1h X2FkZHI7CisJc2l6ZV90IGxlbiwgc2l6ZTsKKwlpbnQgaTsKKworCS8qIGNhbGN1bGF0ZSB0aGUg dG90YWwgc2l6ZSBpbiB0aGlzIGRlc2MgKi8KKwlmb3IgKGxlbiA9IGkgPSAwOyBpIDwgZnNsX2No YW4tPmVkZXNjLT5uX3RjZHM7IGkrKykKKwkJbGVuICs9IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2Rb aV0udnRjZC0+bmJ5dGVzKQorCQkJKiBsZTE2X3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmJp dGVyKTsKKworCWlmICghaW5fcHJvZ3Jlc3MpCisJCXJldHVybiBsZW47CisKKwlpZiAoZGlyID09 IERNQV9NRU1fVE9fREVWKQorCQljdXJfYWRkciA9IGVkbWFfcmVhZGwoZnNsX2NoYW4tPmVkbWEs ICZyZWdzLT50Y2RbY2hdLnNhZGRyKTsKKwllbHNlCisJCWN1cl9hZGRyID0gZWRtYV9yZWFkbChm c2xfY2hhbi0+ZWRtYSwgJnJlZ3MtPnRjZFtjaF0uZGFkZHIpOworCisJLyogZmlndXJlIG91dCB0 aGUgZmluaXNoZWQgYW5kIGNhbGN1bGF0ZSB0aGUgcmVzaWR1ZSAqLworCWZvciAoaSA9IDA7IGkg PCBmc2xfY2hhbi0+ZWRlc2MtPm5fdGNkczsgaSsrKSB7CisJCXNpemUgPSBsZTMyX3RvX2NwdShl ZGVzYy0+dGNkW2ldLnZ0Y2QtPm5ieXRlcykKKwkJCSogbGUxNl90b19jcHUoZWRlc2MtPnRjZFtp XS52dGNkLT5iaXRlcik7CisJCWlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpCisJCQlkbWFfYWRk ciA9IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+c2FkZHIpOworCQllbHNlCisJCQlk bWFfYWRkciA9IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+ZGFkZHIpOworCisJCWxl biAtPSBzaXplOworCQlpZiAoY3VyX2FkZHIgPj0gZG1hX2FkZHIgJiYgY3VyX2FkZHIgPCBkbWFf YWRkciArIHNpemUpIHsKKwkJCWxlbiArPSBkbWFfYWRkciArIHNpemUgLSBjdXJfYWRkcjsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGxlbjsKK30KKwordm9pZCBmc2xfZWRtYV9mcmVl X2Rlc2Moc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjKQoreworCXN0cnVjdCBmc2xfZWRtYV9k ZXNjICptY2ZfZGVzYzsKKwlpbnQgaTsKKworCW1jZl9kZXNjID0gdG9fZnNsX2VkbWFfZGVzYyh2 ZGVzYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWNmX2Rlc2MtPm5fdGNkczsgaSsrKQorCQlkbWFf cG9vbF9mcmVlKG1jZl9kZXNjLT5lY2hhbi0+dGNkX3Bvb2wsIG1jZl9kZXNjLT50Y2RbaV0udnRj ZCwKKwkJCQltY2ZfZGVzYy0+dGNkW2ldLnB0Y2QpOworCWtmcmVlKG1jZl9kZXNjKTsKK30KKwor aW50IGZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikK K3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqbWNmX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNo YW4pOworCisJbWNmX2NoYW4tPnRjZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJ0Y2RfcG9vbCIs IGNoYW4tPmRldmljZS0+ZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCBmc2xfZWRtYV9od190Y2QpLCBF RE1BX1RDRF9NRU1fQUxJR04sIDApOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZnNsX2VkbWFf ZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGZz bF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChoZWFkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZm c2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCWZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdChm c2xfY2hhbik7CisJZnNsX2NoYW4tPmVkZXNjID0gTlVMTDsKKwl2Y2hhbl9nZXRfYWxsX2Rlc2Ny aXB0b3JzKCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCisJdmNoYW5fZG1hX2Rlc2NfZnJlZV9s aXN0KCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKKwlkbWFfcG9vbF9kZXN0cm95KGZzbF9jaGFu LT50Y2RfcG9vbCk7CisJZnNsX2NoYW4tPnRjZF9wb29sID0gTlVMTDsKK30KKworaW50IGZzbF9l ZG1hX3NsYXZlX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkgIHN0cnVjdCBkbWFf c2xhdmVfY29uZmlnICpjb25maWcpCit7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFu ID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKKworCW1lbWNweSgmZnNsX2NoYW4tPmNmZywgY29u ZmlnLCBzaXplb2YoKmNvbmZpZykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkbWFfYXN5 bmNfdHhfZGVzY3JpcHRvciAqZnNsX2VkbWFfcHJlcF9kbWFfY3ljbGljKAorCQlzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBidWZfbGVuLAorCQlzaXpl X3QgcGVyaW9kX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ dW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4g PSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZGVz YzsKKwlkbWFfYWRkcl90IGRtYV9idWZfbmV4dDsKKwlpbnQgc2dfbGVuLCBpOworCXUzMiBzcmNf YWRkciwgZHN0X2FkZHIsIGxhc3Rfc2csIG5ieXRlcywgYXR0cjsKKwl1MTYgc29mZiwgZG9mZiwg aXRlcjsKKworCWlmICghaXNfc2xhdmVfZGlyZWN0aW9uKGRpcmVjdGlvbikpCisJCXJldHVybiBO VUxMOworCisJc2dfbGVuID0gYnVmX2xlbiAvIHBlcmlvZF9sZW47CisJZnNsX2Rlc2MgPSBmc2xf ZWRtYV9hbGxvY19kZXNjKGZzbF9jaGFuLCBzZ19sZW4pOworCWlmICghZnNsX2Rlc2MpCisJCXJl dHVybiBOVUxMOworCisJZnNsX2Rlc2MtPmlzY3ljbGljID0gdHJ1ZTsKKwlmc2xfY2hhbi0+ZGly ID0gZGlyZWN0aW9uOworCisJZG1hX2J1Zl9uZXh0ID0gZG1hX2FkZHI7CisKKwlmb3IgKGkgPSAw OyBpIDwgc2dfbGVuOyBpKyspIHsKKwkJaWYgKGRtYV9idWZfbmV4dCA+PSBkbWFfYWRkciArIGJ1 Zl9sZW4pCisJCQlkbWFfYnVmX25leHQgPSBkbWFfYWRkcjsKKworCQkvKiBnZXQgbmV4dCBzZydz IHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJbGFzdF9zZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAxKSAl IHNnX2xlbl0ucHRjZDsKKworCQlpZiAoZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7CisJ CQluYnl0ZXMgPSBmc2xfY2hhbi0+Y2ZnLmRzdF9hZGRyX3dpZHRoICoKKwkJCQkgZnNsX2NoYW4t PmNmZy5kc3RfbWF4YnVyc3Q7CisJCQlzcmNfYWRkciA9IGRtYV9idWZfbmV4dDsKKwkJCWRzdF9h ZGRyID0gZnNsX2NoYW4tPmNmZy5kc3RfYWRkcjsKKwkJCXNvZmYgPSBmc2xfY2hhbi0+Y2ZnLmRz dF9hZGRyX3dpZHRoOworCQkJZG9mZiA9IDA7CisJCQlhdHRyID0gZnNsX2VkbWFfZ2V0X3RjZF9h dHRyKAorCQkJCWZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGgpOworCQl9IGVsc2UgeworCQkJ bmJ5dGVzID0gZnNsX2NoYW4tPmNmZy5zcmNfYWRkcl93aWR0aCAqCisJCQkJIGZzbF9jaGFuLT5j Zmcuc3JjX21heGJ1cnN0OworCQkJc3JjX2FkZHIgPSAgZnNsX2NoYW4tPmNmZy5zcmNfYWRkcjsK KwkJCWRzdF9hZGRyID0gZG1hX2J1Zl9uZXh0OworCQkJc29mZiA9IDA7CisJCQlkb2ZmID0gZnNs X2NoYW4tPmNmZy5zcmNfYWRkcl93aWR0aDsKKwkJCWF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0 dHIoCisJCQkJZnNsX2NoYW4tPmNmZy5zcmNfYWRkcl93aWR0aCk7CisJCX0KKworCQlpdGVyID0g cGVyaW9kX2xlbiAvIG5ieXRlczsKKworCQlmc2xfZWRtYV9maWxsX3RjZChmc2xfZGVzYy0+dGNk W2ldLnZ0Y2QsCisJCQkJICBzcmNfYWRkciwgZHN0X2FkZHIsCisJCQkJICBhdHRyLCBzb2ZmLCBu Ynl0ZXMsIDAsIGl0ZXIsCisJCQkJICBpdGVyLCBkb2ZmLCBsYXN0X3NnLCB0cnVlLCBmYWxzZSwg dHJ1ZSk7CisJCWRtYV9idWZfbmV4dCArPSBwZXJpb2RfbGVuOworCX0KKworCXJldHVybiB2Y2hh bl90eF9wcmVwKCZmc2xfY2hhbi0+dmNoYW4sICZmc2xfZGVzYy0+dmRlc2MsIGZsYWdzKTsKK30K Kworc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX3NsYXZlX3Nn KAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQl1 bnNpZ25lZCBpbnQgc2dfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9u LAorCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBmc2xf ZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGZz bF9lZG1hX2Rlc2MgKmZzbF9kZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdTMyIHNy Y19hZGRyLCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVzLCBhdHRyOworCXUxNiBzb2ZmLCBkb2Zm LCBpdGVyOworCWludCBpOworCisJaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZGlyZWN0aW9uKSkK KwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfZGVzYyA9IGZzbF9lZG1hX2FsbG9jX2Rlc2MoZnNsX2No YW4sIHNnX2xlbik7CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfZGVz Yy0+aXNjeWNsaWMgPSBmYWxzZTsKKwlmc2xfY2hhbi0+ZGlyID0gZGlyZWN0aW9uOworCisJZm9y X2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7CisJCS8qIGdldCBuZXh0IHNnJ3MgcGh5c2lj YWwgYWRkcmVzcyAqLworCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUgc2dfbGVu XS5wdGNkOworCisJCWlmIChkaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJCW5ieXRl cyA9IGZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGggKgorCQkJCSBmc2xfY2hhbi0+Y2ZnLmRz dF9tYXhidXJzdDsKKwkJCXNyY19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQkJZHN0X2Fk ZHIgPSBmc2xfY2hhbi0+Y2ZnLmRzdF9hZGRyOworCQkJc29mZiA9IGZzbF9jaGFuLT5jZmcuZHN0 X2FkZHJfd2lkdGg7CisJCQlkb2ZmID0gMDsKKwkJCWF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0 dHIoCisJCQkJCWZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGgpOworCisJCX0gZWxzZSB7CisJ CQluYnl0ZXMgPSBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoICoKKwkJCQkgZnNsX2NoYW4t PmNmZy5zcmNfbWF4YnVyc3Q7CisJCQlzcmNfYWRkciA9IGZzbF9jaGFuLT5jZmcuc3JjX2FkZHI7 CisJCQlkc3RfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCXNvZmYgPSAwOworCQkJZG9m ZiA9IGZzbF9jaGFuLT5jZmcuc3JjX2FkZHJfd2lkdGg7CisJCQlhdHRyID0gZnNsX2VkbWFfZ2V0 X3RjZF9hdHRyKAorCQkJCQlmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoKTsKKwkJfQorCisJ CWl0ZXIgPSBzZ19kbWFfbGVuKHNnKSAvIG5ieXRlczsKKworCQlpZiAoaSA8IHNnX2xlbiAtIDEp IHsKKwkJCWxhc3Rfc2cgPSBmc2xfZGVzYy0+dGNkWyhpICsgMSldLnB0Y2Q7CisJCQlmc2xfZWRt YV9maWxsX3RjZChmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QsCisJCQkJCSAgc3JjX2FkZHIsCisJCQkJ CSAgZHN0X2FkZHIsIGF0dHIsIHNvZmYsCisJCQkJCSAgbmJ5dGVzLCAwLCBpdGVyLCBpdGVyLCBk b2ZmLCBsYXN0X3NnLAorCQkJCQkgIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CisJCX0gZWxzZSB7CisJ CQlsYXN0X3NnID0gMDsKKwkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2RbaV0udnRj ZCwKKwkJCQkJICBzcmNfYWRkciwKKwkJCQkJICBkc3RfYWRkciwgYXR0ciwgc29mZiwKKwkJCQkJ ICBuYnl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rfc2csCisJCQkJCSAgdHJ1ZSwgdHJ1 ZSwgZmFsc2UpOworCQl9CisJfQorCisJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJmZzbF9jaGFuLT52 Y2hhbiwgJmZzbF9kZXNjLT52ZGVzYywgZmxhZ3MpOworfQorCitlbnVtIGRtYV9zdGF0dXMgZnNs X2VkbWFfdHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJZG1hX2Nvb2tpZV90IGNv b2tpZSwgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFf Y2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCXN0cnVjdCB2aXJ0X2Rt YV9kZXNjICp2ZGVzYzsKKwllbnVtIGRtYV9zdGF0dXMgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisKKwlzdGF0dXMgPSBkbWFfY29va2llX3N0YXR1cyhjaGFuLCBjb29raWUsIHR4c3Rh dGUpOworCWlmIChzdGF0dXMgPT0gRE1BX0NPTVBMRVRFKQorCQlyZXR1cm4gc3RhdHVzOworCisJ aWYgKCF0eHN0YXRlKQorCQlyZXR1cm4gZnNsX2NoYW4tPnN0YXR1czsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCXZkZXNjID0gdmNoYW5fZmlu ZF9kZXNjKCZmc2xfY2hhbi0+dmNoYW4sIGNvb2tpZSk7CisJaWYgKGZzbF9jaGFuLT5lZGVzYyAm JiBjb29raWUgPT0gZnNsX2NoYW4tPmVkZXNjLT52ZGVzYy50eC5jb29raWUpCisJCXR4c3RhdGUt PnJlc2lkdWUgPQorCQkJCWZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShmc2xfY2hhbiwgdmRlc2MsIHRy dWUpOworCWVsc2UgaWYgKHZkZXNjKQorCQl0eHN0YXRlLT5yZXNpZHVlID0KKwkJCQlmc2xfZWRt YV9kZXNjX3Jlc2lkdWUoZnNsX2NoYW4sIHZkZXNjLCBmYWxzZSk7CisJZWxzZQorCQl0eHN0YXRl LT5yZXNpZHVlID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hh bi5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZnNsX2NoYW4tPnN0YXR1czsKK30KKworaW50IGZz bF9lZG1hX3BhdXNlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFf Y2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdz KTsKKwlpZiAoZnNsX2NoYW4tPmVkZXNjKSB7CisJCWZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdChm c2xfY2hhbik7CisJCWZzbF9jaGFuLT5zdGF0dXMgPSBETUFfUEFVU0VEOworCQlmc2xfY2hhbi0+ aWRsZSA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hh bi5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBmc2xfZWRtYV9yZXN1bWUoc3Ry dWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9 IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCWlmIChmc2xfY2hh bi0+ZWRlc2MpIHsKKwkJZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3QoZnNsX2NoYW4pOworCQlmc2xf Y2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOworCQlmc2xfY2hhbi0+aWRsZSA9IGZhbHNl OworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxh Z3MpOworCXJldHVybiAwOworfQorCitpbnQgZnNsX2VkbWFfdGVybWluYXRlX2FsbChzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9f ZnNsX2VkbWFfY2hhbihjaGFuKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRCho ZWFkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3Mp OworCWZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdChmc2xfY2hhbik7CisJZnNsX2NoYW4tPmVkZXNj ID0gTlVMTDsKKwlmc2xfY2hhbi0+aWRsZSA9IHRydWU7CisJdmNoYW5fZ2V0X2FsbF9kZXNjcmlw dG9ycygmZnNsX2NoYW4tPnZjaGFuLCAmaGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwl2Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3Qo JmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOworCXJldHVybiAwOworfQorCit2b2lkIGZzbF9lZG1h X2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRt YV9jaGFuICptY2ZfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2ZfY2hhbi0+dmNoYW4ubG9jaywgZmxh Z3MpOworCisJaWYgKHZjaGFuX2lzc3VlX3BlbmRpbmcoJm1jZl9jaGFuLT52Y2hhbikgJiYgIW1j Zl9jaGFuLT5lZGVzYykKKwkJZnNsX2VkbWFfeGZlcl9kZXNjKG1jZl9jaGFuKTsKKworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJm1jZl9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Cit9CisKK3Zv aWQgZnNsX2VkbWFfeGZlcl9kZXNjKHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbikKK3sK KwlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmRlc2M7CisKKwl2ZGVzYyA9IHZjaGFuX25leHRfZGVz YygmZnNsX2NoYW4tPnZjaGFuKTsKKwlpZiAoIXZkZXNjKQorCQlyZXR1cm47CisJZnNsX2NoYW4t PmVkZXNjID0gdG9fZnNsX2VkbWFfZGVzYyh2ZGVzYyk7CisJZnNsX2VkbWFfc2V0X3RjZF9yZWdz KGZzbF9jaGFuLCBmc2xfY2hhbi0+ZWRlc2MtPnRjZFswXS52dGNkKTsKKwlmc2xfZWRtYV9lbmFi bGVfcmVxdWVzdChmc2xfY2hhbik7CisJZnNsX2NoYW4tPnN0YXR1cyA9IERNQV9JTl9QUk9HUkVT UzsKKwlmc2xfY2hhbi0+aWRsZSA9IGZhbHNlOworfQorCisvKgorICogT24gdGhlIDMyIGNoYW5u ZWxzIFZ5YnJpZC9tcGM1Nzd4IGVkbWEgdmVyc2lvbiAoaGVyZSBjYWxsZWQgInYxIiksCisgKiBy ZWdpc3RlciBvZmZzZXRzIGFyZSBkaWZmZXJlbnQgY29tcGFyZWQgdG8gQ29sZEZpcmUgbWNmNTQ0 MXggNjQgY2hhbm5lbHMKKyAqIGVkbWEgKGhlcmUgY2FsbGVkICJ2MiIpLgorICoKKyAqIFRoaXMg ZnVuY3Rpb24gc2V0cyB1cCByZWdpc3RlciBvZmZzZXRzIGFzIHBlciBwcm9wZXIgZGVjbGFyZWQg dmVyc2lvbgorICogc28gbXVzdCBiZSBjYWxsZWQgaW4geHh4X2VkbWFfcHJvYmUoKSBqdXN0IGFm dGVyIHNldHRpbmcgdGhlCisgKiBlZG1hICJ2ZXJzaW9uIiBhbmQgIm1lbWJhc2UiIGFwcHJvcHJp YXRlbHkuCisgKi8KK3ZvaWQgZnNsX2VkbWFfc2V0dXBfcmVncyhzdHJ1Y3QgZnNsX2VkbWFfZW5n aW5lICplZG1hKQoreworCWVkbWEtPnJlZ3MuY3IgPSBlZG1hLT5tZW1iYXNlICsgRURNQV9DUjsK KwllZG1hLT5yZWdzLmVzID0gZWRtYS0+bWVtYmFzZSArIEVETUFfRVM7CisJZWRtYS0+cmVncy5l cnFsID0gZWRtYS0+bWVtYmFzZSArIEVETUFfRVJROworCWVkbWEtPnJlZ3MuZWVpbCA9IGVkbWEt Pm1lbWJhc2UgKyBFRE1BX0VFSTsKKworCWVkbWEtPnJlZ3Muc2VycSA9IGVkbWEtPm1lbWJhc2Ug KyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFfU0VSUSA6IEVETUE2NF9TRVJRKTsK KwllZG1hLT5yZWdzLmNlcnEgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYx KSA/CisJCQlFRE1BX0NFUlEgOiBFRE1BNjRfQ0VSUSk7CisJZWRtYS0+cmVncy5zZWVpID0gZWRt YS0+bWVtYmFzZSArICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJRURNQV9TRUVJIDogRURN QTY0X1NFRUkpOworCWVkbWEtPnJlZ3MuY2VlaSA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZl cnNpb24gPT0gdjEpID8KKwkJCUVETUFfQ0VFSSA6IEVETUE2NF9DRUVJKTsKKwllZG1hLT5yZWdz LmNpbnQgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1B X0NJTlQgOiBFRE1BNjRfQ0lOVCk7CisJZWRtYS0+cmVncy5jZXJyID0gZWRtYS0+bWVtYmFzZSAr ICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJRURNQV9DRVJSIDogRURNQTY0X0NFUlIpOwor CWVkbWEtPnJlZ3Muc3NydCA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEp ID8KKwkJCUVETUFfU1NSVCA6IEVETUE2NF9TU1JUKTsKKwllZG1hLT5yZWdzLmNkbmUgPSBlZG1h LT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1BX0NETkUgOiBFRE1B NjRfQ0RORSk7CisJZWRtYS0+cmVncy5pbnRsID0gZWRtYS0+bWVtYmFzZSArICgoZWRtYS0+dmVy c2lvbiA9PSB2MSkgPworCQkJRURNQV9JTlRSIDogRURNQTY0X0lOVEwpOworCWVkbWEtPnJlZ3Mu ZXJybCA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFf RVJSIDogRURNQTY0X0VSUkwpOworCisJaWYgKGVkbWEtPnZlcnNpb24gPT0gdjIpIHsKKwkJZWRt YS0+cmVncy5lcnFoID0gZWRtYS0+bWVtYmFzZSArIEVETUE2NF9FUlFIOworCQllZG1hLT5yZWdz LmVlaWggPSBlZG1hLT5tZW1iYXNlICsgRURNQTY0X0VFSUg7CisJCWVkbWEtPnJlZ3MuZXJyaCA9 IGVkbWEtPm1lbWJhc2UgKyBFRE1BNjRfRVJSSDsKKwkJZWRtYS0+cmVncy5pbnRoID0gZWRtYS0+ bWVtYmFzZSArIEVETUE2NF9JTlRIOworCX0KKworCWVkbWEtPnJlZ3MudGNkID0gZWRtYS0+bWVt YmFzZSArIEVETUFfVENEOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29t bW9uLmggYi9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmU1NmY5ZTU5ZTUwYgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5oCkBAIC0wLDAgKzEsMTc1IEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIGRyaXZlcnMvZG1hL2ZzbC1lZG1h LWNvbW1vbi5jCisgKgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1 Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTggQW5nZWxvIER1cmVnaGVsbG8gPGFuZ2Vsb0Bz eXNhbS5pdD4KKyAqCisgKiBDb21tb24gY29kZSBmb3IgRnJlZXNjYWxlIHRoZSBlZG1hIDMyIG9y IDY0IGNoYW5uZWwgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFu eQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfRlNMX0VETUFfQ09NTU9OX0hfCisj ZGVmaW5lIF9GU0xfRURNQV9DT01NT05fSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisK KyNpbmNsdWRlICJ2aXJ0LWRtYS5oIgorCisjZGVmaW5lIERNQU1VWF9OUgkJMgorCisjZGVmaW5l IEVETUFfQ1JfRURCRwkJQklUKDEpCisjZGVmaW5lIEVETUFfQ1JfRVJDQQkJQklUKDIpCisjZGVm aW5lIEVETUFfQ1JfRVJHQQkJQklUKDMpCisjZGVmaW5lIEVETUFfQ1JfSE9FCQlCSVQoNCkKKyNk ZWZpbmUgRURNQV9DUl9IQUxUCQlCSVQoNSkKKyNkZWZpbmUgRURNQV9DUl9DTE0JCUJJVCg2KQor I2RlZmluZSBFRE1BX0NSX0VNTE0JCUJJVCg3KQorI2RlZmluZSBFRE1BX0NSX0VDWAkJQklUKDE2 KQorI2RlZmluZSBFRE1BX0NSX0NYCQlCSVQoMTcpCisKKyNkZWZpbmUgRURNQV9TRUVJX1NFRUko eCkJKCh4KSAmIEdFTk1BU0soNiwgMCkpCisjZGVmaW5lIEVETUFfQ0VFSV9DRUVJKHgpCSgoeCkg JiBHRU5NQVNLKDYsIDApKQorI2RlZmluZSBFRE1BX0NJTlRfQ0lOVCh4KQkoKHgpICYgR0VOTUFT Syg2LCAwKSkKKyNkZWZpbmUgRURNQV9DRVJSX0NFUlIoeCkJKCh4KSAmIEdFTk1BU0soNiwgMCkp CisKKyNkZWZpbmUgRlNMX0VETUFfQlVTV0lEVEhTCShCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFf QllURSkgfCBcCisJCQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUykgfCBcCisJCQkJ IEJJVChETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUykgfCBcCisJCQkJIEJJVChETUFfU0xBVkVf QlVTV0lEVEhfOF9CWVRFUykpCisKK2VudW0gZnNsX2VkbWFfcG1fc3RhdGUgeworCVJVTk5JTkcg PSAwLAorCVNVU1BFTkRFRCwKK307CisKKy8qCisgKiBUaGlzIGFyZSB0Y2QgcmVncywgZXF1YWwg Zm9yIGJvdGggdjMyIGFuZCB2NjQKKyAqLworc3RydWN0IGZzbF9lZG1hX2h3X3RjZCB7CisJX19s ZTMyCXNhZGRyOworCV9fbGUxNglzb2ZmOworCV9fbGUxNglhdHRyOworCV9fbGUzMgluYnl0ZXM7 CisJX19sZTMyCXNsYXN0OworCV9fbGUzMglkYWRkcjsKKwlfX2xlMTYJZG9mZjsKKwlfX2xlMTYJ Y2l0ZXI7CisJX19sZTMyCWRsYXN0X3NnYTsKKwlfX2xlMTYJY3NyOworCV9fbGUxNgliaXRlcjsK K307CisKKy8qCisgKiBUaGlzIGFyZSBpb21lbSBwb2ludGVycywgZm9yIGJvdGggdjMyIGFuZCB2 NjQuCisgKi8KK3N0cnVjdCBlZG1hX3JlZ3MgeworCXZvaWQgX19pb21lbSAqY3I7CisJdm9pZCBf X2lvbWVtICplczsKKwl2b2lkIF9faW9tZW0gKmVycTsKKwl2b2lkIF9faW9tZW0gKmVycWg7CisJ dm9pZCBfX2lvbWVtICplcnFsOwkvKiBha2EgZXJxIG9uIHYzMiAqLworCXZvaWQgX19pb21lbSAq ZWVpaDsKKwl2b2lkIF9faW9tZW0gKmVlaWw7CS8qIGFrYSBlZWkgb24gdjMyICovCisJdm9pZCBf X2lvbWVtICpzZWVpOworCXZvaWQgX19pb21lbSAqY2VlaTsKKwl2b2lkIF9faW9tZW0gKnNlcnE7 CisJdm9pZCBfX2lvbWVtICpjZXJxOworCXZvaWQgX19pb21lbSAqY2ludDsKKwl2b2lkIF9faW9t ZW0gKmNlcnI7CisJdm9pZCBfX2lvbWVtICpzc3J0OworCXZvaWQgX19pb21lbSAqY2RuZTsKKwl2 b2lkIF9faW9tZW0gKmludGg7CisJdm9pZCBfX2lvbWVtICppbnRsOworCXZvaWQgX19pb21lbSAq ZXJyaDsKKwl2b2lkIF9faW9tZW0gKmVycmw7CisJc3RydWN0IGZzbF9lZG1hX2h3X3RjZCBfX2lv bWVtICp0Y2Q7Cit9OworCitzdHJ1Y3QgZnNsX2VkbWFfc3dfdGNkIHsKKwlkbWFfYWRkcl90IHB0 Y2Q7CisJc3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqdnRjZDsKK307CisKK3N0cnVjdCBmc2xfZWRt YV9jaGFuIHsKKwlzdHJ1Y3QgdmlydF9kbWFfY2hhbiB2Y2hhbjsKKwllbnVtIGRtYV9zdGF0dXMg c3RhdHVzOworCWVudW0gZnNsX2VkbWFfcG1fc3RhdGUgcG1fc3RhdGU7CisJYm9vbCBpZGxlOwor CXUzMiBzbGF2ZV9pZDsKKwlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hOworCXN0cnVjdCBm c2xfZWRtYV9kZXNjICplZGVzYzsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnRjZF9wb29sOworCXN0cnVj dCBkbWFfc2xhdmVfY29uZmlnIGNmZzsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGly OworfTsKKworc3RydWN0IGZzbF9lZG1hX2Rlc2MgeworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjIHZk ZXNjOworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICplY2hhbjsKKwlib29sIGlzY3ljbGljOworCXVu c2lnbmVkIGludCBuX3RjZHM7CisJc3RydWN0IGZzbF9lZG1hX3N3X3RjZCB0Y2RbXTsKK307CisK K2VudW0gZWRtYV92ZXJzaW9uIHsKKwl2MSwgLyogMzJjaCwgVnliZGlyLCBtcGM1N3gsIGV0YyAq LworCXYyLCAvKiA2NGNoIENvbGRmaXJlICovCit9OworCitzdHJ1Y3QgZnNsX2VkbWFfZW5naW5l IHsKKwlzdHJ1Y3QgZG1hX2RldmljZSBkbWFfZGV2OworCXN0cnVjdCBlZG1hX3JlZ3MgcmVnczsK Kwl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CisJdm9pZCBfX2lvbWVtICptdXhiYXNlW0RNQU1VWF9O Ul07CisJc3RydWN0IGNsayAqbXV4Y2xrW0RNQU1VWF9OUl07CisJc3RydWN0IG11dGV4IGZzbF9l ZG1hX211dGV4OworCXUzMiBuX2NoYW5zOworCWludCB0eGlycTsKKwlpbnQgZXJyaXJxOworCWJv b2wgYmlnX2VuZGlhbjsKKwllbnVtIGVkbWFfdmVyc2lvbiB2ZXJzaW9uOworCXN0cnVjdCBmc2xf ZWRtYV9jaGFuIGNoYW5zW107Cit9OworCit1MzIgZWRtYV9yZWFkbChzdHJ1Y3QgZnNsX2VkbWFf ZW5naW5lICplZG1hLCB2b2lkIF9faW9tZW0gKmFkZHIpOwordm9pZCBlZG1hX3dyaXRlYihzdHJ1 Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7Cit2 b2lkIGVkbWFfd3JpdGV3KHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEsIHUxNiB2YWwsIHZv aWQgX19pb21lbSAqYWRkcik7Cit2b2lkIGVkbWFfd3JpdGVsKHN0cnVjdCBmc2xfZWRtYV9lbmdp bmUgKmVkbWEsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7CitzdHJ1Y3QgZnNsX2VkbWFf Y2hhbiAqdG9fZnNsX2VkbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworc3RydWN0IGZz bF9lZG1hX2Rlc2MgKnRvX2ZzbF9lZG1hX2Rlc2Moc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkKTsK K3ZvaWQgZnNsX2VkbWFfc2V0dXBfcmVncyhzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hKTsK K3ZvaWQgZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xf Y2hhbik7Cit2b2lkIGZzbF9lZG1hX2ZyZWVfZGVzYyhzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmRl c2MpOwordm9pZCBmc2xfZWRtYV94ZmVyX2Rlc2Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9j aGFuKTsKK3ZvaWQgZnNsX2VkbWFfY2xlYW51cF92Y2hhbihzdHJ1Y3QgZG1hX2RldmljZSAqZG1h ZGV2KTsKKworLyogT3BlcmF0aW9ucyAqLworaW50IGZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3Vy Y2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7Cit2b2lkIGZzbF9lZG1hX2ZyZWVfY2hhbl9yZXNv dXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK2ludCBmc2xfZWRtYV9zbGF2ZV9jb25maWco c3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY29u ZmlnKTsKK3N0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNsX2VkbWFfcHJlcF9kbWFf Y3ljbGljKAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNp emVfdCBidWZfbGVuLAorCQlzaXplX3QgcGVyaW9kX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGly ZWN0aW9uIGRpcmVjdGlvbiwKKwkJdW5zaWduZWQgbG9uZyBmbGFncyk7CitzdHJ1Y3QgZG1hX2Fz eW5jX3R4X2Rlc2NyaXB0b3IgKmZzbF9lZG1hX3ByZXBfc2xhdmVfc2coCisJCXN0cnVjdCBkbWFf Y2hhbiAqY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCXVuc2lnbmVkIGludCBzZ19s ZW4sIGVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCXVuc2lnbmVkIGxv bmcgZmxhZ3MsIHZvaWQgKmNvbnRleHQpOworZW51bSBkbWFfc3RhdHVzIGZzbF9lZG1hX3R4X3N0 YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCWRtYV9jb29raWVfdCBjb29raWUsIHN0cnVj dCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUpOworaW50IGZzbF9lZG1hX3BhdXNlKHN0cnVjdCBkbWFf Y2hhbiAqY2hhbik7CitpbnQgZnNsX2VkbWFfcmVzdW1lKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7 CitpbnQgZnNsX2VkbWFfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOwordm9p ZCBmc2xfZWRtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisKKyNlbmRp ZiAvKiBfRlNMX0VETUFfQ09NTU9OX0hfICovCisK