From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 10/12] ASoC: AMD: add AMD ASoC ACP-I2S driver (v2) Date: Thu, 6 Aug 2015 10:25:10 -0400 Message-ID: <1438871112-25946-10-git-send-email-alexander.deucher@amd.com> References: <1438871112-25946-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yk0-f182.google.com (mail-yk0-f182.google.com [209.85.160.182]) by gabe.freedesktop.org (Postfix) with ESMTPS id 620F17A10D for ; Thu, 6 Aug 2015 07:25:28 -0700 (PDT) Received: by ykax123 with SMTP id x123so63811170yka.1 for ; Thu, 06 Aug 2015 07:25:27 -0700 (PDT) In-Reply-To: <1438871112-25946-1-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: broonie@kernel.org, airlied@gmail.com, dri-devel@lists.freedesktop.org, alsa-devel@alsa-project.org Cc: Maruthi Srinivas Bayyavarapu , lgirdwood@gmail.com, perex@perex.cz List-Id: dri-devel@lists.freedesktop.org RnJvbTogTWFydXRoaSBTcmluaXZhcyBCYXl5YXZhcmFwdSA8TWFydXRoaS5CYXl5YXZhcmFwdUBh bWQuY29tPgoKQUNQIElQIGJsb2NrIGNvbnNpc3RzIG9mIGRlZGljYXRlZCBETUEgYW5kIEkyUyBi bG9ja3MuIFRoZSBQQ00gZHJpdmVyCnByb3ZpZGVzIHRoZSBETUEgYW5kIENQVSBEQUkgY29tcG9u ZW50cyB0byBBTFNBIGNvcmUuIE1hY2hpbmUgZHJpdmVyCnByb3ZpZGVzIHRoZSBhdWRpbyBmdW5j dGlvbmFsaXR5IHRvZ2V0aGVyIHdpdGggdGhlIFBDTSBkcml2ZXIgYW5kIHJ0Mjg2CmNvZGVjIGRy aXZlci4KCnYyOiBzcXVhc2ggaW4gS2NvbmZpZyBmaXgKClNpZ25lZC1vZmYtYnk6IE1hcnV0aGkg QmF5eWF2YXJhcHUgPG1hcnV0aGkuYmF5eWF2YXJhcHVAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IEFs ZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IE11cmFs aSBLcmlzaG5hIFZlbXVyaSA8bXVyYWxpLWtyaXNobmEudmVtdXJpQGFtZC5jb20+Ci0tLQogc291 bmQvc29jL0tjb25maWcgICAgICAgICAgIHwgICAyICstCiBzb3VuZC9zb2MvTWFrZWZpbGUgICAg ICAgICAgfCAgIDEgKwogc291bmQvc29jL2FtZC9LY29uZmlnICAgICAgIHwgIDEzICsKIHNvdW5k L3NvYy9hbWQvTWFrZWZpbGUgICAgICB8ICAxMSArCiBzb3VuZC9zb2MvYW1kL2FjcC1wY20tZG1h LmMgfCA2NjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNv dW5kL3NvYy9hbWQvYWNwLXJ0Mjg2LmMgICB8IDI2NSArKysrKysrKysrKysrKysrKysKIDYgZmls ZXMgY2hhbmdlZCwgOTUyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzb3VuZC9zb2MvYW1kL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9z b2MvYW1kL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL2FtZC9hY3AtcGNt LWRtYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL2FtZC9hY3AtcnQyODYuYwoKZGlm ZiAtLWdpdCBhL3NvdW5kL3NvYy9LY29uZmlnIGIvc291bmQvc29jL0tjb25maWcKaW5kZXggMmFl OTYxOS4uNTk2NTY1NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL0tjb25maWcKKysrIGIvc291bmQv c29jL0tjb25maWcKQEAgLTMyLDYgKzMyLDcgQEAgY29uZmlnIFNORF9TT0NfR0VORVJJQ19ETUFF TkdJTkVfUENNCiAKICMgQWxsIHRoZSBzdXBwb3J0ZWQgU29Dcwogc291cmNlICJzb3VuZC9zb2Mv YWRpL0tjb25maWciCitzb3VyY2UgInNvdW5kL3NvYy9hbWQvS2NvbmZpZyIKIHNvdXJjZSAic291 bmQvc29jL2F0bWVsL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9hdTF4L0tjb25maWciCiBz b3VyY2UgInNvdW5kL3NvYy9iY20vS2NvbmZpZyIKQEAgLTY3LDQgKzY4LDMgQEAgc291cmNlICJz b3VuZC9zb2MvY29kZWNzL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9nZW5lcmljL0tjb25m aWciCiAKIGVuZGlmCSMgU05EX1NPQwotCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvTWFrZWZpbGUg Yi9zb3VuZC9zb2MvTWFrZWZpbGUKaW5kZXggZTE4OTkwMy4uZTJiMDE3YSAxMDA2NDQKLS0tIGEv c291bmQvc29jL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9NYWtlZmlsZQpAQCAtNDEsMyArNDEs NCBAQCBvYmotJChDT05GSUdfU05EX1NPQykJKz0gdHh4OS8KIG9iai0kKENPTkZJR19TTkRfU09D KQkrPSB1eDUwMC8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSB4dGVuc2EvCiBvYmotJChDT05G SUdfU05EX1NPQykJKz0genRlLworb2JqLSQoQ09ORklHX1NORF9TT0MpICAgKz0gYW1kLwpkaWZm IC0tZ2l0IGEvc291bmQvc29jL2FtZC9LY29uZmlnIGIvc291bmQvc29jL2FtZC9LY29uZmlnCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3Njc3ZGUKLS0tIC9kZXYvbnVsbAor KysgYi9zb3VuZC9zb2MvYW1kL0tjb25maWcKQEAgLTAsMCArMSwxMyBAQAorIGNvbmZpZyBTTkRf U09DX0FNRF9DWl9SVDI4Nl9NQUNICisgICAgICAgIHRyaXN0YXRlICJBTUQgQVNvQyBBdWRpbyBk cml2ZXIgZm9yIENhcnJpem8gd2l0aCBydDI4NiBjb2RlYyIKKwlzZWxlY3QgU05EX1NPQ19SVDI4 NgorCXNlbGVjdCBTTkRfU09DX0FNRF9BQ1AKKyAgICAgICAgZGVwZW5kcyBvbiBJMkNfREVTSUdO V0FSRV9QTEFURk9STQorICAgICAgICBoZWxwCisgICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJs ZXMgQU1EIEkyUyBBdWRpbyBzdXBwb3J0IG9uIENhcnJpem8KKwkgICB3aXRoIEFMQzI4OCBjb2Rl Yy4KKyBjb25maWcgU05EX1NPQ19BTURfQUNQCisgICAgICAgIHRyaXN0YXRlICJBTUQgQXVkaW8g Q29wcm9jZXNzb3Igc3VwcG9ydCIKKyAgICAgICAgZGVwZW5kcyBvbiBEUk1fQU1EX0dOQl9CVVMK KyAgICAgICAgaGVscAorICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNQIHN1cHBvcnQg KERNQSxJMlMpIG9uIEFNRCBwbGF0Zm9ybXMuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL01h a2VmaWxlIGIvc291bmQvc29jL2FtZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi42M2I2ZjgzCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2FtZC9NYWtl ZmlsZQpAQCAtMCwwICsxLDExIEBACitjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybSAtSWRyaXZl cnMvZ3B1L2RybS9hbWRzb2MvCitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vYW1kc29j L2luY2x1ZGUvCitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYnVz LworY2NmbGFncy15ICs9IC1JZHJpdmVycy9ncHUvZHJtL2FtZC9hY3AvaW5jbHVkZQorY2NmbGFn cy15ICs9IC1JZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlLworY2NmbGFncy15ICs9IC1JZHJp dmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL2FjcAorc25kLXNvYy1hY3AtcGNtLW9i anMJOj0gYWNwLXBjbS1kbWEubworc25kLXNvYy1hY3AtcnQyODYtbWFjaC1vYmpzIDo9IGFjcC1y dDI4Ni5vCisKK29iai0kKENPTkZJR19TTkRfU09DX0FNRF9BQ1ApICs9IHNuZC1zb2MtYWNwLXBj bS5vCitvYmotJChDT05GSUdfU05EX1NPQ19BTURfQ1pfUlQyODZfTUFDSCkgKz0gc25kLXNvYy1h Y3AtcnQyODYtbWFjaC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL2FjcC1wY20tZG1hLmMg Yi9zb3VuZC9zb2MvYW1kL2FjcC1wY20tZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMGY1ODk1NwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9hbWQvYWNwLXBj bS1kbWEuYwpAQCAtMCwwICsxLDY2MSBAQAorLyoKKyAqIEFNRCBBTFNBIFNvQyBQQ00gRHJpdmVy CisgKgorICogQ29weXJpZ2h0IDIwMTQtMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMu CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hU IEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCisgKgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0 Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgv ZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4K KyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1 ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1 ZGUgImFtZF9hY3AuaCIKKyNpbmNsdWRlICJhbWRfZ25iX2J1cy5oIgorCisjZGVmaW5lIFBMQVlC QUNLX01JTl9OVU1fUEVSSU9EUyAgICAyCisjZGVmaW5lIFBMQVlCQUNLX01BWF9OVU1fUEVSSU9E UyAgICAyCisjZGVmaW5lIFBMQVlCQUNLX01BWF9QRVJJT0RfU0laRSAgICAxNjM4NAorI2RlZmlu ZSBQTEFZQkFDS19NSU5fUEVSSU9EX1NJWkUgICAgMTAyNAorI2RlZmluZSBDQVBUVVJFX01JTl9O VU1fUEVSSU9EUyAgICAgMgorI2RlZmluZSBDQVBUVVJFX01BWF9OVU1fUEVSSU9EUyAgICAgMgor I2RlZmluZSBDQVBUVVJFX01BWF9QRVJJT0RfU0laRSAgICAgMTYzODQKKyNkZWZpbmUgQ0FQVFVS RV9NSU5fUEVSSU9EX1NJWkUgICAgIDEwMjQKKworI2RlZmluZSBOVU1fRFNDUlNfUEVSX0NIQU5O RUwgMgorCisjZGVmaW5lIE1BWF9CVUZGRVIgKFBMQVlCQUNLX01BWF9QRVJJT0RfU0laRSAqIFBM QVlCQUNLX01BWF9OVU1fUEVSSU9EUykKKyNkZWZpbmUgTUlOX0JVRkZFUiBNQVhfQlVGRkVSCisK KyNkZWZpbmUgVFdPX0NIQU5ORUxfU1VQUE9SVCAgICAgMgkvKiB1cCB0byAyLjAgKi8KKyNkZWZp bmUgRk9VUl9DSEFOTkVMX1NVUFBPUlQgICAgNAkvKiB1cCB0byAzLjEgKi8KKyNkZWZpbmUgU0lY X0NIQU5ORUxfU1VQUE9SVCAgICAgNgkvKiB1cCB0byA1LjEgKi8KKyNkZWZpbmUgRUlHSFRfQ0hB Tk5FTF9TVVBQT1JUICAgOAkvKiB1cCB0byA3LjEgKi8KKworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHNuZF9wY21faGFyZHdhcmUgYWNwX3BjbV9oYXJkd2FyZV9wbGF5YmFjayA9IHsKKwkuaW5mbyA9 IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJB TlNGRVIgfCBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJ RCB8IFNORFJWX1BDTV9JTkZPX0JBVENIIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRS Vl9QQ01fSU5GT19SRVNVTUUsCisJLyogZm9ybWF0cyxyYXRlcyxjaGFubmVscyAgYmFzZWQgb24g aTJzIGRvYy4gKi8KKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJU05E UlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkuY2hhbm5l bHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFU RV84MDAwXzk2MDAwLAorCS5yYXRlX21pbiA9IDgwMDAsCisJLnJhdGVfbWF4ID0gOTYwMDAsCisJ LmJ1ZmZlcl9ieXRlc19tYXggPSBQTEFZQkFDS19NQVhfTlVNX1BFUklPRFMgKiBQTEFZQkFDS19N QVhfUEVSSU9EX1NJWkUsCisJLnBlcmlvZF9ieXRlc19taW4gPSBQTEFZQkFDS19NSU5fUEVSSU9E X1NJWkUsCisJLnBlcmlvZF9ieXRlc19tYXggPSBQTEFZQkFDS19NQVhfUEVSSU9EX1NJWkUsCisJ LnBlcmlvZHNfbWluID0gUExBWUJBQ0tfTUlOX05VTV9QRVJJT0RTLAorCS5wZXJpb2RzX21heCA9 IFBMQVlCQUNLX01BWF9OVU1fUEVSSU9EUywKKwkuZmlmb19zaXplID0gMCwKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBhY3BfcGNtX2hhcmR3YXJlX2NhcHR1cmUg PSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9J TkZPX0JMT0NLX1RSQU5TRkVSIHwgU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9J TkZPX01NQVBfVkFMSUQgfCBTTkRSVl9QQ01fSU5GT19CQVRDSCB8CisJICAgIFNORFJWX1BDTV9J TkZPX1BBVVNFIHwgU05EUlZfUENNX0lORk9fUkVTVU1FLAorCS8qIGZvcm1hdHMscmF0ZXMsY2hh bm5lbHMgIGJhc2VkIG9uIGkycyBkb2MuICovCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklU X1MxNl9MRSB8CisJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9T MzJfTEUsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLnJhdGVz ID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4gPSA4MDAwLAorCS5yYXRl X21heCA9IDQ4MDAwLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gQ0FQVFVSRV9NQVhfTlVNX1BFUklP RFMgKiBDQVBUVVJFX01BWF9QRVJJT0RfU0laRSwKKwkucGVyaW9kX2J5dGVzX21pbiA9IENBUFRV UkVfTUlOX1BFUklPRF9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gQ0FQVFVSRV9NQVhfUEVS SU9EX1NJWkUsCisJLnBlcmlvZHNfbWluID0gQ0FQVFVSRV9NSU5fTlVNX1BFUklPRFMsCisJLnBl cmlvZHNfbWF4ID0gQ0FQVFVSRV9NQVhfTlVNX1BFUklPRFMsCisJLmZpZm9fc2l6ZSA9IDAsCit9 OworCitzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEgeworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAq cGxheV9zdHJlYW07CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpjYXB0dXJlX3N0cmVhbTsK KwlzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXY7CisJc3RydWN0IGFjcF9pcnFfcHJ2ICpp cHJ2OworfTsKKworc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhIHsKKwlzdHJ1Y3QgYW1kX2Fj cF9kZXZpY2UgKmFjcF9kZXY7CisJc3RydWN0IHBhZ2UgKnBnOworCXN0cnVjdCBhY3BfZG1hX2Nv bmZpZyAqZG1hX2NvbmZpZzsKKwlzdHJ1Y3QgYWNwX2kyc19jb25maWcgICppMnNfY29uZmlnOwor CXVuc2lnbmVkIGludCBvcmRlcjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19j b21wb25lbnRfZHJpdmVyIGR3X2kyc19jb21wb25lbnQgPSB7CisJLm5hbWUgPSAiZHctaTJzLjAi LAorfTsKKworc3RhdGljIHZvaWQgYWNwX3BjbV9wZXJpb2RfZWxhcHNlZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHUxNiBwbGF5X2ludHIsCisJCQkJCQkJdTE2IGNhcHR1cmVfaW50cikKK3sKKwlzdHJ1 Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEg KmlycV9kYXRhID0KKwkgICAgKHN0cnVjdCBhdWRpb19kcnZfZGF0YSAqKWRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCisJLyogSW5mb3JtIEFMU0EgYWJvdXQgdGhlIHBlcmlvZCBlbGFwc2VkIChvbmUg b3V0IG9mIHR3byBwZXJpb2RzKSAqLworCWlmIChwbGF5X2ludHIpCisJCXN1YnN0cmVhbSA9IGly cV9kYXRhLT5wbGF5X3N0cmVhbTsKKwllbHNlIGlmIChjYXB0dXJlX2ludHIpCisJCXN1YnN0cmVh bSA9IGlycV9kYXRhLT5jYXB0dXJlX3N0cmVhbTsKKworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUg JiYgc25kX3BjbV9ydW5uaW5nKHN1YnN0cmVhbSkpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQo c3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhY3BfZG1hX29wZW4oc3RydWN0IHNuZF9wY21f c3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHNuZF9wY21f cnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX3NvY19w Y21fcnVudGltZSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdWRp b19kcnZfZGF0YSAqaW50cl9kYXRhID0KKwkgICAgKHN0cnVjdCBhdWRpb19kcnZfZGF0YSAqKWRl dl9nZXRfZHJ2ZGF0YShwcnRkLT5wbGF0Zm9ybS0+ZGV2KTsKKworCXN0cnVjdCBhdWRpb19zdWJz dHJlYW1fZGF0YSAqYWRhdGEgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgYXVkaW9fc3Vic3Ry ZWFtX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYWRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlhZGF0YS0+ZG1hX2NvbmZpZyA9CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qg YWNwX2RtYV9jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYWRhdGEtPmRtYV9jb25maWcgPT0g TlVMTCkgeworCQlrZnJlZShhZGF0YSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWFkYXRh LT5pMnNfY29uZmlnID0KKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BfaTJzX2NvbmZpZyks IEdGUF9LRVJORUwpOworCWlmIChhZGF0YS0+aTJzX2NvbmZpZyA9PSBOVUxMKSB7CisJCWtmcmVl KGFkYXRhLT5kbWFfY29uZmlnKTsKKwkJa2ZyZWUoYWRhdGEpOworCQlyZXR1cm4gLUVOT01FTTsK Kwl9CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFD SykKKwkJcnVudGltZS0+aHcgPSBhY3BfcGNtX2hhcmR3YXJlX3BsYXliYWNrOworCWVsc2UgaWYg KHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkKKwkJcnVudGlt ZS0+aHcgPSBhY3BfcGNtX2hhcmR3YXJlX2NhcHR1cmU7CisJZWxzZSB7CisJCXByX2VycigiRXJy b3IgaW4gc3RyZWFtIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBz bmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLAorCQkJCQkgICAgU05EUlZfUENN X0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2Vycigic25kX3BjbV9o d19jb25zdHJhaW50X2ludGVnZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlh ZGF0YS0+YWNwX2RldiA9IGludHJfZGF0YS0+YWNwX2RldjsKKwlydW50aW1lLT5wcml2YXRlX2Rh dGEgPSBhZGF0YTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFN X1BMQVlCQUNLKQorCQlpbnRyX2RhdGEtPnBsYXlfc3RyZWFtID0gc3Vic3RyZWFtOworCWVsc2UK KwkJaW50cl9kYXRhLT5jYXB0dXJlX3N0cmVhbSA9IHN1YnN0cmVhbTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGFjcF9kbWFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVh bSAqc3Vic3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykK K3sKKwlpbnQgc3RhdHVzOworCXVpbnQ2NF90IHNpemU7CisJc3RydWN0IHNuZF9kbWFfYnVmZmVy ICpkbWFfYnVmZmVyOworCXN0cnVjdCBwYWdlICpwZzsKKwl1MTYgbnVtX29mX3BhZ2VzOworCisJ c3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFt X2RhdGEgKnJ0ZDsKKwlzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXY7CisKKwlpZiAoV0FS Tl9PTighc3Vic3RyZWFtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkbWFfYnVmZmVyID0gJnN1 YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKworCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJ cnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKFdBUk5fT04oIXJ0ZCkpCisJCXJl dHVybiAtRUlOVkFMOworCWFjcF9kZXYgPSBydGQtPmFjcF9kZXY7CisKKwlzaXplID0gcGFyYW1z X2J1ZmZlcl9ieXRlcyhwYXJhbXMpOworCXN0YXR1cyA9IHNuZF9wY21fbGliX21hbGxvY19wYWdl cyhzdWJzdHJlYW0sIHNpemUpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOwor CisJbWVtc2V0KHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEsIDAsIHBhcmFtc19idWZmZXJf Ynl0ZXMocGFyYW1zKSk7CisJcGcgPSB2aXJ0X3RvX3BhZ2Uoc3Vic3RyZWFtLT5kbWFfYnVmZmVy LmFyZWEpOworCisJaWYgKE5VTEwgIT0gcGcpIHsKKwkJLyogU2F2ZSBmb3IgcnVudGltZSBwcml2 YXRlIGRhdGEgKi8KKwkJcnRkLT5wZyA9IHBnOworCQlydGQtPm9yZGVyID0gZ2V0X29yZGVyKHNp emUpOworCisJCS8qTGV0IEFDUCBrbm93IHRoZSBBbGxvY2F0ZWQgbWVtb3J5ICovCisJCW51bV9v Zl9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSkgPj4gUEFHRV9TSElGVDsKKworCQkvKiBGaWxsIHRo ZSBwYWdlIHRhYmxlIGVudHJpZXMgaW4gQUNQIFNSQU0gKi8KKworCQlydGQtPmRtYV9jb25maWct PnBnID0gcGc7CisJCXJ0ZC0+ZG1hX2NvbmZpZy0+c2l6ZSA9IHNpemU7CisJCXJ0ZC0+ZG1hX2Nv bmZpZy0+bnVtX29mX3BhZ2VzID0gbnVtX29mX3BhZ2VzOworCQlydGQtPmRtYV9jb25maWctPmRp cmVjdGlvbiA9IHN1YnN0cmVhbS0+c3RyZWFtOworCisJCWFjcF9kZXYtPmNvbmZpZ19kbWEoYWNw X2RldiwgcnRkLT5kbWFfY29uZmlnKTsKKworCQlzdGF0dXMgPSAwOworCX0gZWxzZSB7CisJCXN0 YXR1cyA9IC1FTk9NRU07CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYWNw X2RtYV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJl dHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBzbmRf cGNtX3VmcmFtZXNfdCBhY3BfZG1hX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpz dWJzdHJlYW0pCit7CisJdTMyIHBvcyA9IDA7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVu dGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEg KnJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFj cF9kZXYgPSBydGQtPmFjcF9kZXY7CisKKwlwb3MgPSBhY3BfZGV2LT51cGRhdGVfZG1hX3BvaW50 ZXIoYWNwX2Rldiwgc3Vic3RyZWFtLT5zdHJlYW0sCisJCQkJZnJhbWVzX3RvX2J5dGVzKHJ1bnRp bWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKSk7CisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhydW50 aW1lLCBwb3MpOworCit9CisKK3N0YXRpYyBpbnQgYWNwX2RtYV9tbWFwKHN0cnVjdCBzbmRfcGNt X3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7 CisJcmV0dXJuIHNuZF9wY21fbGliX2RlZmF1bHRfbW1hcChzdWJzdHJlYW0sIHZtYSk7Cit9CisK K3N0YXRpYyBpbnQgYWNwX2RtYV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vi c3RyZWFtKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9 IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKnJ0ZCA9 IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYg PSBydGQtPmFjcF9kZXY7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NU UkVBTV9QTEFZQkFDSykgeworCisJCWFjcF9kZXYtPmNvbmZpZ19kbWFfY2hhbm5lbChhY3BfZGV2 LCBTWVNSQU1fVE9fQUNQX0NIX05VTSwKKwkJCQkJUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NI MTIsCisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5FTCwgMCk7CisJCWFjcF9kZXYtPmNvbmZpZ19k bWFfY2hhbm5lbChhY3BfZGV2LCBBQ1BfVE9fSTJTX0RNQV9DSF9OVU0sCisJCQkJCVBMQVlCQUNL X1NUQVJUX0RNQV9ERVNDUl9DSDEzLAorCQkJCQlOVU1fRFNDUlNfUEVSX0NIQU5ORUwsIDApOwor CQkvKiBGaWxsIEFDUCBTUkFNIHdpdGggemVyb3MgZnJvbSBTeXN0ZW0gUkFNIHdoaWNoIGlzIHpl cm8tZWQKKwkJICogaW4gaHdfcGFyYW1zICovCisJCXJldCA9IGFjcF9kZXYtPmRtYV9zdGFydChy dGQtPmFjcF9kZXYsCisJCQkJCQlTWVNSQU1fVE9fQUNQX0NIX05VTSwgZmFsc2UpOworCQlpZiAo cmV0IDwgMCkKKwkJCXJldCA9IC1FRkFVTFQ7CisKKwkJLyogTm93IGNvbmZpZ3VyZSBETUEgdG8g dHJhbnNmZXIgb25seSBmaXJzdCBoYWxmIG9mIFN5c3RlbSBSQU0KKwkJICogYnVmZmVyIGJlZm9y ZSBwbGF5YmFjayBpcyB0cmlnZ2VyZWQuIFRoaXMgd2lsbCBvdmVyd3JpdGUKKwkJICogemVyby1l ZCBzZWNvbmQgaGFsZiBvZiBTUkFNIGJ1ZmZlciAqLworCQlhY3BfZGV2LT5jb25maWdfZG1hX2No YW5uZWwoYWNwX2RldiwgU1lTUkFNX1RPX0FDUF9DSF9OVU0sCisJCQkJCVBMQVlCQUNLX1NUQVJU X0RNQV9ERVNDUl9DSDEyLAorCQkJCQkxLCAwKTsKKwl9IGVsc2UgeworCQlhY3BfZGV2LT5jb25m aWdfZG1hX2NoYW5uZWwoYWNwX2RldiwgQUNQX1RPX1NZU1JBTV9DSF9OVU0sCisJCQkJCUNBUFRV UkVfU1RBUlRfRE1BX0RFU0NSX0NIMTQsCisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5FTCwgMCk7 CisJCWFjcF9kZXYtPmNvbmZpZ19kbWFfY2hhbm5lbChhY3BfZGV2LCBJMlNfVE9fQUNQX0RNQV9D SF9OVU0sCisJCQkJCUNBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTUsCisJCQkJCU5VTV9EU0NS U19QRVJfQ0hBTk5FTCwgMCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcF9k bWFfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkK K3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1l OworCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqcnRkID0gcnVudGltZS0+cHJpdmF0ZV9k YXRhOworCXN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiA9IHJ0ZC0+YWNwX2RldjsKKwor CWludCByZXQgPSAtRUlPOworCisJaWYgKCFydGQpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRj aCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BD TV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6 CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7 CisJCQlyZXQgPSBhY3BfZGV2LT5kbWFfc3RhcnQocnRkLT5hY3BfZGV2LAorCQkJCQkJU1lTUkFN X1RPX0FDUF9DSF9OVU0sIGZhbHNlKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldCA9IC1FRkFV TFQ7CisJCQllbHNlCisJCQkJYWNwX2Rldi0+cHJlYnVmZmVyX2F1ZGlvKHJ0ZC0+YWNwX2Rldik7 CisKKwkJCXJldCA9IGFjcF9kZXYtPmRtYV9zdGFydChhY3BfZGV2LAorCQkJCQkgICAgQUNQX1RP X0kyU19ETUFfQ0hfTlVNLCB0cnVlKTsKKwkJfSBlbHNlIGlmIChzdWJzdHJlYW0tPnN0cmVhbSA9 PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQlyZXQgPSBhY3BfZGV2LT5kbWFfc3RhcnQo YWNwX2RldiwKKwkJCQkJICAgIEkyU19UT19BQ1BfRE1BX0NIX05VTSwgdHJ1ZSk7CisJCWJyZWFr OworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VS X1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpZiAoc3Vi c3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQkJcmV0ID0g YWNwX2Rldi0+ZG1hX3N0b3AoYWNwX2RldiwgU1lTUkFNX1RPX0FDUF9DSF9OVU0pOworCQkJaWYg KDAgPT0gcmV0KQorCQkJCXJldCA9IGFjcF9kZXYtPmRtYV9zdG9wKGFjcF9kZXYsCisJCQkJCQkg ICBBQ1BfVE9fSTJTX0RNQV9DSF9OVU0pOworCQl9IGVsc2UgaWYgKHN1YnN0cmVhbS0+c3RyZWFt ID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkgeworCQkJcmV0ID0gYWNwX2Rldi0+ZG1hX3N0 b3AoYWNwX2RldiwgSTJTX1RPX0FDUF9ETUFfQ0hfTlVNKTsKKwkJCWlmICgwID09IHJldCkKKwkJ CQlyZXQgPSBhY3BfZGV2LT5kbWFfc3RvcChhY3BfZGV2LAorCQkJCQkJQUNQX1RPX1NZU1JBTV9D SF9OVU0pOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisKKwl9 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhY3BfZG1hX25ldyhzdHJ1Y3Qgc25kX3Nv Y19wY21fcnVudGltZSAqcnRkKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9wY20gKnBjbTsK KworCXBjbSA9IHJ0ZC0+cGNtOworCXJldCA9IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2Vz X2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkJCU5VTEwsIE1JTl9CVUZGRVIs IE1BWF9CVUZGRVIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2RtYV9jbG9z ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3Bj bV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBhdWRpb19z dWJzdHJlYW1fZGF0YSAqcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJa2ZyZWUocnRk LT5kbWFfY29uZmlnKTsKKwlrZnJlZShydGQtPmkyc19jb25maWcpOworCWtmcmVlKHJ0ZCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3BfZGFpX2kyc19od3BhcmFtcyhzdHJ1Y3Qg c25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJh bXMgKnBhcmFtcywKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25k X3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRf c29jX3BjbV9ydW50aW1lICpwcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlzdHJ1 Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKnJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlz dHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYgPSBydGQtPmFjcF9kZXY7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gcHJ0ZC0+cGxhdGZvcm0tPmRldjsKKworCXUzMiBjaGFuX25yOworCisJc3dp dGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2 X0xFOgorCQlydGQtPmkyc19jb25maWctPnhmZXJfcmVzb2x1dGlvbiA9IDB4MDI7CisJCWJyZWFr OworCisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJcnRkLT5pMnNfY29uZmlnLT54 ZmVyX3Jlc29sdXRpb24gPSAweDA0OworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX0ZPUk1B VF9TMzJfTEU6CisJCXJ0ZC0+aTJzX2NvbmZpZy0+eGZlcl9yZXNvbHV0aW9uID0gMHgwNTsKKwkJ YnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgImRlc2lnbndhcmUtaTJzOiB1bnN1 cHB0ZWQgUENNIGZtdCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGFuX25yID0gcGFy YW1zX2NoYW5uZWxzKHBhcmFtcyk7CisKKwlzd2l0Y2ggKGNoYW5fbnIpIHsKKwljYXNlIEVJR0hU X0NIQU5ORUxfU1VQUE9SVDoKKwkJcnRkLT5pMnNfY29uZmlnLT5jaF9yZWcgPSAzOworCQlicmVh azsKKwljYXNlIFNJWF9DSEFOTkVMX1NVUFBPUlQ6CisJCXJ0ZC0+aTJzX2NvbmZpZy0+Y2hfcmVn ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBGT1VSX0NIQU5ORUxfU1VQUE9SVDoKKwkJcnRkLT5pMnNf Y29uZmlnLT5jaF9yZWcgPSAxOworCQlicmVhazsKKwljYXNlIFRXT19DSEFOTkVMX1NVUFBPUlQ6 CisJCXJ0ZC0+aTJzX2NvbmZpZy0+Y2hfcmVnID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ ZGV2X2VycihkZXYsICJjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlydGQtPmkyc19jb25maWctPmRpcmVjdGlvbiA9IHN1YnN0cmVhbS0+c3RyZWFt OworCisJYWNwX2Rldi0+Y29uZmlnX2kycyhhY3BfZGV2LCBydGQtPmkyc19jb25maWcpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2RhaV9pMnNfdHJpZ2dlcihzdHJ1Y3Qgc25k X3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgICBpbnQgY21kLCBzdHJ1Y3Qgc25k X3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vi c3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqcnRkID0gcnVu dGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiA9IHJ0 ZC0+YWNwX2RldjsKKworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNO RFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgor CWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJYWNwX2Rldi0+aTJzX3N0 YXJ0KGFjcF9kZXYsIHN1YnN0cmVhbS0+c3RyZWFtKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJW X1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNh c2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJYWNwX2Rldi0+aTJzX3N0b3AoYWNw X2Rldiwgc3Vic3RyZWFtLT5zdHJlYW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAt RUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFj cF9kYWlfaTJzX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJ CQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9wY21fcnVu dGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgYXVkaW9fc3Vic3Ry ZWFtX2RhdGEgKnJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYW1kX2FjcF9k ZXZpY2UgKmFjcF9kZXYgPSBydGQtPmFjcF9kZXY7CisKKwlhY3BfZGV2LT5pMnNfcmVzZXQoYWNw X2Rldiwgc3Vic3RyZWFtLT5zdHJlYW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0 IHNuZF9wY21fb3BzIGFjcF9kbWFfb3BzID0geworCS5vcGVuID0gYWNwX2RtYV9vcGVuLAorCS5j bG9zZSA9IGFjcF9kbWFfY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3 X3BhcmFtcyA9IGFjcF9kbWFfaHdfcGFyYW1zLAorCS5od19mcmVlID0gYWNwX2RtYV9od19mcmVl LAorCS50cmlnZ2VyID0gYWNwX2RtYV90cmlnZ2VyLAorCS5wb2ludGVyID0gYWNwX2RtYV9wb2lu dGVyLAorCS5tbWFwID0gYWNwX2RtYV9tbWFwLAorCS5wcmVwYXJlID0gYWNwX2RtYV9wcmVwYXJl LAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhY3BfZGFpX2kyc19vcHMgPSB7CisJLnBy ZXBhcmUgPSBhY3BfZGFpX2kyc19wcmVwYXJlLAorCS5od19wYXJhbXMgPSBhY3BfZGFpX2kyc19o d3BhcmFtcywKKwkudHJpZ2dlciA9IGFjcF9kYWlfaTJzX3RyaWdnZXIsCit9OworCisvKiBDWiBp MnMgY29uZmlndXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgaTJz X2RhaV9kcml2ZXJfY3ogPSB7CisJLnBsYXliYWNrID0geworCQkgICAgIC5zdHJlYW1fbmFtZSA9 ICJJMlMgUGxheWJhY2siLAorCQkgICAgIC5jaGFubmVsc19taW4gPSAyLAorCQkgICAgIC5jaGFu bmVsc19tYXggPSAyLAorCQkgICAgIC5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAs CisJCSAgICAgLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8CisJCQkJU05EUlZf UENNX0ZNVEJJVF9TMzJfTEUsCisKKwkJICAgICAucmF0ZV9taW4gPSA4MDAwLAorCQkgICAgIC5y YXRlX21heCA9IDk2MDAwLAorCQkgICAgIH0sCisJLmNhcHR1cmUgPSB7CisJCSAgICAuc3RyZWFt X25hbWUgPSAiSTJTIENhcHR1cmUiLAorCQkgICAgLmNoYW5uZWxzX21pbiA9IDIsCisJCSAgICAu Y2hhbm5lbHNfbWF4ID0gMiwKKwkJICAgIC5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgw MDAsCisJCSAgICAuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwKKwkJCQlTTkRS Vl9QQ01fRk1UQklUX1MzMl9MRSwKKwkJICAgIC5yYXRlX21pbiA9IDgwMDAsCisJCSAgICAucmF0 ZV9tYXggPSA0ODAwMCwKKwkJICAgIH0sCisJLm9wcyA9ICZhY3BfZGFpX2kyc19vcHMsCit9Owor CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJpdmVyIGFjcF9hc29jX3BsYXRmb3Jt ID0geworCS5vcHMgPSAmYWNwX2RtYV9vcHMsCisJLnBjbV9uZXcgPSBhY3BfZG1hX25ldywKK307 CisKK3N0YXRpYyBpbnQgYWNwX2Fsc2FfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJCQkJc3RydWN0IGFtZF9nbmJfYnVzX2RldiAq YWRldikKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gc25kX3NvY19yZWdpc3Rlcl9wbGF0 Zm9ybShkZXYsICZhY3BfYXNvY19wbGF0Zm9ybSk7CisJaWYgKFNUQVRVU19TVUNDRVNTICE9IHN0 YXR1cykgeworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZWdpc3RlciBBTFNBIHBsYXRmb3Jt IGRldmljZVxuIik7CisJCWdvdG8gZXhpdF9wbGF0Zm9ybTsKKwl9IGVsc2UgeworCQkgLyogU05E UlZfUENNX0ZNVEJJVF9TMTZfTEUgaXMgbm90IHN1cHBvcnRlZCBpbiBDWiAqLworCQlzdGF0dXMg PSBzbmRfc29jX3JlZ2lzdGVyX2NvbXBvbmVudChkZXYsCisJCQkJCSZkd19pMnNfY29tcG9uZW50 LAorCQkJCQkmaTJzX2RhaV9kcml2ZXJfY3osIDEpOworCisJCWlmIChTVEFUVVNfU1VDQ0VTUyAh PSBzdGF0dXMpIHsKKwkJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGkycyBkYWlc biIpOworCQkJZ290byBleGl0X2RhaTsKKwkJfSBlbHNlIHsKKwkJCWRldl9pbmZvKGRldiwgIkFD UCBkZXZpY2UgcmVnaXN0ZXJlZCB3aXRoIEFMU0FcbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJ fQorCX0KKworZXhpdF9kYWk6CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKGRldik7Citl eGl0X3BsYXRmb3JtOgorCWFjcF9kZXYtPmZpbmkoYWNwX2Rldik7CisJcmV0dXJuIHN0YXR1czsK K30KKworc3RhdGljIGludCBhY3BfYW1kc29jX3Byb2JlKHN0cnVjdCBhbWRfZ25iX2J1c19kZXYg KmFkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEgKmF1ZGlvX2Ry dl9kYXRhOworCXN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiA9IGFkZXYtPnByaXZhdGVf ZGF0YTsKKworCWlmIChBTURfR05CX0lQX0FDUF9QQ00gIT0gYWRldi0+aXApIHsKKwkJZGV2X2Vy cigmYWRldi0+ZGV2LCAiTm90IGFuIEFDUCBEZXZpY2Ugb24gQU1EIEdOQiBidXNcbiIpOworCQly ZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlhdWRpb19kcnZfZGF0YSA9IGRldm1fa3phbGxvYygmYWRl di0+ZGV2LAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBhdWRpb19kcnZfZGF0YSksCisJCQkJCQlHRlBf S0VSTkVMKTsKKwlpZiAoYXVkaW9fZHJ2X2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlhdWRpb19kcnZfZGF0YS0+aXBydiA9IGRldm1fa3phbGxvYygmYWRldi0+ZGV2LAorCQkJ CQkJc2l6ZW9mKHN0cnVjdCBhY3BfaXJxX3BydiksCisJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAo YXVkaW9fZHJ2X2RhdGEtPmlwcnYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBU aGUgZm9sbG93aW5nIG1lbWJlcnMgZ2V0cyBwb3B1bGF0ZWQgaW4gZGV2aWNlICdvcGVuJworCSAq IGZ1bmN0aW9uLiBUaWxsIHRoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgaW4gJ2FjcF9od19p bml0JworCSAqIGFuZCBkZXZpY2UgZG9lc24ndCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0cy4KKwkg Ki8KKworCWF1ZGlvX2Rydl9kYXRhLT5wbGF5X3N0cmVhbSA9IE5VTEw7CisJYXVkaW9fZHJ2X2Rh dGEtPmNhcHR1cmVfc3RyZWFtID0gTlVMTDsKKwlhdWRpb19kcnZfZGF0YS0+YWNwX2RldiA9IGFj cF9kZXY7CisKKwlhdWRpb19kcnZfZGF0YS0+aXBydi0+ZGV2ID0gJmFkZXYtPmRldjsKKwlhdWRp b19kcnZfZGF0YS0+aXBydi0+YWNwX2RldiA9IGFjcF9kZXY7CisJYXVkaW9fZHJ2X2RhdGEtPmlw cnYtPnNldF9lbGFwc2VkID0gYWNwX3BjbV9wZXJpb2RfZWxhcHNlZDsKKworCWRldl9zZXRfZHJ2 ZGF0YSgmYWRldi0+ZGV2LCBhdWRpb19kcnZfZGF0YSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBB Q1AgKi8KKwlzdGF0dXMgPSBhY3BfZGV2LT5pbml0KGFjcF9kZXYsIGF1ZGlvX2Rydl9kYXRhLT5p cHJ2KTsKKworCWlmIChTVEFUVVNfU1VDQ0VTUyA9PSBzdGF0dXMpCisJCXN0YXR1cyA9IGFjcF9h bHNhX3JlZ2lzdGVyKCZhZGV2LT5kZXYsIGFjcF9kZXYsIGFkZXYpOworCWVsc2UKKwkJcHJfZXJy KCJBQ1AgaW5pdGlhbGl6YXRpb24gRmFpbGVkXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisK K3N0YXRpYyBpbnQgYWNwX2FtZHNvY19yZW1vdmUoc3RydWN0IGFtZF9nbmJfYnVzX2RldiAqYWRl dikKK3sKKwlzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYgPSBhZGV2LT5wcml2YXRlX2Rh dGE7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29tcG9uZW50KCZhZGV2LT5kZXYpOworCXNuZF9z b2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmYWRldi0+ZGV2KTsKKworCWFjcF9kZXYtPmZpbmkoYWNw X2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhbWRfZ25iX2J1c19kcml2 ZXIgYWNwX2RtYV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYWNwLXBjbS1kcml2ZXIiLAorCS5pcCA9 IEFNRF9HTkJfSVBfQUNQX1BDTSwKKwkucHJvYmUgPSBhY3BfYW1kc29jX3Byb2JlLAorCS5yZW1v dmUgPSBhY3BfYW1kc29jX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFtZHNvY19i dXNfYWNwX2RtYV9kcml2ZXJfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0g YW1kX2duYl9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BfZG1hX2RyaXZlciwKKwkJCQkJIFRISVNf TU9EVUxFLCAiYWNwLXBjbS1kcml2ZXIiKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiQUNQOiBV bmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBBTUQgR05CIEJVUyFcbiIpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbWRzb2NfYnVzX2Fj cF9kbWFfZHJpdmVyX2V4aXQodm9pZCkKK3sKKwlwcl9pbmZvKCJBQ1A6IFBDTSBkcml2ZXIgZXhp dFxuIik7CisJYW1kX2duYl9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcF9kbWFfZHJpdmVyKTsK K30KKworbW9kdWxlX2luaXQoYW1kc29jX2J1c19hY3BfZG1hX2RyaXZlcl9pbml0KTsKK21vZHVs ZV9leGl0KGFtZHNvY19idXNfYWNwX2RtYV9kcml2ZXJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1Io Ik1hcnV0aGkuQmF5eWF2YXJhcHVAYW1kLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQg QUNQIFBDTSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmln aHRzIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL2FjcC1ydDI4Ni5jIGIvc291bmQvc29j L2FtZC9hY3AtcnQyODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDRi ZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2FtZC9hY3AtcnQyODYuYwpAQCAtMCww ICsxLDI2NSBAQAorLyoKKyAqIE1hY2hpbmUgZHJpdmVyIGZvciBBTUQgQUNQIEF1ZGlvIGVuZ2lu ZSB1c2luZyBSZWFsdGVrIFJUMjg2IGNvZGVjCisgKgorICogQ29weXJpZ2h0IDIwMTQtMjAxNSBB ZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBp bgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lO RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoKKyAqLwor CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1 ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRl IDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKyNpbmNsdWRlIDxs aW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgv aTJjLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3J0 Mjg2LmgiCisKKyNpZmRlZiBDT05GSUdfUElOQ1RSTF9BTUQKKworI2RlZmluZSBDWl9IUEpBQ0tf R1BJTyAgNworI2RlZmluZSBDWl9IUEpBQ0tfREVCT1VOQ0UgMTUwCisKKyNlbmRpZgorCisjZGVm aW5lIENaX0NPREVDX0kyQ19BRERSIDB4MWMKKyNkZWZpbmUgQ1pfQ09ERUNfSTJDX0FEQVBURVJf SUQgMworCitzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudDsKKworc3RydWN0IGFjcF9ydDI4 NiB7CisJaW50IGdwaW9faHBfZGV0OworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sg Y3pfamFjazsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiBjel9waW5zW10gPSB7CisJ eworCQkucGluID0gIkFuYWxvZyBNaWMiLAorCQkubWFzayA9IFNORF9KQUNLX01JQ1JPUEhPTkUs CisJfSwKKwl7CisJCS5waW4gPSAiSGVhZHBob25lcyIsCisJCS5tYXNrID0gU05EX0pBQ0tfSEVB RFBIT05FLAorCX0sCit9OworCitzdGF0aWMgaW50IGNhcnJpem9faHdfcGFyYW1zKHN0cnVjdCBz bmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFt cyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJl YW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQ7CisJaW50 IHNhbXBsZV9yYXRlOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNv ZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8 CisJCQkJU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vy cihjYXJkLT5kZXYsICJ1bmFibGUgdG8gc2V0IGNvZGVjIGRhaSBmb3JtYXRcbiIpOworCQlyZXR1 cm4gZXJyOworCX0KKworCXNhbXBsZV9yYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCWVy ciA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBSVDI4Nl9TQ0xLX1NfUExMLCAy NDAwMDAwMCwKKwkJCQkJU05EX1NPQ19DTE9DS19PVVQpOworCWlmIChlcnIgPCAwKSB7CisJCWRl dl9lcnIoY2FyZC0+ZGV2LCAidW5hYmxlIHRvIHNldCBjb2RlYyBkYWkgY2xvY2tcbiIpOworCQly ZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Nv Y19vcHMgY2Fycml6b19ydDI4Nl9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IGNhcnJpem9faHdfcGFy YW1zLAorfTsKKworc3RhdGljIGludCBjYXJyaXpvX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1 bnRpbWUgKnJ0ZCkKK3sKKwkvKiBUT0RPOiBjaGVjayB3aGV0aGVyIGRhcG0gd2lkZ2V0cyBuZWVk cyB0byBiZQorCSAqIGRzaWNvbm5lY3RlZCBpbml0aWFsbHkuICovCisJaW50IHJldDsKKwlzdHJ1 Y3Qgc25kX3NvY19jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwor CWNvZGVjID0gcnRkLT5jb2RlYzsKKwljYXJkID0gcnRkLT5jYXJkOworCXJldCA9IHNuZF9zb2Nf Y2FyZF9qYWNrX25ldyhjYXJkLCAiSGVhZHNldCIsCisJCVNORF9KQUNLX0hFQURTRVQsICZjel9q YWNrLCBjel9waW5zLCBBUlJBWV9TSVpFKGN6X3BpbnMpKTsKKworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlydDI4Nl9taWNfZGV0ZWN0KGNvZGVjLCAmY3pfamFjayk7CisJcmV0dXJuIDA7 Cit9CisKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGNhcnJpem9fZGFpX3J0Mjg2 ID0geworCS5uYW1lID0gImFtZC1ydDI4NiIsCisJLnN0cmVhbV9uYW1lID0gIlJUMjg2X0FJRjEi LAorCS5wbGF0Zm9ybV9uYW1lID0gImFjcF9wY21fZGV2IiwKKwkuY3B1X2RhaV9uYW1lID0gImFj cF9wY21fZGV2IiwKKwkuY29kZWNfZGFpX25hbWUgPSAicnQyODYtYWlmMSIsCisJLmNvZGVjX25h bWUgPSAicnQyODYuMy0wMDFjIiwKKwkuZGFpX2ZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNO RF9TT0NfREFJRk1UX05CX05GCisJCQl8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0sCisJLmlnbm9y ZV9zdXNwZW5kID0gMSwKKwkub3BzID0gJmNhcnJpem9fcnQyODZfb3BzLAorCS5pbml0ID0gY2Fy cml6b19pbml0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0 IGN6X3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZXMiLCBOVUxMKSwK KwlTTkRfU09DX0RBUE1fTUlDKCJBbmFsb2cgTWljIiwgTlVMTCksCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBjel9hdWRpb19yb3V0ZVtdID0geworCXsiSGVh ZHBob25lcyIsIE5VTEwsICJIUE8gTCJ9LAorCXsiSGVhZHBob25lcyIsIE5VTEwsICJIUE8gUiJ9 LAorCXsiTUlDMSIsIE5VTEwsICJBbmFsb2cgTWljIn0sCit9OworCitzdGF0aWMgc3RydWN0IHNu ZF9zb2NfY2FyZCBjYXJyaXpvX2NhcmQgPSB7CisJLm5hbWUgPSAiYWNwLXJ0Mjg2IiwKKwkub3du ZXIgPSBUSElTX01PRFVMRSwKKwkuZGFpX2xpbmsgPSAmY2Fycml6b19kYWlfcnQyODYsCisJLm51 bV9saW5rcyA9IDEsCisKKwkuZGFwbV93aWRnZXRzID0gY3pfd2lkZ2V0cywKKwkubnVtX2RhcG1f d2lkZ2V0cyA9IEFSUkFZX1NJWkUoY3pfd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gY3pfYXVk aW9fcm91dGUsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoY3pfYXVkaW9fcm91dGUp LAorfTsKKworc3RhdGljIGludCBjYXJyaXpvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYWNwX3J0Mjg2ICptYWNoaW5lOworCXN0cnVj dCBzbmRfc29jX2NhcmQgKmNhcmQ7CisKKwltYWNoaW5lID0gZGV2bV9remFsbG9jKCZwZGV2LT5k ZXYsIHNpemVvZihzdHJ1Y3QgYWNwX3J0Mjg2KSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW1h Y2hpbmUpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FyZCA9ICZjYXJyaXpvX2NhcmQ7CisJY2Fy cml6b19jYXJkLmRldiA9ICZwZGV2LT5kZXY7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBjYXJkKTsKKwlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoY2FyZCwgbWFjaGluZSk7CisKKwly ZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoY2FyZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KCZwZGV2LT5kZXYsCisJCQkJInNuZF9zb2NfcmVnaXN0ZXJfY2FyZCglcykgZmFpbGVkOiAlZFxu IiwKKwkJCQljYXJyaXpvX2NhcmQubmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2Fycml6b19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOworCisJY2FyZCA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jYXJkKGNhcmQp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQg Y3pfYXVkaW9fYWNwaV9tYXRjaFtdID0geworCXsgIkkyU0MxMDAyIiwgMCB9LAorCXt9LAorfTsK Kworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2Fycml6b19wY21fZHJpdmVyID0gewor CS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImNhcnJpem9faTJzX2F1ZGlvIiwKKwkJLmFjcGlfbWF0 Y2hfdGFibGUgPSBBQ1BJX1BUUihjel9hdWRpb19hY3BpX21hdGNoKSwKKwkJLm93bmVyID0gVEhJ U19NT0RVTEUsCisJCS5wbSA9ICZzbmRfc29jX3BtX29wcywKKwl9LAorCS5wcm9iZSA9IGNhcnJp em9fcHJvYmUsCisJLnJlbW92ZSA9IGNhcnJpem9fcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBf X2luaXQgY3pfYXVkaW9faW5pdCh2b2lkKQoreworCWludCByZXQ7CisJc3RydWN0IGkyY19hZGFw dGVyICphZGFwdGVyOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjel9ib2FyZF9pbmZvOworCWNv bnN0IGNoYXIgKmNvZGVjX2FjcGlfbmFtZSA9ICJydDI4OCI7CisKKwlhZGFwdGVyID0gaTJjX2dl dF9hZGFwdGVyKENaX0NPREVDX0kyQ19BREFQVEVSX0lEKTsKKwlpZiAoIWFkYXB0ZXIpCisJCXJl dHVybiAtRU5PREVWOworCisJbWVtc2V0KCZjel9ib2FyZF9pbmZvLCAwLCBzaXplb2Yoc3RydWN0 IGkyY19ib2FyZF9pbmZvKSk7CisJY3pfYm9hcmRfaW5mby5hZGRyID0gQ1pfQ09ERUNfSTJDX0FE RFI7CisJc3RybGNweShjel9ib2FyZF9pbmZvLnR5cGUsIGNvZGVjX2FjcGlfbmFtZSwgSTJDX05B TUVfU0laRSk7CisKKyNpZmRlZiBDT05GSUdfUElOQ1RSTF9BTUQKKwlpZiAoZ3Bpb19pc192YWxp ZChDWl9IUEpBQ0tfR1BJTykpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShDWl9IUEpBQ0tf R1BJTywgR1BJT0ZfRElSX0lOIHwKKwkJCQkJCUdQSU9GX0VYUE9SVCwgImhwLWdwaW8iKTsKKwkJ aWYgKHJldCAhPSAwKQorCQkJcHJfZXJyKCJncGlvX3JlcXVlc3Rfb25lIGZhaWxlZCA6IGVyciAl ZFxuIiwgcmV0KTsKKworCQljel9ib2FyZF9pbmZvLmlycSA9IGdwaW9fdG9faXJxKENaX0hQSkFD S19HUElPKTsKKworCQlncGlvX3NldF9kZWJvdW5jZShDWl9IUEpBQ0tfR1BJTywgQ1pfSFBKQUNL X0RFQk9VTkNFKTsKKwl9CisjZW5kaWYKKwlpMmNfY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRh cHRlciwgJmN6X2JvYXJkX2luZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAo IWkyY19jbGllbnQpCisJCXJldHVybiAtRU5PREVWOworCisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lz dGVyKCZjYXJyaXpvX3BjbV9kcml2ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBf X2V4aXQgY3pfYXVkaW9fZXhpdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QSU5DVFJMX0FNRAor CWlmIChncGlvX2lzX3ZhbGlkKENaX0hQSkFDS19HUElPKSkKKwkJZ3Bpb19mcmVlKENaX0hQSkFD S19HUElPKTsKKyNlbmRpZgorCWkyY191bnJlZ2lzdGVyX2RldmljZShpMmNfY2xpZW50KTsKKwor CXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjYXJyaXpvX3BjbV9kcml2ZXIpOworfQorCitt b2R1bGVfaW5pdChjel9hdWRpb19pbml0KTsKK21vZHVsZV9leGl0KGN6X2F1ZGlvX2V4aXQpOwor CitNT0RVTEVfQVVUSE9SKCJNYXJ1dGhpLkJheXlhdmFyYXB1QGFtZC5jb20iKTsKK01PRFVMRV9E RVNDUklQVElPTigiQ1otcnQyODggQXVkaW8gU3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQ TCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKLS0gCjEuOC4zLjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==