From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 02/27 v11] xen/arm: vpl011: Add SBSA UART emulation in Xen Date: Wed, 27 Sep 2017 11:43:11 +0530 Message-ID: <1506492816-25954-3-git-send-email-bhupinder.thakur@linaro.org> References: <1506492816-25954-1-git-send-email-bhupinder.thakur@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dx5bO-0002Pe-N0 for xen-devel@lists.xenproject.org; Wed, 27 Sep 2017 06:13:46 +0000 Received: by mail-pf0-f171.google.com with SMTP id b70so6746358pfl.8 for ; Tue, 26 Sep 2017 23:13:44 -0700 (PDT) In-Reply-To: <1506492816-25954-1-git-send-email-bhupinder.thakur@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Andre Przywara , Julien Grall , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org QWRkIGVtdWxhdGlvbiBjb2RlIHRvIGVtdWxhdGUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gcGwwMTEg cmVnaXN0ZXJzCmFuZCBwbDAxMSBpbnRlcnJ1cHRzOgoKICAgIC0gRW11bGF0ZSBEUiByZWFkL3dy aXRlIGJ5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZnJvbS90byB0aGUgSU4KICAgICAgYW5kIE9VVCBy aW5nIGJ1ZmZlcnMgYW5kIHJhaXNpbmcgYW4gZXZlbnQgdG8gdGhlIGJhY2tlbmQgd2hlbgogICAg ICB0aGVyZSBpcyBkYXRhIGluIHRoZSBPVVQgcmluZyBidWZmZXIgYW5kIGluamVjdGluZyBhbiBp bnRlcnJ1cHQKICAgICAgdG8gdGhlIGd1ZXN0IHdoZW4gdGhlcmUgaXMgZGF0YSBpbiB0aGUgSU4g cmluZyBidWZmZXIKCiAgICAtIE90aGVyIHJlZ2lzdGVycyBhcmUgcmVsYXRlZCB0byBpbnRlcnJ1 cHQgbWFuYWdlbWVudCBhbmQKICAgICAgZXNzZW50aWFsbHkgY29udHJvbCB3aGVuIGludGVycnVw dHMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgZ3Vlc3QKClRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUg U0JTQSBHZW5lcmljIFVBUlQgd2hpY2ggaXMgYSBzdWJzZXQgb2YgQVJNClBMMDExIFVBUlQuCgpU aGUgU0JTQSBHZW5lcmljIFVBUlQgaXMgY292ZXJlZCBpbiBBcHBlbmRpeCBCIG9mCmh0dHBzOi8v c3RhdGljLmRvY3MuYXJtLmNvbS9kZW4wMDI5L2EvU2VydmVyX0Jhc2VfU3lzdGVtX0FyY2hpdGVj dHVyZV92M18xX0FSTV9ERU5fMDAyOUEucGRmCgpTaWduZWQtb2ZmLWJ5OiBCaHVwaW5kZXIgVGhh a3VyIDxiaHVwaW5kZXIudGhha3VyQGxpbmFyby5vcmc+CkFja2VkLWJ5OiBKdWxpZW4gR3JhbGwg PGp1bGllbi5ncmFsbEBhcm0uY29tPgpSZXZpZXdlZC1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxz c3RhYmVsbGluaUBrZXJuZWwub3JnPgotLS0KQ0M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJl bGxpbmlAa2VybmVsLm9yZz4KQ0M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+ CkNDOiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAYXJtLmNvbT4KCkNoYW5nZXMgc2lu Y2Ugdjc6Ci0gU2V0L2NsZWFyIHRoZSBUWCBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBiYXNlZCBvbiB3 aGV0aGVyIHNwYWNlIGF2YWlsYWJsZSBmb3IgMTYgYnl0ZXMgaW4gdGhlIHJpbmcgYnVmZmVyCi0g Q2xlYXIgdGhlIEJVU1kgc3RhdHVzIGJpdCBhcyBzb29uIGFzIHNwYWNlIGJlY29tZXMgYXZhaWxh YmxlIGluIHRoZSByaW5nIGJ1ZmZlcgoKQ2hhbmdlcyBzaW5jZSB2NjoKLSBSZW1vdmVkIGZyZWVp bmcgb2YgbW1pb19oYW5kbGVycyBpbiB2cGwwMTFfZGVpbml0KCkgYXMgdGhlIGhhbmRsZXJzIGdl dCBmcmVlZCB3aGVuIGEgZG9tYWluIGlzIAogIGRlc3Ryb3llZC4gU2luY2UgdGhpcyBpcyBhIG1p bm9yIGNoYW5nZSwgSSBoYXZlIGluY2x1ZGVkIHRoZSByZXZpZXdlZC1ieSBhbmQgYWNrZWQtYnkg dGFncy4KCkNoYW5nZXMgc2luY2UgdjU6Ci0gdXNlIDxhc20vPiBpbnN0ZWFkIG9mIDxhc20tYXJt Lz4gZm9yIGluY2x1ZGluZyBhcm0gc3BlY2lmaWMgaGVhZGVyIGZpbGVzLgotIHJlbmFtZWQgc2hh ZG93X3VhcnRyaXMgdG8gc2hhZG93X3VhcnRtaXMgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBtYXNr ZWQgaW50ZXJydXB0IHN0YXR1cy4KLSB1c2Ugc21wX21iKCkgaW5zdGVhZCBvZiBzbXBfcm1iKCkg aW4gdnBsMDExX3dyaXRlX2RhdGEoKS4KCkNoYW5nZXMgc2luY2UgdjQ6Ci0gUmVuYW1lZCB2cGww MTFfdXBkYXRlKCkgdG8gdnBsMDExX3VwZGF0ZV9pbnRlcnJ1cHRfc3RhdHVzKCkgYW5kIGFkZGVk IGxvZ2ljIHRvIGF2b2lkCiAgcmFpc2luZyBzcHVyaW91cyBpbnRlcnJ1cHRzLgotIFVzZWQgYmFy cmllciBpbnN0cnVjdGlvbnMgY29ycmVjdGx5IHdoaWxlIHJlYWRpbmcvd3JpdGluZyBkYXRhIHRv IHRoZSByaW5nIGJ1ZmZlci4KLSBQcm9wZXIgbG9jayB0YWtlbiBiZWZvcmUgcmVhZGluZyByaW5n IGJ1ZmZlciBpbmRpY2VzLgoKQ2hhbmdlcyBzaW5jZSB2MzoKLSBNb3ZlZCB0aGUgY2FsbCB0byBE RUZJTkVfWEVOX0ZMRVhfUklORyBmcm9tIHZwbDAxMS5oIHRvIHB1YmxpYy9jb25zb2xlLmguIFRo aXMgbWFjcm8gZGVmaW5lcwogIHN0YW5kYXJkIGZ1bmN0aW9ucyB0byBvcGVyYXRlIG9uIHRoZSBy aW5nIGJ1ZmZlci4KLSBMb2NrIHRha2VuIHdoaWxlIHVwZGF0aW5nIHRoZSBpbnRlcnJ1cHQgbWFz ayBhbmQgY2xlYXIgcmVnaXN0ZXJzIGluIG1taW9fd3JpdGUuCi0gVXNlIGdmbl90IGluc3RlYWQg b2YgeGVuX3Bmbl90LgotIHZnaWNfZnJlZV92aXJxIGNhbGxlZCBpZiB0aGVyZSBpcyBhbnkgZXJy b3IgaW4gdnBsMDExIGluaXRpYWxpemF0aW9uLgotIG1taW8gaGFuZGxlcnMgZnJlZWQgaWYgdGhl cmUgaXMgYW55IGVycm9yIGluIHZwbDAxMSBpbml0aWFsaXphdGlvbi4KLSBSZW1vdmVkIHZwbDAx MS0+aW5pdGlhbGl6ZWQgZmxhZyB1c2FnZSBhcyB0aGUgc2FtZSBjaGVjayBjb3VsZCBiZSBkb25l IAogIHVzaW5nIHZwbDAxMS0+cmluZy1yZWYuCi0gVXNlZCByZXR1cm4gaW5zdGVhZCBvZiBicmVh ayBpbiB0aGUgc3dpdGNoIGhhbmRsaW5nIG9mIGVtdWxhdGlvbiBvZiBkaWZmZXJlbnQgcGwwMTEg cmVnaXN0ZXJzLgotIFJlbmFtZWQgdnBsMDExX3VwZGF0ZV9zcGkoKSB0byB2cGwwMTFfdXBkYXRl KCkuCgpDaGFuZ2VzIHNpbmNlIHYyOgotIFVzZSBnZW5lcmljIHZyZWdfcmVnKiBmb3IgcmVhZC93 cml0ZSBvZiByZWdpc3RlcnMgZW11bGF0aW5nIHBsMDExLgotIFVzZSBnZW5lcmljIHJpbmcgYnVm ZmVyIGZ1bmN0aW9ucyBkZWZpbmVkIHVzaW5nIERFRklORV9YRU5fRkxFWF9SSU5HLgotIFJlbmFt ZWQgdGhlIFNQSSBpbmplY3Rpb24gZnVuY3Rpb24gdG8gdnBsMDExX3VwZGF0ZV9zcGkoKSB0byBy ZWZsZWN0IGxldmVsIAogIHRyaWdnZXJlZCBuYXR1cmUgb2YgcGwwMTEgaW50ZXJydXB0cy4KLSBU aGUgcGwwMTEgcmVnaXN0ZXIgYWNjZXNzIGFkZHJlc3Mgc2hvdWxkIGFsd2F5cyBiZSB0aGUgYmFz ZSBhZGRyZXNzIG9mIHRoZQogIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYXMgcGVyIHNlY3Rpb24g QiBvZiB0aGUgU0JTQSBkb2N1bWVudC4gRm9yIHRoaXMgcmVhc29uLAogIHRoZSByZWdpc3RlciBy YW5nZSBhZGRyZXNzIGFjY2VzcyBpcyBub3QgYWxsb3dlZC4KCkNoYW5nZXMgc2luY2UgdjE6Ci0g UmVtb3ZlZCB0aGUgb3B0aW1penRpb24gcmVsYXRlZCB0byBzZW5kaWluZyBldmVudHMgdG8geGVu Y29uc29sZSAKLSBVc2UgbG9jYWwgdmFyaWFibGVzIGFzIHJpbmcgYnVmZmVyIGluZGljZXMgd2hp bGUgdXNpbmcgdGhlIHJpbmcgYnVmZmVyCgogeGVuL2FyY2gvYXJtL0tjb25maWcgICAgICAgICAg ICAgfCAgIDcgKwogeGVuL2FyY2gvYXJtL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwogeGVu L2FyY2gvYXJtL3ZwbDAxMS5jICAgICAgICAgICAgfCA0NTQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oICAgICB8ICAg NiArCiB4ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaCB8ICAgMiArCiB4ZW4vaW5jbHVk ZS9hc20tYXJtL3ZwbDAxMS5oICAgICB8ICA3MiArKysrKysrCiB4ZW4vaW5jbHVkZS9wdWJsaWMv YXJjaC1hcm0uaCAgICB8ICAgNiArCiA3IGZpbGVzIGNoYW5nZWQsIDU0OCBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL3ZwbDAxMS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgeGVuL2luY2x1ZGUvYXNtLWFybS92cGwwMTEuaAoKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L2FybS9LY29uZmlnIGIveGVuL2FyY2gvYXJtL0tjb25maWcKaW5kZXggZDQ2Yjk4Yy4uZjU4MDE5 ZCAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL0tjb25maWcKKysrIGIveGVuL2FyY2gvYXJtL0tj b25maWcKQEAgLTUwLDYgKzUwLDEzIEBAIGNvbmZpZyBIQVNfSVRTCiAgICAgICAgIHByb21wdCAi R0lDdjMgSVRTIE1TSSBjb250cm9sbGVyIHN1cHBvcnQiIGlmIEVYUEVSVCA9ICJ5IgogICAgICAg ICBkZXBlbmRzIG9uIEhBU19HSUNWMwogCitjb25maWcgU0JTQV9WVUFSVF9DT05TT0xFCisJYm9v bCAiRW11bGF0ZWQgU0JTQSBVQVJUIGNvbnNvbGUgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwktLS1o ZWxwLS0tCisJICBBbGxvd3MgYSBndWVzdCB0byB1c2UgU0JTQSBHZW5lcmljIFVBUlQgYXMgYSBj b25zb2xlLiBUaGUKKwkgIFNCU0EgR2VuZXJpYyBVQVJUIGltcGxlbWVudHMgYSBzdWJzZXQgb2Yg QVJNIFBMMDExIFVBUlQuCisKIGVuZG1lbnUKIAogbWVudSAiQVJNIGVycmF0YSB3b3JrYXJvdW5k IHZpYSB0aGUgYWx0ZXJuYXRpdmUgZnJhbWV3b3JrIgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJt L01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDE3YmZmOTguLjQyNDU4MGIg MTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC9hcm0vTWFr ZWZpbGUKQEAgLTUyLDYgKzUyLDcgQEAgb2JqLSQoQ09ORklHX0hBU19HSUNWMykgKz0gdmdpYy12 My5vCiBvYmotJChDT05GSUdfSEFTX0lUUykgKz0gdmdpYy12My1pdHMubwogb2JqLXkgKz0gdm1f ZXZlbnQubwogb2JqLXkgKz0gdnRpbWVyLm8KK29iai0kKENPTkZJR19TQlNBX1ZVQVJUX0NPTlNP TEUpICs9IHZwbDAxMS5vCiBvYmoteSArPSB2cHNjaS5vCiBvYmoteSArPSB2dWFydC5vCiAKZGlm ZiAtLWdpdCBhL3hlbi9hcmNoL2FybS92cGwwMTEuYyBiL3hlbi9hcmNoL2FybS92cGwwMTEuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQ5Y2JlCi0tLSAvZGV2L251bGwK KysrIGIveGVuL2FyY2gvYXJtL3ZwbDAxMS5jCkBAIC0wLDAgKzEsNDU0IEBACisvKgorICogYXJj aC9hcm0vdnBsMDExLmMKKyAqCisgKiBWaXJ0dWFsIFBMMDExIFVBUlQKKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM SVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2lu Y2x1ZGUgPHhlbi9ldmVudC5oPgorI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KKyNpbmNs dWRlIDx4ZW4vaW5pdC5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vbW0u aD4KKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDxwdWJsaWMvZG9tY3RsLmg+Cisj aW5jbHVkZSA8cHVibGljL2lvL2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxhc20vcGwwMTEtdWFydC5o PgorI2luY2x1ZGUgPGFzbS92Z2ljLWVtdWwuaD4KKyNpbmNsdWRlIDxhc20vdnBsMDExLmg+CisK Ky8qCisgKiBTaW5jZSBwbDAxMSByZWdpc3RlcnMgYXJlIDMyLWJpdCByZWdpc3RlcnMsIGFsbCBy ZWdpc3RlcnMKKyAqIGFyZSBoYW5kbGVkIHNpbWlsYXJseSBhbGxvd2luZyA4LWJpdCwgMTYtYml0 IGFuZCAzMi1iaXQKKyAqIGFjY2Vzc2VzIGV4Y2VwdCA2NC1iaXQgYWNjZXNzLgorICovCitzdGF0 aWMgYm9vbCB2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKHN0cnVjdCBoc3JfZGFidCBkYWJ0KQor eworICAgIHJldHVybiAoZGFidC5zaXplICE9IERBQlRfRE9VQkxFX1dPUkQpOworfQorCitzdGF0 aWMgdm9pZCB2cGwwMTFfdXBkYXRlX2ludGVycnVwdF9zdGF0dXMoc3RydWN0IGRvbWFpbiAqZCkK K3sKKyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7CisgICAgdWlu dDMyX3QgdWFydG1pcyA9IHZwbDAxMS0+dWFydHJpcyAmIHZwbDAxMS0+dWFydGltc2M7CisKKyAg ICAvKgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIHdpdGgg dGhlIGxvY2sgdGFrZW4uCisgICAgICovCisgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZ2cGww MTEtPmxvY2spKTsKKworICAgIC8qCisgICAgICogVE9ETzogUEwwMTEgaW50ZXJydXB0cyBhcmUg bGV2ZWwgdHJpZ2dlcmVkIHdoaWNoIG1lYW5zCisgICAgICogdGhhdCBpbnRlcnJ1cHQgbmVlZHMg dG8gYmUgc2V0L2NsZWFyIGluc3RlYWQgb2YgYmVpbmcKKyAgICAgKiBpbmplY3RlZC4gSG93ZXZl ciwgY3VycmVudGx5IHZHSUMgZG9lcyBub3QgaGFuZGxlIGxldmVsCisgICAgICogdHJpZ2dlcmVk IGludGVycnVwdHMgcHJvcGVybHkuIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUKKyAgICAgKiBy ZXZpc2l0ZWQgb25jZSB2R0lDIHN0YXJ0cyBoYW5kbGluZyBsZXZlbCB0cmlnZ2VyZWQKKyAgICAg KiBpbnRlcnJ1cHRzLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBSYWlzZSBhbiBpbnRlcnJ1 cHQgb25seSBpZiBhbnkgYWRkaXRpb25hbCBpbnRlcnJ1cHQKKyAgICAgKiBzdGF0dXMgYml0IGhh cyBiZWVuIHNldCBzaW5jZSB0aGUgbGFzdCB0aW1lLgorICAgICAqLworICAgIGlmICggdWFydG1p cyAmIH52cGwwMTEtPnNoYWRvd191YXJ0bWlzICkKKyAgICAgICAgdmdpY192Y3B1X2luamVjdF9z cGkoZCwgR1VFU1RfVlBMMDExX1NQSSk7CisKKyAgICB2cGwwMTEtPnNoYWRvd191YXJ0bWlzID0g dWFydG1pczsKK30KKworc3RhdGljIHVpbnQ4X3QgdnBsMDExX3JlYWRfZGF0YShzdHJ1Y3QgZG9t YWluICpkKQoreworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgdWludDhfdCBkYXRhID0g MDsKKyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7CisgICAgc3Ry dWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gdnBsMDExLT5yaW5nX2J1ZjsKKyAgICBYRU5D T05TX1JJTkdfSURYIGluX2NvbnMsIGluX3Byb2Q7CisKKyAgICBWUEwwMTFfTE9DSyhkLCBmbGFn cyk7CisKKyAgICBpbl9jb25zID0gaW50Zi0+aW5fY29uczsKKyAgICBpbl9wcm9kID0gaW50Zi0+ aW5fcHJvZDsKKworICAgIHNtcF9ybWIoKTsKKworICAgIC8qCisgICAgICogSXQgaXMgZXhwZWN0 ZWQgdGhhdCB0aGVyZSB3aWxsIGJlIGRhdGEgaW4gdGhlIHJpbmcgYnVmZmVyIHdoZW4gdGhpcwor ICAgICAqIGZ1bmN0aW9uIGlzIGNhbGxlZCBzaW5jZSB0aGUgZ3Vlc3QgaXMgZXhwZWN0ZWQgdG8g cmVhZCB0aGUgZGF0YSByZWdpc3RlcgorICAgICAqIG9ubHkgaWYgdGhlIFRYRkUgZmxhZyBpcyBu b3Qgc2V0LgorICAgICAqIElmIHRoZSBndWVzdCBzdGlsbCBkb2VzIHJlYWQgd2hlbiBUWEZFIGJp dCBpcyBzZXQgdGhlbiAwIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICovCisgICAgaWYgKCB4ZW5j b25zX3F1ZXVlZChpbl9wcm9kLCBpbl9jb25zLCBzaXplb2YoaW50Zi0+aW4pKSA+IDAgKQorICAg IHsKKyAgICAgICAgZGF0YSA9IGludGYtPmluW3hlbmNvbnNfbWFzayhpbl9jb25zLCBzaXplb2Yo aW50Zi0+aW4pKV07CisgICAgICAgIGluX2NvbnMgKz0gMTsKKyAgICAgICAgc21wX21iKCk7Cisg ICAgICAgIGludGYtPmluX2NvbnMgPSBpbl9jb25zOworICAgIH0KKyAgICBlbHNlCisgICAgICAg IGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogVW5leHBlY3RlZCBJTiByaW5nIGJ1ZmZlciBl bXB0eVxuIik7CisKKyAgICBpZiAoIHhlbmNvbnNfcXVldWVkKGluX3Byb2QsIGluX2NvbnMsIHNp emVvZihpbnRmLT5pbikpID09IDAgKQorICAgIHsKKyAgICAgICAgdnBsMDExLT51YXJ0ZnIgfD0g UlhGRTsKKyAgICAgICAgdnBsMDExLT51YXJ0cmlzICY9IH5SWEk7CisgICAgfQorCisgICAgdnBs MDExLT51YXJ0ZnIgJj0gflJYRkY7CisKKyAgICB2cGwwMTFfdXBkYXRlX2ludGVycnVwdF9zdGF0 dXMoZCk7CisKKyAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKKworICAgIC8qCisgICAgICog U2VuZCBhbiBldmVudCB0byBjb25zb2xlIGJhY2tlbmQgdG8gaW5kaWNhdGUgdGhhdCBkYXRhIGhh cyBiZWVuCisgICAgICogcmVhZCBmcm9tIHRoZSBJTiByaW5nIGJ1ZmZlci4KKyAgICAgKi8KKyAg ICBub3RpZnlfdmlhX3hlbl9ldmVudF9jaGFubmVsKGQsIHZwbDAxMS0+ZXZ0Y2huKTsKKworICAg IHJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCB2cGwwMTFfd3JpdGVfZGF0YShzdHJ1Y3Qg ZG9tYWluICpkLCB1aW50OF90IGRhdGEpCit7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAg ICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7CisgICAgc3RydWN0IHhl bmNvbnNfaW50ZXJmYWNlICppbnRmID0gdnBsMDExLT5yaW5nX2J1ZjsKKyAgICBYRU5DT05TX1JJ TkdfSURYIG91dF9jb25zLCBvdXRfcHJvZDsKKworICAgIFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsK KworICAgIG91dF9jb25zID0gaW50Zi0+b3V0X2NvbnM7CisgICAgb3V0X3Byb2QgPSBpbnRmLT5v dXRfcHJvZDsKKworICAgIHNtcF9tYigpOworCisgICAgLyoKKyAgICAgKiBJdCBpcyBleHBlY3Rl ZCB0aGF0IHRoZSByaW5nIGlzIG5vdCBmdWxsIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQK KyAgICAgKiBhcyB0aGUgZ3Vlc3QgaXMgZXhwZWN0ZWQgdG8gd3JpdGUgdG8gdGhlIGRhdGEgcmVn aXN0ZXIgb25seSB3aGVuIHRoZQorICAgICAqIFRYRkYgZmxhZyBpcyBub3Qgc2V0LgorICAgICAq IEluIGNhc2UgdGhlIGd1ZXN0IGRvZXMgd3JpdGUgZXZlbiB3aGVuIHRoZSBUWEZGIGZsYWcgaXMg c2V0IHRoZW4gdGhlCisgICAgICogZGF0YSB3aWxsIGJlIHNpbGVudGx5IGRyb3BwZWQuCisgICAg ICovCisgICAgaWYgKCB4ZW5jb25zX3F1ZXVlZChvdXRfcHJvZCwgb3V0X2NvbnMsIHNpemVvZihp bnRmLT5vdXQpKSAhPQorICAgICAgICAgc2l6ZW9mIChpbnRmLT5vdXQpICkKKyAgICB7CisgICAg ICAgIGludGYtPm91dFt4ZW5jb25zX21hc2sob3V0X3Byb2QsIHNpemVvZihpbnRmLT5vdXQpKV0g PSBkYXRhOworICAgICAgICBvdXRfcHJvZCArPSAxOworICAgICAgICBzbXBfd21iKCk7CisgICAg ICAgIGludGYtPm91dF9wcm9kID0gb3V0X3Byb2Q7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAg Z3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDExOiBVbmV4cGVjdGVkIE9VVCByaW5nIGJ1ZmZlciBm dWxsXG4iKTsKKworICAgIGlmICggeGVuY29uc19xdWV1ZWQob3V0X3Byb2QsIG91dF9jb25zLCBz aXplb2YoaW50Zi0+b3V0KSkgPT0KKyAgICAgICAgIHNpemVvZiAoaW50Zi0+b3V0KSApCisgICAg eworICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBUWEZGOworICAgICAgICB2cGwwMTEtPnVhcnRy aXMgJj0gflRYSTsKKyAgICB9CisKKyAgICB2cGwwMTEtPnVhcnRmciB8PSBCVVNZOworCisgICAg dnBsMDExLT51YXJ0ZnIgJj0gflRYRkU7CisKKyAgICB2cGwwMTFfdXBkYXRlX2ludGVycnVwdF9z dGF0dXMoZCk7CisKKyAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKKworICAgIC8qCisgICAg ICogU2VuZCBhbiBldmVudCB0byBjb25zb2xlIGJhY2tlbmQgdG8gaW5kaWNhdGUgdGhhdCB0aGVy ZSBpcworICAgICAqIGRhdGEgaW4gdGhlIE9VVCByaW5nIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBu b3RpZnlfdmlhX3hlbl9ldmVudF9jaGFubmVsKGQsIHZwbDAxMS0+ZXZ0Y2huKTsKK30KKworc3Rh dGljIGludCB2cGwwMTFfbW1pb19yZWFkKHN0cnVjdCB2Y3B1ICp2LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1taW9faW5mb190ICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlZ2lzdGVyX3QgKnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJp dikKK3sKKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFidCA9IGluZm8tPmRhYnQ7CisgICAgdWludDMy X3QgdnBsMDExX3JlZyA9ICh1aW50MzJfdCkoaW5mby0+Z3BhIC0gR1VFU1RfUEwwMTFfQkFTRSk7 CisgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJnYtPmRvbWFpbi0+YXJjaC52cGwwMTE7Cisg ICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdz OworCisgICAgc3dpdGNoICggdnBsMDExX3JlZyApCisgICAgeworICAgIGNhc2UgRFI6CisgICAg ICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0 aDsKKworICAgICAgICAqciA9IHZyZWdfcmVnMzJfZXh0cmFjdCh2cGwwMTFfcmVhZF9kYXRhKGQp LCBpbmZvKTsKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIFJTUjoKKyAgICAgICAgaWYg KCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworCisg ICAgICAgIC8qIEl0IGFsd2F5cyByZXR1cm5zIDAgYXMgdGhlcmUgYXJlIG5vIHBoeXNpY2FsIGVy cm9ycy4gKi8KKyAgICAgICAgKnIgPSAwOworICAgICAgICByZXR1cm4gMTsKKworICAgIGNhc2Ug RlI6CisgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3Rv IGJhZF93aWR0aDsKKworICAgICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7CisgICAgICAgICpy ID0gdnJlZ19yZWczMl9leHRyYWN0KHZwbDAxMS0+dWFydGZyLCBpbmZvKTsKKyAgICAgICAgVlBM MDExX1VOTE9DSyhkLCBmbGFncyk7CisgICAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBSSVM6 CisgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJh ZF93aWR0aDsKKworICAgICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7CisgICAgICAgICpyID0g dnJlZ19yZWczMl9leHRyYWN0KHZwbDAxMS0+dWFydHJpcywgaW5mbyk7CisgICAgICAgIFZQTDAx MV9VTkxPQ0soZCwgZmxhZ3MpOworICAgICAgICByZXR1cm4gMTsKKworICAgIGNhc2UgTUlTOgor ICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRf d2lkdGg7CisKKyAgICAgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOworICAgICAgICAqciA9IHZy ZWdfcmVnMzJfZXh0cmFjdCh2cGwwMTEtPnVhcnRyaXMgJiB2cGwwMTEtPnVhcnRpbXNjLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvKTsKKyAgICAgICAgVlBMMDExX1VOTE9D SyhkLCBmbGFncyk7CisgICAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBJTVNDOgorICAgICAg ICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7 CisKKyAgICAgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOworICAgICAgICAqciA9IHZyZWdfcmVn MzJfZXh0cmFjdCh2cGwwMTEtPnVhcnRpbXNjLCBpbmZvKTsKKyAgICAgICAgVlBMMDExX1VOTE9D SyhkLCBmbGFncyk7CisgICAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBJQ1I6CisgICAgICAg IGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0aDsK KworICAgICAgICAvKiBPbmx5IHdyaXRlIGlzIHZhbGlkLiAqLworICAgICAgICByZXR1cm4gMDsK KworICAgIGRlZmF1bHQ6CisgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogdW5o YW5kbGVkIHJlYWQgciVkIG9mZnNldCAlIzA4eFxuIiwKKyAgICAgICAgICAgICAgICBkYWJ0LnJl ZywgdnBsMDExX3JlZyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiAx OworCitiYWRfd2lkdGg6CisgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDExOiBiYWQgcmVh ZCB3aWR0aCAlZCByJWQgb2Zmc2V0ICUjMDh4XG4iLAorICAgICAgICAgICAgZGFidC5zaXplLCBk YWJ0LnJlZywgdnBsMDExX3JlZyk7CisgICAgZG9tYWluX2NyYXNoX3N5bmNocm9ub3VzKCk7Cisg ICAgcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCB2cGwwMTFfbW1pb193cml0ZShzdHJ1Y3Qg dmNwdSAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW1pb19pbmZvX3QgKmluZm8s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3QgciwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqcHJpdikKK3sKKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFi dCA9IGluZm8tPmRhYnQ7CisgICAgdWludDMyX3QgdnBsMDExX3JlZyA9ICh1aW50MzJfdCkoaW5m by0+Z3BhIC0gR1VFU1RfUEwwMTFfQkFTRSk7CisgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0g JnYtPmRvbWFpbi0+YXJjaC52cGwwMTE7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFp bjsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgc3dpdGNoICggdnBsMDExX3JlZyAp CisgICAgeworICAgIGNhc2UgRFI6CisgICAgeworICAgICAgICB1aW50MzJfdCBkYXRhID0gMDsK KworICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBi YWRfd2lkdGg7CisKKyAgICAgICAgdnJlZ19yZWczMl91cGRhdGUoJmRhdGEsIHIsIGluZm8pOwor ICAgICAgICBkYXRhICY9IDB4RkY7CisgICAgICAgIHZwbDAxMV93cml0ZV9kYXRhKHYtPmRvbWFp biwgZGF0YSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGNhc2UgUlNSOiAvKiBO b3RoaW5nIHRvIGNsZWFyLiAqLworICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNj ZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBj YXNlIEZSOgorICAgIGNhc2UgUklTOgorICAgIGNhc2UgTUlTOgorICAgICAgICBnb3RvIHdyaXRl X2lnbm9yZTsKKworICAgIGNhc2UgSU1TQzoKKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2No ZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworCisgICAgICAgIFZQTDAxMV9MT0NL KGQsIGZsYWdzKTsKKyAgICAgICAgdnJlZ19yZWczMl91cGRhdGUoJnZwbDAxMS0+dWFydGltc2Ms IHIsIGluZm8pOworICAgICAgICB2cGwwMTFfdXBkYXRlX2ludGVycnVwdF9zdGF0dXModi0+ZG9t YWluKTsKKyAgICAgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7CisgICAgICAgIHJldHVybiAx OworCisgICAgY2FzZSBJQ1I6CisgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nl c3MoZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKKworICAgICAgICBWUEwwMTFfTE9DSyhkLCBmbGFn cyk7CisgICAgICAgIHZyZWdfcmVnMzJfY2xlYXJiaXRzKCZ2cGwwMTEtPnVhcnRyaXMsIHIsIGlu Zm8pOworICAgICAgICB2cGwwMTFfdXBkYXRlX2ludGVycnVwdF9zdGF0dXMoZCk7CisgICAgICAg IFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOworICAgICAgICByZXR1cm4gMTsKKworICAgIGRlZmF1 bHQ6CisgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogdW5oYW5kbGVkIHdyaXRl IHIlZCBvZmZzZXQgJSMwOHhcbiIsCisgICAgICAgICAgICAgICAgZGFidC5yZWcsIHZwbDAxMV9y ZWcpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKK3dyaXRlX2lnbm9yZToKKyAgICByZXR1 cm4gMTsKKworYmFkX3dpZHRoOgorICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogYmFk IHdyaXRlIHdpZHRoICVkIHIlZCBvZmZzZXQgJSMwOHhcbiIsCisgICAgICAgICAgICBkYWJ0LnNp emUsIGRhYnQucmVnLCB2cGwwMTFfcmVnKTsKKyAgICBkb21haW5fY3Jhc2hfc3luY2hyb25vdXMo KTsKKyAgICByZXR1cm4gMDsKKworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1taW9faGFuZGxl cl9vcHMgdnBsMDExX21taW9faGFuZGxlciA9IHsKKyAgICAucmVhZCA9IHZwbDAxMV9tbWlvX3Jl YWQsCisgICAgLndyaXRlID0gdnBsMDExX21taW9fd3JpdGUsCit9OworCitzdGF0aWMgdm9pZCB2 cGwwMTFfZGF0YV9hdmFpbChzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJmQtPmFyY2gudnBsMDExOworICAg IHN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHZwbDAxMS0+cmluZ19idWY7CisgICAg WEVOQ09OU19SSU5HX0lEWCBpbl9jb25zLCBpbl9wcm9kLCBvdXRfY29ucywgb3V0X3Byb2Q7Cisg ICAgWEVOQ09OU19SSU5HX0lEWCBpbl9yaW5nX3FzaXplLCBvdXRfcmluZ19xc2l6ZTsKKworICAg IFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsKKworICAgIGluX2NvbnMgPSBpbnRmLT5pbl9jb25zOwor ICAgIGluX3Byb2QgPSBpbnRmLT5pbl9wcm9kOworICAgIG91dF9jb25zID0gaW50Zi0+b3V0X2Nv bnM7CisgICAgb3V0X3Byb2QgPSBpbnRmLT5vdXRfcHJvZDsKKworICAgIHNtcF9ybWIoKTsKKwor ICAgIGluX3JpbmdfcXNpemUgPSB4ZW5jb25zX3F1ZXVlZChpbl9wcm9kLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbl9jb25zLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2YoaW50Zi0+aW4pKTsKKworICAgIG91dF9yaW5nX3FzaXplID0geGVu Y29uc19xdWV1ZWQob3V0X3Byb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvdXRfY29ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihp bnRmLT5vdXQpKTsKKworICAgIC8qIFVwZGF0ZSB0aGUgdWFydCByeCBzdGF0ZSBpZiB0aGUgYnVm ZmVyIGlzIG5vdCBlbXB0eS4gKi8KKyAgICBpZiAoIGluX3JpbmdfcXNpemUgIT0gMCApCisgICAg eworICAgICAgICB2cGwwMTEtPnVhcnRmciAmPSB+UlhGRTsKKyAgICAgICAgaWYgKCBpbl9yaW5n X3FzaXplID09IHNpemVvZihpbnRmLT5pbikgKQorICAgICAgICAgICAgdnBsMDExLT51YXJ0ZnIg fD0gUlhGRjsKKyAgICAgICAgdnBsMDExLT51YXJ0cmlzIHw9IFJYSTsKKyAgICB9CisKKyAgICAv KiBVcGRhdGUgdGhlIHVhcnQgdHggc3RhdGUgaWYgdGhlIGJ1ZmZlciBpcyBub3QgZnVsbC4gKi8K KyAgICBpZiAoIG91dF9yaW5nX3FzaXplICE9IHNpemVvZihpbnRmLT5vdXQpICkKKyAgICB7Cisg ICAgICAgIHZwbDAxMS0+dWFydGZyICY9IH5UWEZGOworICAgICAgICB2cGwwMTEtPnVhcnRyaXMg fD0gVFhJOworICAgICAgICBpZiAoIG91dF9yaW5nX3FzaXplID09IDAgKQorICAgICAgICB7Cisg ICAgICAgICAgICB2cGwwMTEtPnVhcnRmciAmPSB+QlVTWTsKKyAgICAgICAgICAgIHZwbDAxMS0+ dWFydGZyIHw9IFRYRkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2cGwwMTFfdXBkYXRlX2lu dGVycnVwdF9zdGF0dXMoZCk7CisKKyAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKK30KKwor c3RhdGljIHZvaWQgdnBsMDExX25vdGlmaWNhdGlvbihzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQg aW50IHBvcnQpCit7CisgICAgdnBsMDExX2RhdGFfYXZhaWwodi0+ZG9tYWluKTsKK30KKworaW50 IGRvbWFpbl92cGwwMTFfaW5pdChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdnBsMDExX2luaXRf aW5mbyAqaW5mbykKK3sKKyAgICBpbnQgcmM7CisgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0g JmQtPmFyY2gudnBsMDExOworCisgICAgaWYgKCB2cGwwMTEtPnJpbmdfYnVmICkKKyAgICAgICAg cmV0dXJuIC1FSU5WQUw7CisKKyAgICAvKiBNYXAgdGhlIGd1ZXN0IFBGTiB0byBYZW4gYWRkcmVz cyBzcGFjZS4gKi8KKyAgICByYyA9ICBwcmVwYXJlX3JpbmdfZm9yX2hlbHBlcihkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmbl94KGluZm8tPmdmbiksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnZwbDAxMS0+cmluZ19wYWdlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ2cGwwMTEtPnJpbmdfYnVmKTsKKyAgICBpZiAoIHJjIDwg MCApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgcmMgPSB2Z2ljX3Jlc2VydmVfdmlycShkLCBH VUVTVF9WUEwwMTFfU1BJKTsKKyAgICBpZiAoICFyYyApCisgICAgeworICAgICAgICByYyA9IC1F SU5WQUw7CisgICAgICAgIGdvdG8gb3V0MTsKKyAgICB9CisKKyAgICByYyA9IGFsbG9jX3VuYm91 bmRfeGVuX2V2ZW50X2NoYW5uZWwoZCwgMCwgaW5mby0+Y29uc29sZV9kb21pZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnBsMDExX25vdGlmaWNhdGlvbik7Cisg ICAgaWYgKCByYyA8IDAgKQorICAgICAgICBnb3RvIG91dDI7CisKKyAgICB2cGwwMTEtPmV2dGNo biA9IGluZm8tPmV2dGNobiA9IHJjOworCisgICAgc3Bpbl9sb2NrX2luaXQoJnZwbDAxMS0+bG9j ayk7CisKKyAgICByZWdpc3Rlcl9tbWlvX2hhbmRsZXIoZCwgJnZwbDAxMV9tbWlvX2hhbmRsZXIs CisgICAgICAgICAgICAgICAgICAgICAgICAgIEdVRVNUX1BMMDExX0JBU0UsIEdVRVNUX1BMMDEx X1NJWkUsIE5VTEwpOworCisgICAgcmV0dXJuIDA7CisKK291dDI6CisgICAgdmdpY19mcmVlX3Zp cnEoZCwgR1VFU1RfVlBMMDExX1NQSSk7CisKK291dDE6CisgICAgZGVzdHJveV9yaW5nX2Zvcl9o ZWxwZXIoJnZwbDAxMS0+cmluZ19idWYsIHZwbDAxMS0+cmluZ19wYWdlKTsKKworb3V0OgorICAg IHJldHVybiByYzsKK30KKwordm9pZCBkb21haW5fdnBsMDExX2RlaW5pdChzdHJ1Y3QgZG9tYWlu ICpkKQoreworICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsKKwor ICAgIGlmICggIXZwbDAxMS0+cmluZ19idWYgKQorICAgICAgICByZXR1cm47CisKKyAgICBmcmVl X3hlbl9ldmVudF9jaGFubmVsKGQsIHZwbDAxMS0+ZXZ0Y2huKTsKKyAgICBkZXN0cm95X3Jpbmdf Zm9yX2hlbHBlcigmdnBsMDExLT5yaW5nX2J1ZiwgdnBsMDExLT5yaW5nX3BhZ2UpOworfQorCisv KgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNE IgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5k OgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oIGIveGVuL2lu Y2x1ZGUvYXNtLWFybS9kb21haW4uaAppbmRleCBiMTc0YzY1Li40YzgwNGViIDEwMDY0NAotLS0g YS94ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0v ZG9tYWluLmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxwdWJsaWMvaHZtL3BhcmFtcy5o PgogI2luY2x1ZGUgPHhlbi9zZXJpYWwuaD4KICNpbmNsdWRlIDx4ZW4vcmJ0cmVlLmg+CisjaW5j bHVkZSA8YXNtLWFybS92cGwwMTEuaD4KIAogc3RydWN0IGh2bV9kb21haW4KIHsKQEAgLTE0NSw2 ICsxNDYsMTEgQEAgc3RydWN0IGFyY2hfZG9tYWluCiAgICAgc3RydWN0IHsKICAgICAgICAgdWlu dDhfdCBwcml2aWxlZ2VkX2NhbGxfZW5hYmxlZCA6IDE7CiAgICAgfSBtb25pdG9yOworCisjaWZk ZWYgQ09ORklHX1NCU0FfVlVBUlRfQ09OU09MRQorICAgIHN0cnVjdCB2cGwwMTEgdnBsMDExOwor I2VuZGlmCisKIH0gIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIHN0cnVjdCBhcmNoX3ZjcHUKZGlm ZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vcGwwMTEtdWFydC5oIGIveGVuL2luY2x1ZGUv YXNtLWFybS9wbDAxMS11YXJ0LmgKaW5kZXggMTIzZjQ3Ny4uNTdlOWVjNyAxMDA2NDQKLS0tIGEv eGVuL2luY2x1ZGUvYXNtLWFybS9wbDAxMS11YXJ0LmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLWFy bS9wbDAxMS11YXJ0LmgKQEAgLTQ5LDYgKzQ5LDggQEAKIC8qIEZSIGJpdHMgKi8KICNkZWZpbmUg VFhGRSAgICgxPDw3KSAvKiBUWCBGSUZPIGVtcHR5ICovCiAjZGVmaW5lIFJYRkUgICAoMTw8NCkg LyogUlggRklGTyBlbXB0eSAqLworI2RlZmluZSBUWEZGICAgKDE8PDUpIC8qIFRYIEZJRk8gZnVs bCAqLworI2RlZmluZSBSWEZGICAgKDE8PDYpIC8qIFJYIEZJRk8gZnVsbCAqLwogI2RlZmluZSBC VVNZICAgKDE8PDMpIC8qIFRyYW5zbWl0IGlzIG5vdCBjb21wbGV0ZSAqLwogCiAvKiBMQ1JfSCBi aXRzICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL3ZwbDAxMS5oIGIveGVuL2lu Y2x1ZGUvYXNtLWFybS92cGwwMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xYjU4M2RhCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS92cGwwMTEu aApAQCAtMCwwICsxLDcyIEBACisvKgorICogaW5jbHVkZS94ZW4vdnBsMDExLmgKKyAqCisgKiBW aXJ0dWFsIFBMMDExIFVBUlQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAq IHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwg YmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhp cyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisg Ki8KKworI2lmbmRlZiBfVlBMMDExX0hfCisjZGVmaW5lIF9WUEwwMTFfSF8KKworI2luY2x1ZGUg PHB1YmxpYy9kb21jdGwuaD4KKyNpbmNsdWRlIDxwdWJsaWMvaW8vcmluZy5oPgorI2luY2x1ZGUg PGFzbS92cmVnLmg+CisjaW5jbHVkZSA8eGVuL21tLmg+CisKKy8qIGhlbHBlciBtYWNyb3MgKi8K KyNkZWZpbmUgVlBMMDExX0xPQ0soZCxmbGFncykgc3Bpbl9sb2NrX2lycXNhdmUoJihkKS0+YXJj aC52cGwwMTEubG9jaywgZmxhZ3MpCisjZGVmaW5lIFZQTDAxMV9VTkxPQ0soZCxmbGFncykgc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmKGQpLT5hcmNoLnZwbDAxMS5sb2NrLCBmbGFncykKKworc3Ry dWN0IHZwbDAxMSB7CisgICAgdm9pZCAqcmluZ19idWY7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAq cmluZ19wYWdlOworICAgIHVpbnQzMl90ICAgIHVhcnRmcjsgICAgICAgICAvKiBGbGFnIHJlZ2lz dGVyICovCisgICAgdWludDMyX3QgICAgdWFydGNyOyAgICAgICAgIC8qIENvbnRyb2wgcmVnaXN0 ZXIgKi8KKyAgICB1aW50MzJfdCAgICB1YXJ0aW1zYzsgICAgICAgLyogSW50ZXJydXB0IG1hc2sg cmVnaXN0ZXIqLworICAgIHVpbnQzMl90ICAgIHVhcnRpY3I7ICAgICAgICAvKiBJbnRlcnJ1cHQg Y2xlYXIgcmVnaXN0ZXIgKi8KKyAgICB1aW50MzJfdCAgICB1YXJ0cmlzOyAgICAgICAgLyogUmF3 IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyAgICB1aW50MzJfdCAgICBzaGFkb3dfdWFy dG1pczsgLyogc2hhZG93IG1hc2tlZCBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKyAgICBzcGlubG9j a190ICBsb2NrOworICAgIGV2dGNobl9wb3J0X3QgZXZ0Y2huOworfTsKKworc3RydWN0IHZwbDAx MV9pbml0X2luZm8geworICAgIGRvbWlkX3QgY29uc29sZV9kb21pZDsKKyAgICBnZm5fdCBnZm47 CisgICAgZXZ0Y2huX3BvcnRfdCBldnRjaG47Cit9OworCisjaWZkZWYgQ09ORklHX1NCU0FfVlVB UlRfQ09OU09MRQoraW50IGRvbWFpbl92cGwwMTFfaW5pdChzdHJ1Y3QgZG9tYWluICpkLAorICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnBsMDExX2luaXRfaW5mbyAqaW5mbyk7Cit2b2lk IGRvbWFpbl92cGwwMTFfZGVpbml0KHN0cnVjdCBkb21haW4gKmQpOworI2Vsc2UKK3N0YXRpYyBp bmxpbmUgaW50IGRvbWFpbl92cGwwMTFfaW5pdChzdHJ1Y3QgZG9tYWluICpkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cGwwMTFfaW5pdF9pbmZvICppbmZv KQoreworICAgIHJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9tYWlu X3ZwbDAxMV9kZWluaXQoc3RydWN0IGRvbWFpbiAqZCkgeyB9CisjZW5kaWYKKyNlbmRpZiAgLyog X1ZQTDAxMV9IXyAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICog Yy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9wdWJsaWMv YXJjaC1hcm0uaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLWFybS5oCmluZGV4IDhmOWQwNmUu LjU3MDhjZDIgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLWFybS5oCisrKyBi L3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLWFybS5oCkBAIC00MTAsNiArNDEwLDEwIEBAIHR5cGVk ZWYgdWludDY0X3QgeGVuX2NhbGxiYWNrX3Q7CiAjZGVmaW5lIEdVRVNUX0FDUElfQkFTRSAweDIw MDAwMDAwVUxMCiAjZGVmaW5lIEdVRVNUX0FDUElfU0laRSAweDAyMDAwMDAwVUxMCiAKKy8qIFBM MDExIG1hcHBpbmdzICovCisjZGVmaW5lIEdVRVNUX1BMMDExX0JBU0UgICAgMHgyMjAwMDAwMFVM TAorI2RlZmluZSBHVUVTVF9QTDAxMV9TSVpFICAgIDB4MDAwMDEwMDBVTEwKKwogLyoKICAqIDE2 TUIgPT0gNDA5NiBwYWdlcyByZXNlcnZlZCBmb3IgZ3Vlc3QgdG8gdXNlIGFzIGEgcmVnaW9uIHRv IG1hcCBpdHMKICAqIGdyYW50IHRhYmxlIGluLgpAQCAtNDQ0LDYgKzQ0OCw4IEBAIHR5cGVkZWYg dWludDY0X3QgeGVuX2NhbGxiYWNrX3Q7CiAjZGVmaW5lIEdVRVNUX1RJTUVSX1BIWVNfTlNfUFBJ IDMwCiAjZGVmaW5lIEdVRVNUX0VWVENITl9QUEkgICAgICAgIDMxCiAKKyNkZWZpbmUgR1VFU1Rf VlBMMDExX1NQSSAgICAgICAgMzIKKwogLyogUFNDSSBmdW5jdGlvbnMgKi8KICNkZWZpbmUgUFND SV9jcHVfc3VzcGVuZCAwCiAjZGVmaW5lIFBTQ0lfY3B1X29mZiAgICAgMQotLSAKMi43LjQKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK