From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v12 02/14] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Tue, 1 Mar 2016 16:20:18 +0100 Message-ID: <1456845630-2786-3-git-send-email-p.zabel@pengutronix.de> References: <1456845630-2786-1-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456845630-2786-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala List-Id: linux-mediatek@lists.infradead.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0 aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0 IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8 ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjExOgogLSBJbnN0ZWFkIG9mIGRpc2FibGluZyBh bGwgcGxhbmVzIGluaXRhbGx5LCBjb25maWd1cmUgdGhlbSBhY2NvcmRpbmcgdG8KICAgdGhlaXIg c3RhdGUuIFRoaXMgd2F5IHRoZSBwbGFuZSBkb2Vzbid0IHN0YXkgZGlzYWJsZWQgdW50aWwgdGhl IGZpcnN0CiAgIGZsaXAgKHdoaWNoIG1heSBuZXZlciBoYXBwZW4pLgogLSBEaXNhYmxlIHRoZSBw aXBlIGluc3RlYWQgb2YgY3Jhc2hpbmcgaWYgYW55IG9mIGl0cyBjb21wb25lbnRzIGFyZQogICBk aXNhYmxlZCBvciBtaXNzaW5nIGluIHRoZSBkZXZpY2UgdHJlZS4KIC0gQ29ycmVjdCBwYXJhbWV0 ZXIgdHlwZSBpbiB0aGUgbXRrX2RybV9nZW1fY3JlYXRlKCkgZGVjbGFyYXRpb24KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAgICAgICB8ICAxMiArCiBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZGlzcF9vdmwuYyAgICAgfCAzMDIgKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jICAgIHwgMjQwICsrKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jICAgICB8IDU4MiArKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRj LmggICAgIHwgIDMyICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyAg ICAgIHwgMzU1ICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kZHAuaCAgICAgIHwgIDQxICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9kZHBfY29tcC5jIHwgMjI1ICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kZHBfY29tcC5oIHwgMTUwICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2Rydi5jICAgICAgfCA1NzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCAgICAgIHwgIDUzICsrKwogZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYyAgICAgICB8IDE2NSArKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaCAgICAgICB8ICAyMyArKwogZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMgICAgICB8IDI2NiArKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uaCAgICAgIHwgIDU5ICsr KwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYyAgICB8IDI0MCArKysr KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmggICAgfCAg NTkgKysrCiAyMCBmaWxlcyBjaGFuZ2VkLCAzMzk3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2Nv bXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2RkcF9jb21wLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZmIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2ZiLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2dlbS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fcGxhbmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDhhZTdhYjYuLmY3YjBk NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9LY29uZmlnCkBAIC0yNjksMyArMjY5LDUgQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0v aW14L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDYxNzY2ZGUuLjdiMGQxYWIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUKQEAgLTY5LDYgKzY5LDcgQEAgb2JqLSQoQ09ORklHX0RSTV9NU00pICs9IG1z bS8KIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9IHRlZ3JhLwogb2JqLSQoQ09ORklHX0RSTV9T VEkpICs9IHN0aS8KIG9iai0kKENPTkZJR19EUk1fSU1YKSArPSBpbXgvCitvYmotJChDT05GSUdf RFJNX01FRElBVEVLKSArPSBtZWRpYXRlay8KIG9iai15CQkJKz0gaTJjLwogb2JqLXkJCQkrPSBw YW5lbC8KIG9iai15CQkJKz0gYnJpZGdlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFkODkyCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTAsMCArMSwxMiBAQAorY29uZmln IERSTV9NRURJQVRFSworCXRyaXN0YXRlICJEUk0gU3VwcG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIK KwlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCAoQVJNICYmIENP TVBJTEVfVEVTVCkKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJ c2VsZWN0IE1US19TTUkKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUg YSBNZWRpYXRlayBTb0NzLgorCSAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZWRpYXRlay1k cm0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbCBtb2RlIHNldHRpbmcgYW5kCisJICBi dWZmZXIgbWFuYWdlbWVudCB0byB1c2Vyc3BhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiZGU3YwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBA CittZWRpYXRlay1kcm0teSA6PSBtdGtfZGlzcF9vdmwubyBcCisJCSAgbXRrX2Rpc3BfcmRtYS5v IFwKKwkJICBtdGtfZHJtX2NydGMubyBcCisJCSAgbXRrX2RybV9kZHAubyBcCisJCSAgbXRrX2Ry bV9kZHBfY29tcC5vIFwKKwkJICBtdGtfZHJtX2Rydi5vIFwKKwkJICBtdGtfZHJtX2ZiLm8gXAor CQkgIG10a19kcm1fZ2VtLm8gXAorCQkgIG10a19kcm1fcGxhbmUubworCitvYmotJChDT05GSUdf RFJNX01FRElBVEVLKSArPSBtZWRpYXRlay1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kaXNwX292bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNjI2NzFm Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292 bC5jCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVr IEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg Ki8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5j bHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cisj aW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNl Lmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9j b21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lOVEVOCQkJMHgwMDA0CisjZGVmaW5lIE9W TF9GTUVfQ1BMX0lOVAkJCQkJQklUKDEpCisjZGVmaW5lIERJU1BfUkVHX09WTF9JTlRTVEEJCQkw eDAwMDgKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0VOCQkJCTB4MDAwYworI2RlZmluZSBESVNQX1JF R19PVkxfUlNUCQkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lfU0laRQkJCTB4MDAy MAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX0JHQ0xSCQkJMHgwMDI4CisjZGVmaW5lIERJU1Bf UkVHX09WTF9TUkNfQ09OCQkJMHgwMDJjCisjZGVmaW5lIERJU1BfUkVHX09WTF9DT04obikJCQko MHgwMDMwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKG4pCQko MHgwMDM4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX09GRlNFVChuKQkJCSgw eDAwM2MgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUElUQ0gobikJCQkoMHgw MDQ0ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChuKQkJKDB4 MDBjMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0dNQyhuKQkJKDB4 MDBjOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9BRERSKG4pCQkJKDB4MGY0 MCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUJT1ZMX1JETUFfTUVNX0dNQwkweDQwNDAyMDIwCisK KyNkZWZpbmUgT1ZMX0NPTl9CWVRFX1NXQVAJQklUKDI0KQorI2RlZmluZSBPVkxfQ09OX0NMUkZN VF9SR0I1NjUJKDAgPDwgMTIpCisjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX1JHQjg4OAkoMSA8PCAx MikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODgJKDIgPDwgMTIpCisjZGVmaW5lIE9W TF9DT05fQ0xSRk1UX0FSR0I4ODg4CSgzIDw8IDEyKQorI2RlZmluZQlPVkxfQ09OX0FFTgkJQklU KDgpCisjZGVmaW5lCU9WTF9DT05fQUxQSEEJCTB4ZmYKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2Rp c3Bfb3ZsIC0gRElTUF9PVkwgZHJpdmVyIHN0cnVjdHVyZQorICogQGRkcF9jb21wIC0gc3RydWN0 dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVtIGFuZCBoYXJkd2FyZSByZXNvdXJjZXMKKyAqIEBjcnRj IC0gYXNzb2NpYXRlZCBjcnRjIHRvIHJlcG9ydCB2YmxhbmsgZXZlbnRzIHRvCisgKi8KK3N0cnVj dCBtdGtfZGlzcF9vdmwgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAJCWRkcF9jb21wOworCXN0cnVj dCBkcm1fY3J0YwkJCSpjcnRjOworfTsKKworc3RhdGljIGlycXJldHVybl90IG10a19kaXNwX292 bF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10a19kaXNw X292bCAqcHJpdiA9IGRldl9pZDsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSAmcHJpdi0+ ZGRwX2NvbXA7CisKKwkvKiBDbGVhciBmcmFtZSBjb21wbGV0aW9uIGludGVycnVwdCAqLworCXdy aXRlbCgweDAsIG92bC0+cmVncyArIERJU1BfUkVHX09WTF9JTlRTVEEpOworCisJaWYgKCFwcml2 LT5jcnRjKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwltdGtfY3J0Y19kZHBfaXJxKHByaXYtPmNy dGMsIG92bCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19v dmxfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCSAgc3RydWN0 IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBjb250YWlu ZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwKKwkJCQkJCSBkZHBfY29tcCk7CisKKwlw cml2LT5jcnRjID0gY3J0YzsKKwl3cml0ZWxfcmVsYXhlZChPVkxfRk1FX0NQTF9JTlQsIGNvbXAt PnJlZ3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2Rp c2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19k aXNwX292bCAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsLAor CQkJCQkJIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMgPSBOVUxMOworCXdyaXRlbF9yZWxheGVk KDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lk IG10a19vdmxfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWxfcmVs YXhlZCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfRU4pOworfQorCitzdGF0aWMgdm9p ZCBtdGtfb3ZsX3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWxfcmVs YXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfRU4pOworfQorCitzdGF0aWMgdm9p ZCBtdGtfb3ZsX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQg dywKKwkJCSAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJaWYg KHcgIT0gMCAmJiBoICE9IDApCisJCXdyaXRlbF9yZWxheGVkKGggPDwgMTYgfCB3LCBjb21wLT5y ZWdzICsgRElTUF9SRUdfT1ZMX1JPSV9TSVpFKTsKKwl3cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAt PnJlZ3MgKyBESVNQX1JFR19PVkxfUk9JX0JHQ0xSKTsKKworCXdyaXRlbCgweDEsIGNvbXAtPnJl Z3MgKyBESVNQX1JFR19PVkxfUlNUKTsKKwl3cml0ZWwoMHgwLCBjb21wLT5yZWdzICsgRElTUF9S RUdfT1ZMX1JTVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfb24oc3RydWN0IG10 a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVn OworCisJd3JpdGVsKDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4 KSk7CisJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxf UkRNQV9HTUMoaWR4KSk7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZM X1NSQ19DT04pOworCXJlZyA9IHJlZyB8IEJJVChpZHgpOworCXdyaXRlbChyZWcsIGNvbXAtPnJl Z3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5 ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpCit7CisJ dW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P VkxfU1JDX0NPTik7CisJcmVnID0gcmVnICYgfkJJVChpZHgpOworCXdyaXRlbChyZWcsIGNvbXAt PnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7CisKKwl3cml0ZWwoMHgwLCBjb21wLT5yZWdz ICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGlu dCBvdmxfZm10X2NvbnZlcnQodW5zaWduZWQgaW50IGZtdCkKK3sKKwlzd2l0Y2ggKGZtdCkgewor CWRlZmF1bHQ6CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xS Rk1UX1JHQjU2NTsKKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1OgorCQlyZXR1cm4gT1ZMX0NPTl9D TFJGTVRfUkdCNTY1IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4 ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4ODsKKwljYXNlIERSTV9GT1JNQVRfQkdS ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7 CisJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoK KwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4OworCWNhc2UgRFJNX0ZPUk1BVF9CR1JY ODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZN VF9BUkdCODg4OCB8IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9S R0JBODg4ODsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FC R1I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODggfCBPVkxfQ09OX0JZVEVf U1dBUDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfY29uZmlnKHN0cnVjdCBt dGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgsCisJCQkJIHN0cnVjdCBtdGtfcGxh bmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSAqcGVu ZGluZyA9ICZzdGF0ZS0+cGVuZGluZzsKKwl1bnNpZ25lZCBpbnQgYWRkciA9IHBlbmRpbmctPmFk ZHI7CisJdW5zaWduZWQgaW50IHBpdGNoID0gcGVuZGluZy0+cGl0Y2ggJiAweGZmZmY7CisJdW5z aWduZWQgaW50IGZtdCA9IHBlbmRpbmctPmZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0g KHBlbmRpbmctPnkgPDwgMTYpIHwgcGVuZGluZy0+eDsKKwl1bnNpZ25lZCBpbnQgc3JjX3NpemUg PSAocGVuZGluZy0+aGVpZ2h0IDw8IDE2KSB8IHBlbmRpbmctPndpZHRoOworCXVuc2lnbmVkIGlu dCBjb247CisKKwlpZiAoIXBlbmRpbmctPmVuYWJsZSkKKwkJbXRrX292bF9sYXllcl9vZmYoY29t cCwgaWR4KTsKKworCWNvbiA9IG92bF9mbXRfY29udmVydChmbXQpOworCWlmIChpZHggIT0gMCkK KwkJY29uIHw9IE9WTF9DT05fQUVOIHwgT1ZMX0NPTl9BTFBIQTsKKworCXdyaXRlbF9yZWxheGVk KGNvbiwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9DT04oaWR4KSk7CisJd3JpdGVsX3JlbGF4 ZWQocGl0Y2gsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUElUQ0goaWR4KSk7CisJd3JpdGVs X3JlbGF4ZWQoc3JjX3NpemUsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX1NJWkUoaWR4 KSk7CisJd3JpdGVsX3JlbGF4ZWQob2Zmc2V0LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX09G RlNFVChpZHgpKTsKKwl3cml0ZWxfcmVsYXhlZChhZGRyLCBjb21wLT5yZWdzICsgRElTUF9SRUdf T1ZMX0FERFIoaWR4KSk7CisKKwlpZiAocGVuZGluZy0+ZW5hYmxlKQorCQltdGtfb3ZsX2xheWVy X29uKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1 bmNzIG10a19kaXNwX292bF9mdW5jcyA9IHsKKwkuY29uZmlnID0gbXRrX292bF9jb25maWcsCisJ LnN0YXJ0ID0gbXRrX292bF9zdGFydCwKKwkuc3RvcCA9IG10a19vdmxfc3RvcCwKKwkuZW5hYmxl X3ZibGFuayA9IG10a19vdmxfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBtdGtf b3ZsX2Rpc2FibGVfdmJsYW5rLAorCS5sYXllcl9vbiA9IG10a19vdmxfbGF5ZXJfb24sCisJLmxh eWVyX29mZiA9IG10a19vdmxfbGF5ZXJfb2ZmLAorCS5sYXllcl9jb25maWcgPSBtdGtfb3ZsX2xh eWVyX2NvbmZpZywKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2JpbmQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAgIHZvaWQgKmRhdGEpCit7 CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0 cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXRr X2RkcF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7CisJaWYgKHJldCA8 IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAl ZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfZGlzcF9vdmxfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJCXZvaWQgKmRhdGEp Cit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKworCW10a19kZHBfY29tcF91bnJl Z2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgY29tcG9uZW50X29wcyBtdGtfZGlzcF9vdmxfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZAk9 IG10a19kaXNwX292bF9iaW5kLAorCS51bmJpbmQgPSBtdGtfZGlzcF9vdmxfdW5iaW5kLAorfTsK Kworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtf ZGlzcF9vdmwgKnByaXY7CisJaW50IGNvbXBfaWQ7CisJaW50IGlycTsKKwlpbnQgcmV0OworCisJ cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlm ICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBk ZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJcmV0ID0gZGV2bV9yZXF1 ZXN0X2lycShkZXYsIGlycSwgbXRrX2Rpc3Bfb3ZsX2lycV9oYW5kbGVyLAorCQkJICAgICAgIElS UUZfVFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBwcml2KTsKKwlpZiAocmV0IDwgMCkgewor CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAlZDogJWRcbiIsIGlycSwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChk ZXYtPm9mX25vZGUsIE1US19ESVNQX09WTCk7CisJaWYgKGNvbXBfaWQgPCAwKSB7CisJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGlkZW50aWZ5IGJ5IGFsaWFzOiAlZFxuIiwgY29tcF9pZCk7CisJ CXJldHVybiBjb21wX2lkOworCX0KKworCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRldiwgZGV2 LT5vZl9ub2RlLCAmcHJpdi0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10a19kaXNwX292bF9m dW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXpl IGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10 a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kaXNwX292bF9jb21wb25l bnRfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kaXNwX292 bF9wcm9iZSwKKwkucmVtb3ZlCQk9IG10a19kaXNwX292bF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7 CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRpc3Atb3ZsIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUs CisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwK K307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5j IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjhhZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoK KyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgor I2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgor I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9j cnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVH X1JETUFfSU5UX0VOQUJMRQkJMHgwMDAwCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX1NUQVRV UwkJMHgwMDA0CisjZGVmaW5lIFJETUFfVEFSR0VUX0xJTkVfSU5UCQkJCUJJVCg1KQorI2RlZmlu ZSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0lOVAkJCQlCSVQoNCkKKyNkZWZpbmUgUkRNQV9FT0ZfQUJO T1JNQUxfSU5UCQkJCUJJVCgzKQorI2RlZmluZSBSRE1BX0ZSQU1FX0VORF9JTlQJCQkJQklUKDIp CisjZGVmaW5lIFJETUFfRlJBTUVfU1RBUlRfSU5UCQkJCUJJVCgxKQorI2RlZmluZSBSRE1BX1JF R19VUERBVEVfSU5UCQkJCUJJVCgwKQorI2RlZmluZSBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04J CTB4MDAxMAorI2RlZmluZSBSRE1BX0VOR0lORV9FTgkJCQkJQklUKDApCisjZGVmaW5lIERJU1Bf UkVHX1JETUFfU0laRV9DT05fMAkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9D T05fMQkJMHgwMDE4CisjZGVmaW5lIERJU1BfUkVHX1JETUFfVEFSR0VUX0xJTkUJCTB4MDAxYwor I2RlZmluZSBESVNQX1JFR19SRE1BX0ZJRk9fQ09OCQkJMHgwMDQwCisjZGVmaW5lIFJETUFfRklG T19VTkRFUkZMT1dfRU4JCQkJQklUKDMxKQorI2RlZmluZSBSRE1BX0ZJRk9fUFNFVURPX1NJWkUo Ynl0ZXMpCQkJKCgoYnl0ZXMpIC8gMTYpIDw8IDE2KQorI2RlZmluZSBSRE1BX09VVFBVVF9WQUxJ RF9GSUZPX1RIUkVTSE9MRChieXRlcykJCSgoYnl0ZXMpIC8gMTYpCisKKy8qKgorICogc3RydWN0 IG10a19kaXNwX3JkbWEgLSBESVNQX1JETUEgZHJpdmVyIHN0cnVjdHVyZQorICogQGRkcF9jb21w IC0gc3RydWN0dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVtIGFuZCBoYXJkd2FyZSByZXNvdXJjZXMK KyAqIEBjcnRjIC0gYXNzb2NpYXRlZCBjcnRjIHRvIHJlcG9ydCBpcnEgZXZlbnRzIHRvCisgKi8K K3N0cnVjdCBtdGtfZGlzcF9yZG1hIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQlkZHBfY29tcDsK KwlzdHJ1Y3QgZHJtX2NydGMJCQkqY3J0YzsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtf ZGlzcF9yZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qg bXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9pZDsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpyZG1h ID0gJnByaXYtPmRkcF9jb21wOworCisJLyogQ2xlYXIgZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1 cHQgKi8KKwl3cml0ZWwoMHgwLCByZG1hLT5yZWdzICsgRElTUF9SRUdfUkRNQV9JTlRfU1RBVFVT KTsKKworCWlmICghcHJpdi0+Y3J0YykKKwkJcmV0dXJuIElSUV9OT05FOworCisJbXRrX2NydGNf ZGRwX2lycShwcml2LT5jcnRjLCByZG1hKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwor c3RhdGljIHZvaWQgcmRtYV91cGRhdGVfYml0cyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1 bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50 IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wID0gcmVhZGwoY29tcC0+cmVncyArIHJlZyk7CisK Kwl0bXAgPSAodG1wICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCXdyaXRlbCh0bXAsIGNvbXAt PnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9lbmFibGVfdmJsYW5rKHN0 cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICAgc3RydWN0IGRybV9jcnRjICpjcnRjKQor eworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVj dCBtdGtfZGlzcF9yZG1hLAorCQkJCQkJICBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gY3J0 YzsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwgUkRN QV9GUkFNRV9FTkRfSU5ULAorCQkJIFJETUFfRlJBTUVfRU5EX0lOVCk7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19yZG1hX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7 CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0 IG10a19kaXNwX3JkbWEsCisJCQkJCQkgIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMgPSBOVUxM OworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFLCBSRE1B X0ZSQU1FX0VORF9JTlQsIDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9zdGFydChzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9S RUdfUkRNQV9HTE9CQUxfQ09OLCBSRE1BX0VOR0lORV9FTiwKKwkJCSBSRE1BX0VOR0lORV9FTik7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29t cCkKK3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfR0xPQkFMX0NPTiwg UkRNQV9FTkdJTkVfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9jb25maWcoc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgd2lkdGgsCisJCQkgICAgdW5zaWduZWQg aGVpZ2h0LCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJdW5zaWduZWQgaW50IHRocmVzaG9s ZDsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JF R19SRE1BX1NJWkVfQ09OXzAsIDB4ZmZmLCB3aWR0aCk7CisJcmRtYV91cGRhdGVfYml0cyhjb21w LCBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEsIDB4ZmZmZmYsIGhlaWdodCk7CisKKwkvKgorCSAq IEVuYWJsZSBGSUZPIHVuZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9ja2Vk LgorCSAqIEtlZXAgdGhlIEZJRk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4IEtpQi4g U2V0IHRoZQorCSAqIG91dHB1dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0aCA3LzYg b3ZlcmhlYWQgdG8KKwkgKiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBwaXhlbCBk ZXB0aCBvZiA0IGJ5dGVzOgorCSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0ICogdnJl ZnJlc2ggKiA0ICogNyAvIDEwMDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxPV19FTiB8 CisJICAgICAgUkRNQV9GSUZPX1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRNQV9PVVRQ VVRfVkFMSURfRklGT19USFJFU0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCBjb21wLT5y ZWdzICsgRElTUF9SRUdfUkRNQV9GSUZPX0NPTik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg bXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX3JkbWFfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10 a19yZG1hX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfcmRtYV9zdGFydCwKKwkuc3RvcCA9IG10a19y ZG1hX3N0b3AsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtfcmRtYV9lbmFibGVfdmJsYW5rLAorCS5k aXNhYmxlX3ZibGFuayA9IG10a19yZG1hX2Rpc2FibGVfdmJsYW5rLAorfTsKKworc3RhdGljIGlu dCBtdGtfZGlzcF9yZG1hX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpt YXN0ZXIsCisJCQkgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpw cml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYg PSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2Rl diwgJnByaXYtPmRkcF9jb21wKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJZGV2LT5vZl9ub2RlLT5m dWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisKK30KKwor c3RhdGljIHZvaWQgbXRrX2Rpc3BfcmRtYV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNw X3JkbWEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtX2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2LCAmcHJp di0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRr X2Rpc3BfcmRtYV9jb21wb25lbnRfb3BzID0geworCS5iaW5kCT0gbXRrX2Rpc3BfcmRtYV9iaW5k LAorCS51bmJpbmQgPSBtdGtfZGlzcF9yZG1hX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRr X2Rpc3BfcmRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXY7 CisJaW50IGNvbXBfaWQ7CisJaW50IGlycTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChp cnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQo ZGV2LT5vZl9ub2RlLCBNVEtfRElTUF9SRE1BKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2 X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsK KwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBk ZXYtPm9mX25vZGUsICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rpc3BfcmRt YV9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFs aXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRGlz YWJsZSBhbmQgY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4MCwgcHJpdi0+ ZGRwX2NvbXAucmVncyArIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSk7CisJd3JpdGVsKDB4MCwg cHJpdi0+ZGRwX2NvbXAucmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisKKwlyZXQg PSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBtdGtfZGlzcF9yZG1hX2lycV9oYW5kbGVyLAor CQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBwcml2KTsKKwlpZiAo cmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAlZDogJWRc biIsIGlycSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRrX2Rpc3BfcmRt YV9jb21wb25lbnRfb3BzKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBh ZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgbXRrX2Rpc3BfcmRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK Kwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10 a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRp YXRlayxtdDgxNzMtZGlzcC1yZG1hIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBtdGtfZGlzcF9yZG1hX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kaXNwX3JkbWFf cHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGlzcF9yZG1hX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsK KwkJLm5hbWUJPSAibWVkaWF0ZWstZGlzcC1yZG1hIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUs CisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoLAorCX0s Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5j IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2VmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKQEAgLTAsMCArMSw1ODIgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIu aD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X3BsYW5lX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4 L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21pLmg+CisKKyNpbmNsdWRl ICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10 a19kcm1fZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10 a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisvKioKKyAqIHN0cnVj dCBtdGtfZHJtX2NydGMgLSBNZWRpYVRlayBzcGVjaWZpYyBjcnRjIHN0cnVjdHVyZS4KKyAqIEBi YXNlOiBjcnRjIG9iamVjdC4KKyAqIEBlbmFibGVkOiByZWNvcmRzIHdoZXRoZXIgY3J0Y19lbmFi bGUgc3VjY2VlZGVkCisgKiBAcGxhbmVzOiBhcnJheSBvZiA0IG10a19kcm1fcGxhbmUgc3RydWN0 dXJlcywgb25lIGZvciBlYWNoIG92ZXJsYXkgcGxhbmUKKyAqIEBwZW5kaW5nX3BsYW5lczogd2hl dGhlciBhbnkgcGxhbmUgaGFzIHBlbmRpbmcgY2hhbmdlcyB0byBiZSBhcHBsaWVkCisgKiBAY29u ZmlnX3JlZ3M6IG1lbW9yeSBtYXBwZWQgbW1zeXMgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGFj ZQorICogQG11dGV4OiBoYW5kbGUgdG8gb25lIG9mIHRoZSB0ZW4gZGlzcF9tdXRleCBzdHJlYW1z CisgKiBAZGRwX2NvbXBfbnI6IG51bWJlciBvZiBjb21wb25lbnRzIGluIGRkcF9jb21wCisgKiBA ZGRwX2NvbXA6IGFycmF5IG9mIHBvaW50ZXJzIHRoZSBtdGtfZGRwX2NvbXAgc3RydWN0dXJlcyB1 c2VkIGJ5IHRoaXMgY3J0YworICovCitzdHJ1Y3QgbXRrX2RybV9jcnRjIHsKKwlzdHJ1Y3QgZHJt X2NydGMJCQliYXNlOworCWJvb2wJCQkJZW5hYmxlZDsKKworCWJvb2wJCQkJcGVuZGluZ19uZWVk c192Ymxhbms7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7CisKKwlz dHJ1Y3QgbXRrX2RybV9wbGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisJYm9vbAkJCQlwZW5k aW5nX3BsYW5lczsKKworCXZvaWQgX19pb21lbQkJCSpjb25maWdfcmVnczsKKwlzdHJ1Y3QgbXRr X2Rpc3BfbXV0ZXgJCSptdXRleDsKKwl1bnNpZ25lZCBpbnQJCQlkZHBfY29tcF9ucjsKKwlzdHJ1 Y3QgbXRrX2RkcF9jb21wCQkqKmRkcF9jb21wOworfTsKKworc3RydWN0IG10a19jcnRjX3N0YXRl IHsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRpbmdfY29u ZmlnOworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50CQkJcGVu ZGluZ19oZWlnaHQ7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307CisKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IG10a19kcm1fY3J0YyAqdG9fbXRrX2NydGMoc3RydWN0IGRybV9j cnRjICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kcm1fY3J0Yywg YmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19jcnRjX3N0YXRlICp0b19tdGtf Y3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnMpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihzLCBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBt dGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0 YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMtPmJhc2U7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xv Y2ssIGZsYWdzKTsKKwlkcm1fc2VuZF92YmxhbmtfZXZlbnQoY3J0Yy0+ZGV2LCBtdGtfY3J0Yy0+ ZXZlbnQtPnBpcGUsIG10a19jcnRjLT5ldmVudCk7CisJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRj KTsKKwltdGtfY3J0Yy0+ZXZlbnQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNy dGMtPmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2Zp bmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJZHJtX2Ny dGNfaGFuZGxlX3ZibGFuaygmbXRrX2NydGMtPmJhc2UpOworCWlmIChtdGtfY3J0Yy0+cGVuZGlu Z19uZWVkc192YmxhbmspIHsKKwkJbXRrX2RybV9jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAobXRrX2Ny dGMpOworCQltdGtfY3J0Yy0+cGVuZGluZ19uZWVkc192YmxhbmsgPSBmYWxzZTsKKwl9Cit9CisK K3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK K3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOwor CWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQor CQljbGtfdW5wcmVwYXJlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKworCW10a19kaXNw X211dGV4X3B1dChtdGtfY3J0Yy0+bXV0ZXgpOworCisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsK K30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKK3sKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJaWYgKGNydGMtPnN0YXRl KSB7CisJCWlmIChjcnRjLT5zdGF0ZS0+bW9kZV9ibG9iKQorCQkJZHJtX3Byb3BlcnR5X3VucmVm ZXJlbmNlX2Jsb2IoY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYik7CisKKwkJc3RhdGUgPSB0b19tdGtf Y3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisJCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0 ZSkpOworCX0gZWxzZSB7CisJCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tF Uk5FTCk7CisJCWlmICghc3RhdGUpCisJCQlyZXR1cm47CisJCWNydGMtPnN0YXRlID0gJnN0YXRl LT5iYXNlOworCX0KKworCXN0YXRlLT5iYXNlLmNydGMgPSBjcnRjOworfQorCitzdGF0aWMgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICptdGtfZHJtX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJc3Rh dGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQor CQlyZXR1cm4gTlVMTDsKKworCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3Rh dGUoY3J0YywgJnN0YXRlLT5iYXNlKTsKKworCVdBUk5fT04oc3RhdGUtPmJhc2UuY3J0YyAhPSBj cnRjKTsKKwlzdGF0ZS0+YmFzZS5jcnRjID0gY3J0YzsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKKwkJCQkgICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sK KwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShjcnRjLCBzdGF0ZSk7CisJ a2ZyZWUodG9fbXRrX2NydGNfc3RhdGUoc3RhdGUpKTsKK30KKworc3RhdGljIGJvb2wgbXRrX2Ry bV9jcnRjX21vZGVfZml4dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJLyogTm90aGluZyB0byBkbyBoZXJlLCBidXQgdGhp cyBjYWxsYmFjayBpcyBtYW5kYXRvcnkuICovCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19kcm1fY3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK KwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+ c3RhdGUpOworCisJc3RhdGUtPnBlbmRpbmdfd2lkdGggPSBjcnRjLT5tb2RlLmhkaXNwbGF5Owor CXN0YXRlLT5wZW5kaW5nX2hlaWdodCA9IGNydGMtPm1vZGUudmRpc3BsYXk7CisJc3RhdGUtPnBl bmRpbmdfdnJlZnJlc2ggPSBjcnRjLT5tb2RlLnZyZWZyZXNoOworCXdtYigpOwkvKiBNYWtlIHN1 cmUgdGhlIGFib3ZlIHBhcmFtZXRlcnMgYXJlIHNldCBiZWZvcmUgdXBkYXRlICovCisJc3RhdGUt PnBlbmRpbmdfY29uZmlnID0gdHJ1ZTsKK30KKworaW50IG10a19kcm1fY3J0Y19lbmFibGVfdmJs YW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0cnVj dCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtf ZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJc3Ry dWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRrX2Rk cF9jb21wX2VuYWJsZV92Ymxhbmsob3ZsLCAmbXRrX2NydGMtPmJhc2UpOworCisJcmV0dXJuIDA7 Cit9CisKK3ZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnBy aXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0g dG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3Zs ID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRrX2RkcF9jb21wX2Rpc2FibGVfdmJsYW5r KG92bCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2NydGNfZGRwX2Nsa19lbmFibGUoc3RydWN0IG10 a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCURSTV9ERUJV R19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5k ZHBfY29tcF9ucjsgaSsrKSB7CisJCXJldCA9IGNsa19lbmFibGUobXRrX2NydGMtPmRkcF9jb21w W2ldLT5jbGspOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUg Y2xvY2sgJWQ6ICVkXG4iLCBpLCByZXQpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlyZXR1 cm4gMDsKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa19kaXNhYmxlKG10a19jcnRjLT5k ZHBfY29tcFtpXS0+Y2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0 Y19kZHBfY2xrX2Rpc2FibGUoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJaW50 IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWZvciAoaSA9IDA7 IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX2Rpc2FibGUobXRrX2NydGMt PmRkcF9jb21wW2ldLT5jbGspOworfQorCitzdGF0aWMgaW50IG10a19jcnRjX2RkcF9od19pbml0 KHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgdnJlZnJl c2g7CisJaW50IHJldDsKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1 bmNfXyk7CisJaWYgKFdBUk5fT04oIWNydGMtPnN0YXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK Kwl3aWR0aCA9IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5OworCWhlaWdodCA9 IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLnZkaXNwbGF5OworCXZyZWZyZXNoID0gY3J0Yy0+ c3RhdGUtPmFkanVzdGVkX21vZGUudnJlZnJlc2g7CisKKwlyZXQgPSBwbV9ydW50aW1lX2dldF9z eW5jKGNydGMtPmRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBlbmFibGUgcG93ZXIgZG9tYWluOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXQgPSBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisJaWYg KHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIG11dGV4IGNsb2NrOiAl ZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcG1fcnVudGltZV9wdXQ7CisJfQorCisJcmV0ID0gbXRr X2NydGNfZGRwX2Nsa19lbmFibGUobXRrX2NydGMpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9F UlJPUigiRmFpbGVkIHRvIGVuYWJsZSBjb21wb25lbnQgY2xvY2tzOiAlZFxuIiwgcmV0KTsKKwkJ Z290byBlcnJfbXV0ZXhfdW5wcmVwYXJlOworCX0KKworCURSTV9ERUJVR19EUklWRVIoIm1lZGlh dGVrX2RkcF9kZHBfcGF0aF9zZXR1cFxuIik7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5k ZHBfY29tcF9uciAtIDE7IGkrKykgeworCQltdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgobXRrX2Ny dGMtPmNvbmZpZ19yZWdzLAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJ IG10a19jcnRjLT5kZHBfY29tcFtpICsgMV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfYWRkX2Nv bXAobXRrX2NydGMtPm11dGV4LAorCQkJCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwl9 CisJbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtfY3J0Yy0+ZGRw X2NvbXBbaV0tPmlkKTsKKwltdGtfZGlzcF9tdXRleF9lbmFibGUobXRrX2NydGMtPm11dGV4KTsK KworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQlzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wID0gbXRrX2NydGMtPmRkcF9jb21wW2ldOworCisJCW10a19k ZHBfY29tcF9jb25maWcoY29tcCwgd2lkdGgsIGhlaWdodCwgdnJlZnJlc2gpOworCQltdGtfZGRw X2NvbXBfc3RhcnQoY29tcCk7CisJfQorCisJLyogSW5pdGlhbGx5IGNvbmZpZ3VyZSBhbGwgcGxh bmVzICovCisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10 a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxh bmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhtdGtf Y3J0Yy0+ZGRwX2NvbXBbMF0sIGksCisJCQkJCSAgcGxhbmVfc3RhdGUpOworCX0KKworCXJldHVy biAwOworCitlcnJfbXV0ZXhfdW5wcmVwYXJlOgorCW10a19kaXNwX211dGV4X3VucHJlcGFyZSht dGtfY3J0Yy0+bXV0ZXgpOworZXJyX3BtX3J1bnRpbWVfcHV0OgorCXBtX3J1bnRpbWVfcHV0KGNy dGMtPmRldi0+ZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0Y19k ZHBfaHdfZmluaShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZHJtID0gbXRrX2NydGMtPmJhc2UuZGV2OworCWludCBpOworCisJRFJNX0RFQlVH X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk cF9jb21wX25yOyBpKyspCisJCW10a19kZHBfY29tcF9zdG9wKG10a19jcnRjLT5kZHBfY29tcFtp XSk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtf ZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRj LT5kZHBfY29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2Rpc2FibGUobXRrX2NydGMtPm11 dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7 CisJCW10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywK KwkJCQkJICAgICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJICAgICAgbXRrX2Ny dGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcCht dGtfY3J0Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0K KwltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5k ZHBfY29tcFtpXS0+aWQpOworCW10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShtdGtfY3J0Yyk7CisJ bXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisKKwlwbV9ydW50aW1l X3B1dChkcm0tPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19lbmFibGUoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0g dG9fbXRrX2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMt PmRkcF9jb21wWzBdOworCWludCByZXQ7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwg X19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCisJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChvdmwt PmxhcmJfZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsYXJi OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9od19p bml0KG10a19jcnRjKTsKKwlpZiAocmV0KSB7CisJCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJi X2Rldik7CisJCXJldHVybjsKKwl9CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJbXRr X2NydGMtPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGlz YWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRr X2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBt dGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAl ZFxuIiwgX19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCWlmIChXQVJOX09OKCFtdGtfY3J0Yy0+ ZW5hYmxlZCkpCisJCXJldHVybjsKKworCS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0ZSB0 byBkaXNhYmxlZCAqLworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0 cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9f bXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmVu YWJsZSA9IGZhbHNlOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCX0K KwltdGtfY3J0Yy0+cGVuZGluZ19wbGFuZXMgPSB0cnVlOworCisJLyogV2FpdCBmb3IgcGxhbmVz IHRvIGJlIGRpc2FibGVkICovCisJZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOworCisJ ZHJtX2NydGNfdmJsYW5rX29mZihjcnRjKTsKKwltdGtfY3J0Y19kZHBfaHdfZmluaShtdGtfY3J0 Yyk7CisJbXRrX3NtaV9sYXJiX3B1dChvdmwtPmxhcmJfZGV2KTsKKworCW10a19jcnRjLT5lbmFi bGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4o c3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq b2xkX2NydGNfc3RhdGUpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210 a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0 YyA9IHRvX210a19jcnRjKGNydGMpOworCisJaWYgKG10a19jcnRjLT5ldmVudCAmJiBzdGF0ZS0+ YmFzZS5ldmVudCkKKwkJRFJNX0VSUk9SKCJuZXcgZXZlbnQgd2hpbGUgdGhlcmUgaXMgc3RpbGwg YSBwZW5kaW5nIGV2ZW50XG4iKTsKKworCWlmIChzdGF0ZS0+YmFzZS5ldmVudCkgeworCQlzdGF0 ZS0+YmFzZS5ldmVudC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNydGMpOworCQlXQVJOX09OKGRy bV9jcnRjX3ZibGFua19nZXQoY3J0YykgIT0gMCk7CisJCW10a19jcnRjLT5ldmVudCA9IHN0YXRl LT5iYXNlLmV2ZW50OworCQlzdGF0ZS0+YmFzZS5ldmVudCA9IE5VTEw7CisJfQorfQorCitzdGF0 aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK KwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0 cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJdW5zaWdu ZWQgaW50IHBlbmRpbmdfcGxhbmVzID0gMDsKKwlpbnQgaTsKKworCWlmIChtdGtfY3J0Yy0+ZXZl bnQpCisJCW10a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuayA9IHRydWU7CisJZm9yIChpID0g MDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0g Jm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0 YXRlKTsKKwkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5KSB7CisJCQlwbGFuZV9zdGF0 ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuZGlydHkg PSBmYWxzZTsKKwkJCXBlbmRpbmdfcGxhbmVzIHw9IEJJVChpKTsKKwkJfQorCX0KKwlpZiAocGVu ZGluZ19wbGFuZXMpCisJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgbXRrX2NydGNfZnVuY3MgPSB7CisJLnNl dF9jb25maWcJCT0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwCQk9 IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcCwKKwkuZGVzdHJveQkJPSBtdGtfZHJtX2NydGNf ZGVzdHJveSwKKwkucmVzZXQJCQk9IG10a19kcm1fY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxp Y2F0ZV9zdGF0ZQk9IG10a19kcm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0 cm95X3N0YXRlCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7 CisJLm1vZGVfZml4dXAJPSBtdGtfZHJtX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9m Ygk9IG10a19kcm1fY3J0Y19tb2RlX3NldF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRj X2VuYWJsZSwKKwkuZGlzYWJsZQk9IG10a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVn aW4JPSBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJt X2NydGNfYXRvbWljX2ZsdXNoLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJICAgICBzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtf Y3J0YywKKwkJCSAgICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKKwkJCSAgICAgc3RydWN0 IGRybV9wbGFuZSAqY3Vyc29yLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlpbnQgcmV0OworCisJ cmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZtdGtfY3J0Yy0+YmFzZSwgcHJp bWFyeSwgY3Vyc29yLAorCQkJCQkmbXRrX2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX2NsZWFudXBfY3J0YzsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm10a19jcnRj LT5iYXNlLCAmbXRrX2NydGNfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiAwOworCitlcnJfY2xl YW51cF9jcnRjOgorCWRybV9jcnRjX2NsZWFudXAoJm10a19jcnRjLT5iYXNlKTsKKwlyZXR1cm4g cmV0OworfQorCit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBz dHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2Ny dGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0g dG9fbXRrX2NydGNfc3RhdGUobXRrX2NydGMtPmJhc2Uuc3RhdGUpOworCXVuc2lnbmVkIGludCBp OworCisJLyoKKwkgKiBUT0RPOiBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlcnMgaGVy ZSwgd2Ugc2hvdWxkIHByZXBhcmUKKwkgKiB3b3JraW5nIHJlZ2lzdGVycyBpbiBhdG9taWNfY29t bWl0IGFuZCBsZXQgdGhlIGhhcmR3YXJlIGNvbW1hbmQKKwkgKiBxdWV1ZSB1cGRhdGUgbW9kdWxl IHJlZ2lzdGVycyBvbiB2YmxhbmsuCisJICovCisJaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykg eworCQltdGtfZGRwX2NvbXBfY29uZmlnKG92bCwgc3RhdGUtPnBlbmRpbmdfd2lkdGgsCisJCQkJ ICAgIHN0YXRlLT5wZW5kaW5nX2hlaWdodCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfdnJlZnJl c2gpOworCisJCXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOworCX0KKworCWlmIChtdGtf Y3J0Yy0+cGVuZGluZ19wbGFuZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsg aSsrKSB7CisJCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ld LmJhc2U7CisJCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQkJcGxh bmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQkJaWYgKHBs YW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZykgeworCQkJCW10a19kZHBfY29tcF9sYXllcl9jb25m aWcob3ZsLCBpLCBwbGFuZV9zdGF0ZSk7CisJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmln ID0gZmFsc2U7CisJCQl9CisJCX0KKwkJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gZmFsc2U7 CisJfQorCisJbXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKK30KKworaW50IG10 a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBl bnVtIG10a19kZHBfY29tcF9pZCAqcGF0aCwgdW5zaWduZWQgaW50IHBhdGhfbGVuKQoreworCXN0 cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBkcm1fZGV2LT5kZXY7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRr X2NydGM7CisJZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB6cG9zOwor CWludCBwaXBlID0gcHJpdi0+bnVtX3BpcGVzOworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgcGF0aF9sZW47IGkrKykgeworCQllbnVtIG10a19kZHBfY29tcF9pZCBjb21w X2lkID0gcGF0aFtpXTsKKwkJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCisJCW5vZGUgPSBw cml2LT5jb21wX25vZGVbY29tcF9pZF07CisJCWlmICghbm9kZSkgeworCQkJZGV2X2luZm8oZGV2 LAorCQkJCSAiTm90IGNyZWF0aW5nIGNydGMgJWQgYmVjYXVzZSBjb21wb25lbnQgJWQgaXMgZGlz YWJsZWQgb3IgbWlzc2luZ1xuIiwKKwkJCQkgcGlwZSwgY29tcF9pZCk7CisJCQlyZXR1cm4gMDsK KwkJfQorCX0KKworCW10a19jcnRjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptdGtfY3J0 YyksIEdGUF9LRVJORUwpOworCWlmICghbXRrX2NydGMpCisJCXJldHVybiAtRU5PTUVNOworCisJ bXRrX2NydGMtPmNvbmZpZ19yZWdzID0gcHJpdi0+Y29uZmlnX3JlZ3M7CisJbXRrX2NydGMtPmRk cF9jb21wX25yID0gcGF0aF9sZW47CisJbXRrX2NydGMtPmRkcF9jb21wID0gZGV2bV9rbWFsbG9j X2FycmF5KGRldiwgbXRrX2NydGMtPmRkcF9jb21wX25yLAorCQkJCQkJc2l6ZW9mKCptdGtfY3J0 Yy0+ZGRwX2NvbXApLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisKKwltdGtfY3J0Yy0+bXV0ZXggPSBt dGtfZGlzcF9tdXRleF9nZXQocHJpdi0+bXV0ZXhfZGV2LCBwaXBlKTsKKwlpZiAoSVNfRVJSKG10 a19jcnRjLT5tdXRleCkpIHsKKwkJcmV0ID0gUFRSX0VSUihtdGtfY3J0Yy0+bXV0ZXgpOworCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbXV0ZXg6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykg eworCQllbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkID0gcGF0aFtpXTsKKwkJc3RydWN0IG10 a19kZHBfY29tcCAqY29tcDsKKwkJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCisJCW5vZGUg PSBwcml2LT5jb21wX25vZGVbY29tcF9pZF07CisJCWNvbXAgPSBwcml2LT5kZHBfY29tcFtjb21w X2lkXTsKKwkJaWYgKCFjb21wKSB7CisJCQlkZXZfZXJyKGRldiwgIkNvbXBvbmVudCAlcyBub3Qg aW5pdGlhbGl6ZWRcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCXJldCA9IC1FTk9ERVY7 CisJCQlnb3RvIHVucHJlcGFyZTsKKwkJfQorCisJCXJldCA9IGNsa19wcmVwYXJlKGNvbXAtPmNs ayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJGYWlsZWQgdG8gcHJlcGFy ZSBjbG9jayBmb3IgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUsIHJl dCk7CisJCQlnb3RvIHVucHJlcGFyZTsKKwkJfQorCisJCW10a19jcnRjLT5kZHBfY29tcFtpXSA9 IGNvbXA7CisJfQorCisJZm9yICh6cG9zID0gMDsgenBvcyA8IE9WTF9MQVlFUl9OUjsgenBvcysr KSB7CisJCXR5cGUgPSAoenBvcyA9PSAwKSA/IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgOgorCQkJ CSh6cG9zID09IDEpID8gRFJNX1BMQU5FX1RZUEVfQ1VSU09SIDoKKwkJCQkJCURSTV9QTEFORV9U WVBFX09WRVJMQVk7CisJCXJldCA9IG10a19wbGFuZV9pbml0KGRybV9kZXYsICZtdGtfY3J0Yy0+ cGxhbmVzW3pwb3NdLAorCQkJCSAgICAgQklUKHBpcGUpLCB0eXBlLCB6cG9zKTsKKwkJaWYgKHJl dCkKKwkJCWdvdG8gdW5wcmVwYXJlOworCX0KKworCXJldCA9IG10a19kcm1fY3J0Y19pbml0KGRy bV9kZXYsIG10a19jcnRjLCAmbXRrX2NydGMtPnBsYW5lc1swXS5iYXNlLAorCQkJCSZtdGtfY3J0 Yy0+cGxhbmVzWzFdLmJhc2UsIHBpcGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHVucHJlcGFy ZTsKKworCXByaXYtPmNydGNbcGlwZV0gPSAmbXRrX2NydGMtPmJhc2U7CisJcHJpdi0+bnVtX3Bp cGVzKys7CisKKwlyZXR1cm4gMDsKKwordW5wcmVwYXJlOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJ Y2xrX3VucHJlcGFyZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisKKwlyZXR1cm4gcmV0 OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5o IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZTU1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9DUlRDX0gK KyNkZWZpbmUgTVRLX0RSTV9DUlRDX0gKKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2lu Y2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisK KyNkZWZpbmUgT1ZMX0xBWUVSX05SCTQKKworaW50IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5r KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKTsKK3ZvaWQgbXRrX2Ry bV9jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGlu dCBwaXBlKTsKK3ZvaWQgbXRrX2RybV9jcnRjX2NoZWNrX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yyk7Cit2b2lkIG10a19kcm1fY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsK K3ZvaWQgbXRrX2NydGNfZGRwX2lycShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBtdGtf ZGRwX2NvbXAgKm92bCk7CitpbnQgbXRrX2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLAorCQkJdW5z aWduZWQgaW50IHBhdGhfbGVuKTsKKworI2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjE2NTg0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9kZHAuYwpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxs aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2lu Y2x1ZGUgIm10a19kcm1fZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisj ZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDBfTU9VVF9FTgkweDA0MAorI2RlZmluZSBE SVNQX1JFR19DT05GSUdfRElTUF9PVkwxX01PVVRfRU4JMHgwNDQKKyNkZWZpbmUgRElTUF9SRUdf Q09ORklHX0RJU1BfT0RfTU9VVF9FTgkJMHgwNDgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJ U1BfR0FNTUFfTU9VVF9FTgkweDA0YworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9F X01PVVRfRU4JMHgwNTAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9J TgkweDA4NAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOCTB4MDg4 CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19EUElfU0VMX0lOCQkweDBhYworI2RlZmluZSBESVNQ X1JFR19DT05GSUdfRElTUF9SRE1BMV9NT1VUX0VOCTB4MGM4CisjZGVmaW5lIERJU1BfUkVHX0NP TkZJR19NTVNZU19DR19DT04wCQkweDEwMAorCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX0VOKG4p CSgweDIwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfUlNUKG4pCSgweDI4 ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfTU9EKG4pCSgweDJjICsgMHgy MCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfU09GKG4pCSgweDMwICsgMHgyMCAqIChu KSkKKworI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkwwCQlCSVQoMTEpCisjZGVmaW5lIE1VVEVY X01PRF9ESVNQX09WTDEJCUJJVCgxMikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTAJCUJJ VCgxMykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTEJCUJJVCgxNCkKKyNkZWZpbmUgTVVU RVhfTU9EX0RJU1BfUkRNQTIJCUJJVCgxNSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTAJ CUJJVCgxNikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTEJCUJJVCgxNykKKyNkZWZpbmUg TVVURVhfTU9EX0RJU1BfQ09MT1IwCQlCSVQoMTgpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NP TE9SMQkJQklUKDE5KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9BQUwJCUJJVCgyMCkKKyNkZWZp bmUgTVVURVhfTU9EX0RJU1BfR0FNTUEJCUJJVCgyMSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1Bf VUZPRQkJQklUKDIyKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00wCQlCSVQoMjMpCisjZGVm aW5lIE1VVEVYX01PRF9ESVNQX1BXTTEJCUJJVCgyNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1Bf T0QJCUJJVCgyNSkKKworI2RlZmluZSBNVVRFWF9TT0ZfU0lOR0xFX01PREUJCTAKKyNkZWZpbmUg TVVURVhfU09GX0RTSTAJCQkxCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kxCQkJMgorI2RlZmluZSBN VVRFWF9TT0ZfRFBJMAkJCTMKKworI2RlZmluZSBPVkwwX01PVVRfRU5fQ09MT1IwCQkweDEKKyNk ZWZpbmUgT0RfTU9VVF9FTl9SRE1BMAkJMHgxCisjZGVmaW5lIFVGT0VfTU9VVF9FTl9EU0kwCQkw eDEKKyNkZWZpbmUgQ09MT1IwX1NFTF9JTl9PVkwwCQkweDEKKyNkZWZpbmUgT1ZMMV9NT1VUX0VO X0NPTE9SMQkJMHgxCisjZGVmaW5lIEdBTU1BX01PVVRfRU5fUkRNQTEJCTB4MQorI2RlZmluZSBS RE1BMV9NT1VUX0RQSTAJCQkweDIKKyNkZWZpbmUgRFBJMF9TRUxfSU5fUkRNQTEJCTB4MQorI2Rl ZmluZSBDT0xPUjFfU0VMX0lOX09WTDEJCTB4MQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggewor CWludCBpZDsKKwlib29sIGNsYWltZWQ7Cit9OworCitzdHJ1Y3QgbXRrX2RkcCB7CisJc3RydWN0 IGRldmljZQkJCSpkZXY7CisJc3RydWN0IGNsawkJCSpjbGs7CisJdm9pZCBfX2lvbWVtCQkJKnJl Z3M7CisJc3RydWN0IG10a19kaXNwX211dGV4CQltdXRleFsxMF07Cit9OworCitzdGF0aWMgY29u c3QgdW5zaWduZWQgaW50IG11dGV4X21vZFtERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0RE UF9DT01QT05FTlRfQUFMXSA9IE1VVEVYX01PRF9ESVNQX0FBTCwKKwlbRERQX0NPTVBPTkVOVF9D T0xPUjBdID0gTVVURVhfTU9EX0RJU1BfQ09MT1IwLAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0g PSBNVVRFWF9NT0RfRElTUF9DT0xPUjEsCisJW0REUF9DT01QT05FTlRfR0FNTUFdID0gTVVURVhf TU9EX0RJU1BfR0FNTUEsCisJW0REUF9DT01QT05FTlRfT0RdID0gTVVURVhfTU9EX0RJU1BfT0Qs CisJW0REUF9DT01QT05FTlRfT1ZMMF0gPSBNVVRFWF9NT0RfRElTUF9PVkwwLAorCVtERFBfQ09N UE9ORU5UX09WTDFdID0gTVVURVhfTU9EX0RJU1BfT1ZMMSwKKwlbRERQX0NPTVBPTkVOVF9QV00w XSA9IE1VVEVYX01PRF9ESVNQX1BXTTAsCisJW0REUF9DT01QT05FTlRfUFdNMV0gPSBNVVRFWF9N T0RfRElTUF9QV00xLAorCVtERFBfQ09NUE9ORU5UX1JETUEwXSA9IE1VVEVYX01PRF9ESVNQX1JE TUEwLAorCVtERFBfQ09NUE9ORU5UX1JETUExXSA9IE1VVEVYX01PRF9ESVNQX1JETUExLAorCVtE RFBfQ09NUE9ORU5UX1JETUEyXSA9IE1VVEVYX01PRF9ESVNQX1JETUEyLAorCVtERFBfQ09NUE9O RU5UX1VGT0VdID0gTVVURVhfTU9EX0RJU1BfVUZPRSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0g PSBNVVRFWF9NT0RfRElTUF9XRE1BMCwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMV0gPSBNVVRFWF9N T0RfRElTUF9XRE1BMSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9tb3V0X2Vu KGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg bmV4dCwKKwkJCQkgICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1 ZTsKKworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBP TkVOVF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRf RU47CisJCXZhbHVlID0gT1ZMMF9NT1VUX0VOX0NPTE9SMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBE RFBfQ09NUE9ORU5UX09EICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMCkgeworCQkqYWRk ciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX09EX01PVVRfRU47CisJCXZhbHVlID0gT0RfTU9VVF9F Tl9SRE1BMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1VGT0UgJiYgbmV4dCA9 PSBERFBfQ09NUE9ORU5UX0RTSTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9V Rk9FX01PVVRfRU47CisJCXZhbHVlID0gVUZPRV9NT1VUX0VOX0RTSTA7CisJfSBlbHNlIGlmIChj dXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEp IHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwxX01PVVRfRU47CisJCXZhbHVl ID0gT1ZMMV9NT1VUX0VOX0NPTE9SMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5U X0dBTU1BICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSkgeworCQkqYWRkciA9IERJU1Bf UkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRfRU47CisJCXZhbHVlID0gR0FNTUFfTU9VVF9FTl9S RE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0g RERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfUkRN QTFfTU9VVF9FTjsKKwkJdmFsdWUgPSBSRE1BMV9NT1VUX0RQSTA7CisJfSBlbHNlIHsKKwkJdmFs dWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBt dGtfZGRwX3NlbF9pbihlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtf ZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKmFkZHIpCit7CisJdW5zaWdu ZWQgaW50IHZhbHVlOworCisJaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDAgJiYgbmV4dCA9 PSBERFBfQ09NUE9ORU5UX0NPTE9SMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQ X0NPTE9SMF9TRUxfSU47CisJCXZhbHVlID0gQ09MT1IwX1NFTF9JTl9PVkwwOworCX0gZWxzZSBp ZiAoY3VyID09IEREUF9DT01QT05FTlRfUkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQ STApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTjsKKwkJdmFsdWUgPSBE UEkwX1NFTF9JTl9SRE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEg JiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NP TkZJR19ESVNQX0NPTE9SMV9TRUxfSU47CisJCXZhbHVlID0gQ09MT1IxX1NFTF9JTl9PVkwxOwor CX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQg bXRrX2RkcF9hZGRfY29tcF90b19wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkg ICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29t cF9pZCBuZXh0KQoreworCXVuc2lnbmVkIGludCBhZGRyLCB2YWx1ZSwgcmVnOworCisJdmFsdWUg PSBtdGtfZGRwX21vdXRfZW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJl ZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxf cmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRw X3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxf cmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpIHwgdmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJl ZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9Cit9CisKK3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29t cF9mcm9tX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCQkgICBlbnVtIG10a19k ZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1 bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2Vu KGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVk KGNvbmZpZ19yZWdzICsgYWRkcikgJiB+dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29u ZmlnX3JlZ3MgKyBhZGRyKTsKKwl9CisKKwl2YWx1ZSA9IG10a19kZHBfc2VsX2luKGN1ciwgbmV4 dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19y ZWdzICsgYWRkcikgJiB+dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3Mg KyBhZGRyKTsKKwl9Cit9CisKK3N0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhf Z2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBtdGtf ZGRwICpkZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpZCA+PSAxMCkKKwkJcmV0 dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKGRkcC0+bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJl dHVybiBFUlJfUFRSKC1FQlVTWSk7CisKKwlkZHAtPm11dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsK KworCXJldHVybiAmZGRwLT5tdXRleFtpZF07Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0 KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9 IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4 LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKwor CW11dGV4LT5jbGFpbWVkID0gZmFsc2U7Cit9CisKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJl KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9 IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4 LT5pZF0pOworCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUoZGRwLT5jbGspOworfQorCit2b2lk IG10a19kaXNwX211dGV4X3VucHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQor eworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtf ZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUo ZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtf ZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQorewor CXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRw LAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJV0FS Tl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQpIHsK KwljYXNlIEREUF9DT01QT05FTlRfRFNJMDoKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJy ZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kxOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsK KwkJYnJlYWs7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9E UEkwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVn cyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVnIHw9IG11dGV4X21vZFtp ZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9E KG11dGV4LT5pZCkpOworCQlyZXR1cm47CisJfQorCisJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAt PnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rp c3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCQll bnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFp bmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7 CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAh PSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJ Y2FzZSBERFBfQ09NUE9ORU5UX0RTSTE6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXdy aXRlbF9yZWxheGVkKE1VVEVYX1NPRl9TSU5HTEVfTU9ERSwKKwkJCSAgICAgICBkZHAtPnJlZ3Mg KyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4 LT5pZCkpOworCQlyZWcgJj0gfm11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywg ZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlicmVhazsKKwl9 Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq bXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3Ry dWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRw LT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBE SVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9k aXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAg KmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4 W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4 KTsKKworCXdyaXRlbCgwLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQp KTsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRr X2RkcCAqZGRwOworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQgaTsKKworCWRkcCA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZHApCisJ CXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCWRkcC0+bXV0 ZXhbaV0uaWQgPSBpOworCisJZGRwLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlp ZiAoSVNfRVJSKGRkcC0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xv Y2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPmNsayk7CisJfQorCisJcmVncyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZGRwLT5yZWdzID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihkZHAtPnJlZ3Mp KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBtdXRleCByZWdpc3RlcnNcbiIpOwor CQlyZXR1cm4gUFRSX0VSUihkZHAtPnJlZ3MpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRh KHBkZXYsIGRkcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkZHBfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJ eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIgfSwKKwl7fSwKK307 CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkZHBfZHJpdmVyX2R0X21hdGNoKTsKKworc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10 a19kZHBfcHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsK KwkJLm5hbWUJPSAibWVkaWF0ZWstZGRwIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5v Zl9tYXRjaF90YWJsZSA9IGRkcF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9w bGF0Zm9ybV9kcml2ZXIobXRrX2RkcF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgK QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpZm5kZWYgTVRLX0RSTV9ERFBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRl ICJtdGtfZHJtX2RkcF9jb21wLmgiCisKK3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOwor c3RydWN0IG10a19kaXNwX211dGV4OworCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2 b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg Y3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBf cmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAg ZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5l eHQpOworCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFy ZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRk X2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRw X2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNw X211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19k aXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVj dCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwor dm9pZCBtdGtfZGlzcF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRl eCk7Cit2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4 KTsKKworI2VuZGlmIC8qIE1US19EUk1fRERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9kZHBfY29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjM5NzBmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kZHBfY29tcC5jCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy MDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlh dGVrLmNvbT4KKyAqCUNLIEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3Mu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9y bS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9k cm1QLmg+CisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5l LmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfT0RfRU4J CQkJMHgwMDAwCisjZGVmaW5lIERJU1BfT0RfSU5URU4JCQkJMHgwMDA4CisjZGVmaW5lIERJU1Bf T0RfSU5UU1RBCQkJCTB4MDAwYworI2RlZmluZSBESVNQX09EX0NGRwkJCQkweDAwMjAKKyNkZWZp bmUgRElTUF9PRF9TSVpFCQkJCTB4MDAzMAorCisjZGVmaW5lIERJU1BfUkVHX1VGT19TVEFSVAkJ CTB4MDAwMAorCisjZGVmaW5lIERJU1BfQ09MT1JfQ0ZHX01BSU4JCQkweDA0MDAKKyNkZWZpbmUg RElTUF9DT0xPUl9TVEFSVAkJCTB4MGMwMAorI2RlZmluZSBESVNQX0NPTE9SX1dJRFRICQkJMHgw YzUwCisjZGVmaW5lIERJU1BfQ09MT1JfSEVJR0hUCQkJMHgwYzU0CisKKyNkZWZpbmUJT0RfUkVM QVlfTU9ERQkJQklUKDApCisKKyNkZWZpbmUJVUZPX0JZUEFTUwkJQklUKDIpCisKKyNkZWZpbmUJ Q09MT1JfQllQQVNTX0FMTAlCSVQoNykKKyNkZWZpbmUJQ09MT1JfU0VRX1NFTAkJQklUKDEzKQor CitzdGF0aWMgdm9pZCBtdGtfY29sb3JfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs IHVuc2lnbmVkIGludCB3LAorCQkJICAgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZy ZWZyZXNoKQoreworCXdyaXRlbCh3LCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9XSURUSCk7CisJ d3JpdGVsKGgsIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX0hFSUdIVCk7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19jb2xvcl9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRl bChDT0xPUl9CWVBBU1NfQUxMIHwgQ09MT1JfU0VRX1NFTCwKKwkgICAgICAgY29tcC0+cmVncyAr IERJU1BfQ09MT1JfQ0ZHX01BSU4pOworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX0NP TE9SX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX2NvbmZpZyhzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJCSAgdW5zaWduZWQgaW50IGgsIHVuc2ln bmVkIGludCB2cmVmcmVzaCkKK3sKKwl3cml0ZWwodyA8PCAxNiB8IGgsIGNvbXAtPnJlZ3MgKyBE SVNQX09EX1NJWkUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfb2Rfc3RhcnQoc3RydWN0IG10a19k ZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoT0RfUkVMQVlfTU9ERSwgY29tcC0+cmVncyArIERJ U1BfT0RfQ0ZHKTsKKwl3cml0ZWwoMSwgY29tcC0+cmVncyArIERJU1BfT0RfRU4pOworfQorCitz dGF0aWMgdm9pZCBtdGtfdWZvZV9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQorewor CXdyaXRlbChVRk9fQllQQVNTLCBjb21wLT5yZWdzICsgRElTUF9SRUdfVUZPX1NUQVJUKTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX2NvbG9yID0gewor CS5jb25maWcgPSBtdGtfY29sb3JfY29uZmlnLAorCS5zdGFydCA9IG10a19jb2xvcl9zdGFydCwK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9vZCA9IHsK KwkuY29uZmlnID0gbXRrX29kX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfb2Rfc3RhcnQsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfdWZvZSA9IHsKKwku c3RhcnQgPSBtdGtfdWZvZV9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qg bXRrX2RkcF9jb21wX3N0ZW1bTVRLX0REUF9DT01QX1RZUEVfTUFYXSA9IHsKKwlbTVRLX0RJU1Bf T1ZMXSA9ICJvdmwiLAorCVtNVEtfRElTUF9SRE1BXSA9ICJyZG1hIiwKKwlbTVRLX0RJU1BfV0RN QV0gPSAid2RtYSIsCisJW01US19ESVNQX0NPTE9SXSA9ICJjb2xvciIsCisJW01US19ESVNQX0FB TF0gPSAiYWFsIiwKKwlbTVRLX0RJU1BfR0FNTUFdID0gImdhbW1hIiwKKwlbTVRLX0RJU1BfVUZP RV0gPSAidWZvZSIsCisJW01US19EU0ldID0gImRzaSIsCisJW01US19EUEldID0gImRwaSIsCisJ W01US19ESVNQX1BXTV0gPSAicHdtIiwKKwlbTVRLX0RJU1BfTVVURVhdID0gIm11dGV4IiwKKwlb TVRLX0RJU1BfT0RdID0gIm9kIiwKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXBfbWF0Y2ggewor CWVudW0gbXRrX2RkcF9jb21wX3R5cGUgdHlwZTsKKwlpbnQgYWxpYXNfaWQ7CisJY29uc3Qgc3Ry dWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IG10a19kZHBfY29tcF9tYXRjaCBtdGtfZGRwX21hdGNoZXNbRERQX0NPTVBPTkVOVF9JRF9NQVhd ID0geworCVtERFBfQ09NUE9ORU5UX0FBTF0JPSB7IE1US19ESVNQX0FBTCwJMCwgTlVMTCB9LAor CVtERFBfQ09NUE9ORU5UX0NPTE9SMF0JPSB7IE1US19ESVNQX0NPTE9SLAkwLCAmZGRwX2NvbG9y IH0sCisJW0REUF9DT01QT05FTlRfQ09MT1IxXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTEsICZkZHBf Y29sb3IgfSwKKwlbRERQX0NPTVBPTkVOVF9EUEkwXQk9IHsgTVRLX0RQSSwJCTAsIE5VTEwgfSwK KwlbRERQX0NPTVBPTkVOVF9EU0kwXQk9IHsgTVRLX0RTSSwJCTAsIE5VTEwgfSwKKwlbRERQX0NP TVBPTkVOVF9EU0kxXQk9IHsgTVRLX0RTSSwJCTEsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9H QU1NQV0JPSB7IE1US19ESVNQX0dBTU1BLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT0Rd CT0geyBNVEtfRElTUF9PRCwJMCwgJmRkcF9vZCB9LAorCVtERFBfQ09NUE9ORU5UX09WTDBdCT0g eyBNVEtfRElTUF9PVkwsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXQk9IHsgTVRL X0RJU1BfT1ZMLAkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfUFdNMF0JPSB7IE1US19ESVNQ X1BXTSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1JETUEwXQk9IHsgTVRLX0RJU1BfUkRN QSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1JETUExXQk9IHsgTVRLX0RJU1BfUkRNQSwJ MSwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1JETUEyXQk9IHsgTVRLX0RJU1BfUkRNQSwJMiwg TlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1VGT0VdCT0geyBNVEtfRElTUF9VRk9FLAkwLCAmZGRw X3Vmb2UgfSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0JPSB7IE1US19ESVNQX1dETUEsCTAsIE5V TEwgfSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMV0JPSB7IE1US19ESVNQX1dETUEsCTEsIE5VTEwg fSwKK307CisKK2ludCBtdGtfZGRwX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9k ZSwKKwkJCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBlKQoreworCWludCBpZCA9IG9m X2FsaWFzX2dldF9pZChub2RlLCBtdGtfZGRwX2NvbXBfc3RlbVtjb21wX3R5cGVdKTsKKwlpbnQg aTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19kZHBfbWF0Y2hlcyk7IGkrKykg eworCQlpZiAoY29tcF90eXBlID09IG10a19kZHBfbWF0Y2hlc1tpXS50eXBlICYmCisJCSAgICAo aWQgPCAwIHx8IGlkID09IG10a19kZHBfbWF0Y2hlc1tpXS5hbGlhc19pZCkpCisJCQlyZXR1cm4g aTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IG10a19kZHBfY29tcF9pbml0KHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkgICAgICBzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wLCBlbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkLAorCQkg ICAgICBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpmdW5jcykKK3sKKwllbnVtIG10 a19kZHBfY29tcF90eXBlIHR5cGU7CisJc3RydWN0IGRldmljZV9ub2RlICpsYXJiX25vZGU7CisJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqbGFyYl9wZGV2OworCisJaWYgKGNvbXBfaWQgPCAwIHx8 IGNvbXBfaWQgPj0gRERQX0NPTVBPTkVOVF9JRF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJ Y29tcC0+aWQgPSBjb21wX2lkOworCWNvbXAtPmZ1bmNzID0gZnVuY3MgPzogbXRrX2RkcF9tYXRj aGVzW2NvbXBfaWRdLmZ1bmNzOworCisJaWYgKGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9EUEkw IHx8CisJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9EU0kwIHx8CisJICAgIGNvbXBfaWQg PT0gRERQX0NPTVBPTkVOVF9QV00wKSB7CisJCWNvbXAtPnJlZ3MgPSBOVUxMOworCQljb21wLT5j bGsgPSBOVUxMOworCQljb21wLT5pcnEgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwljb21wLT5y ZWdzID0gb2ZfaW9tYXAobm9kZSwgMCk7CisJY29tcC0+aXJxID0gb2ZfaXJxX2dldChub2RlLCAw KTsKKwljb21wLT5jbGsgPSBvZl9jbGtfZ2V0KG5vZGUsIDApOworCWlmIChJU19FUlIoY29tcC0+ Y2xrKSkKKwkJY29tcC0+Y2xrID0gTlVMTDsKKworCXR5cGUgPSBtdGtfZGRwX21hdGNoZXNbY29t cF9pZF0udHlwZTsKKworCS8qIE9ubHkgRE1BIGNhcGFibGUgY29tcG9uZW50cyBuZWVkIHRoZSBM QVJCIHByb3BlcnR5ICovCisJY29tcC0+bGFyYl9kZXYgPSBOVUxMOworCWlmICh0eXBlICE9IE1U S19ESVNQX09WTCAmJgorCSAgICB0eXBlICE9IE1US19ESVNQX1JETUEgJiYKKwkgICAgdHlwZSAh PSBNVEtfRElTUF9XRE1BKQorCQlyZXR1cm4gMDsKKworCWxhcmJfbm9kZSA9IG9mX3BhcnNlX3Bo YW5kbGUobm9kZSwgIm1lZGlhdGVrLGxhcmIiLCAwKTsKKwlpZiAoIWxhcmJfbm9kZSkgeworCQlk ZXZfZXJyKGRldiwKKwkJCSJNaXNzaW5nIG1lZGlhZGVrLGxhcmIgcGhhbmRsZSBpbiAlcyBub2Rl XG4iLAorCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGFy Yl9wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShsYXJiX25vZGUpOworCWlmICghbGFyYl9w ZGV2KSB7CisJCWRldl93YXJuKGRldiwgIldhaXRpbmcgZm9yIGxhcmIgZGV2aWNlICVzXG4iLAor CQkJIGxhcmJfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQobGFyYl9ub2RlKTsKKwkJ cmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisKKwlj b21wLT5sYXJiX2RldiA9ICZsYXJiX3BkZXYtPmRldjsKKworCXJldHVybiAwOworfQorCitpbnQg bXRrX2RkcF9jb21wX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtf ZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRy bS0+ZGV2X3ByaXZhdGU7CisKKwlpZiAocHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdKQorCQly ZXR1cm4gLUVCVVNZOworCisJcHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0gY29tcDsKKwly ZXR1cm4gMDsKK30KKwordm9pZCBtdGtfZGRwX2NvbXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJt X3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCisJcHJpdmF0ZS0+ZGRwX2Nv bXBbY29tcC0+aWRdID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2RkcF9jb21wLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9kZHBfY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTNiYTkK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBf Y29tcC5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlh VGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKi8KKworI2lmbmRlZiBNVEtfRFJNX0REUF9DT01QX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBf Q09NUF9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0 IGRldmljZV9ub2RlOworc3RydWN0IGRybV9jcnRjOworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1 Y3QgbXRrX3BsYW5lX3N0YXRlOworCitlbnVtIG10a19kZHBfY29tcF90eXBlIHsKKwlNVEtfRElT UF9PVkwsCisJTVRLX0RJU1BfUkRNQSwKKwlNVEtfRElTUF9XRE1BLAorCU1US19ESVNQX0NPTE9S LAorCU1US19ESVNQX0FBTCwKKwlNVEtfRElTUF9HQU1NQSwKKwlNVEtfRElTUF9VRk9FLAorCU1U S19EU0ksCisJTVRLX0RQSSwKKwlNVEtfRElTUF9QV00sCisJTVRLX0RJU1BfTVVURVgsCisJTVRL X0RJU1BfT0QsCisJTVRLX0REUF9DT01QX1RZUEVfTUFYLAorfTsKKworZW51bSBtdGtfZGRwX2Nv bXBfaWQgeworCUREUF9DT01QT05FTlRfQUFMLAorCUREUF9DT01QT05FTlRfQ09MT1IwLAorCURE UF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfRFBJMCwKKwlERFBfQ09NUE9ORU5U X0RTSTAsCisJRERQX0NPTVBPTkVOVF9EU0kxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJRERQ X0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9PVkwx LAorCUREUF9DT01QT05FTlRfUFdNMCwKKwlERFBfQ09NUE9ORU5UX1BXTTEsCisJRERQX0NPTVBP TkVOVF9SRE1BMCwKKwlERFBfQ09NUE9ORU5UX1JETUExLAorCUREUF9DT01QT05FTlRfUkRNQTIs CisJRERQX0NPTVBPTkVOVF9VRk9FLAorCUREUF9DT01QT05FTlRfV0RNQTAsCisJRERQX0NPTVBP TkVOVF9XRE1BMSwKKwlERFBfQ09NUE9ORU5UX0lEX01BWCwKK307CisKK3N0cnVjdCBtdGtfZGRw X2NvbXA7CisKK3N0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgeworCXZvaWQgKCpjb25maWcpKHN0 cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3LAorCQkgICAgICAgdW5zaWdu ZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCk7CisJdm9pZCAoKnN0YXJ0KShzdHJ1Y3Qg bXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IG10a19kZHBfY29tcCAq Y29tcCk7CisJdm9pZCAoKmVuYWJsZV92YmxhbmspKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs IHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisJdm9pZCAoKmRpc2FibGVfdmJsYW5rKShzdHJ1Y3Qg bXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgqbGF5ZXJfb24pKHN0cnVjdCBtdGtfZGRwX2Nv bXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpOworCXZvaWQgKCpsYXllcl9vZmYpKHN0cnVjdCBt dGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpOworCXZvaWQgKCpsYXllcl9jb25m aWcpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgsCisJCQkgICAg IHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKTsKK307CisKK3N0cnVjdCBtdGtfZGRwX2Nv bXAgeworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJaW50IGlycTsK KwlzdHJ1Y3QgZGV2aWNlICpsYXJiX2RldjsKKwllbnVtIG10a19kZHBfY29tcF9pZCBpZDsKKwlj b25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpmdW5jczsKK307CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBtdGtfZGRwX2NvbXBfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJ CQkJICAgICAgIHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQgaCwKKwkJCQkgICAgICAgdW5z aWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ Y29uZmlnKQorCQljb21wLT5mdW5jcy0+Y29uZmlnKGNvbXAsIHcsIGgsIHZyZWZyZXNoKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RhcnQpCisJ CWNvbXAtPmZ1bmNzLT5zdGFydChjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19k ZHBfY29tcF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1 bmNzICYmIGNvbXAtPmZ1bmNzLT5zdG9wKQorCQljb21wLT5mdW5jcy0+c3RvcChjb21wKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9lbmFibGVfdmJsYW5rKHN0cnVjdCBt dGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK KwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmVuYWJsZV92YmxhbmspCisJCWNvbXAt PmZ1bmNzLT5lbmFibGVfdmJsYW5rKGNvbXAsIGNydGMpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgbXRrX2RkcF9jb21wX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp Cit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFuaykKKwkJ Y29tcC0+ZnVuY3MtPmRpc2FibGVfdmJsYW5rKGNvbXApOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgbXRrX2RkcF9jb21wX2xheWVyX29uKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJ CSB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ bGF5ZXJfb24pCisJCWNvbXAtPmZ1bmNzLT5sYXllcl9vbihjb21wLCBpZHgpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVyX29mZihzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wLAorCQkJCQkgIHVuc2lnbmVkIGludCBpZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYm IGNvbXAtPmZ1bmNzLT5sYXllcl9vZmYpCisJCWNvbXAtPmZ1bmNzLT5sYXllcl9vZmYoY29tcCwg aWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9jb25maWco c3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaWR4LAor CQkJCQkgICAgIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCWlmIChjb21wLT5m dW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJfY29uZmlnKQorCQljb21wLT5mdW5jcy0+bGF5ZXJf Y29uZmlnKGNvbXAsIGlkeCwgc3RhdGUpOworfQorCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChz dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBf dHlwZSk7CitpbnQgbXRrX2RkcF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmNvbXBfbm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29t cCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG10 a19kZHBfY29tcF9mdW5jcyAqZnVuY3MpOworaW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKK3ZvaWQgbXRr X2RkcF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19k ZHBfY29tcCAqY29tcCk7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0REUF9DT01QX0ggKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZmNhYmZhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2Rydi5jCkBAIC0wLDAgKzEsNTc5IEBACisvKgorICogQ29weXJpZ2h0IChj KSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogWVQgU0hFTiA8eXQuc2hlbkBtZWRpYXRl ay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9j cnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgv Y29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxs aW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRl ICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRl ICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtf ZHJtX2dlbS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJtZWRpYXRlayIKKyNkZWZpbmUgRFJJ VkVSX0RFU0MgIk1lZGlhdGVrIFNvQyBEUk0iCisjZGVmaW5lIERSSVZFUl9EQVRFICIyMDE1MDUx MyIKKyNkZWZpbmUgRFJJVkVSX01BSk9SIDEKKyNkZWZpbmUgRFJJVkVSX01JTk9SIDAKKworc3Rh dGljIHZvaWQgbXRrX2F0b21pY19zY2hlZHVsZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2 YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlwcml2YXRlLT5j b21taXQuc3RhdGUgPSBzdGF0ZTsKKwlzY2hlZHVsZV93b3JrKCZwcml2YXRlLT5jb21taXQud29y ayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd2FpdF9mb3JfZmVuY2VzKHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKKwlz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKwlpbnQgaTsKKworCWZvcl9lYWNo X3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcGxhbmVfc3RhdGUsIGkpCisJCW10a19mYl93 YWl0KHBsYW5lLT5zdGF0ZS0+ZmIpOworfQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX2NvbXBs ZXRlKHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUsCisJCQkJc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5k cm07CisKKwltdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdGF0ZSk7CisKKwlkcm1fYXRvbWlj X2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWlj X2hlbHBlcl9jb21taXRfcGxhbmVzKGRybSwgc3RhdGUsIGZhbHNlKTsKKwlkcm1fYXRvbWljX2hl bHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVs cGVyX3dhaXRfZm9yX3ZibGFua3MoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY2xl YW51cF9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRlKTsK K30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gY29udGFpbmVyX29mKHdv cmssCisJCQlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlLCBjb21taXQud29yayk7CisKKwltdGtfYXRv bWljX2NvbXBsZXRlKHByaXZhdGUsIHByaXZhdGUtPmNvbW1pdC5zdGF0ZSk7Cit9CisKK3N0YXRp YyBpbnQgbXRrX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCSAgICAg c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICAgICBib29sIGFzeW5jKQorewor CXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCWlu dCByZXQ7CisKKwlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wcmVwYXJlX3BsYW5lcyhkcm0sIHN0 YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmcHJpdmF0ZS0+ Y29tbWl0LmxvY2spOworCWZsdXNoX3dvcmsoJnByaXZhdGUtPmNvbW1pdC53b3JrKTsKKworCWRy bV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZHJtLCBzdGF0ZSk7CisKKwlpZiAoYXN5bmMpCisJ CW10a19hdG9taWNfc2NoZWR1bGUocHJpdmF0ZSwgc3RhdGUpOworCWVsc2UKKwkJbXRrX2F0b21p Y19jb21wbGV0ZShwcml2YXRlLCBzdGF0ZSk7CisKKwltdXRleF91bmxvY2soJnByaXZhdGUtPmNv bW1pdC5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9t b2RlX2NvbmZpZ19mdW5jcyBtdGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzID0geworCS5mYl9jcmVh dGUgPSBtdGtfZHJtX21vZGVfZmJfY3JlYXRlLAorCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWlj X2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IG10a19hdG9taWNfY29tbWl0LAorfTsK Kworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfbWFpbltdID0gewor CUREUF9DT01QT05FTlRfT1ZMMCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMCwKKwlERFBfQ09NUE9O RU5UX0FBTCwKKwlERFBfQ09NUE9ORU5UX09ELAorCUREUF9DT01QT05FTlRfUkRNQTAsCisJRERQ X0NPTVBPTkVOVF9VRk9FLAorCUREUF9DT01QT05FTlRfRFNJMCwKKwlERFBfQ09NUE9ORU5UX1BX TTAsCit9OworCitzdGF0aWMgY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgbXRrX2RkcF9leHRb XSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDEsCisJRERQX0NPTVBPTkVOVF9DT0xPUjEsCisJRERQ X0NPTVBPTkVOVF9HQU1NQSwKKwlERFBfQ09NUE9ORU5UX1JETUExLAorCUREUF9DT01QT05FTlRf RFBJMCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RybV9rbXNfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9w cml2YXRlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IHJldDsKKworCWlm ICghaW9tbXVfcHJlc2VudCgmcGxhdGZvcm1fYnVzX3R5cGUpKQorCQlyZXR1cm4gLUVQUk9CRV9E RUZFUjsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZhdGUtPm11dGV4X25v ZGUpOworCWlmICghcGRldikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiV2FpdGluZyBmb3IgZGlz cC1tdXRleCBkZXZpY2UgJXNcbiIsCisJCQlwcml2YXRlLT5tdXRleF9ub2RlLT5mdWxsX25hbWUp OworCQlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwkJcmV0dXJuIC1FUFJPQkVf REVGRVI7CisJfQorCXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7CisKKwlkcm1fbW9k ZV9jb25maWdfaW5pdChkcm0pOworCisJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDsK Kwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKKworCS8qCisJICogc2V0IG1heCB3 aWR0aCBhbmQgaGVpZ2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4KKwkgKiB0aGlzIHZh bHVlIHdvdWxkIGJlIHVzZWQgdG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0aW9uCisJ ICogYXQgZHJtX21vZGVfYWRkZmIoKS4KKwkgKi8KKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0 aCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5NjsKKwlkcm0tPm1v ZGVfY29uZmlnLmZ1bmNzID0gJm10a19kcm1fbW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBj b21wb25lbnRfYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf Y29uZmlnX2NsZWFudXA7CisKKwkvKgorCSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBmaXhl ZCBkYXRhIHN0cmVhbXMsIGVhY2ggb3B0aW9uYWwsCisJICogYW5kIGVhY2ggc3RhdGljYWxseSBh c3NpZ25lZCB0byBhIGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJE TUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRl KGRybSwgbXRrX2RkcF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQg PCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBD T0xPUjEgLT4gR0FNTUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNf Y3JlYXRlKGRybSwgbXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAo cmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKworCS8qCisJICogV2UgZG9u J3QgdXNlIHRoZSBkcm1faXJxX2luc3RhbGwoKSBoZWxwZXJzIHByb3ZpZGVkIGJ5IHRoZSBEUk0K KwkgKiBjb3JlLCBzbyB3ZSBuZWVkIHRvIHNldCB0aGlzIG1hbnVhbGx5IGluIG9yZGVyIHRvIGFs bG93IHRoZQorCSAqIERSTV9JT0NUTF9XQUlUX1ZCTEFOSyB0byBvcGVyYXRlIGNvcnJlY3RseS4K KwkgKi8KKwlkcm0tPmlycV9lbmFibGVkID0gdHJ1ZTsKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQo ZHJtLCBNQVhfQ1JUQyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJp bmQ7CisKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKKwlkcm1fbW9kZV9jb25maWdf cmVzZXQoZHJtKTsKKworCXJldHVybiAwOworCitlcnJfY29tcG9uZW50X3VuYmluZDoKKwljb21w b25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKK2Vycl9jb25maWdfY2xlYW51cDoKKwlk cm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgbXRrX2RybV9rbXNfZGVpbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJZHJt X2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsK Kwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKKwlkcm1fbW9kZV9jb25maWdf Y2xlYW51cChkcm0pOworfQorCitzdGF0aWMgaW50IG10a19kcm1fdW5sb2FkKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pCit7CisJbXRrX2RybV9rbXNfZGVpbml0KGRybSk7CisJZHJtLT5kZXZfcHJp dmF0ZSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9v cGVyYXRpb25zX3N0cnVjdCBtdGtfZHJtX2dlbV92bV9vcHMgPSB7CisJLm9wZW4gPSBkcm1fZ2Vt X3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV92bV9jbG9zZSwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG10a19kcm1fZm9wcyA9IHsKKwkub3duZXIgPSBUSElT X01PRFVMRSwKKwkub3BlbiA9IGRybV9vcGVuLAorCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJ LnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAorCS5tbWFwID0gbXRrX2RybV9nZW1fbW1hcCwK KwkucG9sbCA9IGRybV9wb2xsLAorCS5yZWFkID0gZHJtX3JlYWQsCisjaWZkZWYgQ09ORklHX0NP TVBBVAorCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLAorI2VuZGlmCit9OworCitz dGF0aWMgc3RydWN0IGRybV9kcml2ZXIgbXRrX2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0 dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSB8CisJCQkg ICBEUklWRVJfQVRPTUlDLAorCS51bmxvYWQgPSBtdGtfZHJtX3VubG9hZCwKKworCS5nZXRfdmJs YW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5rX2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbXRrX2Ry bV9jcnRjX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rp c2FibGVfdmJsYW5rLAorCisJLmdlbV9mcmVlX29iamVjdCA9IG10a19kcm1fZ2VtX2ZyZWVfb2Jq ZWN0LAorCS5nZW1fdm1fb3BzID0gJm10a19kcm1fZ2VtX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUg PSBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gbXRrX2RybV9n ZW1fZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJv eSwKKworCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwK KwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdl bV9wcmltZV9leHBvcnQgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9y dCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbXRr X2dlbV9wcmltZV9nZXRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBt dGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1lX21tYXAgPSBtdGtfZHJt X2dlbV9tbWFwX2J1ZiwKKwkuZm9wcyA9ICZtdGtfZHJtX2ZvcHMsCisKKwkubmFtZSA9IERSSVZF Ul9OQU1FLAorCS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBEUklWRVJfREFURSwKKwku bWFqb3IgPSBEUklWRVJfTUFKT1IsCisJLm1pbm9yID0gRFJJVkVSX01JTk9SLAorfTsKKworc3Rh dGljIGludCBjb21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwly ZXR1cm4gZGV2LT5vZl9ub2RlID09IGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9iaW5k KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlpbnQg cmV0OworCisJZHJtID0gZHJtX2Rldl9hbGxvYygmbXRrX2RybV9kcml2ZXIsIGRldik7CisJaWYg KCFkcm0pCisJCXJldHVybiAtRU5PTUVNOworCisJZHJtX2Rldl9zZXRfdW5pcXVlKGRybSwgZGV2 X25hbWUoZGV2KSk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJl dCA8IDApCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlkcm0tPmRldl9wcml2YXRlID0gcHJpdmF0ZTsK Kwlwcml2YXRlLT5kcm0gPSBkcm07CisKKwlyZXQgPSBtdGtfZHJtX2ttc19pbml0KGRybSk7CisJ aWYgKHJldCA8IDApCisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworZXJy X3VucmVnaXN0ZXI6CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CitlcnJfZnJlZToKKwlkcm1f ZGV2X3VucmVmKGRybSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV91 bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnBy aXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRybV9wdXRfZGV2KHByaXZhdGUtPmRy bSk7CisJcHJpdmF0ZS0+ZHJtID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21w b25lbnRfbWFzdGVyX29wcyBtdGtfZHJtX29wcyA9IHsKKwkuYmluZAkJPSBtdGtfZHJtX2JpbmQs CisJLnVuYmluZAkJPSBtdGtfZHJtX3VuYmluZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIG10a19kZHBfY29tcF9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0g Im1lZGlhdGVrLG10ODE3My1kaXNwLW92bCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09W TCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcmRtYSIsICAuZGF0 YSA9ICh2b2lkICopTVRLX0RJU1BfUkRNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWss bXQ4MTczLWRpc3Atd2RtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfV0RNQSB9LAorCXsg LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtY29sb3IiLCAuZGF0YSA9ICh2b2lk ICopTVRLX0RJU1BfQ09MT1IgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1k aXNwLWFhbCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX0FBTH0sCisJeyAuY29tcGF0aWJs ZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1nYW1tYSIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElT UF9HQU1NQSwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXVmb2Ui LCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1VGT0UgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1l ZGlhdGVrLG10ODE3My1kc2kiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EU0kgfSwKKwl7 IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kcGkiLCAgICAgICAgLmRhdGEgPSAodm9p ZCAqKU1US19EUEkgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW11 dGV4IiwgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX01VVEVYIH0sCisJeyAuY29tcGF0aWJsZSA9 ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1wd20iLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9Q V00gfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW9kIiwgICAgLmRh dGEgPSAodm9pZCAqKU1US19ESVNQX09EIH0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IG10a19k cm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGU7CisJ c3RydWN0IHJlc291cmNlICptZW07CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCXN0cnVj dCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlpbnQgcmV0OworCWludCBpOworCisJ cHJpdmF0ZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdmF0ZSksIEdGUF9LRVJORUwp OworCWlmICghcHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZwcml2 YXRlLT5jb21taXQubG9jayk7CisJSU5JVF9XT1JLKCZwcml2YXRlLT5jb21taXQud29yaywgbXRr X2F0b21pY193b3JrKTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JF U09VUkNFX01FTSwgMCk7CisJcHJpdmF0ZS0+Y29uZmlnX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVz b3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpKSB7CisJ CXJldCA9IFBUUl9FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBpb3JlbWFwIG1tc3lzLWNvbmZpZyByZXNvdXJjZTogJWRcbiIsCisJCQlyZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCS8qIEl0ZXJhdGUgb3ZlciBzaWJsaW5nIERJU1AgZnVuY3Rp b24gYmxvY2tzICovCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVu dCwgbm9kZSkgeworCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwkJZW51bSBt dGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGU7CisJCWludCBjb21wX2lkOworCisJCW9mX2lkID0g b2ZfbWF0Y2hfbm9kZShtdGtfZGRwX2NvbXBfZHRfaWRzLCBub2RlKTsKKwkJaWYgKCFvZl9pZCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkgewor CQkJZGV2X2RiZyhkZXYsICJTa2lwcGluZyBkaXNhYmxlZCBjb21wb25lbnQgJXNcbiIsCisJCQkJ bm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF90eXBlID0gKGVu dW0gbXRrX2RkcF9jb21wX3R5cGUpb2ZfaWQtPmRhdGE7CisKKwkJaWYgKGNvbXBfdHlwZSA9PSBN VEtfRElTUF9NVVRFWCkgeworCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9mX25vZGVfZ2V0KG5v ZGUpOworCQkJY29udGludWU7CisJCX0KKworCQljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9p ZChub2RlLCBjb21wX3R5cGUpOworCQlpZiAoY29tcF9pZCA8IDApIHsKKwkJCWRldl93YXJuKGRl diwgIlNraXBwaW5nIHVua25vd24gY29tcG9uZW50ICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25h bWUpOworCQkJY29udGludWU7CisJCX0KKworCQlwcml2YXRlLT5jb21wX25vZGVbY29tcF9pZF0g PSBvZl9ub2RlX2dldChub2RlKTsKKworCQkvKgorCQkgKiBDdXJyZW50bHkgb25seSB0aGUgT1ZM LCBSRE1BLCBEU0ksIGFuZCBEUEkgYmxvY2tzIGhhdmUKKwkJICogc2VwYXJhdGUgY29tcG9uZW50 IHBsYXRmb3JtIGRyaXZlcnMgYW5kIGluaXRpYWxpemUgdGhlaXIgb3duCisJCSAqIEREUCBjb21w b25lbnQgc3RydWN0dXJlLiBUaGUgb3RoZXJzIGFyZSBpbml0aWFsaXplZCBoZXJlLgorCQkgKi8K KwkJaWYgKGNvbXBfdHlwZSA9PSBNVEtfRElTUF9PVkwgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBN VEtfRElTUF9SRE1BIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RTSSB8fAorCQkgICAgY29t cF90eXBlID09IE1US19EUEkpIHsKKwkJCWRldl9pbmZvKGRldiwgIkFkZGluZyBjb21wb25lbnQg bWF0Y2ggZm9yICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJY29tcG9uZW50X21h dGNoX2FkZChkZXYsICZtYXRjaCwgY29tcGFyZV9vZiwgbm9kZSk7CisJCX0gZWxzZSB7CisJCQlz dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wOworCisJCQljb21wID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKCpjb21wKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJCQlyZXQgPSAt RU5PTUVNOworCQkJCWdvdG8gZXJyX25vZGU7CisJCQl9CisKKwkJCXJldCA9IG10a19kZHBfY29t cF9pbml0KGRldiwgbm9kZSwgY29tcCwgY29tcF9pZCwgTlVMTCk7CisJCQlpZiAocmV0KQorCQkJ CWdvdG8gZXJyX25vZGU7CisKKwkJCXByaXZhdGUtPmRkcF9jb21wW2NvbXBfaWRdID0gY29tcDsK KwkJfQorCX0KKworCWlmICghcHJpdmF0ZS0+bXV0ZXhfbm9kZSkgeworCQlkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBmaW5kIGRpc3AtbXV0ZXggbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJ CWdvdG8gZXJyX25vZGU7CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXZhdGUpOworCisJcmV0ID0gY29tcG9uZW50X21hc3Rl cl9hZGRfd2l0aF9tYXRjaChkZXYsICZtdGtfZHJtX29wcywgbWF0Y2gpOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX3BtOworCisJcmV0dXJuIDA7CisKK2Vycl9wbToKKwlwbV9ydW50aW1lX2Rpc2Fi bGUoZGV2KTsKK2Vycl9ub2RlOgorCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOwor CWZvciAoaSA9IDA7IGkgPCBERFBfQ09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlvZl9ub2RlX3B1 dChwcml2YXRlLT5jb21wX25vZGVbaV0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2RybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg bXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJ aW50IGk7CisKKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RybV9vcHMp OworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlvZl9ub2RlX3B1dChwcml2YXRl LT5tdXRleF9ub2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkr KykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+Y29tcF9ub2RlW2ldKTsKKworCXJldHVybiAwOwor fQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3N1c3Bl bmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZh dGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJp dmF0ZS0+ZHJtOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOworCisJZHJtX2ttc19oZWxw ZXJfcG9sbF9kaXNhYmxlKGRybSk7CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOworCWxp c3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3Qs IGhlYWQpIHsKKwkJaW50IG9sZF9kcG1zID0gY29ubi0+ZHBtczsKKworCQlpZiAoY29ubi0+ZnVu Y3MtPmRwbXMpCisJCQljb25uLT5mdW5jcy0+ZHBtcyhjb25uLCBEUk1fTU9ERV9EUE1TX09GRik7 CisKKwkJLyogU2V0IHRoZSBvbGQgbW9kZSBiYWNrIHRvIHRoZSBjb25uZWN0b3IgZm9yIHJlc3Vt ZSAqLworCQljb25uLT5kcG1zID0gb2xkX2RwbXM7CisJfQorCWRybV9tb2Rlc2V0X3VubG9ja19h bGwoZHJtKTsKKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3N1c3BlbmRcbiIpOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0p OworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9y X2xpc3QsIGhlYWQpIHsKKwkJaW50IGRlc2lyZWRfbW9kZSA9IGNvbm4tPmRwbXM7CisKKwkJLyoK KwkJICogYXQgc3VzcGVuZCB0aW1lLCB3ZSBzYXZlIGRwbXMgdG8gY29ubmVjdG9yLT5kcG1zLAor CQkgKiByZXN0b3JlIHRoZSBvbGRfZHBtcywgYW5kIGF0IGN1cnJlbnQgdGltZSwgdGhlIGNvbm5l Y3RvcgorCQkgKiBkcG1zIHN0YXR1cyBtdXN0IGJlIERSTV9NT0RFX0RQTVNfT0ZGLgorCQkgKi8K KwkJY29ubi0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT0ZGOworCisJCS8qCisJCSAqIElmIHRoZSBj b25uZWN0b3IgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGR1cmluZyBzdXNwZW5kLAorCQkgKiBkaXNj b25uZWN0IGl0IGZyb20gdGhlIGVuY29kZXIgYW5kIGxlYXZlIGl0IG9mZi4gV2UnbGwgbm90aWZ5 CisJCSAqIHVzZXJzcGFjZSBhdCB0aGUgZW5kLgorCQkgKi8KKwkJaWYgKGNvbm4tPmZ1bmNzLT5k cG1zKQorCQkJY29ubi0+ZnVuY3MtPmRwbXMoY29ubiwgZGVzaXJlZF9tb2RlKTsKKwl9CisJZHJt X21vZGVzZXRfdW5sb2NrX2FsbChkcm0pOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUo ZHJtKTsKKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3Jlc3VtZVxuIik7CisJcmV0 dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19kcm1fcG1f b3BzLCBtdGtfZHJtX3N5c19zdXNwZW5kLAorCQkJIG10a19kcm1fc3lzX3Jlc3VtZSk7CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kcm1fb2ZfaWRzW10gPSB7CisJeyAu Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbW1zeXMiLCB9LAorCXsgfQorfTsKKworc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJ LnByb2JlCT0gbXRrX2RybV9wcm9iZSwKKwkucmVtb3ZlCT0gbXRrX2RybV9yZW1vdmUsCisJLmRy aXZlcgk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZHJtIiwKKwkJLm9mX21hdGNoX3RhYmxlID0g bXRrX2RybV9vZl9pZHMsCisJCS5wbSAgICAgPSAmbXRrX2RybV9wbV9vcHMsCisJfSwKK307CisK K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29uc3QgbXRrX2RybV9kcml2ZXJzW10g PSB7CisJJm10a19kcm1fcGxhdGZvcm1fZHJpdmVyLAorCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAor CSZtdGtfZGlzcF9yZG1hX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19kcm1f aW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShtdGtfZHJtX2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVy X3JlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9l cnIoIkZhaWxlZCB0byByZWdpc3RlciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10a19k cm1fZHJpdmVyc1tpXS0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0K KworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2 ZXJfdW5yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgX19leGl0IG10a19kcm1fZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9y IChpID0gQVJSQVlfU0laRShtdGtfZHJtX2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBs YXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7Cit9CisKK21vZHVs ZV9pbml0KG10a19kcm1faW5pdCk7Cittb2R1bGVfZXhpdChtdGtfZHJtX2V4aXQpOworCitNT0RV TEVfQVVUSE9SKCJZVCBTSEVOIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVND UklQVElPTigiTWVkaWF0ZWsgU29DIERSTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwg djIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1Y2IxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRFJWX0gKKyNk ZWZpbmUgTVRLX0RSTV9EUlZfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJt dGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgTUFYX0NSVEMJMgorI2RlZmluZSBNQVhfQ09O TkVDVE9SCTIKKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBk cm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IGRybV9mYl9oZWxwZXI7CitzdHJ1 Y3QgZHJtX3Byb3BlcnR5Oworc3RydWN0IHJlZ21hcDsKKworc3RydWN0IG10a19kcm1fcHJpdmF0 ZSB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKworCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y1tN QVhfQ1JUQ107CisJdW5zaWduZWQgaW50IG51bV9waXBlczsKKworCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqbXV0ZXhfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICptdXRleF9kZXY7CisJdm9pZCBfX2lvbWVt ICpjb25maWdfcmVnczsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbXBfbm9kZVtERFBfQ09NUE9O RU5UX0lEX01BWF07CisJc3RydWN0IG10a19kZHBfY29tcCAqZGRwX2NvbXBbRERQX0NPTVBPTkVO VF9JRF9NQVhdOworCisJc3RydWN0IHsKKwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl OworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBj b21taXQ7Cit9OworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxf ZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2 ZXI7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzMGMxCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpA QCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+ CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9u Lmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIK KyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVm ZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBA Z2VtX29iajogYXJyYXkgb2YgZ2VtIG9iamVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsK KwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyCWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBv cnQgYSBzaW5nbGUgcGxhbmUgKi8KKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9 OworCisjZGVmaW5lIHRvX210a19mYih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1f ZmIsIGJhc2UpCisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIg PSB0b19tdGtfZmIoZmIpOworCisJcmV0dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGlj IGludCBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBp bnQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZi KTsKKworCXJldHVybiBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdl bV9vYmosIGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0g dG9fbXRrX2ZiKGZiKTsKKworCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9n ZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJl ZShtdGtfZmIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5j cyBtdGtfZHJtX2ZiX2Z1bmNzID0geworCS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVh dGVfaGFuZGxlLAorCS5kZXN0cm95ID0gbXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGlj IHN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCQkJY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGUsCisJ CQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICpt dGtfZmI7CisJaW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4 ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9 IGt6YWxsb2Moc2l6ZW9mKCptdGtfZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1 Y3QoJm10a19mYi0+YmFzZSwgbW9kZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwly ZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2Zi X2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUg ZnJhbWVidWZmZXJcbiIpOworCQlrZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQp OworCX0KKworCXJldHVybiBtdGtfZmI7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbnkgZXhjbHVz aXZlIGZlbmNlIGluIGZiJ3MgZ2VtIG9iamVjdCdzIHJlc2VydmF0aW9uIG9iamVjdC4KKyAqCisg KiBSZXR1cm5zIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCwgZWxzZSAwLgorICovCitpbnQg bXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25n IHJldDsKKworCWlmICghZmIpCisJCXJldHVybiAwOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1f b2JqKGZiKTsKKwlpZiAoIWdlbSB8fCAhZ2VtLT5kbWFfYnVmIHx8ICFnZW0tPmRtYV9idWYtPnJl c3YpCisJCXJldHVybiAwOworCisJcmVzdiA9IGdlbS0+ZG1hX2J1Zi0+cmVzdjsKKwlyZXQgPSBy ZXNlcnZhdGlvbl9vYmplY3Rfd2FpdF90aW1lb3V0X3JjdShyZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJ CQkJCSAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCS8qIE1BWF9TQ0hFRFVMRV9USU1FT1VUIG9u IHN1Y2Nlc3MsIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCAqLworCWlmIChXQVJOX09OKHJl dCA8IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZnJh bWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0 cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19m YjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBj bWQtPndpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25l ZCBpbnQgc2l6ZSwgYnBwOworCWludCByZXQ7CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVz KGNtZC0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwor CWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7 CisJaWYgKCFnZW0pCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zv cm1hdF9wbGFuZV9jcHAoY21kLT5waXhlbF9mb3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0g MSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3aWR0aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0 c1swXTsKKworCWlmIChnZW0tPnNpemUgPCBzaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdv dG8gdW5yZWZlcmVuY2U7CisJfQorCisJbXRrX2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0 KGRldiwgY21kLCBnZW0pOworCWlmIChJU19FUlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJS KG10a19mYik7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJh c2U7CisKK3VucmVmZXJlbmNlOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2Vk KGdlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmFlMzQKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBA IC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj aWZuZGVmIE1US19EUk1fRkJfSAorI2RlZmluZSBNVEtfRFJNX0ZCX0gKKworc3RydWN0IGRybV9n ZW1fb2JqZWN0ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIp OworaW50IG10a19mYl93YWl0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK3N0cnVjdCBk cm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNv bnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpOworCisjZW5kaWYgLyogTVRLX0RSTV9G Ql9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0u YyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzQ5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgor I2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisj aW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2dlbV9vYmog Km10a19kcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCXVuc2lnbmVk IGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtX29iajsKKwlp bnQgcmV0OworCisJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisKKwltdGtfZ2Vt X29iaiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtfZ2VtX29iaiksIEdGUF9LRVJORUwpOworCWlmICgh bXRrX2dlbV9vYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZHJtX2dl bV9vYmplY3RfaW5pdChkZXYsICZtdGtfZ2VtX29iai0+YmFzZSwgc2l6ZSk7CisJaWYgKHJldCA8 IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBnZW0gb2JqZWN0XG4iKTsK KwkJa2ZyZWUobXRrX2dlbV9vYmopOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJl dHVybiBtdGtfZ2VtX29iajsKK30KKworc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9n ZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgIHNpemVfdCBzaXplLCBi b29sIGFsbG9jX2ttYXApCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJbXRrX2dlbSA9IG10a19k cm1fZ2VtX2luaXQoZGV2LCBzaXplKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4g RVJSX0NBU1QobXRrX2dlbSk7CisKKwlvYmogPSAmbXRrX2dlbS0+YmFzZTsKKworCWluaXRfZG1h X2F0dHJzKCZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWRtYV9zZXRfYXR0cihETUFfQVRUUl9XUklU RV9DT01CSU5FLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKworCWlmICghYWxsb2Nfa21hcCkKKwkJ ZG1hX3NldF9hdHRyKERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HLCAmbXRrX2dlbS0+ZG1hX2F0 dHJzKTsKKworCW10a19nZW0tPmNvb2tpZSA9IGRtYV9hbGxvY19hdHRycyhkZXYtPmRldiwgb2Jq LT5zaXplLAorCQkJCQkgICZtdGtfZ2VtLT5kbWFfYWRkciwgR0ZQX0tFUk5FTCwKKwkJCQkJICAm bXRrX2dlbS0+ZG1hX2F0dHJzKTsKKwlpZiAoIW10a19nZW0tPmNvb2tpZSkgeworCQlEUk1fRVJS T1IoImZhaWxlZCB0byBhbGxvY2F0ZSAlenggYnl0ZSBkbWEgYnVmZmVyIiwgb2JqLT5zaXplKTsK KwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZ2VtX2ZyZWU7CisJfQorCisJaWYgKGFsbG9j X2ttYXApCisJCW10a19nZW0tPmt2YWRkciA9IG10a19nZW0tPmNvb2tpZTsKKworCURSTV9ERUJV R19EUklWRVIoImNvb2tpZSA9ICVwIGRtYV9hZGRyID0gJXBhZCBzaXplID0gJXp1XG4iLAorCQkJ IG10a19nZW0tPmNvb2tpZSwgJm10a19nZW0tPmRtYV9hZGRyLAorCQkJIHNpemUpOworCisJcmV0 dXJuIG10a19nZW07CisKK2Vycl9nZW1fZnJlZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9i aik7CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBt dGtfZHJtX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlz dHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKwor CWlmIChtdGtfZ2VtLT5zZykKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dlbS0+ c2cpOworCWVsc2UKKwkJZG1hX2ZyZWVfYXR0cnMob2JqLT5kZXYtPmRldiwgb2JqLT5zaXplLCBt dGtfZ2VtLT5jb29raWUsCisJCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5k bWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8K Kwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKwor aW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVt YiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7 CisKKwlhcmdzLT5waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwg OCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRrX2dl bSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAoSVNf RVJSKG10a19nZW0pKQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICogYWxs b2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICog YW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRy bV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+aGFu ZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJvcCBy ZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0dXJu IDA7CisKK2Vycl9oYW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZtdGtf Z2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9tYXBf b2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVj dF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0 KQorCQlnb3RvIG91dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9i ai0+dm1hX25vZGUpOworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNl dCk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCisKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0 b19tdGtfZ2VtX29iaihvYmopOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBvYmotPmRldjsK KworCS8qCisJICogZG1hX2FsbG9jX2F0dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0IHBhZ2UgdGFi bGUgZm9yIG10a19nZW0sIHNvIGNsZWFyCisJICogVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0 IGJ5IGRybV9nZW1fbW1hcF9vYmooKS9kcm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2bWEtPnZtX2Zs YWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9wZ29mZiA9IDA7CisKKwlyZXQgPSBkbWFfbW1h cF9hdHRycyhkcm0tPmRldiwgdm1hLCBtdGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRy LAorCQkJICAgICBvYmotPnNpemUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJ CWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJt X2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2Jq LCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBt dGtfZHJtX2dlbV9vYmplY3RfbW1hcChvYmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9t bWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9t bWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+ dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwg dm1hKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVj dC4KKyAqIE5vdGU6IEJvdGggdGhlIHRhYmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUg aXRzZWxmIG11c3QgYmUgZnJlZWQgYnkKKyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5z IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRS KCkgZXJyb3IuCisgKi8KK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFi bGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29i aiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRy bSA9IG9iai0+ZGV2OworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3Qg PSBremFsbG9jKHNpemVvZigqc2d0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKGRybS0+ ZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9i ai0+c2l6ZSwKKwkJCQkgICAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShz Z3QpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0 cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwg c3RydWN0IHNnX3RhYmxlICpzZykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2Vt OworCWludCByZXQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOwor CWRtYV9hZGRyX3QgZXhwZWN0ZWQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYs IGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVy biBFUlJfUFRSKFBUUl9FUlIobXRrX2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVz cyhzZy0+c2dsKTsKKwlmb3JfZWFjaF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJ aWYgKHNnX2RtYV9hZGRyZXNzKHMpICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3Rh YmxlIGlzIG5vdCBjb250aWd1b3VzIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJf Z2VtX2ZyZWU7CisJCX0KKwkJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9s ZW4ocyk7CisJfQorCisJbXRrX2dlbS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2ds KTsKKwltdGtfZ2VtLT5zZyA9IHNnOworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJf Z2VtX2ZyZWU6CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uM2EyYTU2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2dlbS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwor ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBf TVRLX0RSTV9HRU1fSF8KKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsg ZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUuCisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0g YSBuZXcgaGFuZGxlIHRvIHRoaXMgZ2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBk cm1fZ2VtX2hhbmRsZV9jcmVhdGUoKS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2Yg ZG1hX2FsbG9jX2F0dHJzKCksIGtlZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFk ZHI6IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjog ZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVz IG9mIGdlbSBidWZmZXIuCisgKgorICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2Zl cnJlZCB0byB1c2VyIGFzIGttc19iby5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUg YnVmZmVyIHRocm91Z2gga21zX2JvLmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29i aiB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9p ZAkJCSprdmFkZHI7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlk bWFfYXR0cnM7CisJc3RydWN0IHNnX3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19n ZW1fb2JqKHgpCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQor Cit2b2lkIG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2Vt KTsKK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgYm9vbCBhbGxvY19rbWFwKTsKK2lu dCBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIg KmFyZ3MpOworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUs CisJCQkJdWludDY0X3QgKm9mZnNldCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmls ZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2VtX21t YXBfYnVmKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtf Z2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFu ZS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODk4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpAQCAtMCwwICsxLDI0MCBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1 IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5o IgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5o IgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorI2lu Y2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10gPSB7 CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JN QVRfUkdCNTY1LAorfTsKKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2VuYWJsZShzdHJ1Y3QgbXRr X2RybV9wbGFuZSAqbXRrX3BsYW5lLCBib29sIGVuYWJsZSwKKwkJCSAgICAgZG1hX2FkZHJfdCBh ZGRyLCBzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUg PSAmbXRrX3BsYW5lLT5iYXNlOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9f bXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoLCBmb3Jt YXQ7CisJaW50IHgsIHk7CisKKwlpZiAoV0FSTl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFibGUg JiYgIXBsYW5lLT5zdGF0ZS0+ZmIpKSkKKwkJcmV0dXJuOworCisJaWYgKHBsYW5lLT5zdGF0ZS0+ ZmIpIHsKKwkJcGl0Y2ggPSBwbGFuZS0+c3RhdGUtPmZiLT5waXRjaGVzWzBdOworCQlmb3JtYXQg PSBwbGFuZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGl0Y2ggPSAw OworCQlmb3JtYXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4OworCX0KKworCXggPSBwbGFuZS0+c3Rh dGUtPmNydGNfeDsKKwl5ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3k7CisKKwlpZiAoeCA8IDApIHsK KwkJYWRkciAtPSB4ICogNDsKKwkJeCA9IDA7CisJfQorCisJaWYgKHkgPCAwKSB7CisJCWFkZHIg LT0geSAqIHBpdGNoOworCQl5ID0gMDsKKwl9CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBl bmFibGU7CisJc3RhdGUtPnBlbmRpbmcucGl0Y2ggPSBwaXRjaDsKKwlzdGF0ZS0+cGVuZGluZy5m b3JtYXQgPSBmb3JtYXQ7CisJc3RhdGUtPnBlbmRpbmcuYWRkciA9IGFkZHI7CisJc3RhdGUtPnBl bmRpbmcueCA9IHg7CisJc3RhdGUtPnBlbmRpbmcueSA9IHk7CisJc3RhdGUtPnBlbmRpbmcud2lk dGggPSBkZXN0LT54MiAtIGRlc3QtPngxOworCXN0YXRlLT5wZW5kaW5nLmhlaWdodCA9IGRlc3Qt PnkyIC0gZGVzdC0+eTE7CisJd21iKCk7IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVy cyBhcmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCWlmIChwbGFuZS0+c3Rh dGUpIHsKKwkJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZl cmVuY2UocGxhbmUtPnN0YXRlLT5mYik7CisKKwkJc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUo cGxhbmUtPnN0YXRlKTsKKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBl bHNlIHsKKwkJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJ aWYgKCFzdGF0ZSkKKwkJCXJldHVybjsKKwkJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNlOwor CX0KKworCXN0YXRlLT5iYXNlLnBsYW5lID0gcGxhbmU7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0 ID0gRFJNX0ZPUk1BVF9SR0I1NjU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICptdGtfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQorewor CXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShw bGFuZS0+c3RhdGUpOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJc3RhdGUg PSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQly ZXR1cm4gTlVMTDsKKworCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRl KHBsYW5lLCAmc3RhdGUtPmJhc2UpOworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5wbGFuZSAhPSBw bGFuZSk7CisKKwlzdGF0ZS0+cGVuZGluZyA9IG9sZF9zdGF0ZS0+cGVuZGluZzsKKworCXJldHVy biAmc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJveV9z dGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHBs YW5lLCBzdGF0ZSk7CisJa2ZyZWUodG9fbXRrX3BsYW5lX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG10a19wbGFuZV9mdW5jcyA9IHsKKwku dXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxl X3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGRy bV9wbGFuZV9jbGVhbnVwLAorCS5yZXNldCA9IG10a19wbGFuZV9yZXNldCwKKwkuYXRvbWljX2R1 cGxpY2F0ZV9zdGF0ZSA9IG10a19wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0 cm95X3N0YXRlID0gbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGlu dCBtdGtfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAg c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwor CWJvb2wgdmlzaWJsZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUt PmNydGNfeCwKKwkJLnkxID0gc3RhdGUtPmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmNydGNfeCAr IHN0YXRlLT5jcnRjX3csCisJCS55MiA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oLAor CX07CisJc3RydWN0IGRybV9yZWN0IHNyYyA9IHsKKwkJLyogMTYuMTYgZml4ZWQgcG9pbnQgKi8K KwkJLngxID0gc3RhdGUtPnNyY194LAorCQkueTEgPSBzdGF0ZS0+c3JjX3ksCisJCS54MiA9IHN0 YXRlLT5zcmNfeCArIHN0YXRlLT5zcmNfdywKKwkJLnkyID0gc3RhdGUtPnNyY195ICsgc3RhdGUt PnNyY19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWZi KQorCQlyZXR1cm4gMDsKKworCWlmICghbXRrX2ZiX2dldF9nZW1fb2JqKGZiKSkgeworCQlEUk1f REVCVUdfS01TKCJidWZmZXIgaXMgbnVsbFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwor CWlmICghc3RhdGUtPmNydGMpCisJCXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9t aWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElTX0VS UihjcnRjX3N0YXRlKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwljbGlwLngy ID0gY3J0Y19zdGF0ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+bW9k ZS52ZGlzcGxheTsKKworCXJldHVybiBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFu ZSwgc3RhdGUtPmNydGMsIGZiLAorCQkJCQkgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJ ICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCSAgICAgRFJNX1BMQU5FX0hF TFBFUl9OT19TQ0FMSU5HLAorCQkJCQkgICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30KKwor c3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCisJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1 Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh dGUpOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsK KwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsK KwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194LAor CQkueTEgPSBzdGF0ZS0+YmFzZS5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNfeCAr IHN0YXRlLT5iYXNlLmNydGNfdywKKwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3RhdGUt PmJhc2UuY3J0Y19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlp ZiAoIWNydGMpCisJCXJldHVybjsKKworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0 ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1v ZGUudmRpc3BsYXk7CisJZHJtX3JlY3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwlnZW0g PSBtdGtfZmJfZ2V0X2dlbV9vYmooc3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19tdGtf Z2VtX29iaihnZW0pOworCW10a19wbGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtfZ2Vt LT5kbWFfYWRkciwgJmRlc3QpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rp c2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0 b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nLmVuYWJs ZSA9IGZhbHNlOworCXdtYigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBpcyBz ZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxw ZXJfZnVuY3MgPSB7CisJLmF0b21pY19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ssCisJ LmF0b21pY191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rpc2Fi bGUgPSBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsCit9OworCitpbnQgbXRrX3BsYW5lX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwK KwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0 eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcykKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZHJt X3VuaXZlcnNhbF9wbGFuZV9pbml0KGRldiwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVfY3J0 Y3MsCisJCQkJICAgICAgICZtdGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAgIEFS UkFZX1NJWkUoZm9ybWF0cyksIHR5cGUsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJ ZHJtX3BsYW5lX2hlbHBlcl9hZGQoJm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxwZXJf ZnVuY3MpOworCW10a19wbGFuZS0+aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNzJhN2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo dCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRl ay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICovCisKKyNpZm5kZWYgX01US19EUk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExBTkVf SF8KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ CisKK3N0cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVu c2lnbmVkIGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7 CisJYm9vbAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFkZHI7 CisJdW5zaWduZWQgaW50CQkJcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVuc2ln bmVkIGludAkJCXg7CisJdW5zaWduZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0aDsK Kwl1bnNpZ25lZCBpbnQJCQloZWlnaHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVjdCBt dGtfcGxhbmVfc3RhdGUgeworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3RydWN0 IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBtdGtfZHJtX3BsYW5lICp0b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUp Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUsIGJh c2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9fbXRr X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBj b250YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQorCitp bnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1f cGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51 bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRp ZgotLSAKMi43LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=