From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igal.Liberman Subject: [PATCH 10/12] fsl/fman: Add FMan SP support Date: Wed, 10 Jun 2015 11:03:39 +0300 Message-ID: <1433923419-22582-1-git-send-email-igal.liberman@freescale.com> Reply-To: igal.liberman@freescale.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: scottwood@freescale.com, Igal Liberman , linuxppc-dev@lists.ozlabs.org, madalin.bucur@freescale.com To: Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: netdev.vger.kernel.org RnJvbTogSWdhbCBMaWJlcm1hbiA8SWdhbC5MaWJlcm1hbkBmcmVlc2NhbGUuY29tPgoKQWRkIFN0 b3JhZ2UgUHJvZmlsZXMgc3VwcG9ydC4KVGhlIFN0b3JhZ2UgUHJvZmlsZXMgY29udGFpbiBwYXJh bWV0ZXJzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIEZNYW4gaW4Kb3JkZXIgdG8gc3RvcmUgZnJhbWVz IGJlaW5nIHJlY2VpdmVkIG9uIHRoZSBSeCBwb3J0cywgb3IgdG8KZGV0ZXJtaW5lIHRoZSBwYXJh bWV0ZXJzIHRoYXQgYWZmZWN0IHdyaXRpbmcgdGhlIEludGVybmFsIENvbnRleHQKaW4gdGhlIGZy YW1lIG1hcmdpbiBvbiBUeC4KClNpZ25lZC1vZmYtYnk6IElnYWwgTGliZXJtYW4gPElnYWwuTGli ZXJtYW5AZnJlZXNjYWxlLmNvbT4KLS0tCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUv Zm1hbi9NYWtlZmlsZSAgICAgICB8ICAgIDIgKwogZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNj YWxlL2ZtYW4vZm1fc3BfY29tbW9uLmggfCAgMTA0ICsrKysrCiBkcml2ZXJzL25ldC9ldGhlcm5l dC9mcmVlc2NhbGUvZm1hbi9zcC9NYWtlZmlsZSAgICB8ICAgIDMgKwogZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vc3AvZm1fc3AuYyAgICAgfCAgMzk4ICsrKysrKysrKysrKysr KysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDUwNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fc3BfY29tbW9uLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9z cC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVz Y2FsZS9mbWFuL3NwL2ZtX3NwLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9m cmVlc2NhbGUvZm1hbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9m bWFuL01ha2VmaWxlCmluZGV4IGY2MWQzYTYuLmM2YzNlMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2V0 aGVybmV0L2ZyZWVzY2FsZS9mbWFuL01ha2VmaWxlCkBAIC04LDMgKzgsNSBAQCBmc2xfZm1hbi1v YmpzCTo9IGZtYW4ubyBmbV9tdXJhbS5vIGZtLm8gZm1fZHJ2Lm8KIAogb2JqLXkJKz0gcG9ydC8K IG9iai15CSs9IG1hYy8KK29iai15CSs9IHNwLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9l dGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9zcF9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVy bmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX3NwX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmE5OWQ3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9zcF9jb21tb24uaApAQCAtMCwwICsxLDEwNCBAQAorLyoK KyAqIENvcHlyaWdodCAyMDA4LTIwMTUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoK KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBT ZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMg bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4KKyAqCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUg ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9w dGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW RU5UIFNIQUxMIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorICovCisKKy8qIEZNIFNQICAuLi4gKi8KKyNpZm5kZWYgX19GTV9TUF9DT01NT05fSAor I2RlZmluZSBfX0ZNX1NQX0NPTU1PTl9ICisKKyNpbmNsdWRlICJzZXJ2aWNlLmgiCisjaW5jbHVk ZSAiZm1fZXh0LmgiCisjaW5jbHVkZSAiZnNsX2ZtYW4uaCIKKworLyogZGVmYXVsdHMgKi8KKyNk ZWZpbmUgREVGQVVMVF9GTV9TUF9CVUZGRVJfUFJFRklYX0NPTlRFTlRfUFJJVl9EQVRBX1NJWkUg ICAgICAwCisjZGVmaW5lIERFRkFVTFRfRk1fU1BfQlVGRkVSX1BSRUZJWF9DT05URU5UX1BSSVZf UEFTU19QUlNfUkVTVUxUICAgICBmYWxzZQorI2RlZmluZSBERUZBVUxUX0ZNX1NQX0JVRkZFUl9Q UkVGSVhfQ09OVEVYVF9QQVNTX1RJTUVfU1RBTVAgICAgIGZhbHNlCisjZGVmaW5lIERFRkFVTFRf Rk1fU1BfQlVGRkVSX1BSRUZJWF9DT05URVhUX0RBVEFfQUxJR04gICAgICAgICA2NAorCisvKiBz dHJ1Y3R1cmUgZm9yIGRlZmluaW5nIGludGVybmFsIGNvbnRleHQgY29weWluZyAqLworc3RydWN0 IGZtX3NwX2ludF9jb250ZXh0X2RhdGFfY29weV90IHsKKwkvKiA8IE9mZnNldCBpbiBFeHRlcm5h bCBidWZmZXIgdG8gd2hpY2ggaW50ZXJuYWwKKwkgKiAgY29udGV4dCBpcyBjb3BpZWQgdG8gKFJ4 KSBvciB0YWtlbiBmcm9tIChUeCwgT3ApLgorCSAqLworCXVpbnQxNl90IGV4dF9idWZfb2Zmc2V0 OworCS8qIE9mZnNldCB3aXRoaW4gaW50ZXJuYWwgY29udGV4dCB0byBjb3B5IGZyb20KKwkgKiAo UngpIG9yIHRvIGNvcHkgdG8gKFR4LCBPcCkuCisJICovCisJdWludDhfdCBpbnRfY29udGV4dF9v ZmZzZXQ7CisJLyogSW50ZXJuYWwgb2Zmc2V0IHNpemUgdG8gYmUgY29waWVkICovCisJdWludDE2 X3Qgc2l6ZTsKK307CisKKy8qICBzdHJ1Y3QgZm9yIGRlZmluaW5nIGV4dGVybmFsIGJ1ZmZlciBt YXJnaW5zICovCitzdHJ1Y3QgZm1fc3BfYnVmX21hcmdpbnNfdCB7CisJLyogTnVtYmVyIG9mIGJ5 dGVzIHRvIGJlIGxlZnQgYXQgdGhlIGJlZ2lubmluZworCSAqIG9mIHRoZSBleHRlcm5hbCBidWZm ZXIgKG11c3QgYmUgZGl2aXNpYmxlIGJ5IDE2KQorCSAqLworCXVpbnQxNl90IHN0YXJ0X21hcmdp bnM7CisJLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGxlZnQgYXQgdGhlIGVuZAorCSAqIG9mIHRo ZSBleHRlcm5hbCBidWZmZXIobXVzdCBiZSBkaXZpc2libGUgYnkgMTYpCisJICovCisJdWludDE2 X3QgZW5kX21hcmdpbnM7Cit9OworCitzdHJ1Y3QgZm1fc3BfYnVmZmVyX29mZnNldHNfdCB7CisJ dWludDMyX3QgZGF0YV9vZmZzZXQ7CisJdWludDMyX3QgcHJzX3Jlc3VsdF9vZmZzZXQ7CisJdWlu dDMyX3QgdGltZV9zdGFtcF9vZmZzZXQ7CisJdWludDMyX3QgaGFzaF9yZXN1bHRfb2Zmc2V0Owor fTsKKworaW50IGZtX3NwX2J1aWxkX2J1ZmZlcl9zdHJ1Y3R1cmUoc3RydWN0IGZtX3NwX2ludF9j b250ZXh0X2RhdGFfY29weV90CisJCQkJICpwX2ZtX3BvcnRfaW50X2NvbnRleHRfZGF0YV9jb3B5 LAorCQkJCSBzdHJ1Y3QgZm1fYnVmZmVyX3ByZWZpeF9jb250ZW50X3QKKwkJCQkgKnBfYnVmZmVy X3ByZWZpeF9jb250ZW50LAorCQkJCSBzdHJ1Y3QgZm1fc3BfYnVmX21hcmdpbnNfdAorCQkJCSAq cF9mbV9wb3J0X2J1Zl9tYXJnaW5zLAorCQkJCSBzdHJ1Y3QgZm1fc3BfYnVmZmVyX29mZnNldHNf dAorCQkJCSAqcF9mbV9wb3J0X2J1ZmZlcl9vZmZzZXRzLAorCQkJCSB1aW50OF90ICppbnRlcm5h bF9idWZfb2Zmc2V0KTsKKworaW50IGZtX3NwX2NoZWNrX2ludF9jb250ZXh0X3BhcmFtcyhzdHJ1 Y3QgZm1fc3BfaW50X2NvbnRleHRfZGF0YV9jb3B5X3QgKgorCQkJCSAgIHBfZm1fc3BfaW50X2Nv bnRleHRfZGF0YV9jb3B5KTsKK2ludCBmbV9zcF9jaGVja19idWZfcG9vbHNfcGFyYW1zKHN0cnVj dCBmbV9leHRfcG9vbHNfdCAqcF9mbV9leHRfcG9vbHMsCisJCQkJIHN0cnVjdCBmbV9iYWNrdXBf Ym1fcG9vbHNfdAorCQkJCSAqcF9mbV9iYWNrdXBfYm1fcG9vbHMsCisJCQkJIHN0cnVjdCBmbV9i dWZfcG9vbF9kZXBsZXRpb25fdAorCQkJCSAqcF9mbV9idWZfcG9vbF9kZXBsZXRpb24sCisJCQkJ IHVpbnQzMl90IG1heF9udW1fb2ZfZXh0X3Bvb2xzLAorCQkJCSB1aW50MzJfdCBibV9tYXhfbnVt X29mX3Bvb2xzKTsKK2ludCBmbV9zcF9jaGVja19idWZfbWFyZ2lucyhzdHJ1Y3QgZm1fc3BfYnVm X21hcmdpbnNfdCAqcF9mbV9zcF9idWZfbWFyZ2lucyk7Cit2b2lkIGZtX3NwX3NldF9idWZfcG9v bHNfaW5fYXNjX29yZGVyX29mX2J1Zl9zaXplcyhzdHJ1Y3QgZm1fZXh0X3Bvb2xzX3QKKwkJCQkJ CSAgICpwX2ZtX2V4dF9wb29scywKKwkJCQkJCSAgIHVpbnQ4X3QgKm9yZGVyZWRfYXJyYXksCisJ CQkJCQkgICB1aW50MTZfdCAqc2l6ZXNfYXJyYXkpOworI2VuZGlmIC8qIF9fRk1fU1BfQ09NTU9O X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL3Nw L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vc3AvTWFrZWZp bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1ZTY4NgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL3NwL01ha2VmaWxl CkBAIC0wLDAgKzEsMyBAQAorb2JqLSQoQ09ORklHX0ZTTF9GTUFOKQkrPSBmc2xfZm1hbl9zcC5v CisKK2ZzbF9mbWFuX3NwLW9ianMJOj0gZm1fc3AubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vc3AvZm1fc3AuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2ZyZWVzY2FsZS9mbWFuL3NwL2ZtX3NwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNjFiMGJkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Zy ZWVzY2FsZS9mbWFuL3NwL2ZtX3NwLmMKQEAgLTAsMCArMSwzOTggQEAKKy8qCisgKiBDb3B5cmln aHQgMjAwOCAtIDIwMTUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVj dG9yIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K KyAqCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0 ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug KCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg RnJlZXNjYWxlIFNlbWljb25kdWN0b3IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov CisKKy8qIEZNIFBDRCBTdG9yYWdlIHByb2ZpbGUgIC4uLiAqLworCisjaW5jbHVkZSAic2Vydmlj ZS5oIgorI2luY2x1ZGUgIm5ldF9leHQuaCIKKworI2luY2x1ZGUgImZtX3NwX2NvbW1vbi5oIgor I2luY2x1ZGUgImZtX2NvbW1vbi5oIgorI2luY2x1ZGUgImZzbF9mbWFuX3NwLmgiCisKKyNpbmNs dWRlIDxsaW51eC9zdHJpbmcuaD4KKworLyogSW50ZXItbW9kdWxlIEFQSSByb3V0aW5lcyAqLwor Cit2b2lkIGZtX3NwX3NldF9idWZfcG9vbHNfaW5fYXNjX29yZGVyX29mX2J1Zl9zaXplcyhzdHJ1 Y3QgZm1fZXh0X3Bvb2xzX3QKKwkJCQkJCSAgICpwX2ZtX2V4dF9wb29scywKKwkJCQkJCSAgIHVp bnQ4X3QgKm9yZGVyZWRfYXJyYXksCisJCQkJCQkgICB1aW50MTZfdCAqc2l6ZXNfYXJyYXkpCit7 CisJdWludDE2X3QgYnVmX3NpemUgPSAwOworCWludCBpID0gMCwgaiA9IDAsIGsgPSAwOworCisJ LyogRmlyc3Qgd2UgY29weSB0aGUgZXh0ZXJuYWwgYnVmZmVycyBwb29scyBpbmZvcm1hdGlvbgor CSAqIHRvIGFuIG9yZGVyZWQgbG9jYWwgYXJyYXkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcF9m bV9leHRfcG9vbHMtPm51bV9vZl9wb29sc191c2VkOyBpKyspIHsKKwkJLyogZ2V0IHBvb2wgc2l6 ZSAqLworCQlidWZfc2l6ZSA9IHBfZm1fZXh0X3Bvb2xzLT5leHRfYnVmX3Bvb2xbaV0uc2l6ZTsK KworCQkvKiBrZWVwIHNpemVzIGluIGFuIGFycmF5IGFjY29yZGluZyB0byBwb29sSWQKKwkJICog Zm9yIGRpcmVjdCBhY2Nlc3MKKwkJICovCisJCXNpemVzX2FycmF5W3BfZm1fZXh0X3Bvb2xzLT5l eHRfYnVmX3Bvb2xbaV0uaWRdID0gYnVmX3NpemU7CisKKwkJLyogc2F2ZSBwb29sSWQgaW4gYW4g b3JkZXJlZCBhcnJheSBhY2NvcmRpbmcgdG8gc2l6ZSAqLworCQlmb3IgKGogPSAwOyBqIDw9IGk7 IGorKykgeworCQkJLyogdGhpcyBpcyB0aGUgbmV4dCBmcmVlIHBsYWNlIGluIHRoZSBhcnJheSAq LworCQkJaWYgKGogPT0gaSkKKwkJCQlvcmRlcmVkX2FycmF5W2ldID0KKwkJCQkgICAgcF9mbV9l eHRfcG9vbHMtPmV4dF9idWZfcG9vbFtpXS5pZDsKKwkJCWVsc2UgeworCQkJCS8qIGZpbmQgdGhl IHJpZ2h0IHBsYWNlIGZvciB0aGlzIHBvb2xJZCAqLworCQkJCWlmIChidWZfc2l6ZSA8IHNpemVz X2FycmF5W29yZGVyZWRfYXJyYXlbal1dKSB7CisJCQkJCS8qIG1vdmUgdGhlIHBvb2xfaWRzIG9u ZSBwbGFjZSBhaGVhZAorCQkJCQkgKiB0byBtYWtlIHJvb20gZm9yIHRoaXMgcG9vbElkCisJCQkJ CSAqLworCQkJCQlmb3IgKGsgPSBpOyBrID4gajsgay0tKQorCQkJCQkJb3JkZXJlZF9hcnJheVtr XSA9CisJCQkJCQkgICAgb3JkZXJlZF9hcnJheVtrIC0gMV07CisKKwkJCQkJLyogbm93IGs9PWos IHRoaXMgaXMgdGhlIHBsYWNlIGZvcgorCQkJCQkgKiB0aGUgbmV3IHNpemUKKwkJCQkJICovCisJ CQkJCW9yZGVyZWRfYXJyYXlba10gPQorCQkJCQkgICAgcF9mbV9leHRfcG9vbHMtPmV4dF9idWZf cG9vbFtpXS5pZDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCitpbnQg Zm1fc3BfY2hlY2tfYnVmX3Bvb2xzX3BhcmFtcyhzdHJ1Y3QgZm1fZXh0X3Bvb2xzX3QgKnBfZm1f ZXh0X3Bvb2xzLAorCQkJCSBzdHJ1Y3QgZm1fYmFja3VwX2JtX3Bvb2xzX3QKKwkJCQkgKnBfZm1f YmFja3VwX2JtX3Bvb2xzLAorCQkJCSBzdHJ1Y3QgZm1fYnVmX3Bvb2xfZGVwbGV0aW9uX3QKKwkJ CQkgKnBfZm1fYnVmX3Bvb2xfZGVwbGV0aW9uLAorCQkJCSB1aW50MzJfdCBtYXhfbnVtX29mX2V4 dF9wb29scywKKwkJCQkgdWludDMyX3QgYm1fbWF4X251bV9vZl9wb29scykKK3sKKwlpbnQgaSA9 IDAsIGogPSAwOworCWJvb2wgZm91bmQ7CisJdWludDhfdCBjb3VudCA9IDA7CisKKwlpZiAocF9m bV9leHRfcG9vbHMpIHsKKwkJaWYgKHBfZm1fZXh0X3Bvb2xzLT5udW1fb2ZfcG9vbHNfdXNlZCA+ IG1heF9udW1fb2ZfZXh0X3Bvb2xzKSB7CisJCQlwcl9lcnIoIm51bV9vZl9wb29sc191c2VkIGNh bid0IGJlIGxhcmdlciB0aGFuICVkXG4iLAorCQkJICAgICAgIG1heF9udW1fb2ZfZXh0X3Bvb2xz KTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgcF9mbV9leHRfcG9v bHMtPm51bV9vZl9wb29sc191c2VkOyBpKyspIHsKKwkJCWlmIChwX2ZtX2V4dF9wb29scy0+ZXh0 X2J1Zl9wb29sW2ldLmlkID49CisJCQkgICAgYm1fbWF4X251bV9vZl9wb29scykgeworCQkJCXBy X2VycigiZXh0X2J1Zl9wb29scy5leHRfYnVmX3Bvb2xbJWRdLmlkIGNhbid0IGJlIGxhcmdlciB0 aGFuICVkXG4iLAorCQkJCSAgICAgICBpLCBibV9tYXhfbnVtX29mX3Bvb2xzKTsKKwkJCQlyZXR1 cm4gLUVET007CisJCQl9CisJCQlpZiAoIXBfZm1fZXh0X3Bvb2xzLT5leHRfYnVmX3Bvb2xbaV0u c2l6ZSkgeworCQkJCXByX2VycigiZXh0X2J1Zl9wb29scy5leHRfYnVmX3Bvb2xbJWRdLnNpemUg aXMgMFxuIiwKKwkJCQkgICAgICAgaSk7CisJCQkJcmV0dXJuIC1FRE9NOworCQkJfQorCQl9CisJ fQorCWlmICghcF9mbV9leHRfcG9vbHMgJiYgKHBfZm1fYmFja3VwX2JtX3Bvb2xzIHx8CisJCQkJ cF9mbV9idWZfcG9vbF9kZXBsZXRpb24pKSB7CisJCXByX2VycigiYmFja3VwQm1Qb29scyBvdCBi dWZfcG9vbF9kZXBsZXRpb24gY2FuIG5vdCBiZSBkZWZpbmVkIHdpdGhvdXQgZXh0ZXJuYWwgcG9v bHNcbiIpOworCQlyZXR1cm4gLUVET007CisJfQorCS8qIGJhY2t1cCBCTSBwb29scyBpbmRpY2F0 aW9uIGlzIHZhbGlkIG9ubHkgZm9yIHNvbWUgY2hpcCBkZXJpdmF0aXZlcworCSAqIChsaW1pdGVk IGJ5IHRoZSBjb25maWcgcm91dGluZSkKKwkgKi8KKwlpZiAocF9mbV9iYWNrdXBfYm1fcG9vbHMp IHsKKwkJaWYgKHBfZm1fYmFja3VwX2JtX3Bvb2xzLT5udW1fb2ZfYmFja3VwX3Bvb2xzID49CisJ CSAgICBwX2ZtX2V4dF9wb29scy0+bnVtX29mX3Bvb2xzX3VzZWQpIHsKKwkJCXByX2VycigicF9i YWNrdXBfYm1fcG9vbHMgbXVzdCBiZSBzbWFsbGVyIHRoYW4gZXh0X2J1Zl9wb29scy5udW1fb2Zf cG9vbHNfdXNlZFxuIik7CisJCQlyZXR1cm4gLUVET007CisJCX0KKwkJZm91bmQgPSBmYWxzZTsK KwkJZm9yIChpID0gMDsgaSA8IHBfZm1fYmFja3VwX2JtX3Bvb2xzLT4KKwkJICAgICBudW1fb2Zf YmFja3VwX3Bvb2xzOyBpKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBwX2ZtX2V4dF9wb29scy0+ CisJCQkgICAgIG51bV9vZl9wb29sc191c2VkOyBqKyspIHsKKwkJCQlpZiAocF9mbV9iYWNrdXBf Ym1fcG9vbHMtPnBvb2xfaWRzW2ldID09CisJCQkJICAgIHBfZm1fZXh0X3Bvb2xzLT5leHRfYnVm X3Bvb2xbal0uaWQpIHsKKwkJCQkJZm91bmQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJ CQl9CisJCQlpZiAoIWZvdW5kKSB7CisJCQkJcHJfZXJyKCJBbGwgcF9iYWNrdXBfYm1fcG9vbHMu cG9vbF9pZHMgbXVzdCBiZSBpbmNsdWRlZCBpbiBleHRfYnVmX3Bvb2xzLmV4dF9idWZfcG9vbFtu XS5pZFxuIik7CisJCQkJcmV0dXJuIC1FRE9NOworCQkJfQorCQkJZm91bmQgPSBmYWxzZTsKKwkJ fQorCX0KKworCS8qIHVwIHRvIGV4dF9idWZfcG9vbHMubnVtX29mX3Bvb2xzX3VzZWQgcG9vbHMg bWF5IGJlIGRlZmluZWQgKi8KKwlpZiAocF9mbV9idWZfcG9vbF9kZXBsZXRpb24gJiYgcF9mbV9i dWZfcG9vbF9kZXBsZXRpb24tPgorCSAgICBwb29sc19ncnBfbW9kZV9lbmFibGUpIHsKKwkJaWYg KChwX2ZtX2J1Zl9wb29sX2RlcGxldGlvbi0+bnVtX29mX3Bvb2xzID4KKwkJICAgICBwX2ZtX2V4 dF9wb29scy0+bnVtX29mX3Bvb2xzX3VzZWQpKSB7CisJCQlwcl9lcnIoImJ1Zl9wb29sX2RlcGxl dGlvbi5udW1fb2ZfcG9vbHMgY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gJWQgYW5kIGNhbid0IGJlIGxh cmdlciB0aGFuIG51bV9vZl9wb29sc191c2VkXG4iLAorCQkJICAgICAgIG1heF9udW1fb2ZfZXh0 X3Bvb2xzKTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQorCQlpZiAoIXBfZm1fYnVmX3Bvb2xfZGVw bGV0aW9uLT5udW1fb2ZfcG9vbHMpIHsKKwkJCXByX2VycigiYnVmX3Bvb2xfZGVwbGV0aW9uLm51 bV9vZl9wb29sc190b19jb25zaWRlciBjYW4gbm90IGJlIDAgd2hlbiBwb29sc19ncnBfbW9kZV9l bmFibGU9dHJ1ZVxuIik7CisJCQlyZXR1cm4gLUVET007CisJCX0KKwkJZm91bmQgPSBmYWxzZTsK KwkJY291bnQgPSAwOworCQkvKiBmb3IgZWFjaCBwb29sIHRoYXQgaXMgaW4gcG9vbHNfdG9fY29u c2lkZXIsIGNoZWNrIGlmIGl0CisJCSAqIGlzIGRlZmluZWQgaW4gZXh0X2J1Zl9wb29sCisJCSAq LworCQlmb3IgKGkgPSAwOyBpIDwgYm1fbWF4X251bV9vZl9wb29sczsgaSsrKSB7CisJCQlpZiAo cF9mbV9idWZfcG9vbF9kZXBsZXRpb24tPnBvb2xzX3RvX2NvbnNpZGVyW2ldKSB7CisJCQkJZm9y IChqID0gMDsgaiA8IHBfZm1fZXh0X3Bvb2xzLT4KKwkJCQkgICAgIG51bV9vZl9wb29sc191c2Vk OyBqKyspIHsKKwkJCQkJaWYgKGkgPT0gcF9mbV9leHRfcG9vbHMtPgorCQkJCQkgICAgZXh0X2J1 Zl9wb29sW2pdLmlkKSB7CisJCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCQljb3VudCsrOworCQkJ CQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKCFmb3VuZCkgeworCQkJCQlwcl9lcnIo IlBvb2xzIHNlbGVjdGVkIGZvciBkZXBsZXRpb24gYXJlIG5vdCB1c2VkLlxuIik7CisJCQkJCXJl dHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlmb3VuZCA9IGZhbHNlOworCQkJfQorCQl9CisJCS8q IGNoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwb29scyB0aGF0IHdlIGhhdmUgY2hlY2tlZCBpcwor CQkgKiBlcXVhbCB0byB0aGUgbnVtYmVyIGFubm91bmNlZCBieSB0aGUgdXNlcgorCQkgKi8KKwkJ aWYgKGNvdW50ICE9IHBfZm1fYnVmX3Bvb2xfZGVwbGV0aW9uLT5udW1fb2ZfcG9vbHMpIHsKKwkJ CXByX2VycigiYnVmX3Bvb2xfZGVwbGV0aW9uLm51bV9vZl9wb29scyBpcyBsYXJnZXIgdGhhbiB0 aGUgbnVtYmVyIG9mIHBvb2xzIGRlZmluZWQuXG4iKTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQor CX0KKworCWlmIChwX2ZtX2J1Zl9wb29sX2RlcGxldGlvbiAmJiBwX2ZtX2J1Zl9wb29sX2RlcGxl dGlvbi0+CisJICAgIHNpbmdsZV9wb29sX21vZGVfZW5hYmxlKSB7CisJCS8qIGNhbGN1bGF0ZSB2 ZWN0b3IgZm9yIG51bWJlciBvZiBwb29scyBkZXBsZXRpb24gKi8KKwkJZm91bmQgPSBmYWxzZTsK KwkJY291bnQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgYm1fbWF4X251bV9vZl9wb29sczsgaSsr KSB7CisJCQlpZiAocF9mbV9idWZfcG9vbF9kZXBsZXRpb24tPgorCQkJICAgIHBvb2xzX3RvX2Nv bnNpZGVyX2Zvcl9zaW5nbGVfbW9kZVtpXSkgeworCQkJCWZvciAoaiA9IDA7IGogPCBwX2ZtX2V4 dF9wb29scy0+CisJCQkJICAgICBudW1fb2ZfcG9vbHNfdXNlZDsKKwkJCQkgICAgIGorKykgewor CQkJCQlpZiAoaSA9PSBwX2ZtX2V4dF9wb29scy0+CisJCQkJCSAgICBleHRfYnVmX3Bvb2xbal0u aWQpIHsKKwkJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJCWNvdW50Kys7CisJCQkJCQlicmVhazsK KwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIWZvdW5kKSB7CisJCQkJCXByX2VycigiUG9vbHMgc2Vs ZWN0ZWQgZm9yIGRlcGxldGlvbiBhcmUgbm90IHVzZWQuXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5W QUw7CisJCQkJfQorCQkJCWZvdW5kID0gZmFsc2U7CisJCQl9CisJCX0KKwkJaWYgKCFjb3VudCkg eworCQkJcHJfZXJyKCJObyBwb29scyBkZWZpbmVkIGZvciBzaW5nbGUgYnVmZmVyIG1vZGUgcG9v bCBkZXBsZXRpb24uXG4iKTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQorCX0KKworCXJldHVybiAw OworfQorCitpbnQgZm1fc3BfY2hlY2tfaW50X2NvbnRleHRfcGFyYW1zKHN0cnVjdCBmbV9zcF9p bnRfY29udGV4dF9kYXRhX2NvcHlfdCAqCisJCQkJICBwX2ZtX3NwX2ludF9jb250ZXh0X2RhdGFf Y29weSkKK3sKKwkvKiBDaGVjayB0aGF0IGRpdmlzaWJsZSBieSAxNiBhbmQgbm90IGxhcmdlciB0 aGFuIDI0MCAqLworCWlmIChwX2ZtX3NwX2ludF9jb250ZXh0X2RhdGFfY29weS0+aW50X2NvbnRl eHRfb2Zmc2V0ID4KKwkgICAgTUFYX0lOVF9PRkZTRVQpIHsKKwkJcHJfZXJyKCJpbnRfY29udGV4 dC5pbnRfY29udGV4dF9vZmZzZXQgY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gJWRcbiIsCisJCSAgICAg ICBNQVhfSU5UX09GRlNFVCk7CisJCXJldHVybiAtRURPTTsKKwl9CisJaWYgKHBfZm1fc3BfaW50 X2NvbnRleHRfZGF0YV9jb3B5LT5pbnRfY29udGV4dF9vZmZzZXQgJQorCSAgICAgIE9GRlNFVF9V TklUUykgeworCQlwcl9lcnIoImludF9jb250ZXh0LmludF9jb250ZXh0X29mZnNldCBoYXMgdG8g YmUgZGl2aXNpYmxlIGJ5ICVkXG4iLAorCQkgICAgICAgT0ZGU0VUX1VOSVRTKTsKKwkJcmV0dXJu IC1FRE9NOworCisJLyogY2hlY2sgdGhhdCBpYyBzaXplK2ljIGludGVybmFsIG9mZnNldCwgZG9l cyBub3QgZXhjZWVkCisJICogaWMgYmxvY2sgc2l6ZQorCSAqLworCX0KKwlpZiAocF9mbV9zcF9p bnRfY29udGV4dF9kYXRhX2NvcHktPnNpemUgKworCSAgICAgIHBfZm1fc3BfaW50X2NvbnRleHRf ZGF0YV9jb3B5LT5pbnRfY29udGV4dF9vZmZzZXQgPgorCSAgICAgIE1BWF9JQ19TSVpFKSB7CisJ CXByX2VycigiaW50X2NvbnRleHQuc2l6ZSArIGludF9jb250ZXh0LmludF9jb250ZXh0X29mZnNl dCBoYXMgdG8gYmUgc21hbGxlciB0aGFuICVkXG4iLAorCQkgICAgICAgTUFYX0lDX1NJWkUpOwor CQlyZXR1cm4gLUVET007CisJLyogQ2hlY2sgdGhhdCBkaXZpc2libGUgYnkgMTYgYW5kIG5vdCBs YXJnZXIgdGhhbiAyNTYgKi8KKwl9CisJaWYgKHBfZm1fc3BfaW50X2NvbnRleHRfZGF0YV9jb3B5 LT5zaXplICUgT0ZGU0VUX1VOSVRTKSB7CisJCXByX2VycigiaW50X2NvbnRleHQuc2l6ZSAgaGFz IHRvIGJlIGRpdmlzaWJsZSBieSAlZFxuIiwKKwkJICAgICAgIE9GRlNFVF9VTklUUyk7CisJCXJl dHVybiAtRURPTTsKKworCS8qIENoZWNrIHRoYXQgZGl2aXNpYmxlIGJ5IDE2IGFuZCBub3QgbGFy Z2VyIHRoYW4gNEsgKi8KKwl9CisJaWYgKHBfZm1fc3BfaW50X2NvbnRleHRfZGF0YV9jb3B5LT5l eHRfYnVmX29mZnNldCA+IE1BWF9FWFRfT0ZGU0VUKSB7CisJCXByX2VycigiaW50X2NvbnRleHQu ZXh0X2J1Zl9vZmZzZXQgY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gJWRcbiIsCisJCSAgICAgICBNQVhf RVhUX09GRlNFVCk7CisJCXJldHVybiAtRURPTTsKKwl9CisJaWYgKHBfZm1fc3BfaW50X2NvbnRl eHRfZGF0YV9jb3B5LT5leHRfYnVmX29mZnNldCAlIE9GRlNFVF9VTklUUykgeworCQlwcl9lcnIo ImludF9jb250ZXh0LmV4dF9idWZfb2Zmc2V0IGhhcyB0byBiZSBkaXZpc2libGUgYnkgJWRcbiIs CisJCSAgICAgICBPRkZTRVRfVU5JVFMpOworCQlyZXR1cm4gLUVET007CisJfQorCXJldHVybiAw OworfQorCitpbnQgZm1fc3BfY2hlY2tfYnVmX21hcmdpbnMoc3RydWN0IGZtX3NwX2J1Zl9tYXJn aW5zX3QKKwkJCQkqcF9mbV9zcF9idWZfbWFyZ2lucykKK3sKKwkvKiBDaGVjayB0aGUgbWFyZ2lu IGRlZmluaXRpb24gKi8KKwlpZiAocF9mbV9zcF9idWZfbWFyZ2lucy0+c3RhcnRfbWFyZ2lucyA+ IE1BWF9FWFRfQlVGRkVSX09GRlNFVCkgeworCQlwcl9lcnIoImJ1Zl9tYXJnaW5zLnN0YXJ0X21h cmdpbnMgY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gJWRcbiIsCisJCSAgICAgICBNQVhfRVhUX0JVRkZF Ul9PRkZTRVQpOworCQlyZXR1cm4gLUVET007CisJfQorCWlmIChwX2ZtX3NwX2J1Zl9tYXJnaW5z LT5lbmRfbWFyZ2lucyA+IE1BWF9FWFRfQlVGRkVSX09GRlNFVCkgeworCQlwcl9lcnIoImJ1Zl9t YXJnaW5zLmVuZF9tYXJnaW5zIGNhbid0IGJlIGxhcmdlciB0aGFuICVkXG4iLAorCQkgICAgICAg TUFYX0VYVF9CVUZGRVJfT0ZGU0VUKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKwlyZXR1cm4gMDsK K30KKworaW50IGZtX3NwX2J1aWxkX2J1ZmZlcl9zdHJ1Y3R1cmUoc3RydWN0IGZtX3NwX2ludF9j b250ZXh0X2RhdGFfY29weV90ICoKKwkJCQkgcF9mbV9zcF9pbnRfY29udGV4dF9kYXRhX2NvcHks CisJCQkJIHN0cnVjdCBmbV9idWZmZXJfcHJlZml4X2NvbnRlbnRfdCAqCisJCQkJIHBfYnVmZmVy X3ByZWZpeF9jb250ZW50LAorCQkJCSBzdHJ1Y3QgZm1fc3BfYnVmX21hcmdpbnNfdAorCQkJCSAq cF9mbV9zcF9idWZfbWFyZ2lucywKKwkJCQkgc3RydWN0IGZtX3NwX2J1ZmZlcl9vZmZzZXRzX3QK KwkJCQkgKnBfZm1fc3BfYnVmZmVyX29mZnNldHMsCisJCQkJIHVpbnQ4X3QgKmludGVybmFsX2J1 Zl9vZmZzZXQpCit7CisJdWludDMyX3QgdG1wOworCisJLyogQWxpZ24gc3RhcnQgb2YgaW50ZXJu YWwgY29udGV4dCBkYXRhIHRvIDE2IGJ5dGUgKi8KKwlwX2ZtX3NwX2ludF9jb250ZXh0X2RhdGFf Y29weS0+ZXh0X2J1Zl9vZmZzZXQgPSAodWludDE2X3QpCisJCSgocF9idWZmZXJfcHJlZml4X2Nv bnRlbnQtPnByaXZfZGF0YV9zaXplICYKKwkJCShPRkZTRVRfVU5JVFMgLSAxKSkgPworCQkoKHBf YnVmZmVyX3ByZWZpeF9jb250ZW50LT5wcml2X2RhdGFfc2l6ZSArIE9GRlNFVF9VTklUUykgJgor CQkJfih1aW50MTZfdCkoT0ZGU0VUX1VOSVRTIC0gMSkpIDoKKwkJcF9idWZmZXJfcHJlZml4X2Nv bnRlbnQtPnByaXZfZGF0YV9zaXplKTsKKworCS8qIFRyYW5zbGF0ZSBtYXJnaW4gYW5kIGludF9j b250ZXh0IHBhcmFtcyB0byBGTSBwYXJhbWV0ZXJzICovCisJLyogSW5pdGlhbGl6ZSB3aXRoIGls bGVnYWwgdmFsdWUuIExhdGVyIHdlJ2xsIHNldCBsZWdhbCB2YWx1ZXMuICovCisJcF9mbV9zcF9i dWZmZXJfb2Zmc2V0cy0+cHJzX3Jlc3VsdF9vZmZzZXQgPSAodWludDMyX3QpSUxMRUdBTF9CQVNF OworCXBfZm1fc3BfYnVmZmVyX29mZnNldHMtPnRpbWVfc3RhbXBfb2Zmc2V0ID0gKHVpbnQzMl90 KUlMTEVHQUxfQkFTRTsKKwlwX2ZtX3NwX2J1ZmZlcl9vZmZzZXRzLT5oYXNoX3Jlc3VsdF9vZmZz ZXQgPSAodWludDMyX3QpSUxMRUdBTF9CQVNFOworCisJLyogSW50ZXJuYWxseSB0aGUgZHJpdmVy IHN1cHBvcnRzIDQgb3B0aW9ucworCSAqIDEuIHByc1Jlc3VsdC90aW1lc3RhbXAvaGFzaFJlc3Vs dCBzZWxlY3Rpb24gKGluIGZhY3QgOCBvcHRpb25zLAorCSAqIGJ1dCBmb3Igc2ltcGxpY2l0eSB3 ZSdsbAorCSAqIHJlbGF0ZSB0byBpdCBhcyAxKS4KKwkgKiAyLiBBbGwgSUMgY29udGV4dCAoZnJv bSBBRCkgbm90IGluY2x1ZGluZyBkZWJ1Zy4KKwkgKi8KKworCS8qIFRoaXMgY2FzZSBjb3ZlcnMg dGhlIG9wdGlvbnMgdW5kZXIgMSAqLworCS8qIENvcHkgc2l6ZSBtdXN0IGJlIGluIDE2LWJ5dGUg Z3JhbnVsYXJpdHkuICovCisJcF9mbV9zcF9pbnRfY29udGV4dF9kYXRhX2NvcHktPnNpemUgPQor CSAgICAodWludDE2X3QpKChwX2J1ZmZlcl9wcmVmaXhfY29udGVudC0+CisJCQkgcGFzc19wcnNf cmVzdWx0ID8gMzIgOiAwKSArCisJCQkoKHBfYnVmZmVyX3ByZWZpeF9jb250ZW50LT5wYXNzX3Rp bWVfc3RhbXAgfHwKKwkJCSAgcF9idWZmZXJfcHJlZml4X2NvbnRlbnQtPgorCQkJICBwYXNzX2hh c2hfcmVzdWx0KSA/IDE2IDogMCkpOworCisJLyogQWxpZ24gc3RhcnQgb2YgaW50ZXJuYWwgY29u dGV4dCBkYXRhIHRvIDE2IGJ5dGUgKi8KKwlwX2ZtX3NwX2ludF9jb250ZXh0X2RhdGFfY29weS0+ aW50X2NvbnRleHRfb2Zmc2V0ID0KKwkgICAgKHVpbnQ4X3QpKHBfYnVmZmVyX3ByZWZpeF9jb250 ZW50LT5wYXNzX3Byc19yZXN1bHQgPyAzMiA6CisJCSAgICAgICAoKHBfYnVmZmVyX3ByZWZpeF9j b250ZW50LT5wYXNzX3RpbWVfc3RhbXAgfHwKKwkJCSBwX2J1ZmZlcl9wcmVmaXhfY29udGVudC0+ CisJCQkgcGFzc19oYXNoX3Jlc3VsdCkgPyA2NCA6IDApKTsKKworCWlmIChwX2J1ZmZlcl9wcmVm aXhfY29udGVudC0+cGFzc19wcnNfcmVzdWx0KQorCQlwX2ZtX3NwX2J1ZmZlcl9vZmZzZXRzLT5w cnNfcmVzdWx0X29mZnNldCA9CisJCSAgICBwX2ZtX3NwX2ludF9jb250ZXh0X2RhdGFfY29weS0+ ZXh0X2J1Zl9vZmZzZXQ7CisJaWYgKHBfYnVmZmVyX3ByZWZpeF9jb250ZW50LT5wYXNzX3RpbWVf c3RhbXApCisJCXBfZm1fc3BfYnVmZmVyX29mZnNldHMtPnRpbWVfc3RhbXBfb2Zmc2V0ID0KKwkJ ICAgIHBfYnVmZmVyX3ByZWZpeF9jb250ZW50LT4KKwkJICAgIHBhc3NfcHJzX3Jlc3VsdCA/IChw X2ZtX3NwX2ludF9jb250ZXh0X2RhdGFfY29weS0+CisJCQkJICAgICBleHRfYnVmX29mZnNldCAr CisJCQkJICAgICBzaXplb2Yoc3RydWN0IGZtX3Byc19yZXN1bHRfdCkpIDoKKwkJICAgIHBfZm1f c3BfaW50X2NvbnRleHRfZGF0YV9jb3B5LT5leHRfYnVmX29mZnNldDsKKwlpZiAocF9idWZmZXJf cHJlZml4X2NvbnRlbnQtPnBhc3NfaGFzaF9yZXN1bHQpCisJCS8qIElmIFBSIGlzIG5vdCByZXF1 ZXN0ZWQsIHdoZXRoZXIgVFMgaXMKKwkJICogcmVxdWVzdGVkIG9yIG5vdCwgSUMgd2lsbCBiZSBj b3BpZWQgZnJvbSBUUworCQkJICovCisJCXBfZm1fc3BfYnVmZmVyX29mZnNldHMtPmhhc2hfcmVz dWx0X29mZnNldCA9CisJCSAgICBwX2J1ZmZlcl9wcmVmaXhfY29udGVudC0+CisJCSAgICBwYXNz X3Byc19yZXN1bHQgPyAocF9mbV9zcF9pbnRfY29udGV4dF9kYXRhX2NvcHktPgorCQkJCSAgICAg ZXh0X2J1Zl9vZmZzZXQgKworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBmbV9wcnNfcmVzdWx0X3Qp ICsgOCkgOgorCQkJCSAgICAgcF9mbV9zcF9pbnRfY29udGV4dF9kYXRhX2NvcHktPgorCQkgICAg ZXh0X2J1Zl9vZmZzZXQgKyA4OworCisJaWYgKHBfZm1fc3BfaW50X2NvbnRleHRfZGF0YV9jb3B5 LT5zaXplKQorCQlwX2ZtX3NwX2J1Zl9tYXJnaW5zLT5zdGFydF9tYXJnaW5zID0KKwkJICAgICh1 aW50MTZfdCkocF9mbV9zcF9pbnRfY29udGV4dF9kYXRhX2NvcHktPmV4dF9idWZfb2Zmc2V0ICsK KwkJCQlwX2ZtX3NwX2ludF9jb250ZXh0X2RhdGFfY29weS0+c2l6ZSk7CisJZWxzZQorCQkvKiBO byBJbnRlcm5hbCBDb250ZXh0IHBhc3NpbmcsIFNUYXJ0TWFyZ2luIGlzCisJCSAqIGltbWVkaWF0 ZWx5IGFmdGVyIHByaXZhdGVfaW5mbworCQkgKi8KKwkJcF9mbV9zcF9idWZfbWFyZ2lucy0+c3Rh cnRfbWFyZ2lucyA9CisJCSAgICBwX2J1ZmZlcl9wcmVmaXhfY29udGVudC0+cHJpdl9kYXRhX3Np emU7CisKKwkvKiBhbGlnbiBkYXRhIHN0YXJ0ICovCisJdG1wID0KKwkgICAgKHVpbnQzMl90KShw X2ZtX3NwX2J1Zl9tYXJnaW5zLT5zdGFydF9tYXJnaW5zICUKKwkJCXBfYnVmZmVyX3ByZWZpeF9j b250ZW50LT5kYXRhX2FsaWduKTsKKwlpZiAodG1wKQorCQlwX2ZtX3NwX2J1Zl9tYXJnaW5zLT5z dGFydF9tYXJnaW5zICs9CisJCSAgICAocF9idWZmZXJfcHJlZml4X2NvbnRlbnQtPmRhdGFfYWxp Z24gLSB0bXApOworCXBfZm1fc3BfYnVmZmVyX29mZnNldHMtPmRhdGFfb2Zmc2V0ID0gcF9mbV9z cF9idWZfbWFyZ2lucy0+CisJCQkJCSAgICAgIHN0YXJ0X21hcmdpbnM7CisKKwlyZXR1cm4gMDsK K30KKworLyogRW5kIG9mIGludGVyLW1vZHVsZSByb3V0aW5lcyAqLwotLSAKMS43LjkuNQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXhwcGMtZGV2 IG1haWxpbmcgbGlzdApMaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwpodHRwczovL2xpc3Rz Lm96bGFicy5vcmcvbGlzdGluZm8vbGludXhwcGMtZGV2