From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Myl=C3=A8ne=20Josserand?= Subject: [PATCH v2 05/10] ASoC: Add sun8i digital audio codec Date: Tue, 17 Jan 2017 15:02:25 +0100 Message-ID: <20170117140230.23142-6-mylene.josserand@free-electrons.com> References: <20170117140230.23142-1-mylene.josserand@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170117140230.23142-1-mylene.josserand@free-electrons.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: lgirdwood@gmail.com, broonie@kernel.org, perex@perex.cz, tiwai@suse.com, maxime.ripard@free-electrons.com, wens@csie.org, mturquette@baylibre.com, sboyd@codeaurora.org, mark.rutland@arm.com, robh+dt@kernel.org Cc: thomas.petazzoni@free-electrons.com, devicetree@vger.kernel.org, alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com, alexandre.belloni@free-electrons.com, mylene.josserand@free-electrons.com, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org QWRkIHRoZSBzdW44aSBhdWRpbyBjb2RlYyB3aGljaCBoYW5kbGVzIHRoZSBkaWdpdGFsIHJlZ2lz dGVyIG9mCkEzMyBjb2RlYy4KVGhlIGRyaXZlciBoYW5kbGVzIG9ubHkgdGhlIGJhc2ljIHBsYXli YWNrIGZyb20gdGhlIERBQyB0byBoZWFkcGhvbmVzLgpBbGwgb3RoZXIgZmVhdHVyZXMgKG1pY3Jv cGhvbmUsIGNhcHR1cmUsIGV0Yykgd2lsbCBiZSBhZGRlZCBsYXRlci4KClNpZ25lZC1vZmYtYnk6 IE15bMOobmUgSm9zc2VyYW5kIDxteWxlbmUuam9zc2VyYW5kQGZyZWUtZWxlY3Ryb25zLmNvbT4K LS0tCiBzb3VuZC9zb2Mvc3VueGkvS2NvbmZpZyAgICAgICB8ICAxMSArCiBzb3VuZC9zb2Mvc3Vu eGkvTWFrZWZpbGUgICAgICB8ICAgMSArCiBzb3VuZC9zb2Mvc3VueGkvc3VuOGktY29kZWMuYyB8 IDUzMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMg Y2hhbmdlZCwgNTQzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2Mv c3VueGkvc3VuOGktY29kZWMuYwoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zdW54aS9LY29uZmln IGIvc291bmQvc29jL3N1bnhpL0tjb25maWcKaW5kZXggNmMzNDRlMTZhY2E0Li4xM2E4MjY3ZjE3 YzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zdW54aS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9z dW54aS9LY29uZmlnCkBAIC05LDYgKzksMTcgQEAgY29uZmlnIFNORF9TVU40SV9DT0RFQwogCSAg U2VsZWN0IFkgb3IgTSB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIENvZGVjIGVtYmVkZGVkIGluIHRo ZSBBbGx3aW5uZXIKIAkgIEExMCBhbmQgYWZmaWxpYXRlZCBTb0NzLgogCitjb25maWcgU05EX1NV TjhJX0NPREVDCisJdHJpc3RhdGUgIkFsbHdpbm5lciBTVU44SSBhdWRpbyBjb2RlYyIKKwlkZXBl bmRzIG9uIE9GCisJZGVwZW5kcyBvbiBNQUNIX1NVTjhJIHx8IENPTVBJTEVfVEVTVAorCXNlbGVj dCBSRUdNQVBfTU1JTworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGRpZ2l0YWwg cGFydCBvZiB0aGUgaW50ZXJuYWwgYXVkaW8gY29kZWMgZm9yCisJICBBbGx3aW5uZXIgc3VuOGkg U29DIChhbmQgcGFydGljdWxhcmx5IEEzMykuCisKKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQg dG8gYWRkIHN1bjhpIGRpZ2l0YWwgYXVkaW8gY29kZWMgc3VwcG9ydC4KKwogY29uZmlnIFNORF9T VU44SV9DT0RFQ19BTkFMT0cKIAl0cmlzdGF0ZSAiQWxsd2lubmVyIHN1bjhpIENvZGVjIEFuYWxv ZyBDb250cm9scyBTdXBwb3J0IgogCWRlcGVuZHMgb24gTUFDSF9TVU44SSB8fCBDT01QSUxFX1RF U1QKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zdW54aS9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zdW54 aS9NYWtlZmlsZQppbmRleCAyNDFjMGRmOWNhMGMuLjFmMWFmNjI3MTczMSAxMDA2NDQKLS0tIGEv c291bmQvc29jL3N1bnhpL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9zdW54aS9NYWtlZmlsZQpA QCAtMiwzICsyLDQgQEAgb2JqLSQoQ09ORklHX1NORF9TVU40SV9DT0RFQykgKz0gc3VuNGktY29k ZWMubwogb2JqLSQoQ09ORklHX1NORF9TVU40SV9JMlMpICs9IHN1bjRpLWkycy5vCiBvYmotJChD T05GSUdfU05EX1NVTjRJX1NQRElGKSArPSBzdW40aS1zcGRpZi5vCiBvYmotJChDT05GSUdfU05E X1NVTjhJX0NPREVDX0FOQUxPRykgKz0gc3VuOGktY29kZWMtYW5hbG9nLm8KK29iai0kKENPTkZJ R19TTkRfU1VOOElfQ09ERUMpICs9IHN1bjhpLWNvZGVjLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3Nv Yy9zdW54aS9zdW44aS1jb2RlYy5jIGIvc291bmQvc29jL3N1bnhpL3N1bjhpLWNvZGVjLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42NjM3OGM5ZTc3OTQKLS0tIC9k ZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc3VueGkvc3VuOGktY29kZWMuYwpAQCAtMCwwICsxLDUz MSBAQAorLyoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBkaWdpdGFsIGNvbnRyb2xzIGZv ciB0aGUgaW50ZXJuYWwgY29kZWMKKyAqIGZvdW5kIGluIEFsbHdpbm5lcidzIEEzMyBTb0NzLgor ICoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMC0yMDE2CisgKiBSZXV1aW1sbGEgVGVjaG5vbG9neSBD by4sIEx0ZC4gPHd3dy5yZXV1aW1sbGF0ZWNoLmNvbT4KKyAqIGh1YW5neGluIDxodWFuZ3hpbkBS ZXV1aW1sbGF0ZWNoLmNvbT4KKyAqIE15bMOobmUgSm9zc2VyYW5kIDxteWxlbmUuam9zc2VyYW5k QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgor I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVk ZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8 bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVk ZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2RlZmluZSBT VU44SV9TWVNDTEtfQ1RMCQkJCTB4MDBjCisjZGVmaW5lIFNVTjhJX1NZU0NMS19DVExfQUlGMUNM S19FTkEJCQkxMQorI2RlZmluZSBTVU44SV9TWVNDTEtfQ1RMX0FJRjFDTEtfU1JDX1BMTAkJOQor I2RlZmluZSBTVU44SV9TWVNDTEtfQ1RMX0FJRjFDTEtfU1JDCQkJOAorI2RlZmluZSBTVU44SV9T WVNDTEtfQ1RMX1NZU0NMS19FTkEJCQkzCisjZGVmaW5lIFNVTjhJX1NZU0NMS19DVExfU1lTQ0xL X1NSQwkJCTAKKyNkZWZpbmUgU1VOOElfTU9EX0NMS19FTkEJCQkJMHgwMTAKKyNkZWZpbmUgU1VO OElfTU9EX0NMS19FTkFfQUlGMQkJCQkxNQorI2RlZmluZSBTVU44SV9NT0RfQ0xLX0VOQV9EQUMJ CQkJMgorI2RlZmluZSBTVU44SV9NT0RfUlNUX0NUTAkJCQkweDAxNAorI2RlZmluZSBTVU44SV9N T0RfUlNUX0NUTF9BSUYxCQkJCTE1CisjZGVmaW5lIFNVTjhJX01PRF9SU1RfQ1RMX0RBQwkJCQky CisjZGVmaW5lIFNVTjhJX1NZU19TUl9DVFJMCQkJCTB4MDE4CisjZGVmaW5lIFNVTjhJX1NZU19T Ul9DVFJMX0FJRjFfRlMJCQkxMgorI2RlZmluZSBTVU44SV9TWVNfU1JfQ1RSTF9BSUYyX0ZTCQkJ OAorI2RlZmluZSBTVU44SV9BSUYxQ0xLX0NUUkwJCQkJMHgwNDAKKyNkZWZpbmUgU1VOOElfQUlG MUNMS19DVFJMX0FJRjFfTVNUUl9NT0QJCTE1CisjZGVmaW5lIFNVTjhJX0FJRjFDTEtfQ1RSTF9B SUYxX0JDTEtfSU5WCQkxNAorI2RlZmluZSBTVU44SV9BSUYxQ0xLX0NUUkxfQUlGMV9MUkNLX0lO VgkJMTMKKyNkZWZpbmUgU1VOOElfQUlGMUNMS19DVFJMX0FJRjFfQkNMS19ESVYJCTkKKyNkZWZp bmUgU1VOOElfQUlGMUNMS19DVFJMX0FJRjFfTFJDS19ESVYJCTYKKyNkZWZpbmUgU1VOOElfQUlG MUNMS19DVFJMX0FJRjFfTFJDS19ESVZfMTYJCSgxIDw8IDYpCisjZGVmaW5lIFNVTjhJX0FJRjFD TEtfQ1RSTF9BSUYxX1dPUkRfU0laCQk0CisjZGVmaW5lIFNVTjhJX0FJRjFDTEtfQ1RSTF9BSUYx X1dPUkRfU0laXzE2CQkoMSA8PCA0KQorI2RlZmluZSBTVU44SV9BSUYxQ0xLX0NUUkxfQUlGMV9E QVRBX0ZNVAkJMgorI2RlZmluZSBTVU44SV9BSUYxX0RBQ0RBVF9DVFJMCQkJCTB4MDQ4CisjZGVm aW5lIFNVTjhJX0FJRjFfREFDREFUX0NUUkxfQUlGMV9EQTBMX0VOQQkJMTUKKyNkZWZpbmUgU1VO OElfQUlGMV9EQUNEQVRfQ1RSTF9BSUYxX0RBMFJfRU5BCQkxNAorI2RlZmluZSBTVU44SV9EQUNf RElHX0NUUkwJCQkJMHgxMjAKKyNkZWZpbmUgU1VOOElfREFDX0RJR19DVFJMX0VOREEJCQkxNQor I2RlZmluZSBTVU44SV9EQUNfTVhSX1NSQwkJCQkweDEzMAorI2RlZmluZSBTVU44SV9EQUNfTVhS X1NSQ19EQUNMX01YUl9TUkNfQUlGMURBMEwJMTUKKyNkZWZpbmUgU1VOOElfREFDX01YUl9TUkNf REFDTF9NWFJfU1JDX0FJRjFEQTFMCTE0CisjZGVmaW5lIFNVTjhJX0RBQ19NWFJfU1JDX0RBQ0xf TVhSX1NSQ19BSUYyREFDTAkxMworI2RlZmluZSBTVU44SV9EQUNfTVhSX1NSQ19EQUNMX01YUl9T UkNfQURDTAkJMTIKKyNkZWZpbmUgU1VOOElfREFDX01YUl9TUkNfREFDUl9NWFJfU1JDX0FJRjFE QTBSCTExCisjZGVmaW5lIFNVTjhJX0RBQ19NWFJfU1JDX0RBQ1JfTVhSX1NSQ19BSUYxREExUgkx MAorI2RlZmluZSBTVU44SV9EQUNfTVhSX1NSQ19EQUNSX01YUl9TUkNfQUlGMkRBQ1IJOQorI2Rl ZmluZSBTVU44SV9EQUNfTVhSX1NSQ19EQUNSX01YUl9TUkNfQURDUgkJOAorCisjZGVmaW5lIFNV TjhJX1NZU19TUl9DVFJMX0FJRjFfRlNfTUFTSwkJR0VOTUFTSygxNSwgMTIpCisjZGVmaW5lIFNV TjhJX1NZU19TUl9DVFJMX0FJRjJfRlNfTUFTSwkJR0VOTUFTSygxMSwgOCkKKyNkZWZpbmUgU1VO OElfQUlGMUNMS19DVFJMX0FJRjFfV09SRF9TSVpfTUFTSwlHRU5NQVNLKDUsIDQpCisjZGVmaW5l IFNVTjhJX0FJRjFDTEtfQ1RSTF9BSUYxX0xSQ0tfRElWX01BU0sJR0VOTUFTSyg4LCA2KQorCitz dHJ1Y3Qgc3VuOGlfY29kZWMgeworCXN0cnVjdCBkZXZpY2UJKmRldjsKKwlzdHJ1Y3QgcmVnbWFw CSpyZWdtYXA7CisJc3RydWN0IGNsawkqY2xrX21vZHVsZTsKKwlzdHJ1Y3QgY2xrCSpjbGtfYnVz OworfTsKKworc3RhdGljIGludCBzdW44aV9jb2RlY19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IHN1bjhpX2NvZGVjICpzY29kZWMgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHNjb2RlYy0+ Y2xrX21vZHVsZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFi bGUgdGhlIG1vZHVsZSBjbG9ja1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKHNjb2RlYy0+Y2xrX2J1cyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBlbmFibGUgdGhlIGJ1cyBjbG9ja1xuIik7CisJCWdvdG8gZXJyX2Rp c2FibGVfbW9kY2xrOworCX0KKworCXJlZ2NhY2hlX2NhY2hlX29ubHkoc2NvZGVjLT5yZWdtYXAs IGZhbHNlKTsKKworCXJldCA9IHJlZ2NhY2hlX3N5bmMoc2NvZGVjLT5yZWdtYXApOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc3luYyByZWdtYXAgY2FjaGVcbiIpOwor CQlnb3RvIGVycl9kaXNhYmxlX2NsazsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2Rpc2FibGVf Y2xrOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShzY29kZWMtPmNsa19idXMpOworCitlcnJfZGlz YWJsZV9tb2RjbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNjb2RlYy0+Y2xrX21vZHVsZSk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN1bjhpX2NvZGVjX3J1bnRpbWVfc3Vz cGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN1bjhpX2NvZGVjICpzY29kZWMg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJlZ2NhY2hlX2NhY2hlX29ubHkoc2NvZGVjLT5y ZWdtYXAsIHRydWUpOworCXJlZ2NhY2hlX21hcmtfZGlydHkoc2NvZGVjLT5yZWdtYXApOworCisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNjb2RlYy0+Y2xrX21vZHVsZSk7CisJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKHNjb2RlYy0+Y2xrX2J1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBzdW44aV9jb2RlY19nZXRfaHdfcmF0ZShzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFt cykKK3sKKwl1bnNpZ25lZCBpbnQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlzd2l0 Y2ggKHJhdGUpIHsKKwljYXNlIDgwMDA6CisJY2FzZSA3MzUwOgorCQlyZXR1cm4gMHgwOworCWNh c2UgMTEwMjU6CisJCXJldHVybiAweDE7CisJY2FzZSAxMjAwMDoKKwkJcmV0dXJuIDB4MjsKKwlj YXNlIDE2MDAwOgorCQlyZXR1cm4gMHgzOworCWNhc2UgMjIwNTA6CisJCXJldHVybiAweDQ7CisJ Y2FzZSAyNDAwMDoKKwkJcmV0dXJuIDB4NTsKKwljYXNlIDMyMDAwOgorCQlyZXR1cm4gMHg2Owor CWNhc2UgNDQxMDA6CisJCXJldHVybiAweDc7CisJY2FzZSA0ODAwMDoKKwkJcmV0dXJuIDB4ODsK KwljYXNlIDk2MDAwOgorCQlyZXR1cm4gMHg5OworCWNhc2UgMTkyMDAwOgorCQlyZXR1cm4gMHhh OworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHUzMiBzdW44 aV9jb2RlY19nZXRfbW9kX2ZyZXEoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7 CisJdW5zaWduZWQgaW50IHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJc3dpdGNoIChy YXRlKSB7CisJY2FzZSAxNzY0MDA6CisJY2FzZSA4ODIwMDoKKwljYXNlIDQ0MTAwOgorCWNhc2Ug MjIwNTA6CisJY2FzZSAxMTAyNToKKwkJcmV0dXJuIDIyNTc5MjAwOworCisJY2FzZSAxOTIwMDA6 CisJY2FzZSAxMjgwMDA6CisJY2FzZSA5NjAwMDoKKwljYXNlIDY0MDAwOgorCWNhc2UgNDgwMDA6 CisJY2FzZSAzMjAwMDoKKwljYXNlIDI0MDAwOgorCWNhc2UgMTYwMDA6CisJY2FzZSAxMjAwMDoK KwljYXNlIDgwMDA6CisJCXJldHVybiAyNDU3NjAwMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAw OworCX0KK30KKworc3RhdGljIGludCBzdW44aV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAq ZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzdW44aV9jb2RlYyAqc2NvZGVjID0g c25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShkYWktPmNvZGVjKTsKKwl1MzIgdmFsdWU7CisKKwkv KiBjbG9jayBtYXN0ZXJzICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJf TUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzogLyogREFJIFNsYXZlICovCisJ CXZhbHVlID0gMHgwOyAvKiBDb2RlYyBNYXN0ZXIgKi8KKwkJYnJlYWs7CisJY2FzZSBTTkRfU09D X0RBSUZNVF9DQk1fQ0ZNOiAvKiBEQUkgTWFzdGVyICovCisJCXZhbHVlID0gMHgxOyAvKiBDb2Rl YyBTbGF2ZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJ cmVnbWFwX3VwZGF0ZV9iaXRzKHNjb2RlYy0+cmVnbWFwLCBTVU44SV9BSUYxQ0xLX0NUUkwsCisJ CQkgICBCSVQoU1VOOElfQUlGMUNMS19DVFJMX0FJRjFfTVNUUl9NT0QpLAorCQkJICAgdmFsdWUg PDwgU1VOOElfQUlGMUNMS19DVFJMX0FJRjFfTVNUUl9NT0QpOworCisJLyogY2xvY2sgaW52ZXJz aW9uICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2Ug U05EX1NPQ19EQUlGTVRfTkJfTkY6IC8qIE5vcm1hbCAqLworCQl2YWx1ZSA9IDB4MDsKKwkJYnJl YWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjogLyogSW52ZXJzaW9uICovCisJCXZhbHVl ID0gMHgxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmVn bWFwX3VwZGF0ZV9iaXRzKHNjb2RlYy0+cmVnbWFwLCBTVU44SV9BSUYxQ0xLX0NUUkwsCisJCQkg ICBCSVQoU1VOOElfQUlGMUNMS19DVFJMX0FJRjFfQkNMS19JTlYpLAorCQkJICAgdmFsdWUgPDwg U1VOOElfQUlGMUNMS19DVFJMX0FJRjFfQkNMS19JTlYpOworCXJlZ21hcF91cGRhdGVfYml0cyhz Y29kZWMtPnJlZ21hcCwgU1VOOElfQUlGMUNMS19DVFJMLAorCQkJICAgQklUKFNVTjhJX0FJRjFD TEtfQ1RSTF9BSUYxX0xSQ0tfSU5WKSwKKwkJCSAgIHZhbHVlIDw8IFNVTjhJX0FJRjFDTEtfQ1RS TF9BSUYxX0xSQ0tfSU5WKTsKKworCS8qIERBSSBmb3JtYXQgKi8KKwlzd2l0Y2ggKGZtdCAmIFNO RF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJ CXZhbHVlID0gMHgwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJ dmFsdWUgPSAweDE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJ dmFsdWUgPSAweDI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJY2Fz ZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJdmFsdWUgPSAweDM7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZWdtYXBfdXBkYXRlX2JpdHMoc2NvZGVjLT5y ZWdtYXAsIFNVTjhJX0FJRjFDTEtfQ1RSTCwKKwkJCSAgIEJJVChTVU44SV9BSUYxQ0xLX0NUUkxf QUlGMV9EQVRBX0ZNVCksCisJCQkgICB2YWx1ZSA8PCBTVU44SV9BSUYxQ0xLX0NUUkxfQUlGMV9E QVRBX0ZNVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdW44aV9jb2RlY19od19w YXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJIHN0cnVjdCBz bmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkK K3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRl X2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOworCXN0 cnVjdCBzdW44aV9jb2RlYyAqc2NvZGVjID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShkYWkt PmNvZGVjKTsKKwl1MzIgY2xrX2ZyZXE7CisJaW50IHNhbXBsZV9yYXRlLCBlcnI7CisKKwkvKgor CSAqIFRoZSBDUFUgREFJIGhhbmRsZXMgb25seSBhIHNhbXBsZSBvZiAxNiBiaXRzLiBDb25maWd1 cmUgdGhlCisJICogY29kZWMgdG8gaGFuZGxlIHRoaXMgdHlwZSBvZiBzYW1wbGUgcmVzb2x1dGlv bi4KKwkgKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoc2NvZGVjLT5yZWdtYXAsIFNVTjhJX0FJRjFD TEtfQ1RSTCwKKwkJCSAgIFNVTjhJX0FJRjFDTEtfQ1RSTF9BSUYxX1dPUkRfU0laX01BU0ssCisJ CQkgICBTVU44SV9BSUYxQ0xLX0NUUkxfQUlGMV9XT1JEX1NJWl8xNik7CisKKwlyZWdtYXBfdXBk YXRlX2JpdHMoc2NvZGVjLT5yZWdtYXAsIFNVTjhJX0FJRjFDTEtfQ1RSTCwKKwkJCSAgIFNVTjhJ X0FJRjFDTEtfQ1RSTF9BSUYxX0xSQ0tfRElWX01BU0ssCisJCQkgICBTVU44SV9BSUYxQ0xLX0NU UkxfQUlGMV9MUkNLX0RJVl8xNik7CisKKwlzYW1wbGVfcmF0ZSA9IHN1bjhpX2NvZGVjX2dldF9o d19yYXRlKHBhcmFtcyk7CisJaWYgKHNhbXBsZV9yYXRlIDwgMCkKKwkJcmV0dXJuIHNhbXBsZV9y YXRlOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHNjb2RlYy0+cmVnbWFwLCBTVU44SV9TWVNfU1Jf Q1RSTCwKKwkJCSAgIFNVTjhJX1NZU19TUl9DVFJMX0FJRjFfRlNfTUFTSywKKwkJCSAgIHNhbXBs ZV9yYXRlIDw8IFNVTjhJX1NZU19TUl9DVFJMX0FJRjFfRlMpOworCXJlZ21hcF91cGRhdGVfYml0 cyhzY29kZWMtPnJlZ21hcCwgU1VOOElfU1lTX1NSX0NUUkwsCisJCQkgICBTVU44SV9TWVNfU1Jf Q1RSTF9BSUYyX0ZTX01BU0ssCisJCQkgICBzYW1wbGVfcmF0ZSA8PCBTVU44SV9TWVNfU1JfQ1RS TF9BSUYyX0ZTKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9r Y29udHJvbF9uZXcgc3VuOGlfb3V0cHV0X2xlZnRfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0Nf REFQTV9TSU5HTEUoIkxTbG90IDAiLCBTVU44SV9EQUNfTVhSX1NSQywKKwkJCVNVTjhJX0RBQ19N WFJfU1JDX0RBQ0xfTVhSX1NSQ19BSUYxREEwTCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJM U2xvdCAxIiwgU1VOOElfREFDX01YUl9TUkMsCisJCQlTVU44SV9EQUNfTVhSX1NSQ19EQUNMX01Y Ul9TUkNfQUlGMURBMUwsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiREFDTCIsIFNVTjhJX0RB Q19NWFJfU1JDLAorCQkJU1VOOElfREFDX01YUl9TUkNfREFDTF9NWFJfU1JDX0FJRjJEQUNMLCAx LCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkFEQ0wiLCBTVU44SV9EQUNfTVhSX1NSQywKKwkJCVNV TjhJX0RBQ19NWFJfU1JDX0RBQ0xfTVhSX1NSQ19BRENMLCAxLCAwKSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdW44aV9vdXRwdXRfcmlnaHRfbWl4ZXJfY29u dHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIlJTbG90IDAiLCBTVU44SV9EQUNfTVhSX1NS QywKKwkJCVNVTjhJX0RBQ19NWFJfU1JDX0RBQ1JfTVhSX1NSQ19BSUYxREEwUiwgMSwgMCksCisJ U09DX0RBUE1fU0lOR0xFKCJSU2xvdCAxIiwgU1VOOElfREFDX01YUl9TUkMsCisJCQlTVU44SV9E QUNfTVhSX1NSQ19EQUNSX01YUl9TUkNfQUlGMURBMVIsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdM RSgiREFDUiIsIFNVTjhJX0RBQ19NWFJfU1JDLAorCQkJU1VOOElfREFDX01YUl9TUkNfREFDUl9N WFJfU1JDX0FJRjJEQUNSLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkFEQ1IiLCBTVU44SV9E QUNfTVhSX1NSQywKKwkJCVNVTjhJX0RBQ19NWFJfU1JDX0RBQ1JfTVhSX1NSQ19BRENSLCAxLCAw KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBzdW44aV9j b2RlY19kYXBtX3dpZGdldHNbXSA9IHsKKwkvKiBEaWdpdGFsIHBhcnRzIG9mIHRoZSBEQUNzICov CisJU05EX1NPQ19EQVBNX1NVUFBMWSgiREFDIiwgU1VOOElfREFDX0RJR19DVFJMLCBTVU44SV9E QUNfRElHX0NUUkxfRU5EQSwKKwkJCSAgICAwLCBOVUxMLCAwKSwKKworCS8qIEFuYWxvZyBEQUMg Ki8KKwlTTkRfU09DX0RBUE1fREFDKCJEaWdpdGFsIExlZnQgREFDIiwgIlBsYXliYWNrIiwgU1VO OElfQUlGMV9EQUNEQVRfQ1RSTCwKKwkJCSBTVU44SV9BSUYxX0RBQ0RBVF9DVFJMX0FJRjFfREEw TF9FTkEsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIkRpZ2l0YWwgUmlnaHQgREFDIiwgIlBsYXli YWNrIiwgU1VOOElfQUlGMV9EQUNEQVRfQ1RSTCwKKwkJCSBTVU44SV9BSUYxX0RBQ0RBVF9DVFJM X0FJRjFfREEwUl9FTkEsIDApLAorCisJLyogREFDIE1peGVycyAqLworCVNORF9TT0NfREFQTV9N SVhFUigiTGVmdCBEQUMgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICBzdW44aV9v dXRwdXRfbGVmdF9taXhlcl9jb250cm9scywKKwkJCSAgIEFSUkFZX1NJWkUoc3VuOGlfb3V0cHV0 X2xlZnRfbWl4ZXJfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IERBQyBN aXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgIHN1bjhpX291dHB1dF9yaWdodF9taXhl cl9jb250cm9scywKKwkJCSAgIEFSUkFZX1NJWkUoc3VuOGlfb3V0cHV0X3JpZ2h0X21peGVyX2Nv bnRyb2xzKSksCisKKwkvKiBDbG9ja3MgKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZKCJNT0RDTEsg QUZJMSIsIFNVTjhJX01PRF9DTEtfRU5BLAorCQkJICAgIFNVTjhJX01PRF9DTEtfRU5BX0FJRjEs IDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIk1PRENMSyBEQUMiLCBTVU44SV9N T0RfQ0xLX0VOQSwKKwkJCSAgICBTVU44SV9NT0RfQ0xLX0VOQV9EQUMsIDAsIE5VTEwsIDApLAor CVNORF9TT0NfREFQTV9TVVBQTFkoIkFJRjEiLCBTVU44SV9TWVNDTEtfQ1RMLAorCQkJICAgIFNV TjhJX1NZU0NMS19DVExfQUlGMUNMS19FTkEsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9T VVBQTFkoIlNZU0NMSyIsIFNVTjhJX1NZU0NMS19DVEwsCisJCQkgICAgU1VOOElfU1lTQ0xLX0NU TF9TWVNDTEtfRU5BLCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9TVVBQTFkoIkFJRjEg UExMIiwgU1VOOElfU1lTQ0xLX0NUTCwKKwkJCSAgICBTVU44SV9TWVNDTEtfQ1RMX0FJRjFDTEtf U1JDX1BMTCwgMCwgTlVMTCwgMCksCisJLyogSW52ZXJzaW9uIGFzIDA9QUlGMSwgMT1BSUYyICov CisJU05EX1NPQ19EQVBNX1NVUFBMWSgiU1lTQ0xLIEFJRjEiLCBTVU44SV9TWVNDTEtfQ1RMLAor CQkJICAgIFNVTjhJX1NZU0NMS19DVExfU1lTQ0xLX1NSQywgMSwgTlVMTCwgMCksCisKKwkvKiBN b2R1bGUgcmVzZXQgKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZKCJSU1QgQUlGMSIsIFNVTjhJX01P RF9SU1RfQ1RMLAorCQkJICAgIFNVTjhJX01PRF9SU1RfQ1RMX0FJRjEsIDAsIE5VTEwsIDApLAor CVNORF9TT0NfREFQTV9TVVBQTFkoIlJTVCBEQUMiLCBTVU44SV9NT0RfUlNUX0NUTCwKKwkJCSAg ICBTVU44SV9NT0RfUlNUX0NUTF9EQUMsIDAsIE5VTEwsIDApLAorCisJU05EX1NPQ19EQVBNX09V VFBVVCgiSFAiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRl IHN1bjhpX2NvZGVjX2RhcG1fcm91dGVzW10gPSB7CisJLyogQ2xvY2sgUm91dGVzICovCisJeyAi QUlGMSIsIE5VTEwsICJTWVNDTEsgQUlGMSIgfSwKKwl7ICJBSUYxIFBMTCIsIE5VTEwsICJBSUYx IiB9LAorCXsgIlJTVCBBSUYxIiwgTlVMTCwgIkFJRjEgUExMIiB9LAorCXsgIk1PRENMSyBBRkkx IiwgTlVMTCwgIlJTVCBBSUYxIiB9LAorCXsgIkRBQyIsIE5VTEwsICJNT0RDTEsgQUZJMSIgfSwK KworCXsgIlJTVCBEQUMiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIk1PRENMSyBEQUMiLCBOVUxM LCAiUlNUIERBQyIgfSwKKwl7ICJEQUMiLCBOVUxMLCAiTU9EQ0xLIERBQyIgfSwKKworCS8qIERB QyBSb3V0ZXMgKi8KKwl7ICJEaWdpdGFsIExlZnQgREFDIiwgTlVMTCwgIkRBQyIgfSwKKwl7ICJE aWdpdGFsIFJpZ2h0IERBQyIsIE5VTEwsICJEQUMiIH0sCisKKwkvKiBEQUMgTWl4ZXIgUm91dGVz ICovCisJeyAiTGVmdCBEQUMgTWl4ZXIiLCAiTFNsb3QgMCIsICJEaWdpdGFsIExlZnQgREFDIn0s CisJeyAiUmlnaHQgREFDIE1peGVyIiwgIlJTbG90IDAiLCAiRGlnaXRhbCBSaWdodCBEQUMifSwK KworCS8qIEVuZCBvZiByb3V0ZSA6IEhQIG91dCAqLworCXsgIkhQIiwgTlVMTCwgIkxlZnQgREFD IE1peGVyIiB9LAorCXsgIkhQIiwgTlVMTCwgIlJpZ2h0IERBQyBNaXhlciIgfSwKK307CisKK3N0 YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHN1bjhpX2NvZGVjX2RhaV9vcHMgPSB7CisJLmh3 X3BhcmFtcyA9IHN1bjhpX2NvZGVjX2h3X3BhcmFtcywKKwkuc2V0X2ZtdCA9IHN1bjhpX3NldF9m bXQsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBzdW44aV9jb2RlY19k YWkgPSB7CisJLm5hbWUgPSAic3VuOGkiLAorCS8qIHBsYXliYWNrIGNhcGFiaWxpdGllcyAqLwor CS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxz X21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFU RV84MDAwXzE5MjAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9 LAorCS8qIHBjbSBvcGVyYXRpb25zICovCisJLm9wcyA9ICZzdW44aV9jb2RlY19kYWlfb3BzLAor fTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzdW44aV9zb2NfY29kZWMg PSB7CisJLmNvbXBvbmVudF9kcml2ZXIgPSB7CisJCS5kYXBtX3dpZGdldHMJCT0gc3VuOGlfY29k ZWNfZGFwbV93aWRnZXRzLAorCQkubnVtX2RhcG1fd2lkZ2V0cwk9IEFSUkFZX1NJWkUoc3VuOGlf Y29kZWNfZGFwbV93aWRnZXRzKSwKKwkJLmRhcG1fcm91dGVzCQk9IHN1bjhpX2NvZGVjX2RhcG1f cm91dGVzLAorCQkubnVtX2RhcG1fcm91dGVzCT0gQVJSQVlfU0laRShzdW44aV9jb2RlY19kYXBt X3JvdXRlcyksCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBz dW44aV9jb2RlY19yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cwk9IDMyLAorCS5yZWdfc3Ry aWRlCT0gNCwKKwkudmFsX2JpdHMJPSAzMiwKKwkubWF4X3JlZ2lzdGVyCT0gU1VOOElfREFDX01Y Ul9TUkMsCisKKwkuY2FjaGVfdHlwZQk9IFJFR0NBQ0hFX0ZMQVQsCit9OworCitzdGF0aWMgaW50 IHN1bjhpX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IHJlc291cmNlICpyZXNfYmFzZTsKKwlzdHJ1Y3Qgc3VuOGlfY29kZWMgKnNjb2RlYzsKKwl2 b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IHJldDsKKworCXNjb2RlYyA9IGRldm1fa3phbGxvYygm cGRldi0+ZGV2LCBzaXplb2YoKnNjb2RlYyksIEdGUF9LRVJORUwpOworCWlmICghc2NvZGVjKQor CQlyZXR1cm4gLUVOT01FTTsKKworCXNjb2RlYy0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXNjb2Rl Yy0+Y2xrX21vZHVsZSA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAibW9kIik7CisJaWYgKElT X0VSUihzY29kZWMtPmNsa19tb2R1bGUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxl ZCB0byBnZXQgdGhlIG1vZHVsZSBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHNjb2RlYy0+ Y2xrX21vZHVsZSk7CisJfQorCisJc2NvZGVjLT5jbGtfYnVzID0gZGV2bV9jbGtfZ2V0KCZwZGV2 LT5kZXYsICJidXMiKTsKKwlpZiAoSVNfRVJSKHNjb2RlYy0+Y2xrX2J1cykpIHsKKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCB0aGUgYnVzIGNsb2NrXG4iKTsKKwkJcmV0dXJu IFBUUl9FUlIoc2NvZGVjLT5jbGtfYnVzKTsKKwl9CisKKwlyZXNfYmFzZSA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1h cF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXNfYmFzZSk7CisJaWYgKElTX0VSUihiYXNlKSkgewor CQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gbWFwIHRoZSByZWdpc3RlcnNcbiIpOwor CQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKKwl9CisKKwlzY29kZWMtPnJlZ21hcCA9IGRldm1fcmVn bWFwX2luaXRfbW1pbygmcGRldi0+ZGV2LCBiYXNlLAorCQkJCQkgICAgICAgJnN1bjhpX2NvZGVj X3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoc2NvZGVjLT5yZWdtYXApKSB7CisJCWRldl9l cnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgb3VyIHJlZ21hcFxuIik7CisJCXJldHVy biBQVFJfRVJSKHNjb2RlYy0+cmVnbWFwKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCBzY29kZWMpOworCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisJaWYgKCFw bV9ydW50aW1lX2VuYWJsZWQoJnBkZXYtPmRldikpIHsKKwkJcmV0ID0gc3VuOGlfY29kZWNfcnVu dGltZV9yZXN1bWUoJnBkZXYtPmRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9wbV9kaXNh YmxlOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJnBkZXYtPmRldiwgJnN1 bjhpX3NvY19jb2RlYywKKwkJCQkgICAgICZzdW44aV9jb2RlY19kYWksIDEpOworCWlmIChyZXQp IHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjXG4iKTsK KwkJZ290byBlcnJfc3VzcGVuZDsKKwl9CisKKwlyZXR1cm4gcmV0OworCitlcnJfc3VzcGVuZDoK KwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgmcGRldi0+ZGV2KSkKKwkJc3VuOGlf Y29kZWNfcnVudGltZV9zdXNwZW5kKCZwZGV2LT5kZXYpOworCitlcnJfcG1fZGlzYWJsZToKKwlw bV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IHN1bjhpX2NvZGVjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor eworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsKKwlzdHJ1Y3Qgc3VuOGlfY29kZWMgKnNjb2RlYyA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0 YShjYXJkKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlpZiAoIXBtX3J1 bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgmcGRldi0+ZGV2KSkKKwkJc3VuOGlfY29kZWNfcnVudGlt ZV9zdXNwZW5kKCZwZGV2LT5kZXYpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZwZGV2 LT5kZXYpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShzY29kZWMtPmNsa19tb2R1bGUpOworCWNs a19kaXNhYmxlX3VucHJlcGFyZShzY29kZWMtPmNsa19idXMpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjhpX2NvZGVjX29mX21hdGNoW10g PSB7CisJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOGktYTMzLWNvZGVjIiB9LAorCXt9 Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3VuOGlfY29kZWNfb2ZfbWF0Y2gpOworCitz dGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc3VuOGlfY29kZWNfcG1fb3BzID0geworCVNF VF9SVU5USU1FX1BNX09QUyhzdW44aV9jb2RlY19ydW50aW1lX3N1c3BlbmQsCisJCQkgICBzdW44 aV9jb2RlY19ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIHN1bjhpX2NvZGVjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9 ICJzdW44aS1jb2RlYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFi bGUgPSBzdW44aV9jb2RlY19vZl9tYXRjaCwKKwkJLnBtID0gJnN1bjhpX2NvZGVjX3BtX29wcywK Kwl9LAorCS5wcm9iZSA9IHN1bjhpX2NvZGVjX3Byb2JlLAorCS5yZW1vdmUgPSBzdW44aV9jb2Rl Y19yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzdW44aV9jb2RlY19kcml2ZXIp OworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFsbHdpbm5lciBBMzMgKHN1bjhpKSBjb2RlYyBkcml2 ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk15bMOobmUgSm9zc2VyYW5kIDxteWxlbmUuam9zc2VyYW5k QGZyZWUtZWxlY3Ryb25zLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9B TElBUygicGxhdGZvcm06c3VuOGktY29kZWMiKTsKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK