From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v7 02/14] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Mon, 30 Nov 2015 22:07:44 +0100 Message-ID: <1448917676-25584-3-git-send-email-p.zabel@pengutronix.de> References: <1448917676-25584-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: <1448917676-25584-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 , devicetree@vger.kernel.org, Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , Tomasz Figa , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de List-Id: devicetree@vger.kernel.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0 aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0 IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IFBoaWxpcHAgWmFiZWwg PHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0tLQpDaGFuZ2VzIHNpbmNlIHY2OgogLSBTcGxpdCBk aXNwX292bCBkcml2ZXIgZnJvbSBtdGtfZHJtX2NydGMgY29kZQogLSBBZGRlZCBjcnRjIGFuZCBw bGFuZSBzdGF0ZSBhdG9taWMgcmVzZXQgZnVuY3Rpb25zCiAtIFRvbmVkIGRvd24gZGVidWcgbWVz c2FnZXMKIC0gSW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgZm9yIGhhcmR3YXJlIGluaXRpYWxpemF0 aW9uCiAtIEdldC9wdXQgc21pX2xhcmIgaW4gY3J0Y19lbmFibGUvZGlzYWJsZQogLSBBZGRlZCBt ZW1vcnkgYmFycmllciBiZWZvcmUgbWFya2luZyBjcnRjIHN0YXRlIGFzIHJlYWR5CiAtIENoYW5n ZWQgY3J0Y19kaXNhYmxlIHRvIHdhaXQgZm9yIHZibGFuawogLSBSZW5hbWVkIGNvbXBvbmVudCBw b3dlcl9vbi9vZmYgdG8gc3RhcnQvc3RvcAogLSBNYWRlIGNvbXBvbmVudCBvcHMgb3B0aW9uYWwK IC0gTW92ZWQgY3J0YyBjcmVhdGlvbiBmcm9tIGRpc3Bfb3ZsIGRyaXZlciBiaW5kIGNhbGxiYWNr IGludG8gbXRrX2RybV9rbXNfaW5pdAogLSBWYXJpb3VzIGZpeGVzCiAtIEFkZGVkIHN1cHBvcnQg Zm9yIERSSVZFUl9QUklNRSBmZWF0dXJlCiAtIE1vdmVkIERJU1BfT1ZMLCBEU0ksIERQSSBhbmQg Y29tcG9uZW50IGluaXRpYWxpemF0aW9uIGludG8gdGhlIHJlc3BlY3RpdmUgZHJpdmVycwotLS0K IGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAgIHwgIDE2ICsKIGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9NYWtlZmlsZSAgICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kaXNwX292bC5jICAgICB8IDMwMSArKysrKysrKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYyAgICAgfCA1NjUgKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5o ICAgICB8ICAzMSArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgICAg ICB8IDM1NSArKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZGRwLmggICAgICB8ICA0MSArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZGRwX2NvbXAuYyB8IDI3NSArKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZGRwX2NvbXAuaCB8IDE0OCArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZHJ2LmMgICAgICB8IDU2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTMgKysrCiBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTM1ICsrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggICAgICAgfCAgMjggKysKIGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jICAgICAgfCAyMjcgKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTUgKysr CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjM4ICsrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCAgICB8ICA1 OCArKysKIDE5IGZpbGVzIGNoYW5nZWQsIDMxMDIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBf Y29tcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2ZiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9mYi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZ2VtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9nZW0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX3BsYW5lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tj b25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCBjNGJmOWExLi44ZmRiMGMyIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0v S2NvbmZpZwpAQCAtMjY2LDMgKzI2Niw1IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRrZmQvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2lteC9LY29uZmlnIgogCiBz b3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAxZTlmZjRjLi42MDdhNDlmIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCkBAIC03MSw2ICs3MSw3IEBAIG9iai0kKENPTkZJR19EUk1fTVNNKSArPSBtc20v CiBvYmotJChDT05GSUdfRFJNX1RFR1JBKSArPSB0ZWdyYS8KIG9iai0kKENPTkZJR19EUk1fU1RJ KSArPSBzdGkvCiBvYmotJChDT05GSUdfRFJNX0lNWCkgKz0gaW14Lworb2JqLSQoQ09ORklHX0RS TV9NRURJQVRFSykgKz0gbWVkaWF0ZWsvCiBvYmoteQkJCSs9IGkyYy8KIG9iai15CQkJKz0gcGFu ZWwvCiBvYmoteQkJCSs9IGJyaWRnZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0M2NmMQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKK2NvbmZpZyBE Uk1fTUVESUFURUsKKwl0cmlzdGF0ZSAiRFJNIFN1cHBvcnQgZm9yIE1lZGlhdGVrIFNvQ3MiCisJ ZGVwZW5kcyBvbiBEUk0KKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgKEFSTSAmJiBDT01Q SUxFX1RFU1QpCisJc2VsZWN0IE1US19TTUkKKwlzZWxlY3QgRFJNX1BBTkVMCisJc2VsZWN0IERS TV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUxfU0lNUExFCisJc2VsZWN0IERSTV9LTVNfSEVM UEVSCisJc2VsZWN0IElPTU1VX0RNQQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5 b3UgaGF2ZSBhIE1lZGlhdGVrIFNvQ3MuCisJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1l ZGlhdGVrLWRybQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0dGluZyBh bmQKKwkgIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KKwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNmU4ZGYKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTAs MCArMSwxMSBAQAorbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAorCQkgIG10a19k cm1fY3J0Yy5vIFwKKwkJICBtdGtfZHJtX2RkcC5vIFwKKwkJICBtdGtfZHJtX2RkcF9jb21wLm8g XAorCQkgIG10a19kcm1fZHJ2Lm8gXAorCQkgIG10a19kcm1fZmIubyBcCisJCSAgbXRrX2RybV9n ZW0ubyBcCisJCSAgbXRrX2RybV9wbGFuZS5vCisKK29iai0kKENPTkZJR19EUk1fTUVESUFURUsp ICs9IG1lZGlhdGVrLWRybS5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZGlzcF9vdmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDVkYTA2Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCkBAIC0wLDAg KzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1 ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv Y29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNs dWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNk ZWZpbmUgRElTUF9SRUdfT1ZMX0lOVEVOCQkJMHgwMDA0CisjZGVmaW5lIE9WTF9GTUVfQ1BMX0lO VAkJCQkJQklUKDEpCisjZGVmaW5lIERJU1BfUkVHX09WTF9JTlRTVEEJCQkweDAwMDgKKyNkZWZp bmUgRElTUF9SRUdfT1ZMX0VOCQkJCTB4MDAwYworI2RlZmluZSBESVNQX1JFR19PVkxfUlNUCQkJ MHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lfU0laRQkJCTB4MDAyMAorI2RlZmluZSBE SVNQX1JFR19PVkxfUk9JX0JHQ0xSCQkJMHgwMDI4CisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNf Q09OCQkJMHgwMDJjCisjZGVmaW5lIERJU1BfUkVHX09WTF9DT04obikJCQkoMHgwMDMwICsgMHgy MCAqIG4pCisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0laRShuKQkJKDB4MDAzOCArIDB4MjAg KiBuKQorI2RlZmluZSBESVNQX1JFR19PVkxfT0ZGU0VUKG4pCQkJKDB4MDAzYyArIDB4MjAgKiBu KQorI2RlZmluZSBESVNQX1JFR19PVkxfUElUQ0gobikJCQkoMHgwMDQ0ICsgMHgyMCAqIG4pCisj ZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0NUUkwobikJCSgweDAwYzAgKyAweDIwICogbikKKyNk ZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFfR01DKG4pCQkoMHgwMGM4ICsgMHgyMCAqIG4pCisjZGVm aW5lIERJU1BfUkVHX09WTF9BRERSKG4pCQkJKDB4MGY0MCArIDB4MjAgKiBuKQorCitlbnVtIE9W TF9JTlBVVF9GT1JNQVQgeworCU9WTF9JTkZNVF9SR0I1NjUgPSAwLAorCU9WTF9JTkZNVF9SR0I4 ODggPSAxLAorCU9WTF9JTkZNVF9SR0JBODg4OCA9IDIsCisJT1ZMX0lORk1UX0FSR0I4ODg4ID0g MywKK307CisKKyNkZWZpbmUJT1ZMX1JETUFfTUVNX0dNQwkweDQwNDAyMDIwCisjZGVmaW5lCU9W TF9BRU4JCQlCSVQoOCkKKyNkZWZpbmUJT1ZMX0FMUEhBCQkweGZmCisKKy8qKgorICogc3RydWN0 IG10a19kaXNwX292bCAtIERJU1BfT1ZMIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAt IHN0cnVjdHVyZSBjb250YWluaW5nIHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisg KiBAZHJtX2RldmljZSAtIGJhY2tsaW5rIHRvIGFsbG93IHRoZSBpcnEgaGFuZGxlciB0byBmaW5k IHRoZSBhc3NvY2lhdGVkIGNydGMKKyAqLworc3RydWN0IG10a19kaXNwX292bCB7CisJc3RydWN0 IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJc3RydWN0IGRybV9kZXZpY2UJCSpkcm1fZGV2Owor fTsKKworc3RhdGljIGlycXJldHVybl90IG10a19kaXNwX292bF9pcnFfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9pZDsK KwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSAmcHJpdi0+ZGRwX2NvbXA7CisKKwkvKiBDbGVh ciBmcmFtZSBjb21wbGV0aW9uIGludGVycnVwdCAqLworCXdyaXRlbCgweDAsIG92bC0+cmVncyAr IERJU1BfUkVHX09WTF9JTlRTVEEpOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5kcm1fZGV2 LCBvdmwpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3Zs X2VuYWJsZV92Ymxhbmsodm9pZCBfX2lvbWVtICpkaXNwX2Jhc2UpCit7CisJd3JpdGVsKE9WTF9G TUVfQ1BMX0lOVCwgZGlzcF9iYXNlICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGlj IHZvaWQgbXRrX292bF9kaXNhYmxlX3ZibGFuayh2b2lkIF9faW9tZW0gKmRpc3BfYmFzZSkKK3sK Kwl3cml0ZWwoMHgwLCBkaXNwX2Jhc2UgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0 aWMgdm9pZCBtdGtfb3ZsX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3Jp dGVsKDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9CisKK3N0YXRpYyB2b2lk IG10a19vdmxfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbCgweDAs IGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3Zs X2NvbmZpZyh2b2lkIF9faW9tZW0gKm92bF9iYXNlLAorCQl1bnNpZ25lZCBpbnQgdywgdW5zaWdu ZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAodyAhPSAwICYmIGggIT0g MCkKKwkJd3JpdGVsKGggPDwgMTYgfCB3LCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9ST0lfU0la RSk7CisJd3JpdGVsKDB4MCwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUk9JX0JHQ0xSKTsKKwor CXdyaXRlbCgweDEsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JTVCk7CisJd3JpdGVsKDB4MCwg b3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUlNUKTsKK30KKworc3RhdGljIGJvb2wgaGFzX3JiX3N3 YXBwZWQodW5zaWduZWQgaW50IGZtdCkKK3sKKwlzd2l0Y2ggKGZtdCkgeworCWNhc2UgRFJNX0ZP Uk1BVF9CR1I4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwljYXNlIERSTV9GT1JNQVRf QUJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9C R1JBODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6CisJCXJldHVybiB0cnVlOworCWRl ZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3Zs X2ZtdF9jb252ZXJ0KHVuc2lnbmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwljYXNl IERSTV9GT1JNQVRfUkdCODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6CisJCXJldHVybiBP VkxfSU5GTVRfUkdCODg4OworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJY2FzZSBEUk1fRk9S TUFUX0JHUjU2NToKKwkJcmV0dXJuIE9WTF9JTkZNVF9SR0I1NjU7CisJY2FzZSBEUk1fRk9STUFU X1JHQlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwljYXNlIERSTV9GT1JNQVRf QkdSWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4OgorCQlyZXR1cm4gT1ZMX0lORk1U X0FSR0I4ODg4OworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRf QVJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9B QkdSODg4ODoKKwkJcmV0dXJuIE9WTF9JTkZNVF9SR0JBODg4ODsKKwlkZWZhdWx0OgorCQlEUk1f RVJST1IoInVuc3VwcG9ydGVkIGZvcm1hdFslMDh4XVxuIiwgZm10KTsKKwkJcmV0dXJuIE9WTF9J TkZNVF9SR0I4ODg7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29uKHZvaWQg X19pb21lbSAqb3ZsX2Jhc2UsIHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJl ZzsKKworCXdyaXRlbCgweDEsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgp KTsKKwl3cml0ZWwoT1ZMX1JETUFfTUVNX0dNQywgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUkRN QV9HTUMoaWR4KSk7CisKKwlyZWcgPSByZWFkbChvdmxfYmFzZSArIERJU1BfUkVHX09WTF9TUkNf Q09OKTsKKwlyZWcgPSByZWcgfCAoMSA8PCBpZHgpOworCXdyaXRlbChyZWcsIG92bF9iYXNlICsg RElTUF9SRUdfT1ZMX1NSQ19DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29m Zih2b2lkIF9faW9tZW0gKm92bF9iYXNlLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVk IGludCByZWc7CisKKwlyZWcgPSByZWFkbChvdmxfYmFzZSArIERJU1BfUkVHX09WTF9TUkNfQ09O KTsKKwlyZWcgPSByZWcgJiB+KDEgPDwgaWR4KTsKKwl3cml0ZWwocmVnLCBvdmxfYmFzZSArIERJ U1BfUkVHX09WTF9TUkNfQ09OKTsKKworCXdyaXRlbCgweDAsIG92bF9iYXNlICsgRElTUF9SRUdf T1ZMX1JETUFfQ1RSTChpZHgpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9jb25m aWcodm9pZCBfX2lvbWVtICpvdmxfYmFzZSwgdW5zaWduZWQgaW50IGlkeCwKKwkJc3RydWN0IG10 a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRl ICpwZW5kaW5nID0gJnN0YXRlLT5wZW5kaW5nOworCXVuc2lnbmVkIGludCBhZGRyID0gcGVuZGlu Zy0+YWRkcjsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBwZW5kaW5nLT5waXRjaCAmIDB4ZmZmZjsK Kwl1bnNpZ25lZCBpbnQgZm10ID0gcGVuZGluZy0+Zm9ybWF0OworCXVuc2lnbmVkIGludCBvZmZz ZXQgPSAocGVuZGluZy0+eSA8PCAxNikgfCBwZW5kaW5nLT54OworCXVuc2lnbmVkIGludCBzcmNf c2l6ZSA9IChwZW5kaW5nLT5oZWlnaHQgPDwgMTYpIHwgcGVuZGluZy0+d2lkdGg7CisJdW5zaWdu ZWQgaW50IGNvbjsKKworCWNvbiA9IGhhc19yYl9zd2FwcGVkKGZtdCkgPDwgMjQgfCBvdmxfZm10 X2NvbnZlcnQoZm10KSA8PCAxMjsKKwlpZiAoaWR4ICE9IDApCisJCWNvbiB8PSBPVkxfQUVOIHwg T1ZMX0FMUEhBOworCisJd3JpdGVsKGNvbiwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfQ09OKGlk eCkpOworCXdyaXRlbChwaXRjaCwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUElUQ0goaWR4KSk7 CisJd3JpdGVsKHNyY19zaXplLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9TUkNfU0laRShpZHgp KTsKKwl3cml0ZWwob2Zmc2V0LCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9PRkZTRVQoaWR4KSk7 CisJd3JpdGVsKGFkZHIsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX0FERFIoaWR4KSk7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX292bF9mdW5j cyA9IHsKKwkuY29uZmlnID0gbXRrX292bF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX292bF9zdGFy dCwKKwkuc3RvcCA9IG10a19vdmxfc3RvcCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19vdmxfZW5h YmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBtdGtfb3ZsX2Rpc2FibGVfdmJsYW5rLAor CS5sYXllcl9vbiA9IG10a19vdmxfbGF5ZXJfb24sCisJLmxheWVyX29mZiA9IG10a19vdmxfbGF5 ZXJfb2ZmLAorCS5sYXllcl9jb25maWcgPSBtdGtfb3ZsX2xheWVyX2NvbmZpZywKK307CisKK3N0 YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlICptYXN0ZXIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJp diA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0g ZGF0YTsKKwlpbnQgcmV0OworCisJcHJpdi0+ZHJtX2RldiA9IGRybV9kZXY7CisKKwlyZXQgPSBt dGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKKwlpZiAocmV0 IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6 ICVkXG4iLAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmlu ZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJdm9pZCAqZGF0 YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCisJbXRrX2RkcF9jb21wX3Vu cmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBjb21wb25lbnRfb3BzIG10a19kaXNwX292bF9jb21wb25lbnRfb3BzID0geworCS5iaW5k CT0gbXRrX2Rpc3Bfb3ZsX2JpbmQsCisJLnVuYmluZCA9IG10a19kaXNwX292bF91bmJpbmQsCit9 OworCitzdGF0aWMgaW50IG10a19kaXNwX292bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10 a19kaXNwX292bCAqcHJpdjsKKwlpbnQgY29tcF9pZDsKKwlpbnQgaXJxOworCWludCByZXQ7CisK Kwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEo cGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwlyZXQgPSBkZXZtX3Jl cXVlc3RfaXJxKGRldiwgaXJxLCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIsCisJCQkgICAgICAg SVJRRl9UUklHR0VSX05PTkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChyZXQgPCAwKSB7 CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxuIiwgaXJxLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0X2lk KGRldi0+b2Zfbm9kZSwgTVRLX0RJU1BfT1ZMKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2 X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsK KwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBk ZXYtPm9mX25vZGUsICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rpc3Bfb3Zs X2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxp emUgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAm bXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAi RmFpbGVkIHRvIGFkZCBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBv bmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxl ID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW92bCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3Bf b3ZsX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2Rpc3Bfb3ZsX3JlbW92ZSwKKwkuZHJpdmVyCQk9 IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZGlzcC1vdmwiLAorCQkub3duZXIJPSBUSElTX01PRFVM RSwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCwKKwl9 LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA1NDBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCkBAIC0wLDAgKzEsNTY1IEBACisvKgor ICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9iYXJyaWVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9wbGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8c29jL21lZGlhdGVrL3NtaS5oPgorCisjaW5jbHVk ZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJt dGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJt dGtfZHJtX2dlbS5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworLyoqCisgKiBzdHJ1 Y3QgbXRrX2RybV9jcnRjIC0gTWVkaWFUZWsgc3BlY2lmaWMgY3J0YyBzdHJ1Y3R1cmUuCisgKiBA YmFzZTogY3J0YyBvYmplY3QuCisgKiBAcGlwZTogYSBjcnRjIGluZGV4IGNyZWF0ZWQgYXQgbG9h ZCgpIHdpdGggYSBuZXcgY3J0YyBvYmplY3QgY3JlYXRpb24KKyAqCWFuZCB0aGUgY3J0YyBvYmpl Y3Qgd291bGQgYmUgc2V0IHRvIHByaXZhdGUtPmNydGMgYXJyYXkKKyAqCXRvIGdldCBhIGNydGMg b2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwaXBlIGZyb20gcHJpdmF0ZS0+Y3J0YworICoJ YXJyYXkgd2hlbiBpcnEgaW50ZXJydXB0IG9jY3VycmVkLiB0aGUgcmVhc29uIG9mIHVzaW5nIHRo aXMgcGlwZSBpcyB0aGF0CisgKglkcm0gZnJhbWV3b3JrIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBs ZSBpcnEgeWV0LgorICoJd2UgY2FuIHJlZmVyIHRvIHRoZSBjcnRjIHRvIGN1cnJlbnQgaGFyZHdh cmUgaW50ZXJydXB0IG9jY3VycmVkIHRocm91Z2gKKyAqCXRoaXMgcGlwZSB2YWx1ZS4KKyAqIEBl bmFibGVkOiByZWNvcmRzIHdoZXRoZXIgY3J0Y19lbmFibGUgc3VjY2VlZGVkCisgKiBAZG9fZmx1 c2g6IGVuYWJsZWQgYnkgYXRvbWljX2ZsdXNoLCBjYXVzZXMgcGxhbmUgYXRvbWljX3VwZGF0ZSB0 byBjb21taXQKKyAqICAgICAgICAgICAgY2hhbmdlZCBzdGF0ZSBpbW1lZGlhdGVseS4KKyAqIEBw bGFuZXM6IGFycmF5IG9mIDQgbXRrX2RybV9wbGFuZSBzdHJ1Y3R1cmVzLCBvbmUgZm9yIGVhY2gg b3ZlcmxheSBwbGFuZQorICogQGNvbmZpZ19yZWdzOiBtZW1vcnkgbWFwcGVkIG1tc3lzIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIgc3BhY2UKKyAqIEBtdXRleDogaGFuZGxlIHRvIG9uZSBvZiB0aGUg dGVuIGRpc3BfbXV0ZXggc3RyZWFtcworICogQGRkcF9jb21wX25yOiBudW1iZXIgb2YgY29tcG9u ZW50cyBpbiBkZHBfY29tcAorICogQGRkcF9jb21wOiBhcnJheSBvZiBwb2ludGVycyB0aGUgbXRr X2RkcF9jb21wIHN0cnVjdHVyZXMgdXNlZCBieSB0aGlzIGNydGMKKyAqLworc3RydWN0IG10a19k cm1fY3J0YyB7CisJc3RydWN0IGRybV9jcnRjCQkJYmFzZTsKKwl1bnNpZ25lZCBpbnQJCQlwaXBl OworCWJvb2wJCQkJZW5hYmxlZDsKKworCWJvb2wJCQkJZG9fZmx1c2g7CisKKwlzdHJ1Y3QgbXRr X2RybV9wbGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisKKwl2b2lkIF9faW9tZW0JCQkqY29u ZmlnX3JlZ3M7CisJc3RydWN0IG10a19kaXNwX211dGV4CQkqbXV0ZXg7CisJdW5zaWduZWQgaW50 CQkJZGRwX2NvbXBfbnI7CisJc3RydWN0IG10a19kZHBfY29tcAkJKipkZHBfY29tcDsKK307CisK K3N0cnVjdCBtdGtfY3J0Y19zdGF0ZSB7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlCQliYXNlOwor CXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQJKmV2ZW50OworCisJYm9vbAkJCQlwZW5k aW5nX2NvbmZpZzsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX3dpZHRoOworCXVuc2lnbmVkIGlu dAkJCXBlbmRpbmdfaGVpZ2h0OworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfdnJlZnJlc2g7Cit9 OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHJtX2NydGMgKnRvX210a19jcnRjKHN0cnVj dCBkcm1fY3J0YyAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdGtfZHJt X2NydGMsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAq dG9fbXRrX2NydGNfc3RhdGUoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzKQoreworCXJldHVybiBj b250YWluZXJfb2Yocywgc3RydWN0IG10a19jcnRjX3N0YXRlLCBiYXNlKTsKK30KKworc3RhdGlj IHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjX2J5X2NvbXAoc3RydWN0IG10a19kcm1fcHJp dmF0ZSAqcHJpdiwKKwkJCQkJICAgICBzdHJ1Y3QgbXRrX2RkcF9jb21wICpkZHBfY29tcCkKK3sK KwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBNQVhfQ1JUQzsgaSsrKSB7CisJCW10a19jcnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0 Y1tpXSk7CisJCWlmIChtdGtfY3J0Yy0+ZGRwX2NvbXBbMF0gPT0gZGRwX2NvbXApCisJCQlyZXR1 cm4gbXRrX2NydGM7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k cm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQor eworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwlzdHJ1Y3QgbXRr X2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCisJ ZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMtPmRldiwgc3RhdGUtPmV2ZW50LT5waXBlLCBzdGF0 ZS0+ZXZlbnQpOworCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJc3RhdGUtPmV2ZW50ID0g TlVMTDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9j cnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2Ny dGMoY3J0Yyk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21w X25yOyBpKyspCisJCWNsa191bnByZXBhcmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOwor CisJbXRrX2Rpc3BfbXV0ZXhfcHV0KG10a19jcnRjLT5tdXRleCk7CisKKwlkcm1fY3J0Y19jbGVh bnVwKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfcmVzZXQoc3RydWN0IGRy bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlpZiAo Y3J0Yy0+c3RhdGUgJiYgY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYikKKwkJZHJtX3Byb3BlcnR5X3Vu cmVmZXJlbmNlX2Jsb2IoY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYik7CisKKwlrZnJlZShjcnRjLT5z dGF0ZSk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlj cnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKworCWlmIChzdGF0ZSkKKwkJY3J0Yy0+c3RhdGUt PmNydGMgPSBjcnRjOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX3N0YXRlICptdGtfZHJt X2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3Qg bXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsKKworCV9fZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUoY3J0YywgJnN0YXRlLT5iYXNlKTsKKwor CVdBUk5fT04oc3RhdGUtPmJhc2UuY3J0YyAhPSBjcnRjKTsKKwlzdGF0ZS0+YmFzZS5jcnRjID0g Y3J0YzsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyBib29sIG10a19kcm1f Y3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3Rl ZF9tb2RlKQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMg bWFuZGF0b3J5LiAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2Ny dGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19j cnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCXN0 YXRlLT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGlu Z19oZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNo ID0gY3J0Yy0+bW9kZS52cmVmcmVzaDsKKwl3bWIoKTsKKwlzdGF0ZS0+cGVuZGluZ19jb25maWcg PSB0cnVlOworfQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0 ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2Ny dGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21w ICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZW5hYmxlX3Zi bGFuayhvdmwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGVf dmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0 cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBt dGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJ c3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRr X2RkcF9jb21wX2Rpc2FibGVfdmJsYW5rKG92bCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2NydGNf ZGRwX3Bvd2VyX29uKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWludCByZXQ7 CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWZvciAo aSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQlyZXQgPSBjbGtfZW5h YmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxuIiwgaSwgcmV0KTsKKwkJCWdvdG8g ZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlj bGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX3Bvd2VyX29mZihzdHJ1Y3QgbXRrX2RybV9jcnRj ICptdGtfY3J0YykKK3sKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1 bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQlj bGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2NydGNfZGRwX2h3X2luaXQoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJ c3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGludCB3 aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaDsKKwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVH X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoV0FSTl9PTighY3J0Yy0+c3RhdGUpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCXdpZHRoID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUu aGRpc3BsYXk7CisJaGVpZ2h0ID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXk7 CisJdnJlZnJlc2ggPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVmcmVzaDsKKworCXJl dCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoY3J0Yy0+ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7 CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBwb3dlciBkb21haW46ICVkXG4iLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG10a19kaXNwX211dGV4X3ByZXBhcmUobXRr X2NydGMtPm11dGV4KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBl bmFibGUgbXV0ZXggY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wbV9ydW50aW1lX3B1 dDsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfcG93ZXJfb24obXRrX2NydGMpOworCWlmIChy ZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBjb21wb25lbnQgY2xvY2tz OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfbXV0ZXhfdW5wcmVwYXJlOworCX0KKworCURSTV9E RUJVR19EUklWRVIoIm1lZGlhdGVrX2RkcF9kZHBfcGF0aF9zZXR1cFxuIik7CisJZm9yIChpID0g MDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgeworCQltdGtfZGRwX2FkZF9j b21wX3RvX3BhdGgobXRrX2NydGMtPmNvbmZpZ19yZWdzLAorCQkJCQkgbXRrX2NydGMtPmRkcF9j b21wW2ldLT5pZCwKKwkJCQkJIG10a19jcnRjLT5kZHBfY29tcFtpICsgMV0tPmlkKTsKKwkJbXRr X2Rpc3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQltdGtfY3J0Yy0+ZGRw X2NvbXBbaV0tPmlkKTsKKwl9CisJbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11 dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwltdGtfZGlzcF9tdXRleF9lbmFibGUo bXRrX2NydGMtPm11dGV4KTsKKworCURSTV9ERUJVR19EUklWRVIoImRkcF9kaXNwX3BhdGhfcG93 ZXJfb24gJWR4JWRcbiIsIHdpZHRoLCBoZWlnaHQpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0 Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wID0gbXRr X2NydGMtPmRkcF9jb21wW2ldOworCisJCW10a19kZHBfY29tcF9jb25maWcoY29tcCwgd2lkdGgs IGhlaWdodCwgdnJlZnJlc2gpOworCQltdGtfZGRwX2NvbXBfc3RhcnQoY29tcCk7CisJfQorCisJ cmV0dXJuIDA7CisKK2Vycl9tdXRleF91bnByZXBhcmU6CisJbXRrX2Rpc3BfbXV0ZXhfdW5wcmVw YXJlKG10a19jcnRjLT5tdXRleCk7CitlcnJfcG1fcnVudGltZV9wdXQ6CisJcG1fcnVudGltZV9w dXQoY3J0Yy0+ZGV2LT5kZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19j cnRjX2RkcF9od19maW5pKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCXN0cnVj dCBkcm1fZGV2aWNlICpkcm0gPSBtdGtfY3J0Yy0+YmFzZS5kZXY7CisJaW50IGk7CisKKwlEUk1f REVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0 Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJbXRrX2RkcF9jb21wX3N0b3AobXRrX2NydGMtPmRkcF9j b21wW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJ CW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwKKwkJCQkJICAgbXRr X2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShtdGtfY3J0 Yy0+bXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgLSAxOyBp KyspIHsKKwkJbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgobXRrX2NydGMtPmNvbmZpZ19y ZWdzLAorCQkJCQkgICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAorCQkJCQkgICAgICBt dGtfY3J0Yy0+ZGRwX2NvbXBbaSArIDFdLT5pZCk7CisJCW10a19kaXNwX211dGV4X3JlbW92ZV9j b21wKG10a19jcnRjLT5tdXRleCwKKwkJCQkJICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7 CisJfQorCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwgbXRrX2Ny dGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2NydGNfZGRwX3Bvd2VyX29mZihtdGtfY3J0Yyk7 CisJbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisKKwlwbV9ydW50 aW1lX3B1dChkcm0tPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19lbmFibGUo c3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRj ID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2Ny dGMtPmRkcF9jb21wWzBdOworCWludCByZXQ7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxu IiwgX19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCisJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChv dmwtPmxhcmJfZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBs YXJiOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9o d19pbml0KG10a19jcnRjKTsKKwlpZiAocmV0KSB7CisJCW10a19zbWlfbGFyYl9wdXQob3ZsLT5s YXJiX2Rldik7CisJCXJldHVybjsKKwl9CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJ bXRrX2NydGMtPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNf ZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAq bXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwg PSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIl cyAlZFxuIiwgX19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCWlmIChXQVJOX09OKCFtdGtfY3J0 Yy0+ZW5hYmxlZCkpCisJCXJldHVybjsKKworCS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0 ZSB0byBkaXNhYmxlZCAqLworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgewor CQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJ CXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0g dG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCXBsYW5lX3N0YXRlLT5wZW5kaW5n LmVuYWJsZSA9IGZhbHNlOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOwor CX0KKworCS8qIFdhaXQgZm9yIHBsYW5lcyB0byBiZSBkaXNhYmxlZCAqLworCWRybV9jcnRjX3dh aXRfb25lX3ZibGFuayhjcnRjKTsKKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisJbXRr X2NydGNfZGRwX2h3X2ZpbmkobXRrX2NydGMpOworCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJi X2Rldik7CisKKwltdGtfY3J0Yy0+ZG9fZmx1c2ggPSBmYWxzZTsKKwltdGtfY3J0Yy0+ZW5hYmxl ZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9s ZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtf Y3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisKKwlpZiAoc3RhdGUtPmJhc2UuZXZlbnQpIHsKKwkJ c3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKKwkJV0FSTl9P Tihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworCQlzdGF0ZS0+ZXZlbnQgPSBzdGF0 ZS0+YmFzZS5ldmVudDsKKwkJc3RhdGUtPmJhc2UuZXZlbnQgPSBOVUxMOworCX0KK30KKwordm9p ZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3Qg bXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXVuc2lnbmVkIGlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10 a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxh bmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5 KSB7CisJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCQkJcGxhbmVfc3Rh dGUtPnBlbmRpbmcuZGlydHkgPSBmYWxzZTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbXRr X2RybV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAg c3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwltdGtfZHJtX2NydGNf Y29tbWl0KGNydGMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIG10 a19jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnCQk9IGRybV9hdG9taWNfaGVscGVyX3NldF9j b25maWcsCisJLnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCisJLmRl c3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ksCisJLnJlc2V0CQkJPSBtdGtfZHJtX2NydGNf cmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBtdGtfZHJtX2NydGNfZHVwbGljYXRl X3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX2NydGNf ZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVy X2Z1bmNzIG10a19jcnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cAk9IG10a19kcm1f Y3J0Y19tb2RlX2ZpeHVwLAorCS5tb2RlX3NldF9ub2ZiCT0gbXRrX2RybV9jcnRjX21vZGVfc2V0 X25vZmIsCisJLmVuYWJsZQkJPSBtdGtfZHJtX2NydGNfZW5hYmxlLAorCS5kaXNhYmxlCT0gbXRr X2RybV9jcnRjX2Rpc2FibGUsCisJLmF0b21pY19iZWdpbgk9IG10a19kcm1fY3J0Y19hdG9taWNf YmVnaW4sCisJLmF0b21pY19mbHVzaAk9IG10a19kcm1fY3J0Y19hdG9taWNfZmx1c2gsCit9Owor CitzdGF0aWMgaW50IG10a19kcm1fY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJ CXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjLCBzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5 LAorCQlzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IsIHVuc2lnbmVkIGludCBwaXBlKQoreworCWlu dCByZXQ7CisKKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRybSwgJm10a19jcnRj LT5iYXNlLCBwcmltYXJ5LCBjdXJzb3IsCisJCQkmbXRrX2NydGNfZnVuY3MpOworCWlmIChyZXQp CisJCWdvdG8gZXJyX2NsZWFudXBfY3J0YzsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm10a19j cnRjLT5iYXNlLCAmbXRrX2NydGNfaGVscGVyX2Z1bmNzKTsKKworCW10a19jcnRjLT5waXBlID0g cGlwZTsKKworCXJldHVybiAwOworCitlcnJfY2xlYW51cF9jcnRjOgorCWRybV9jcnRjX2NsZWFu dXAoJm10a19jcnRjLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG10a19jcnRjX2Rk cF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92 bCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtX2Rldi0+ZGV2X3ByaXZh dGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGM7CisJc3RydWN0IG10a19jcnRjX3N0 YXRlICpzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCW10a19jcnRjID0gbXRrX2NydGNfYnlf Y29tcChwcml2LCBvdmwpOworCWlmIChXQVJOX09OKCFtdGtfY3J0YykpCisJCXJldHVybjsKKwor CXN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUobXRrX2NydGMtPmJhc2Uuc3RhdGUpOworCisJLyoK KwkgKiBUT0RPOiBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlcnMgaGVyZSwgd2Ugc2hv dWxkIHByZXBhcmUKKwkgKiB3b3JraW5nIHJlZ2lzdGVycyBpbiBhdG9taWNfY29tbWl0IGFuZCBs ZXQgdGhlIGhhcmR3YXJlIGNvbW1hbmQKKwkgKiBxdWV1ZSB1cGRhdGUgbW9kdWxlIHJlZ2lzdGVy cyBvbiB2YmxhbmsuCisJICovCisJaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykgeworCQltdGtf ZGRwX2NvbXBfY29uZmlnKG92bCwgc3RhdGUtPnBlbmRpbmdfd2lkdGgsCisJCQkJICAgIHN0YXRl LT5wZW5kaW5nX2hlaWdodCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gpOworCisJ CXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBP VkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0 Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl OworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisK KwkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZykgeworCQkJaWYgKCFwbGFuZV9zdGF0 ZS0+cGVuZGluZy5lbmFibGUpCisJCQkJbXRrX2RkcF9jb21wX2xheWVyX29mZihvdmwsIGkpOwor CisJCQltdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKG92bCwgaSwgcGxhbmVfc3RhdGUpOworCisJ CQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlKQorCQkJCW10a19kZHBfY29tcF9sYXll cl9vbihvdmwsIGkpOworCisJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSBmYWxzZTsK KwkJfQorCX0KKworCWRybV9oYW5kbGVfdmJsYW5rKG10a19jcnRjLT5iYXNlLmRldiwgbXRrX2Ny dGMtPnBpcGUpOworfQorCitpbnQgbXRrX2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLCB1bnNpZ25l ZCBpbnQgcGF0aF9sZW4pCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybV9k ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRybV9kZXYtPmRldjsKKwlz dHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YzsKKwllbnVtIGRybV9wbGFuZV90eXBlIHR5cGU7 CisJdW5zaWduZWQgaW50IHpwb3M7CisJaW50IHBpcGUgPSBwcml2LT5udW1fcGlwZXM7CisJaW50 IHJldDsKKwlpbnQgaTsKKworCW10a19jcnRjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpt dGtfY3J0YyksIEdGUF9LRVJORUwpOworCWlmICghbXRrX2NydGMpCisJCXJldHVybiAtRU5PTUVN OworCisJbXRrX2NydGMtPmNvbmZpZ19yZWdzID0gcHJpdi0+Y29uZmlnX3JlZ3M7CisJbXRrX2Ny dGMtPmRkcF9jb21wX25yID0gcGF0aF9sZW47CisJbXRrX2NydGMtPmRkcF9jb21wID0gZGV2bV9r bWFsbG9jX2FycmF5KGRldiwgbXRrX2NydGMtPmRkcF9jb21wX25yLAorCQkJCQkJc2l6ZW9mKCpt dGtfY3J0Yy0+ZGRwX2NvbXApLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisKKwltdGtfY3J0Yy0+bXV0 ZXggPSBtdGtfZGlzcF9tdXRleF9nZXQocHJpdi0+bXV0ZXhfZGV2LCBwaXBlKTsKKwlpZiAoSVNf RVJSKG10a19jcnRjLT5tdXRleCkpIHsKKwkJcmV0ID0gUFRSX0VSUihtdGtfY3J0Yy0+bXV0ZXgp OworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbXV0ZXg6ICVkXG4iLCByZXQpOworCQly ZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7 IGkrKykgeworCQllbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkID0gcGF0aFtpXTsKKwkJc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcDsKKworCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9p ZF07CisJCWlmICghY29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21wb25lbnQgJXMgbm90IGlu aXRpYWxpemVkXG4iLAorCQkJCXByaXYtPmNvbXBfbm9kZVtjb21wX2lkXS0+ZnVsbF9uYW1lKTsK KwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIHVucHJlcGFyZTsKKwkJfQorCisJCXJldCA9IGNs a19wcmVwYXJlKGNvbXAtPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJ CSJGYWlsZWQgdG8gcHJlcGFyZSBjbG9jayBmb3IgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCQlw cml2LT5jb21wX25vZGVbY29tcF9pZF0tPmZ1bGxfbmFtZSwgcmV0KTsKKwkJCWdvdG8gdW5wcmVw YXJlOworCQl9CisKKwkJbXRrX2NydGMtPmRkcF9jb21wW2ldID0gY29tcDsKKwl9CisKKwlmb3Ig KHpwb3MgPSAwOyB6cG9zIDwgT1ZMX0xBWUVSX05SOyB6cG9zKyspIHsKKwkJdHlwZSA9ICh6cG9z ID09IDApID8gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSA6CisJCQkJKHpwb3MgPT0gMSkgPyBEUk1f UExBTkVfVFlQRV9DVVJTT1IgOgorCQkJCQkJRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKKwkJcmV0 ID0gbXRrX3BsYW5lX2luaXQoZHJtX2RldiwgJm10a19jcnRjLT5wbGFuZXNbenBvc10sCisJCQkJ ICAgICBCSVQocGlwZSksIHR5cGUsIHpwb3MpOworCQlpZiAocmV0KQorCQkJZ290byB1bnByZXBh cmU7CisJfQorCisJcmV0ID0gbXRrX2RybV9jcnRjX2luaXQoZHJtX2RldiwgbXRrX2NydGMsICZt dGtfY3J0Yy0+cGxhbmVzWzBdLmJhc2UsCisJCQkJJm10a19jcnRjLT5wbGFuZXNbMV0uYmFzZSwg cGlwZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gdW5wcmVwYXJlOworCisJcHJpdi0+Y3J0Y1tw aXBlXSA9ICZtdGtfY3J0Yy0+YmFzZTsKKwlwcml2LT5udW1fcGlwZXMrKzsKKworCXJldHVybiAw OworCit1bnByZXBhcmU6CisJd2hpbGUgKC0taSA+PSAwKQorCQljbGtfdW5wcmVwYXJlKG10a19j cnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZjA0ODU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2NydGMuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1 IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKi8KKworI2lmbmRlZiBNVEtfRFJNX0NSVENfSAorI2RlZmluZSBNVEtfRFJNX0NS VENfSAorCisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSAibXRrX2RybV9kZHBf Y29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworI2RlZmluZSBPVkxfTEFZRVJf TlIJNAorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2Ug KmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxh bmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCBtdGtf ZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19jcnRjX2Rk cF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92 bCk7CitpbnQgbXRrX2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiwK KwkJCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLAorCQkJdW5zaWduZWQgaW50IHBh dGhfbGVuKTsKKworI2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2RkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2 NTg0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9kZHAuYwpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRp YVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgIm10a19k cm1fZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1Bf UkVHX0NPTkZJR19ESVNQX09WTDBfTU9VVF9FTgkweDA0MAorI2RlZmluZSBESVNQX1JFR19DT05G SUdfRElTUF9PVkwxX01PVVRfRU4JMHgwNDQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1Bf T0RfTU9VVF9FTgkJMHgwNDgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfR0FNTUFfTU9V VF9FTgkweDA0YworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU4JMHgw NTAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTgkweDA4NAorI2Rl ZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOCTB4MDg4CisjZGVmaW5lIERJ U1BfUkVHX0NPTkZJR19EUElfU0VMX0lOCQkweDBhYworI2RlZmluZSBESVNQX1JFR19DT05GSUdf RElTUF9SRE1BMV9NT1VUX0VOCTB4MGM4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19NTVNZU19D R19DT04wCQkweDEwMAorCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX0VOKG4pCSgweDIwICsgMHgy MCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfUlNUKG4pCSgweDI4ICsgMHgyMCAqIChu KSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfTU9EKG4pCSgweDJjICsgMHgyMCAqIChuKSkKKyNk ZWZpbmUgRElTUF9SRUdfTVVURVhfU09GKG4pCSgweDMwICsgMHgyMCAqIChuKSkKKworI2RlZmlu ZSBNVVRFWF9NT0RfRElTUF9PVkwwCQlCSVQoMTEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09W TDEJCUJJVCgxMikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTAJCUJJVCgxMykKKyNkZWZp bmUgTVVURVhfTU9EX0RJU1BfUkRNQTEJCUJJVCgxNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1Bf UkRNQTIJCUJJVCgxNSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTAJCUJJVCgxNikKKyNk ZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTEJCUJJVCgxNykKKyNkZWZpbmUgTVVURVhfTU9EX0RJ U1BfQ09MT1IwCQlCSVQoMTgpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMQkJQklUKDE5 KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9BQUwJCUJJVCgyMCkKKyNkZWZpbmUgTVVURVhfTU9E X0RJU1BfR0FNTUEJCUJJVCgyMSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfVUZPRQkJQklUKDIy KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00wCQlCSVQoMjMpCisjZGVmaW5lIE1VVEVYX01P RF9ESVNQX1BXTTEJCUJJVCgyNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT0QJCUJJVCgyNSkK KworI2RlZmluZSBNVVRFWF9TT0ZfU0lOR0xFX01PREUJCTAKKyNkZWZpbmUgTVVURVhfU09GX0RT STAJCQkxCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kxCQkJMgorI2RlZmluZSBNVVRFWF9TT0ZfRFBJ MAkJCTMKKworI2RlZmluZSBPVkwwX01PVVRfRU5fQ09MT1IwCQkweDEKKyNkZWZpbmUgT0RfTU9V VF9FTl9SRE1BMAkJMHgxCisjZGVmaW5lIFVGT0VfTU9VVF9FTl9EU0kwCQkweDEKKyNkZWZpbmUg Q09MT1IwX1NFTF9JTl9PVkwwCQkweDEKKyNkZWZpbmUgT1ZMMV9NT1VUX0VOX0NPTE9SMQkJMHgx CisjZGVmaW5lIEdBTU1BX01PVVRfRU5fUkRNQTEJCTB4MQorI2RlZmluZSBSRE1BMV9NT1VUX0RQ STAJCQkweDIKKyNkZWZpbmUgRFBJMF9TRUxfSU5fUkRNQTEJCTB4MQorI2RlZmluZSBDT0xPUjFf U0VMX0lOX09WTDEJCTB4MQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggeworCWludCBpZDsKKwli b29sIGNsYWltZWQ7Cit9OworCitzdHJ1Y3QgbXRrX2RkcCB7CisJc3RydWN0IGRldmljZQkJCSpk ZXY7CisJc3RydWN0IGNsawkJCSpjbGs7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJc3RydWN0 IG10a19kaXNwX211dGV4CQltdXRleFsxMF07Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQg aW50IG11dGV4X21vZFtERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRf QUFMXSA9IE1VVEVYX01PRF9ESVNQX0FBTCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBdID0gTVVU RVhfTU9EX0RJU1BfQ09MT1IwLAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0gPSBNVVRFWF9NT0Rf RElTUF9DT0xPUjEsCisJW0REUF9DT01QT05FTlRfR0FNTUFdID0gTVVURVhfTU9EX0RJU1BfR0FN TUEsCisJW0REUF9DT01QT05FTlRfT0RdID0gTVVURVhfTU9EX0RJU1BfT0QsCisJW0REUF9DT01Q T05FTlRfT1ZMMF0gPSBNVVRFWF9NT0RfRElTUF9PVkwwLAorCVtERFBfQ09NUE9ORU5UX09WTDFd ID0gTVVURVhfTU9EX0RJU1BfT1ZMMSwKKwlbRERQX0NPTVBPTkVOVF9QV00wXSA9IE1VVEVYX01P RF9ESVNQX1BXTTAsCisJW0REUF9DT01QT05FTlRfUFdNMV0gPSBNVVRFWF9NT0RfRElTUF9QV00x LAorCVtERFBfQ09NUE9ORU5UX1JETUEwXSA9IE1VVEVYX01PRF9ESVNQX1JETUEwLAorCVtERFBf Q09NUE9ORU5UX1JETUExXSA9IE1VVEVYX01PRF9ESVNQX1JETUExLAorCVtERFBfQ09NUE9ORU5U X1JETUEyXSA9IE1VVEVYX01PRF9ESVNQX1JETUEyLAorCVtERFBfQ09NUE9ORU5UX1VGT0VdID0g TVVURVhfTU9EX0RJU1BfVUZPRSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0gPSBNVVRFWF9NT0Rf RElTUF9XRE1BMCwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9XRE1B MSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9tb3V0X2VuKGVudW0gbXRrX2Rk cF9jb21wX2lkIGN1ciwKKwkJCQkgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkg ICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChj dXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjAp IHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRfRU47CisJCXZhbHVl ID0gT1ZMMF9NT1VUX0VOX0NPTE9SMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5U X09EICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMCkgeworCQkqYWRkciA9IERJU1BfUkVH X0NPTkZJR19ESVNQX09EX01PVVRfRU47CisJCXZhbHVlID0gT0RfTU9VVF9FTl9SRE1BMDsKKwl9 IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1VGT0UgJiYgbmV4dCA9PSBERFBfQ09NUE9O RU5UX0RTSTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU47 CisJCXZhbHVlID0gVUZPRV9NT1VUX0VOX0RTSTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NP TVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIg PSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwxX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMV9NT1VU X0VOX0NPTE9SMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX0dBTU1BICYmIG5l eHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19E SVNQX0dBTU1BX01PVVRfRU47CisJCXZhbHVlID0gR0FNTUFfTU9VVF9FTl9SRE1BMTsKKwl9IGVs c2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVO VF9EUEkwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTjsK KwkJdmFsdWUgPSBSRE1BMV9NT1VUX0RQSTA7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAwOworCX0K KworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtdGtfZGRwX3NlbF9p bihlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg bmV4dCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHZhbHVl OworCisJaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDAgJiYgbmV4dCA9PSBERFBfQ09NUE9O RU5UX0NPTE9SMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxf SU47CisJCXZhbHVlID0gQ09MT1IwX1NFTF9JTl9PVkwwOworCX0gZWxzZSBpZiAoY3VyID09IERE UF9DT01QT05FTlRfUkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKKwkJKmFk ZHIgPSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTjsKKwkJdmFsdWUgPSBEUEkwX1NFTF9JTl9S RE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEgJiYgbmV4dCA9PSBE RFBfQ09NUE9ORU5UX0NPTE9SMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NP TE9SMV9TRUxfSU47CisJCXZhbHVlID0gQ09MT1IxX1NFTF9JTl9PVkwxOworCX0gZWxzZSB7CisJ CXZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgbXRrX2RkcF9hZGRf Y29tcF90b19wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkgICAgICBlbnVtIG10 a19kZHBfY29tcF9pZCBjdXIsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KQor eworCXVuc2lnbmVkIGludCBhZGRyLCB2YWx1ZSwgcmVnOworCisJdmFsdWUgPSBtdGtfZGRwX21v dXRfZW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3Jl bGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcs IGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIs IG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25m aWdfcmVncyArIGFkZHIpIHwgdmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3Jl Z3MgKyBhZGRyKTsKKwl9Cit9CisKK3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgo dm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBj dXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQg YWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwg JmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdz ICsgYWRkcikgJiB+dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBh ZGRyKTsKKwl9CisKKwl2YWx1ZSA9IG10a19kZHBfc2VsX2luKGN1ciwgbmV4dCwgJmFkZHIpOwor CWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikg JiB+dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9 Cit9CisKK3N0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhfZ2V0KHN0cnVjdCBk ZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpZCA+PSAxMCkKKwkJcmV0dXJuIEVSUl9QVFIo LUVJTlZBTCk7CisJaWYgKGRkcC0+bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJldHVybiBFUlJfUFRS KC1FQlVTWSk7CisKKwlkZHAtPm11dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsKKworCXJldHVybiAm ZGRwLT5tdXRleFtpZF07Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0KHN0cnVjdCBtdGtf ZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9v ZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJ V0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCW11dGV4LT5jbGFp bWVkID0gZmFsc2U7Cit9CisKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKHN0cnVjdCBtdGtf ZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9v ZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXJl dHVybiBjbGtfcHJlcGFyZV9lbmFibGUoZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211 dGV4X3VucHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBt dGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkg ICBtdXRleFttdXRleC0+aWRdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRwLT5jbGspOwor fQorCit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq bXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQoreworCXN0cnVjdCBtdGtf ZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBt dXRleFttdXRleC0+aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJV0FSTl9PTigmZGRwLT5t dXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEREUF9D T01QT05FTlRfRFNJMDoKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNhc2Ug RERQX0NPTVBPTkVOVF9EU0kxOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKKwkJYnJlYWs7CisJ Y2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9EUEkwOworCQlicmVh azsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVH X01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVnIHw9IG11dGV4X21vZFtpZF07CisJCXdyaXRl bF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkp OworCQlyZXR1cm47CisJfQorCisJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAtPnJlZ3MgKyBESVNQ X1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVt b3ZlX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCQllbnVtIG10a19kZHBf Y29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4 LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQg aW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisK Kwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJY2FzZSBERFBfQ09N UE9ORU5UX0RTSTE6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXdyaXRlbF9yZWxheGVk KE1VVEVYX1NPRl9TSU5HTEVfTU9ERSwKKwkJCSAgICAgICBkZHAtPnJlZ3MgKyBESVNQX1JFR19N VVRFWF9TT0YobXV0ZXgtPmlkKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZyA9IHJlYWRs X3JlbGF4ZWQoZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQly ZWcgJj0gfm11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsg RElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQg bXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJ c3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAs CisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRl eC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRF WF9FTihtdXRleC0+aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVj dCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRh aW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0p OworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRl bCgwLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKworc3Rh dGljIGludCBtdGtfZGRwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwOwor CXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQgaTsKKworCWRkcCA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqZGRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZHApCisJCXJldHVybiAtRU5P TUVNOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCWRkcC0+bXV0ZXhbaV0uaWQgPSBp OworCisJZGRwLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRk cC0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQly ZXR1cm4gUFRSX0VSUihkZHAtPmNsayk7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZGRwLT5yZWdzID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihkZHAtPnJlZ3MpKSB7CisJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBtdXRleCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRS X0VSUihkZHAtPnJlZ3MpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRkcCk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBkZHBfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJs ZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIgfSwKKwl7fSwKK307CitNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBkZHBfZHJpdmVyX2R0X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kZHBfcHJvYmUs CisJLnJlbW92ZQkJPSBtdGtfZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAi bWVkaWF0ZWstZGRwIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJs ZSA9IGRkcF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2 ZXIobXRrX2RkcF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZGRwLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKQEAgLTAsMCArMSw0 MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRL X0RSTV9ERFBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRlICJtdGtfZHJtX2Rk cF9jb21wLmgiCisKK3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IG10a19k aXNwX211dGV4OworCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0g KmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAg ICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBf ZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRw X2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOworCitzdHJ1 Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYs IHVuc2lnbmVkIGludCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRr X2Rpc3BfbXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAoc3RydWN0 IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQp Owordm9pZCBtdGtfZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRl eCk7Cit2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19kaXNwX211dGV4ICpt dXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9t dXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlz cF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10 a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKKworI2VuZGlm IC8qIE1US19EUk1fRERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2RkcF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k ZHBfY29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YWUxYTMKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29t cC5jCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVr IEluYy4KKyAqIEF1dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KKyAq CUNLIEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs dWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRl IDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5j bHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisjaW5jbHVk ZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX0VOQUJM RQkJMHgwMDAwCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUwkJMHgwMDA0CisjZGVm aW5lIERJU1BfUkVHX1JETUFfR0xPQkFMX0NPTgkJMHgwMDEwCisjZGVmaW5lIERJU1BfUkVHX1JE TUFfU0laRV9DT05fMAkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05fMQkJ MHgwMDE4CisjZGVmaW5lIERJU1BfUkVHX1JETUFfRklGT19DT04JCQkweDAwNDAKKyNkZWZpbmUg UkRNQV9GSUZPX1VOREVSRkxPV19FTgkJCQlCSVQoMzEpCisjZGVmaW5lIFJETUFfRklGT19QU0VV RE9fU0laRShieXRlcykJCQkoKChieXRlcykgLyAxNikgPDwgMTYpCisjZGVmaW5lIFJETUFfT1VU UFVUX1ZBTElEX0ZJRk9fVEhSRVNIT0xEKGJ5dGVzKQkJKChieXRlcykgLyAxNikKKworI2RlZmlu ZSBESVNQX09EX0VOCQkJCTB4MDAwMAorI2RlZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAor I2RlZmluZSBESVNQX09EX0lOVFNUQQkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJ MHgwMDIwCisjZGVmaW5lIERJU1BfT0RfU0laRQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JF R19VRk9fU1RBUlQJCQkweDAwMDAKKworI2RlZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgw NDAwCisjZGVmaW5lIERJU1BfQ09MT1JfU1RBUlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xP Ul9XSURUSAkJCTB4MGM1MAorI2RlZmluZSBESVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisj ZGVmaW5lCU9EX1JFTEFZX01PREUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgy KQorCisjZGVmaW5lCUNPTE9SX0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9T RUwJCUJJVCgxMykKKworc3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyh2b2lkIF9faW9tZW0g KmNvbG9yX2Jhc2UsIHVuc2lnbmVkIGludCB3LAorCQl1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQg aW50IHZyZWZyZXNoKQoreworCXdyaXRlbCh3LCBjb2xvcl9iYXNlICsgRElTUF9DT0xPUl9XSURU SCk7CisJd3JpdGVsKGgsIGNvbG9yX2Jhc2UgKyBESVNQX0NPTE9SX0hFSUdIVCk7Cit9CisKK3N0 YXRpYyB2b2lkIG10a19jb2xvcl9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQorewor CXdyaXRlbChDT0xPUl9CWVBBU1NfQUxMIHwgQ09MT1JfU0VRX1NFTCwKKwkgICAgICAgY29tcC0+ cmVncyArIERJU1BfQ09MT1JfQ0ZHX01BSU4pOworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBE SVNQX0NPTE9SX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX2NvbmZpZyh2b2lkIF9f aW9tZW0gKm9kX2Jhc2UsIHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQgaCwKKwkJdW5zaWdu ZWQgaW50IHZyZWZyZXNoKQoreworCXdyaXRlbCh3IDw8IDE2IHwgaCwgb2RfYmFzZSArIERJU1Bf T0RfU0laRSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vZF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wKQoreworCXdyaXRlbChPRF9SRUxBWV9NT0RFLCBjb21wLT5yZWdzICsgRElTUF9P RF9DRkcpOworCXdyaXRlbCgxLCBjb21wLT5yZWdzICsgRElTUF9PRF9FTik7Cit9CisKK3N0YXRp YyB2b2lkIG10a19yZG1hX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJdW5z aWduZWQgaW50IHJlZzsKKworCXdyaXRlbCgweDQsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1B X0lOVF9FTkFCTEUpOworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX0dM T0JBTF9DT04pOworCXJlZyB8PSAxOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JF R19SRE1BX0dMT0JBTF9DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9jb25maWcodm9p ZCBfX2lvbWVtICpyZG1hX2Jhc2UsCisJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs IHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOworCXVu c2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChyZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1B X1NJWkVfQ09OXzApOworCXJlZyA9IChyZWcgJiB+KDB4ZmZmKSkgfCAod2lkdGggJiAweGZmZik7 CisJd3JpdGVsKHJlZywgcmRtYV9iYXNlICsgRElTUF9SRUdfUkRNQV9TSVpFX0NPTl8wKTsKKwor CXJlZyA9IHJlYWRsKHJkbWFfYmFzZSArIERJU1BfUkVHX1JETUFfU0laRV9DT05fMSk7CisJcmVn ID0gKHJlZyAmIH4oMHhmZmZmZikpIHwgKGhlaWdodCAmIDB4ZmZmZmYpOworCXdyaXRlbChyZWcs IHJkbWFfYmFzZSArIERJU1BfUkVHX1JETUFfU0laRV9DT05fMSk7CisKKwkvKgorCSAqIEVuYWJs ZSBGSUZPIHVuZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9ja2VkLgorCSAq IEtlZXAgdGhlIEZJRk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4IEtpQi4gU2V0IHRo ZQorCSAqIG91dHB1dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0aCA3LzYgb3Zlcmhl YWQgdG8KKwkgKiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBwaXhlbCBkZXB0aCBv ZiA0IGJ5dGVzOgorCSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0ICogdnJlZnJlc2gg KiA0ICogNyAvIDEwMDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxPV19FTiB8CisJICAg ICAgUkRNQV9GSUZPX1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRNQV9PVVRQVVRfVkFM SURfRklGT19USFJFU0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCByZG1hX2Jhc2UgKyBE SVNQX1JFR19SRE1BX0ZJRk9fQ09OKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQo c3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoVUZPX0JZUEFTUywgY29tcC0+ cmVncyArIERJU1BfUkVHX1VGT19TVEFSVCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRr X2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvciA9IHsKKwkuY29uZmlnID0gbXRrX2NvbG9yX2NvbmZp ZywKKwkuc3RhcnQgPSBtdGtfY29sb3Jfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IG10a19kZHBfY29tcF9mdW5jcyBkZHBfb2QgPSB7CisJLmNvbmZpZyA9IG10a19vZF9jb25maWcs CisJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtf ZGRwX2NvbXBfZnVuY3MgZGRwX3JkbWEgPSB7CisJLmNvbmZpZyA9IG10a19yZG1hX2NvbmZpZywK Kwkuc3RhcnQgPSBtdGtfcmRtYV9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRr X2RkcF9jb21wX2Z1bmNzIGRkcF91Zm9lID0geworCS5zdGFydCA9IG10a191Zm9lX3N0YXJ0LAor fTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtdGtfZGRwX2NvbXBfc3RlbVtNVEtfRERQ X0NPTVBfVFlQRV9NQVhdID0geworCVtNVEtfRElTUF9PVkxdID0gIm92bCIsCisJW01US19ESVNQ X1JETUFdID0gInJkbWEiLAorCVtNVEtfRElTUF9XRE1BXSA9ICJ3ZG1hIiwKKwlbTVRLX0RJU1Bf Q09MT1JdID0gImNvbG9yIiwKKwlbTVRLX0RJU1BfQUFMXSA9ICJhYWwiLAorCVtNVEtfRElTUF9H QU1NQV0gPSAiZ2FtbWEiLAorCVtNVEtfRElTUF9VRk9FXSA9ICJ1Zm9lIiwKKwlbTVRLX0RTSV0g PSAiZHNpIiwKKwlbTVRLX0RQSV0gPSAiZHBpIiwKKwlbTVRLX0RJU1BfUFdNXSA9ICJwd20iLAor CVtNVEtfRElTUF9NVVRFWF0gPSAibXV0ZXgiLAorCVtNVEtfRElTUF9PRF0gPSAib2QiLAorfTsK Kworc3RydWN0IG10a19kZHBfY29tcF9tYXRjaCB7CisJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB0 eXBlOworCWludCBhbGlhc19pZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpm dW5jczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIG10a19kZHBfbWF0 Y2hlc1tERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRfQUFMXQk9IHsg TVRLX0RJU1BfQUFMLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfQ09MT1IwXQk9IHsgTVRL X0RJU1BfQ09MT1IsCTAsICZkZHBfY29sb3IgfSwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdCT0g eyBNVEtfRElTUF9DT0xPUiwJMSwgJmRkcF9jb2xvciB9LAorCVtERFBfQ09NUE9ORU5UX0RQSTBd CT0geyBNVEtfRFBJLAkJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0RTSTBdCT0geyBNVEtf RFNJLAkJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0RTSTFdCT0geyBNVEtfRFNJLAkJMSwg TlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXQk9IHsgTVRLX0RJU1BfR0FNTUEsCTAsIE5V TEwgfSwKKwlbRERQX0NPTVBPTkVOVF9PRF0JPSB7IE1US19ESVNQX09ELAkwLCBOVUxMIH0sCisJ W0REUF9DT01QT05FTlRfT1ZMMF0JPSB7IE1US19ESVNQX09WTCwJMCwgTlVMTCB9LAorCVtERFBf Q09NUE9ORU5UX09WTDFdCT0geyBNVEtfRElTUF9PVkwsCTEsIE5VTEwgfSwKKwlbRERQX0NPTVBP TkVOVF9QV00wXQk9IHsgTVRLX0RJU1BfUFdNLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRf UkRNQTBdCT0geyBNVEtfRElTUF9SRE1BLAkwLCAmZGRwX3JkbWEgfSwKKwlbRERQX0NPTVBPTkVO VF9SRE1BMV0JPSB7IE1US19ESVNQX1JETUEsCTEsICZkZHBfcmRtYSB9LAorCVtERFBfQ09NUE9O RU5UX1JETUEyXQk9IHsgTVRLX0RJU1BfUkRNQSwJMiwgJmRkcF9yZG1hIH0sCisJW0REUF9DT01Q T05FTlRfVUZPRV0JPSB7IE1US19ESVNQX1VGT0UsCTAsICZkZHBfdWZvZSB9LAorCVtERFBfQ09N UE9ORU5UX1dETUEwXQk9IHsgTVRLX0RJU1BfV0RNQSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9O RU5UX1dETUExXQk9IHsgTVRLX0RJU1BfV0RNQSwJMSwgTlVMTCB9LAorfTsKKworaW50IG10a19k ZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJZW51bSBtdGtfZGRw X2NvbXBfdHlwZSBjb21wX3R5cGUpCit7CisJaW50IGlkID0gb2ZfYWxpYXNfZ2V0X2lkKG5vZGUs IG10a19kZHBfY29tcF9zdGVtW2NvbXBfdHlwZV0pOworCWludCBpOworCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUobXRrX2RkcF9tYXRjaGVzKTsgaSsrKSB7CisJCWlmIChjb21wX3R5cGUg PT0gbXRrX2RkcF9tYXRjaGVzW2ldLnR5cGUgJiYKKwkJICAgIChpZCA8IDAgfHwgaWQgPT0gbXRr X2RkcF9tYXRjaGVzW2ldLmFsaWFzX2lkKSkKKwkJCXJldHVybiBpOworCX0KKworCXJldHVybiAt RUlOVkFMOworfQorCitpbnQgbXRrX2RkcF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv bXAsIGVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBt dGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKQoreworCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgdHlw ZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxhcmJfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpsYXJiX3BkZXY7CisKKwlpZiAoY29tcF9pZCA8IDAgfHwgY29tcF9pZCA+PSBERFBfQ09N UE9ORU5UX0lEX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21wLT5pZCA9IGNvbXBfaWQ7 CisJY29tcC0+ZnVuY3MgPSBmdW5jcyA/OiBtdGtfZGRwX21hdGNoZXNbY29tcF9pZF0uZnVuY3M7 CisKKwlpZiAoY29tcF9pZCA9PSBERFBfQ09NUE9ORU5UX0RQSTAgfHwKKwkgICAgY29tcF9pZCA9 PSBERFBfQ09NUE9ORU5UX0RTSTAgfHwKKwkgICAgY29tcF9pZCA9PSBERFBfQ09NUE9ORU5UX1BX TTApIHsKKwkJY29tcC0+cmVncyA9IE5VTEw7CisJCWNvbXAtPmNsayA9IE5VTEw7CisJCWNvbXAt PmlycSA9IDA7CisJCXJldHVybiAwOworCX0KKworCWNvbXAtPnJlZ3MgPSBvZl9pb21hcChub2Rl LCAwKTsKKwljb21wLT5pcnEgPSBvZl9pcnFfZ2V0KG5vZGUsIDApOworCWNvbXAtPmNsayA9IG9m X2Nsa19nZXQobm9kZSwgMCk7CisJaWYgKElTX0VSUihjb21wLT5jbGspKQorCQljb21wLT5jbGsg PSBOVUxMOworCisJdHlwZSA9IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS50eXBlOworCisJLyog T25seSBETUEgY2FwYWJsZSBjb21wb25lbnRzIG5lZWQgdGhlIExBUkIgcHJvcGVydHkgKi8KKwlj b21wLT5sYXJiX2RldiA9IE5VTEw7CisJaWYgKHR5cGUgIT0gTVRLX0RJU1BfT1ZMICYmCisJICAg IHR5cGUgIT0gTVRLX0RJU1BfUkRNQSAmJgorCSAgICB0eXBlICE9IE1US19ESVNQX1dETUEpCisJ CXJldHVybiAwOworCisJbGFyYl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCAibWVkaWF0 ZWssbGFyYiIsIDApOworCWlmICghbGFyYl9ub2RlKSB7CisJCWRldl9lcnIoZGV2LAorCQkJIk1p c3NpbmcgbWVkaWFkZWssbGFyYiBwaGFuZGxlIGluICVzIG5vZGVcbiIsCisJCQlub2RlLT5mdWxs X25hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsYXJiX3BkZXYgPSBvZl9maW5kX2Rl dmljZV9ieV9ub2RlKGxhcmJfbm9kZSk7CisJaWYgKCFsYXJiX3BkZXYpIHsKKwkJZGV2X3dhcm4o ZGV2LCAiV2FpdGluZyBmb3IgbGFyYiBkZXZpY2UgJXNcbiIsCisJCQkgbGFyYl9ub2RlLT5mdWxs X25hbWUpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwljb21wLT5sYXJiX2RldiA9 ICZsYXJiX3BkZXYtPmRldjsKKworCXJldHVybiAwOworfQorCitpbnQgbXRrX2RkcF9jb21wX3Jl Z2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp Cit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7 CisKKwlpZiAocHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdKQorCQlyZXR1cm4gLUVCVVNZOwor CisJcHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0gY29tcDsKKwlyZXR1cm4gMDsKK30KKwor dm9pZCBtdGtfZGRwX2NvbXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZh dGUgPSBkcm0tPmRldl9wcml2YXRlOworCisJcHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0g TlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rk cF9jb21wLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZjM2MDgKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCkBAIC0wLDAg KzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRl ZiBNVEtfRFJNX0REUF9DT01QX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBfQ09NUF9ICisKKyNpbmNs dWRlIDxsaW51eC9pby5oPgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9ub2RlOwor c3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlOworCitlbnVtIG10a19k ZHBfY29tcF90eXBlIHsKKwlNVEtfRElTUF9PVkwsCisJTVRLX0RJU1BfUkRNQSwKKwlNVEtfRElT UF9XRE1BLAorCU1US19ESVNQX0NPTE9SLAorCU1US19ESVNQX0FBTCwKKwlNVEtfRElTUF9HQU1N QSwKKwlNVEtfRElTUF9VRk9FLAorCU1US19EU0ksCisJTVRLX0RQSSwKKwlNVEtfRElTUF9QV00s CisJTVRLX0RJU1BfTVVURVgsCisJTVRLX0RJU1BfT0QsCisJTVRLX0REUF9DT01QX1RZUEVfTUFY LAorfTsKKworZW51bSBtdGtfZGRwX2NvbXBfaWQgeworCUREUF9DT01QT05FTlRfQUFMLAorCURE UF9DT01QT05FTlRfQ09MT1IwLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05F TlRfRFBJMCwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9EU0kxLAorCURE UF9DT01QT05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX09W TDAsCisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRfUFdNMCwKKwlERFBfQ09N UE9ORU5UX1BXTTEsCisJRERQX0NPTVBPTkVOVF9SRE1BMCwKKwlERFBfQ09NUE9ORU5UX1JETUEx LAorCUREUF9DT01QT05FTlRfUkRNQTIsCisJRERQX0NPTVBPTkVOVF9VRk9FLAorCUREUF9DT01Q T05FTlRfV0RNQTAsCisJRERQX0NPTVBPTkVOVF9XRE1BMSwKKwlERFBfQ09NUE9ORU5UX0lEX01B WCwKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXA7CisKK3N0cnVjdCBtdGtfZGRwX2NvbXBfZnVu Y3MgeworCXZvaWQgKCpjb25maWcpKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IHcs IHVuc2lnbmVkIGludCBoLAorCQkgICAgICAgdW5zaWduZWQgaW50IHZyZWZyZXNoKTsKKwl2b2lk ICgqc3RhcnQpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCXZvaWQgKCpzdG9wKShzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgqZW5hYmxlX3ZibGFuaykodm9pZCBfX2lv bWVtICpiYXNlKTsKKwl2b2lkICgqZGlzYWJsZV92YmxhbmspKHZvaWQgX19pb21lbSAqYmFzZSk7 CisJdm9pZCAoKmxheWVyX29uKSh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpZHgp OworCXZvaWQgKCpsYXllcl9vZmYpKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlk eCk7CisJdm9pZCAoKmxheWVyX2NvbmZpZykodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBp bnQgaWR4LAorCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit9OworCitz dHJ1Y3QgbXRrX2RkcF9jb21wIHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpy ZWdzOworCWludCBpcnE7CisJc3RydWN0IGRldmljZSAqbGFyYl9kZXY7CisJZW51bSBtdGtfZGRw X2NvbXBfaWQgaWQ7CisJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9 OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgs CisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVuY3Mg JiYgY29tcC0+ZnVuY3MtPmNvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmNvbmZpZyhjb21wLT5yZWdz LCB3LCBoLCB2cmVmcmVzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBf c3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYg Y29tcC0+ZnVuY3MtPnN0YXJ0KQorCQljb21wLT5mdW5jcy0+c3RhcnQoY29tcCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RvcCkKKwkJY29tcC0+ ZnVuY3MtPnN0b3AoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBf ZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5m dW5jcyAmJiBjb21wLT5mdW5jcy0+ZW5hYmxlX3ZibGFuaykKKwkJY29tcC0+ZnVuY3MtPmVuYWJs ZV92YmxhbmsoY29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2Nv bXBfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29t cC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmRpc2FibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+ ZGlzYWJsZV92YmxhbmsoY29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtf ZGRwX2NvbXBfbGF5ZXJfb24oc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJIHVuc2ln bmVkIGludCBpZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5sYXllcl9v bikKKwkJY29tcC0+ZnVuY3MtPmxheWVyX29uKGNvbXAtPnJlZ3MsIGlkeCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAg KmNvbXAsCisJCQkJCSAgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYg Y29tcC0+ZnVuY3MtPmxheWVyX29mZikKKwkJY29tcC0+ZnVuY3MtPmxheWVyX29mZihjb21wLT5y ZWdzLCBpZHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVyX2Nv bmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBp ZHgsCisJCQkJCSAgICAgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKGNv bXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5sYXllcl9jb25maWcpCisJCWNvbXAtPmZ1bmNzLT5s YXllcl9jb25maWcoY29tcC0+cmVncywgaWR4LCBzdGF0ZSk7Cit9CisKK2ludCBtdGtfZGRwX2Nv bXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCWVudW0gbXRrX2RkcF9jb21w X3R5cGUgY29tcF90eXBlKTsKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2RlLAorCQkgICAgICBzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLCBlbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkLAorCQkgICAgICBjb25z dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpmdW5jcyk7CitpbnQgbXRrX2RkcF9jb21wX3Jl Z2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp Owordm9pZCBtdGtfZGRwX2NvbXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBz dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKworI2VuZGlmIC8qIE1US19EUk1fRERQX0NPTVBf SCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5hMzRjNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKQEAgLTAsMCArMSw1NjIgQEAKKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBZVCBTSEVOIDx5dC5z aGVuQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNs dWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtaW9tbXUuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0u aD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Ny dGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2Nv bXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIK KyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJtZWRpYXRl ayIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIk1lZGlhdGVrIFNvQyBEUk0iCisjZGVmaW5lIERSSVZF Ul9EQVRFICIyMDE1MDUxMyIKKyNkZWZpbmUgRFJJVkVSX01BSk9SIDEKKyNkZWZpbmUgRFJJVkVS X01JTk9SIDAKKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19zY2hlZHVsZShzdHJ1Y3QgbXRrX2Ry bV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkK K3sKKwlwcml2YXRlLT5jb21taXQuc3RhdGUgPSBzdGF0ZTsKKwlzY2hlZHVsZV93b3JrKCZwcml2 YXRlLT5jb21taXQud29yayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfY29tcGxldGUo c3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsK KworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2Rpc2FibGVzKGRybSwgc3RhdGUp OworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZHJtLCBzdGF0ZSwgZmFsc2UpOwor CWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXMoZHJtLCBzdGF0ZSk7CisJ ZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRv bWljX2hlbHBlcl9jbGVhbnVwX3BsYW5lcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX3N0YXRl X2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX3dvcmsoc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBj b250YWluZXJfb2Yod29yaywKKwkJCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUsIGNvbW1pdC53b3Jr KTsKKworCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgcHJpdmF0ZS0+Y29tbWl0LnN0YXRl KTsKK30KKworc3RhdGljIGludCBtdGtfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtLAorCQkJICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgICAgIGJv b2wgYXN5bmMpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRybS0+ZGV2 X3ByaXZhdGU7CisJaW50IHJldDsKKworCXJldCA9IGRybV9hdG9taWNfaGVscGVyX3ByZXBhcmVf cGxhbmVzKGRybSwgc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9s b2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisJZmx1c2hfd29yaygmcHJpdmF0ZS0+Y29tbWl0 LndvcmspOworCisJZHJtX2F0b21pY19oZWxwZXJfc3dhcF9zdGF0ZShkcm0sIHN0YXRlKTsKKwor CWlmIChhc3luYykKKwkJbXRrX2F0b21pY19zY2hlZHVsZShwcml2YXRlLCBzdGF0ZSk7CisJZWxz ZQorCQltdGtfYXRvbWljX2NvbXBsZXRlKHByaXZhdGUsIHN0YXRlKTsKKworCW11dGV4X3VubG9j aygmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIG10a19kcm1fbW9kZV9jb25maWdfZnVuY3Mg PSB7CisJLmZiX2NyZWF0ZSA9IG10a19kcm1fbW9kZV9mYl9jcmVhdGUsCisJLmF0b21pY19jaGVj ayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0ID0gbXRrX2F0b21p Y19jb21taXQsCit9OworCitzdGF0aWMgY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgbXRrX2Rk cF9tYWluW10gPSB7CisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9DT01QT05FTlRfQ09MT1Iw LAorCUREUF9DT01QT05FTlRfQUFMLAorCUREUF9DT01QT05FTlRfT0QsCisJRERQX0NPTVBPTkVO VF9SRE1BMCwKKwlERFBfQ09NUE9ORU5UX1VGT0UsCisJRERQX0NPTVBPTkVOVF9EU0kwLAorCURE UF9DT01QT05FTlRfUFdNMCwKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIG10a19kZHBfY29tcF9p ZCBtdGtfZGRwX2V4dFtdID0geworCUREUF9DT01QT05FTlRfT1ZMMSwKKwlERFBfQ09NUE9ORU5U X0NPTE9SMSwKKwlERFBfQ09NUE9ORU5UX0dBTU1BLAorCUREUF9DT01QT05FTlRfUkRNQTEsCisJ RERQX0NPTVBPTkVOVF9EUEkwLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2ttc19pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0 ZSA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlp bnQgcmV0OworCisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocHJpdmF0ZS0+bXV0ZXhf bm9kZSk7CisJaWYgKCFwZGV2KSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJXYWl0aW5nIGZvciBk aXNwLW11dGV4IGRldmljZSAlc1xuIiwKKwkJCXByaXZhdGUtPm11dGV4X25vZGUtPmZ1bGxfbmFt ZSk7CisJCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCQlyZXR1cm4gLUVQUk9C RV9ERUZFUjsKKwl9CisJcHJpdmF0ZS0+bXV0ZXhfZGV2ID0gJnBkZXYtPmRldjsKKworCWRybV9t b2RlX2NvbmZpZ19pbml0KGRybSk7CisKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDY0 OworCWRybS0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IDY0OworCisJLyoKKwkgKiBzZXQgbWF4 IHdpZHRoIGFuZCBoZWlnaHQgYXMgZGVmYXVsdCB2YWx1ZSg0MDk2eDQwOTYpLgorCSAqIHRoaXMg dmFsdWUgd291bGQgYmUgdXNlZCB0byBjaGVjayBmcmFtZWJ1ZmZlciBzaXplIGxpbWl0YXRpb24K KwkgKiBhdCBkcm1fbW9kZV9hZGRmYigpLgorCSAqLworCWRybS0+bW9kZV9jb25maWcubWF4X3dp ZHRoID0gNDA5NjsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA0MDk2OworCWRybS0+ bW9kZV9jb25maWcuZnVuY3MgPSAmbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jczsKKworCXJldCA9 IGNvbXBvbmVudF9iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl9jb25maWdfY2xlYW51cDsKKworCS8qCisJICogV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIGZp eGVkIGRhdGEgc3RyZWFtcywgZWFjaCBzdGF0aWNhbGx5CisJICogYXNzaWduZWQgdG8gYSBjcnRj OgorCSAqIE9WTDAgLT4gQ09MT1IwIC0+IEFBTCAtPiBPRCAtPiBSRE1BMCAtPiBVRk9FIC0+IERT STAgLi4uCisJICovCisJcmV0ID0gbXRrX2RybV9jcnRjX2NyZWF0ZShkcm0sIG10a19kZHBfbWFp biwgQVJSQVlfU0laRShtdGtfZGRwX21haW4pKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJf Y29tcG9uZW50X3VuYmluZDsKKwkvKiAuLi4gYW5kIE9WTDEgLT4gQ09MT1IxIC0+IEdBTU1BIC0+ IFJETUExIC0+IERQSTAuICovCisJcmV0ID0gbXRrX2RybV9jcnRjX2NyZWF0ZShkcm0sIG10a19k ZHBfZXh0LCBBUlJBWV9TSVpFKG10a19kZHBfZXh0KSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8g ZXJyX2NvbXBvbmVudF91bmJpbmQ7CisKKwkvKgorCSAqIFdlIGRvbid0IHVzZSB0aGUgZHJtX2ly cV9pbnN0YWxsKCkgaGVscGVycyBwcm92aWRlZCBieSB0aGUgRFJNCisJICogY29yZSwgc28gd2Ug bmVlZCB0byBzZXQgdGhpcyBtYW51YWxseSBpbiBvcmRlciB0byBhbGxvdyB0aGUKKwkgKiBEUk1f SU9DVExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisJICovCisJZHJtLT5pcnFf ZW5hYmxlZCA9IHRydWU7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgTUFYX0NSVEMpOwor CWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCisJZHJtX2ttc19o ZWxwZXJfcG9sbF9pbml0KGRybSk7CisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwly ZXR1cm4gMDsKKworZXJyX2NvbXBvbmVudF91bmJpbmQ6CisJY29tcG9uZW50X3VuYmluZF9hbGwo ZHJtLT5kZXYsIGRybSk7CitlcnJfY29uZmlnX2NsZWFudXA6CisJZHJtX21vZGVfY29uZmlnX2Ns ZWFudXAoZHJtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fa21z X2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9rbXNfaGVscGVyX3BvbGxf ZmluaShkcm0pOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7CisJY29tcG9uZW50X3VuYmlu ZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKK30K Kworc3RhdGljIGludCBtdGtfZHJtX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQorewor CW10a19kcm1fa21zX2RlaW5pdChkcm0pOworCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qg bXRrX2RybV9nZW1fdm1fb3BzID0geworCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLAorCS5jbG9z ZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyBtdGtfZHJtX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4g PSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9 IGRybV9pb2N0bCwKKwkubW1hcCA9IG10a19kcm1fZ2VtX21tYXAsCisJLnBvbGwgPSBkcm1fcG9s bCwKKwkucmVhZCA9IGRybV9yZWFkLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lv Y3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBkcm1f ZHJpdmVyIG10a19kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9E RVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUgfAorCQkJICAgRFJJVkVSX0FUT01JQywK KwkudW5sb2FkID0gbXRrX2RybV91bmxvYWQsCisJLnNldF9idXNpZCA9IGRybV9wbGF0Zm9ybV9z ZXRfYnVzaWQsCisKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19jb3VudCwKKwku ZW5hYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3Zi bGFuayA9IG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuaywKKworCS5nZW1fZnJlZV9vYmplY3Qg PSBtdGtfZHJtX2dlbV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZtdGtfZHJtX2dlbV92 bV9vcHMsCisJLmR1bWJfY3JlYXRlID0gbXRrX2RybV9nZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJf bWFwX29mZnNldCA9IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9kZXN0cm95 ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dl bV9wcmltZV9oYW5kbGVfdG9fZmQsCisJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJp bWVfZmRfdG9faGFuZGxlLAorCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBv cnQsCisJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3By aW1lX2dldF9zZ190YWJsZSA9IG10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJp bWVfbW1hcCA9IG10a19kcm1fZ2VtX21tYXBfYnVmLAorCS5mb3BzID0gJm10a19kcm1fZm9wcywK KworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmRlc2MgPSBEUklWRVJfREVTQywKKwkuZGF0ZSA9 IERSSVZFUl9EQVRFLAorCS5tYWpvciA9IERSSVZFUl9NQUpPUiwKKwkubWlub3IgPSBEUklWRVJf TUlOT1IsCit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfb2Yoc3RydWN0IGRldmljZSAqZGV2LCB2 b2lkICpkYXRhKQoreworCXJldHVybiBkZXYtPm9mX25vZGUgPT0gZGF0YTsKK30KKworc3RhdGlj IGludCBtdGtfZHJtX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJt X3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtOworCWludCByZXQ7CisKKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZtdGtfZHJtX2Ry aXZlciwgZGV2KTsKKwlpZiAoIWRybSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm1fZGV2X3Nl dF91bmlxdWUoZHJtLCBkZXZfbmFtZShkZXYpKTsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIo ZHJtLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZTsKKworCWRybS0+ZGV2X3By aXZhdGUgPSBwcml2YXRlOworCXByaXZhdGUtPmRybSA9IGRybTsKKworCXJldCA9IG10a19kcm1f a21zX2luaXQoZHJtKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfdW5yZWdpc3RlcjsKKwor CXJldHVybiAwOworCitlcnJfdW5yZWdpc3RlcjoKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsK K2Vycl9mcmVlOgorCWRybV9kZXZfdW5yZWYoZHJtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdm9pZCBtdGtfZHJtX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10 a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZHJtX3B1 dF9kZXYocHJpdmF0ZS0+ZHJtKTsKKwlwcml2YXRlLT5kcm0gPSBOVUxMOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJfb3BzIG10a19kcm1fb3BzID0geworCS5iaW5k CQk9IG10a19kcm1fYmluZCwKKwkudW5iaW5kCQk9IG10a19kcm1fdW5iaW5kLAorfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2RkcF9jb21wX2R0X2lkc1tdID0gewor CXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atb3ZsIiwgICAuZGF0YSA9ICh2 b2lkICopTVRLX0RJU1BfT1ZMIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt ZGlzcC1yZG1hIiwgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9SRE1BIH0sCisJeyAuY29tcGF0 aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC13ZG1hIiwgIC5kYXRhID0gKHZvaWQgKilNVEtf RElTUF9XRE1BIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1jb2xv ciIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9DT0xPUiB9LAorCXsgLmNvbXBhdGlibGUgPSAi bWVkaWF0ZWssbXQ4MTczLWRpc3AtYWFsIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfQUFM fSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWdhbW1hIiwgLmRhdGEg PSAodm9pZCAqKU1US19ESVNQX0dBTU1BLCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWss bXQ4MTczLWRpc3AtdWZvZSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfVUZPRSB9LAorCXsg LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRzaSIsICAgICAgICAuZGF0YSA9ICh2b2lk ICopTVRLX0RTSSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRwaSIsICAg ICAgICAuZGF0YSA9ICh2b2lkICopTVRLX0RQSSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0 ZWssbXQ4MTczLWRpc3AtbXV0ZXgiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfTVVURVggfSwK Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXB3bSIsICAgLmRhdGEgPSAo dm9pZCAqKU1US19ESVNQX1BXTSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTcz LWRpc3Atb2QiLCAgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfT0QgfSwKKwl7IH0KK307CisK K3N0YXRpYyBpbnQgbXRrX2RybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor eworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kcm1fcHJp dmF0ZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5vZGU7CisJc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2ggPSBOVUxMOworCWludCBy ZXQ7CisJaW50IGk7CisKKwlwcml2YXRlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2 YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CW11dGV4X2luaXQoJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlJTklUX1dPUksoJnByaXZhdGUt PmNvbW1pdC53b3JrLCBtdGtfYXRvbWljX3dvcmspOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlwcml2YXRlLT5jb25maWdfcmVncyA9 IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihwcml2YXRlLT5j b25maWdfcmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihwcml2YXRlLT5jb25maWdfcmVncyk7CisJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgbW1zeXMtY29uZmlnIHJlc291cmNlOiAl ZFxuIiwKKwkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogSXRlcmF0ZSBvdmVyIHNp YmxpbmcgRElTUCBmdW5jdGlvbiBibG9ja3MgKi8KKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGRl di0+b2Zfbm9kZS0+cGFyZW50LCBub2RlKSB7CisJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg Km9mX2lkOworCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZTsKKwkJaW50IGNvbXBf aWQ7CisKKwkJb2ZfaWQgPSBvZl9tYXRjaF9ub2RlKG10a19kZHBfY29tcF9kdF9pZHMsIG5vZGUp OworCQlpZiAoIW9mX2lkKQorCQkJY29udGludWU7CisKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZh aWxhYmxlKG5vZGUpKSB7CisJCQlkZXZfZGJnKGRldiwgIlNraXBwaW5nIGRpc2FibGVkIGNvbXBv bmVudCAlc1xuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUpOworCQkJY29udGludWU7CisJCX0KKwor CQljb21wX3R5cGUgPSAoZW51bSBtdGtfZGRwX2NvbXBfdHlwZSlvZl9pZC0+ZGF0YTsKKworCQlp ZiAoY29tcF90eXBlID09IE1US19ESVNQX01VVEVYKSB7CisJCQlwcml2YXRlLT5tdXRleF9ub2Rl ID0gb2Zfbm9kZV9nZXQobm9kZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBfaWQgPSBt dGtfZGRwX2NvbXBfZ2V0X2lkKG5vZGUsIGNvbXBfdHlwZSk7CisJCWlmIChjb21wX2lkIDwgMCkg eworCQkJZGV2X3dhcm4oZGV2LCAiU2tpcHBpbmcgdW5rbm93biBjb21wb25lbnQgJXNcbiIsCisJ CQkJIG5vZGUtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXByaXZhdGUtPmNv bXBfbm9kZVtjb21wX2lkXSA9IG9mX25vZGVfZ2V0KG5vZGUpOworCisJCS8qCisJCSAqIEN1cnJl bnRseSBvbmx5IHRoZSBPVkwsIERTSSwgYW5kIERQSSBibG9ja3MgaGF2ZSBzZXBhcmF0ZQorCQkg KiBjb21wb25lbnQgcGxhdGZvcm0gZHJpdmVycyBhbmQgaW5pdGlhbGl6ZSB0aGVpciBvd24gRERQ CisJCSAqIGNvbXBvbmVudCBzdHJ1Y3R1cmUuIFRoZSBvdGhlcnMgYXJlIGluaXRpYWxpemVkIGhl cmUuCisJCSAqLworCQlpZiAoY29tcF90eXBlID09IE1US19ESVNQX09WTCB8fAorCQkgICAgY29t cF90eXBlID09IE1US19EU0kgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRFBJKSB7CisJCQlk ZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1hdGNoIGZvciAlc1xuIiwKKwkJCQkgbm9k ZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBh cmVfb2YsIG5vZGUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcDsK KworCQkJY29tcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY29tcCksIEdGUF9LRVJORUwp OworCQkJaWYgKCFjb21wKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIGVycjsKKwkJ CX0KKworCQkJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBub2RlLCBjb21wLCBjb21wX2lk LCBOVUxMKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnI7CisKKwkJCXByaXZhdGUtPmRkcF9j b21wW2NvbXBfaWRdID0gY29tcDsKKwkJfQorCX0KKworCWlmICghcHJpdmF0ZS0+bXV0ZXhfbm9k ZSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGRpc3AtbXV0ZXggbm9kZVxuIik7 CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxl KGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2YXRlKTsKKworCXJldCA9 IGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goZGV2LCAmbXRrX2RybV9vcHMsIG1hdGNo KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworCitlcnI6CisJb2Zfbm9k ZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJZm9yIChpID0gMDsgaSA8IEREUF9DT01QT05F TlRfSURfTUFYOyBpKyspCisJCW9mX25vZGVfcHV0KHByaXZhdGUtPmNvbXBfbm9kZVtpXSk7CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaTsKKworCWNvbXBvbmVudF9tYXN0ZXJf ZGVsKCZwZGV2LT5kZXYsICZtdGtfZHJtX29wcyk7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2 LT5kZXYpOworCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCWZvciAoaSA9IDA7 IGkgPCBERFBfQ09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlvZl9ub2RlX3B1dChwcml2YXRlLT5j b21wX25vZGVbaV0pOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAK K3N0YXRpYyBpbnQgbXRrX2RybV9zeXNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJ c3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm47CisKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoZHJtKTsKKworCWRy bV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCAmZHJt LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpbnQgb2xkX2RwbXMgPSBj b25uLT5kcG1zOworCisJCWlmIChjb25uLT5mdW5jcy0+ZHBtcykKKwkJCWNvbm4tPmZ1bmNzLT5k cG1zKGNvbm4sIERSTV9NT0RFX0RQTVNfT0ZGKTsKKworCQkvKiBTZXQgdGhlIG9sZCBtb2RlIGJh Y2sgdG8gdGhlIGNvbm5lY3RvciBmb3IgcmVzdW1lICovCisJCWNvbm4tPmRwbXMgPSBvbGRfZHBt czsKKwl9CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkcm0pOworCisJRFJNX0RFQlVHX0RSSVZF UigibXRrX2RybV9zeXNfc3VzcGVuZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2RybV9zeXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Ry bV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsK KworCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25u LCAmZHJtLT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpbnQgZGVzaXJl ZF9tb2RlID0gY29ubi0+ZHBtczsKKworCQkvKgorCQkgKiBhdCBzdXNwZW5kIHRpbWUsIHdlIHNh dmUgZHBtcyB0byBjb25uZWN0b3ItPmRwbXMsCisJCSAqIHJlc3RvcmUgdGhlIG9sZF9kcG1zLCBh bmQgYXQgY3VycmVudCB0aW1lLCB0aGUgY29ubmVjdG9yCisJCSAqIGRwbXMgc3RhdHVzIG11c3Qg YmUgRFJNX01PREVfRFBNU19PRkYuCisJCSAqLworCQljb25uLT5kcG1zID0gRFJNX01PREVfRFBN U19PRkY7CisKKwkJLyoKKwkJICogSWYgdGhlIGNvbm5lY3RvciBoYXMgYmVlbiBkaXNjb25uZWN0 ZWQgZHVyaW5nIHN1c3BlbmQsCisJCSAqIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgZW5jb2RlciBh bmQgbGVhdmUgaXQgb2ZmLiBXZSdsbCBub3RpZnkKKwkJICogdXNlcnNwYWNlIGF0IHRoZSBlbmQu CisJCSAqLworCQlpZiAoY29ubi0+ZnVuY3MtPmRwbXMpCisJCQljb25uLT5mdW5jcy0+ZHBtcyhj b25uLCBkZXNpcmVkX21vZGUpOworCX0KKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7CisK Kwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOworCisJRFJNX0RFQlVHX0RSSVZFUigi bXRrX2RybV9zeXNfcmVzdW1lXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIFNJTVBMRV9E RVZfUE1fT1BTKG10a19kcm1fcG1fb3BzLCBtdGtfZHJtX3N5c19zdXNwZW5kLAorCQkJIG10a19k cm1fc3lzX3Jlc3VtZSk7CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbXRrX2RybV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3 My1tbXN5cyIsIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt dGtfZHJtX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJPSBtdGtfZHJtX3Byb2JlLAorCS5y ZW1vdmUJPSBtdGtfZHJtX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtZWRpYXRl ay1kcm0iLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX29mX2lkcywKKyNpZmRlZiBDT05G SUdfUE1fU0xFRVAKKwkJLnBtICAgICA9ICZtdGtfZHJtX3BtX29wcywKKyNlbmRpZgorCX0sCit9 OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19kcm1fZHJpdmVy c1tdID0geworCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKKwkmbXRrX2Rpc3Bfb3ZsX2RyaXZl ciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQoreworCWludCBy ZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJtX2RyaXZl cnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10a19kcm1fZHJp dmVyc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3Rl ciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10a19kcm1fZHJpdmVyc1tpXS0+ZHJpdmVy Lm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6 CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJt X2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG10 a19kcm1fZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0laRShtdGtf ZHJtX2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lz dGVyKG10a19kcm1fZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19kcm1faW5pdCk7 Cittb2R1bGVfZXhpdChtdGtfZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJZVCBTSEVOIDx5 dC5zaGVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgU29D IERSTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZGY0MjFjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2Rydi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVk aWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRFJWX0gKKyNkZWZpbmUgTVRLX0RSTV9EUlZfSAor CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisK KyNkZWZpbmUgTUFYX0NSVEMJMgorI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKKworc3RydWN0IGRl dmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1f ZGV2aWNlOworc3RydWN0IGRybV9mYl9oZWxwZXI7CitzdHJ1Y3QgZHJtX3Byb3BlcnR5Oworc3Ry dWN0IHJlZ21hcDsKKworc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRybTsKKworCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y1tNQVhfQ1JUQ107CisJc3RydWN0IGRy bV9wcm9wZXJ0eSAqcGxhbmVfenBvc19wcm9wZXJ0eTsKKwl1bnNpZ25lZCBpbnQgbnVtX3BpcGVz OworCisJc3RydWN0IGRldmljZV9ub2RlICptdXRleF9ub2RlOworCXN0cnVjdCBkZXZpY2UgKm11 dGV4X2RldjsKKwl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOworCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqY29tcF9ub2RlW0REUF9DT01QT05FTlRfSURfTUFYXTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21w ICpkZHBfY29tcFtERFBfQ09NUE9ORU5UX0lEX01BWF07CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCQlz dHJ1Y3QgbXV0ZXggbG9jazsKKwl9IGNvbW1pdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0RSVl9I ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5iMmFkYTgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHly aWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1 ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgor I2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisvKgor ICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBAZmI6IGRybSBm cmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2VtIG9iamVjdHMuCisg Ki8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyCWJhc2U7CisJ LyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8KKwlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19mYih4KSBjb250YWlu ZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBkcm1fZ2VtX29iamVj dCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0 cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJcmV0dXJuIG10a19m Yi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUoc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9m YiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2VtX2hhbmRsZV9jcmVh dGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lk IG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1 Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRybV9mcmFtZWJ1ZmZl cl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG10 a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0geworCS5jcmVhdGVf aGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95ID0gbXRrX2RybV9m Yl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZHJtX2ZyYW1l YnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHN0cnVjdCBkcm1f bW9kZV9mYl9jbWQyICptb2RlLAorCQkJCQkJICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmop Cit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlpbnQgcmV0OworCisJaWYgKGRybV9m b3JtYXRfbnVtX3BsYW5lcyhtb2RlLT5waXhlbF9mb3JtYXQpICE9IDEpCisJCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOworCisJbXRrX2ZiID0ga3phbGxvYyhzaXplb2YoKm10a19mYiksIEdGUF9L RVJORUwpOworCWlmICghbXRrX2ZiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRy bV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmbXRrX2ZiLT5iYXNlLCBtb2RlKTsKKworCW10 a19mYi0+Z2VtX29iaiA9IG9iajsKKworCXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwg Jm10a19mYi0+YmFzZSwgJm10a19kcm1fZmJfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlclxuIik7CisJCWtmcmVlKG10a19m Yik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG10a19mYjsKK30KKwor c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCQkg ICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9m YiAqbXRrX2ZiOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOworCXVuc2lnbmVkIGludCB3 aWR0aCA9IGNtZC0+d2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodCA9IGNtZC0+aGVpZ2h0Owor CXVuc2lnbmVkIGludCBzaXplLCBicHA7CisJaW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251 bV9wbGFuZXMoY21kLT5waXhlbF9mb3JtYXQpICE9IDEpCisJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOworCisJZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgY21kLT5oYW5k bGVzWzBdKTsKKwlpZiAoIWdlbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwlicHAg PSBkcm1fZm9ybWF0X3BsYW5lX2NwcChjbWQtPnBpeGVsX2Zvcm1hdCwgMCk7CisJc2l6ZSA9ICho ZWlnaHQgLSAxKSAqIGNtZC0+cGl0Y2hlc1swXSArIHdpZHRoICogYnBwOworCXNpemUgKz0gY21k LT5vZmZzZXRzWzBdOworCisJaWYgKGdlbS0+c2l6ZSA8IHNpemUpIHsKKwkJcmV0ID0gLUVJTlZB TDsKKwkJZ290byB1bnJlZmVyZW5jZTsKKwl9CisKKwltdGtfZmIgPSBtdGtfZHJtX2ZyYW1lYnVm ZmVyX2luaXQoZGV2LCBjbWQsIGdlbSk7CisJaWYgKElTX0VSUihtdGtfZmIpKSB7CisJCXJldCA9 IFBUUl9FUlIobXRrX2ZiKTsKKwkJZ290byB1bnJlZmVyZW5jZTsKKwl9CisKKwlyZXR1cm4gJm10 a19mYi0+YmFzZTsKKwordW5yZWZlcmVuY2U6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf dW5sb2NrZWQoZ2VtKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Ez NzhjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2ZiLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRl ayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICovCisKKyNpZm5kZWYgTVRLX0RSTV9GQl9ICisjZGVmaW5lIE1US19EUk1fRkJfSAorCisjZGVm aW5lIE1BWF9GQl9PQkoJMworCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm10a19mYl9nZXRfZ2Vt X29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CitzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICptdGtfZHJtX21vZGVfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAg ICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCisJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX21vZGVf ZmJfY21kMiAqY21kKTsKKwordm9pZCBtdGtfZHJtX21vZGVfb3V0cHV0X3BvbGxfY2hhbmdlZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBtdGtfZmJkZXZfY3JlYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOwordm9pZCBtdGtfZmJkZXZfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKKworI2VuZGlmIC8qIE1US19EUk1fRkJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9nZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTVlYWI3 Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2Vt LmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsg SW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq LworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorCisj aW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2dlbV9vYmog Km10a19kcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCXVuc2lnbmVk IGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtX29iajsKKwlp bnQgcmV0OworCisJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisKKwltdGtfZ2Vt X29iaiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtfZ2VtX29iaiksIEdGUF9LRVJORUwpOworCWlmICgh bXRrX2dlbV9vYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZHJtX2dl bV9vYmplY3RfaW5pdChkZXYsICZtdGtfZ2VtX29iai0+YmFzZSwgc2l6ZSk7CisJaWYgKHJldCA8 IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBnZW0gb2JqZWN0XG4iKTsK KwkJa2ZyZWUobXRrX2dlbV9vYmopOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJl dHVybiBtdGtfZ2VtX29iajsKK30KKworc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9n ZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcg c2l6ZSwgYm9vbCBhbGxvY19rbWFwKQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19n ZW07CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCW10a19nZW0g PSBtdGtfZHJtX2dlbV9pbml0KGRldiwgc2l6ZSk7CisJaWYgKElTX0VSUihtdGtfZ2VtKSkKKwkJ cmV0dXJuIEVSUl9DQVNUKG10a19nZW0pOworCisJb2JqID0gJm10a19nZW0tPmJhc2U7CisKKwlp bml0X2RtYV9hdHRycygmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKwlkbWFfc2V0X2F0dHIoRE1BX0FU VFJfV1JJVEVfQ09NQklORSwgJm10a19nZW0tPmRtYV9hdHRycyk7CisKKwlpZiAoIWFsbG9jX2tt YXApCisJCWRtYV9zZXRfYXR0cihETUFfQVRUUl9OT19LRVJORUxfTUFQUElORywgJm10a19nZW0t PmRtYV9hdHRycyk7CisKKwltdGtfZ2VtLT5jb29raWUgPSBkbWFfYWxsb2NfYXR0cnMoZGV2LT5k ZXYsIG9iai0+c2l6ZSwKKwkJCQkoZG1hX2FkZHJfdCAqKSZtdGtfZ2VtLT5kbWFfYWRkciwgR0ZQ X0tFUk5FTCwKKwkJCQkmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKwlpZiAoIW10a19nZW0tPmNvb2tp ZSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSAlenggYnl0ZSBkbWEgYnVmZmVy Iiwgb2JqLT5zaXplKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZ2VtX2ZyZWU7CisJ fQorCisJaWYgKGFsbG9jX2ttYXApCisJCW10a19nZW0tPmt2YWRkciA9IG10a19nZW0tPmNvb2tp ZTsKKworCURSTV9ERUJVR19EUklWRVIoImNvb2tpZSA9ICVwIGRtYV9hZGRyID0gJWxseFxuIiwK KwkJCSBtdGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRyKTsKKworCXJldHVybiBtdGtf Z2VtOworCitlcnJfZ2VtX2ZyZWU6CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworCWtm cmVlKG10a19nZW0pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3ZvaWQgbXRrX2RybV9n ZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10 a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisKKwlkbWFfZnJl ZV9hdHRycyhvYmotPmRldi0+ZGV2LCBvYmotPnNpemUsIG10a19nZW0tPmNvb2tpZSwKKwkJICAg ICAgIG10a19nZW0tPmRtYV9hZGRyLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKworCS8qIHJlbGVh c2UgZmlsZSBwb2ludGVyIHRvIGdlbSBvYmplY3QuICovCisJZHJtX2dlbV9vYmplY3RfcmVsZWFz ZShvYmopOworCisJa2ZyZWUobXRrX2dlbSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9kdW1iX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCit7CisJc3RydWN0IG10 a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlpbnQgcmV0OworCisJYXJncy0+cGl0Y2ggPSBhcmdz LT53aWR0aCAqIERJVl9ST1VORF9VUChhcmdzLT5icHAsIDgpOworCWFyZ3MtPnNpemUgPSBhcmdz LT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKKworCW10a19nZW0gPSBtdGtfZHJtX2dlbV9jcmVhdGUo ZGV2LCBhcmdzLT5zaXplLCBmYWxzZSk7CisJaWYgKElTX0VSUihtdGtfZ2VtKSkKKwkJcmV0dXJu IFBUUl9FUlIobXRrX2dlbSk7CisKKwkvKgorCSAqIGFsbG9jYXRlIGEgaWQgb2YgaWRyIHRhYmxl IHdoZXJlIHRoZSBvYmogaXMgcmVnaXN0ZXJlZAorCSAqIGFuZCBoYW5kbGUgaGFzIHRoZSBpZCB3 aGF0IHVzZXIgY2FuIHNlZS4KKwkgKi8KKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmls ZV9wcml2LCAmbXRrX2dlbS0+YmFzZSwgJmFyZ3MtPmhhbmRsZSk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfaGFuZGxlX2NyZWF0ZTsKKworCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUg LSBoYW5kbGUgaG9sZHMgaXQgbm93LiAqLworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3Vu bG9ja2VkKCZtdGtfZ2VtLT5iYXNlKTsKKworCXJldHVybiAwOworCitlcnJfaGFuZGxlX2NyZWF0 ZToKKwltdGtfZHJtX2dlbV9mcmVlX29iamVjdCgmbXRrX2dlbS0+YmFzZSk7CisJcmV0dXJuIHJl dDsKK30KKworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUs CisJCQkJdWludDY0X3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsK KwlpbnQgcmV0OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2 LCBoYW5kbGUpOworCWlmICghb2JqKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGxvb2t1cCBn ZW0gb2JqZWN0LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGRybV9nZW1f Y3JlYXRlX21tYXBfb2Zmc2V0KG9iaik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkqb2Zm c2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZvYmotPnZtYV9ub2RlKTsKKwlEUk1fREVC VUdfS01TKCJvZmZzZXQgPSAweCVsbHhcbiIsICpvZmZzZXQpOworCitvdXQ6CisJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IG10a19kcm1fZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LAorCQkJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorCit7CisJaW50IHJldDsKKwlz dHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gb2JqLT5kZXY7CisKKwkvKgorCSAqIGRtYV9hbGxvY19h dHRycygpIGFsbG9jYXRlZCBhIHN0cnVjdCBwYWdlIHRhYmxlIGZvciBya19vYmosIHNvIGNsZWFy CisJICogVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcF9vYmooKS9k cm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJdm1h LT52bV9wZ29mZiA9IDA7CisKKwlyZXQgPSBkbWFfbW1hcF9hdHRycyhkcm0tPmRldiwgdm1hLCBt dGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRyLAorCQkJICAgICBvYmotPnNpemUsICZt dGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsK KworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJl dDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChv YmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i ajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0 dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFsbG9j YXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhlIHRh YmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQgYnkK KyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkg YWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVjdCBz Z190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1f b2JqKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG9iai0+ZGV2OworCXN0cnVjdCBz Z190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3QgPSBremFsbG9jKHNpemVvZigqc2d0KSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ cmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKGRybS0+ZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tp ZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwKKwkJCQkgICAgJm10a19n ZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxv Y2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOworCQlyZXR1cm4gRVJSX1BUUihy ZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2dlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZGVlYjMKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uaApAQCAt MCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lm bmRlZiBfTVRLX0RSTV9HRU1fSF8KKyNkZWZpbmUgX01US19EUk1fR0VNX0hfCisKKyNpbmNsdWRl IDxkcm0vZHJtX2dlbS5oPgorCisvKgorICogbXRrIGRybSBidWZmZXIgc3RydWN0dXJlLgorICoK KyAqIEBiYXNlOiBhIGdlbSBvYmplY3QuCisgKgktIGEgbmV3IGhhbmRsZSB0byB0aGlzIGdlbSBv YmplY3Qgd291bGQgYmUgY3JlYXRlZAorICoJYnkgZHJtX2dlbV9oYW5kbGVfY3JlYXRlKCkuCisg KiBAY29va2llOiB0aGUgcmV0dXJuIHZhbHVlIG9mIGRtYV9hbGxvY19hdHRycygpLCBrZWVwIGl0 IGZvciBkbWFfZnJlZV9hdHRycygpCisgKiBAa3ZhZGRyOiBrZXJuZWwgdmlydHVhbCBhZGRyZXNz IG9mIGdlbSBidWZmZXIuCisgKiBAZG1hX2FkZHI6IGRtYSBhZGRyZXNzIG9mIGdlbSBidWZmZXIu CisgKiBAZG1hX2F0dHJzOiBkbWEgYXR0cmlidXRlcyBvZiBnZW0gYnVmZmVyLgorICoKKyAqIFAu Uy4gdGhpcyBvYmplY3Qgd291bGQgYmUgdHJhbnNmZXJyZWQgdG8gdXNlciBhcyBrbXNfYm8uaGFu ZGxlIHNvCisgKgl1c2VyIGNhbiBhY2Nlc3MgdGhlIGJ1ZmZlciB0aHJvdWdoIGttc19iby5oYW5k bGUuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogeworCXN0cnVjdCBkcm1fZ2VtX29iamVj dAliYXNlOworCXZvaWQJCQkqY29va2llOworCXZvaWQJCQkqa3ZhZGRyOworCWRtYV9hZGRyX3QJ CWRtYV9hZGRyOworCXN0cnVjdCBkbWFfYXR0cnMJZG1hX2F0dHJzOworfTsKKworI2RlZmluZSB0 b19tdGtfZ2VtX29iaih4KQljb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZ2VtX29iaiwg YmFzZSkKKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKmdlbSk7CitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9jcmVhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgbG9uZyBzaXplLCBib29sIGFsbG9jX2tt YXApOworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LAorCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1 bWIgKmFyZ3MpOworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdiwKKwkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgaGFuZGxl LCB1aW50NjRfdCAqb2Zmc2V0KTsKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpm aWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitpbnQgbXRrX2RybV9nZW1fbW1hcF9i dWYoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9wbGFuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjYy ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9w bGFuZS5jCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlh VGVrIEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUg PGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgor I2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5o PgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29t cC5oIgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9mYi5oIgor I2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCitz dGF0aWMgY29uc3QgdWludDMyX3QgZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfWFJHQjg4ODgs CisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKK307CisKK3N0YXRp YyB2b2lkIG10a19wbGFuZV9jb25maWcoc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwg Ym9vbCBlbmFibGUsCisJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwgc3RydWN0IGRybV9yZWN0ICpk ZXN0KQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19wbGFuZS0+YmFzZTsKKwlz dHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+ c3RhdGUpOworCXVuc2lnbmVkIGludCBwaXRjaCwgZm9ybWF0OworCWludCB4LCB5OworCisJaWYg KFdBUk5fT04oIXBsYW5lLT5zdGF0ZSB8fCAoZW5hYmxlICYmICFwbGFuZS0+c3RhdGUtPmZiKSkp CisJCXJldHVybjsKKworCWlmIChwbGFuZS0+c3RhdGUtPmZiKSB7CisJCXBpdGNoID0gcGxhbmUt PnN0YXRlLT5mYi0+cGl0Y2hlc1swXTsKKwkJZm9ybWF0ID0gcGxhbmUtPnN0YXRlLT5mYi0+cGl4 ZWxfZm9ybWF0OworCX0gZWxzZSB7CisJCXBpdGNoID0gMDsKKwkJZm9ybWF0ID0gRFJNX0ZPUk1B VF9SR0JBODg4ODsKKwl9CisKKwl4ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3g7CisJeSA9IHBsYW5l LT5zdGF0ZS0+Y3J0Y195OworCisJaWYgKHggPCAwKSB7CisJCWFkZHIgLT0geCAqIDQ7CisJCXgg PSAwOworCX0KKworCWlmICh5IDwgMCkgeworCQlhZGRyIC09IHkgKiBwaXRjaDsKKwkJeSA9IDA7 CisJfQorCisJc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZW5hYmxlOworCXN0YXRlLT5wZW5kaW5n LnBpdGNoID0gcGl0Y2g7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gZm9ybWF0OworCXN0YXRl LT5wZW5kaW5nLmFkZHIgPSBhZGRyOworCXN0YXRlLT5wZW5kaW5nLnggPSB4OworCXN0YXRlLT5w ZW5kaW5nLnkgPSB5OworCXN0YXRlLT5wZW5kaW5nLndpZHRoID0gZGVzdC0+eDIgLSBkZXN0LT54 MTsKKwlzdGF0ZS0+cGVuZGluZy5oZWlnaHQgPSBkZXN0LT55MiAtIGRlc3QtPnkxOworCXN0YXRl LT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX3Jlc2V0 KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0 YXRlOworCisJaWYgKHBsYW5lLT5zdGF0ZSAmJiBwbGFuZS0+c3RhdGUtPmZiKQorCQlkcm1fZnJh bWVidWZmZXJfdW5yZWZlcmVuY2UocGxhbmUtPnN0YXRlLT5mYik7CisKKwlrZnJlZShwbGFuZS0+ c3RhdGUpOworCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJ cGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNlOworCWlmICghc3RhdGUpCisJCXJldHVybjsKKwor CXBsYW5lLT5zdGF0ZS0+cGxhbmUgPSBwbGFuZTsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQgPSBE Uk1fRk9STUFUX1JHQjU2NTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm10 a19wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3Ry dWN0IG10a19wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5l LT5zdGF0ZSk7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6 YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVy biBOVUxMOworCisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxh bmUsICZzdGF0ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLnBsYW5lICE9IHBsYW5l KTsKKworCXN0YXRlLT5wZW5kaW5nID0gb2xkX3N0YXRlLT5wZW5kaW5nOworCisJcmV0dXJuICZz dGF0ZS0+YmFzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgbXRr X3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRh dGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3Bs YW5lLAorCS5kZXN0cm95ID0gZHJtX3BsYW5lX2NsZWFudXAsCisJLnJlc2V0ID0gbXRrX3BsYW5l X3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gbXRrX3BsYW5lX2R1cGxpY2F0ZV9z dGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9k ZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBtdGtfcGxhbmVfYXRvbWljX2NoZWNrKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh dGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0 IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wgdmlzaWJsZTsKKwlpbnQgcmV0Owor CXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+Y3J0Y194LAorCQkueTEg PSBzdGF0ZS0+Y3J0Y195LAorCQkueDIgPSBzdGF0ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNfdywK KwkJLnkyID0gc3RhdGUtPmNydGNfeSArIHN0YXRlLT5jcnRjX2gsCisJfTsKKwlzdHJ1Y3QgZHJt X3JlY3Qgc3JjID0geworCQkvKiAxNi4xNiBmaXhlZCBwb2ludCAqLworCQkueDEgPSBzdGF0ZS0+ c3JjX3gsCisJCS55MSA9IHN0YXRlLT5zcmNfeSwKKwkJLngyID0gc3RhdGUtPnNyY194ICsgc3Rh dGUtPnNyY193LAorCQkueTIgPSBzdGF0ZS0+c3JjX3kgKyBzdGF0ZS0+c3JjX2gsCisJfTsKKwlz dHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghZmIpCisJCXJldHVybiAwOwor CisJaWYgKCFtdGtfZmJfZ2V0X2dlbV9vYmooZmIpKSB7CisJCURSTV9ERUJVR19LTVMoImJ1ZmZl ciBpcyBudWxsXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCFzdGF0ZS0+Y3J0 YykKKwkJcmV0dXJuIDA7CisKKwljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0 ZShzdGF0ZS0+c3RhdGUsIHN0YXRlLT5jcnRjKTsKKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQor CQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKworCWNsaXAueDIgPSBjcnRjX3N0YXRlLT5t b2RlLmhkaXNwbGF5OworCWNsaXAueTIgPSBjcnRjX3N0YXRlLT5tb2RlLnZkaXNwbGF5OworCisJ cmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIHN0YXRlLT5jcnRjLCBm YiwKKwkJCQkJICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAgIERSTV9QTEFORV9IRUxQ RVJfTk9fU0NBTElORywKKwkJCQkJICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJ CQkJICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9hdG9taWNfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpv bGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxh bmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+ YmFzZS5jcnRjOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOworCXN0cnVjdCBtdGtfZHJt X3BsYW5lICptdGtfcGxhbmUgPSB0b19tdGtfcGxhbmUocGxhbmUpOworCXN0cnVjdCBkcm1fcmVj dCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+YmFzZS5jcnRjX3gsCisJCS55MSA9IHN0YXRlLT5i YXNlLmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmJhc2UuY3J0Y194ICsgc3RhdGUtPmJhc2UuY3J0 Y193LAorCQkueTIgPSBzdGF0ZS0+YmFzZS5jcnRjX3kgKyBzdGF0ZS0+YmFzZS5jcnRjX2gsCisJ fTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghY3J0YykKKwkJcmV0 dXJuOworCisJY2xpcC54MiA9IHN0YXRlLT5iYXNlLmNydGMtPnN0YXRlLT5tb2RlLmhkaXNwbGF5 OworCWNsaXAueTIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9kZS52ZGlzcGxheTsKKwlk cm1fcmVjdF9pbnRlcnNlY3QoJmRlc3QsICZjbGlwKTsKKworCWdlbSA9IG10a19mYl9nZXRfZ2Vt X29iaihzdGF0ZS0+YmFzZS5mYik7CisJaWYgKGdlbSkKKwkJbXRrX3BsYW5lX2NvbmZpZyhtdGtf cGxhbmUsIHRydWUsIHRvX210a19nZW1fb2JqKGdlbSktPmRtYV9hZGRyLAorCQkJCSAmZGVzdCk7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkK K3sKKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5l KTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBvbGRfc3RhdGUtPmNydGM7CisJc3RydWN0IGRy bV9yZWN0IGRlc3QgPSB7IDAsIH07CisKKwlpZiAoIWNydGMpCisJCXJldHVybjsKKworCW10a19w bGFuZV9jb25maWcobXRrX3BsYW5lLCBmYWxzZSwgMCwgJmRlc3QpOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyA9 IHsKKwkuYXRvbWljX2NoZWNrID0gbXRrX3BsYW5lX2F0b21pY19jaGVjaywKKwkuYXRvbWljX3Vw ZGF0ZSA9IG10a19wbGFuZV9hdG9taWNfdXBkYXRlLAorCS5hdG9taWNfZGlzYWJsZSA9IG10a19w bGFuZV9hdG9taWNfZGlzYWJsZSwKK307CisKK2ludCBtdGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLAorCQkgICB1bnNp Z25lZCBsb25nIHBvc3NpYmxlX2NydGNzLCBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUsCisJCSAg IHVuc2lnbmVkIGludCB6cG9zKQoreworCWludCBlcnI7CisKKwllcnIgPSBkcm1fdW5pdmVyc2Fs X3BsYW5lX2luaXQoZGV2LCAmbXRrX3BsYW5lLT5iYXNlLCBwb3NzaWJsZV9jcnRjcywKKwkJCSZt dGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsIEFSUkFZX1NJWkUoZm9ybWF0cyksIHR5cGUpOworCisJ aWYgKGVycikgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIHBsYW5lXG4iKTsK KwkJcmV0dXJuIGVycjsKKwl9CisKKwlkcm1fcGxhbmVfaGVscGVyX2FkZCgmbXRrX3BsYW5lLT5i YXNlLCAmbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisJbXRrX3BsYW5lLT5pZHggPSB6cG9zOwor CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTU3YWI3Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaApAQCAtMCwwICsx LDU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhv cjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTVRLX0RSTV9QTEFORV9IXwor I2RlZmluZSBfTVRLX0RSTV9QTEFORV9IXworCisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisK K3N0cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVuc2ln bmVkIGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7CisJ Ym9vbAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJdW5zaWduZWQgaW50CQkJYWRkcjsK Kwl1bnNpZ25lZCBpbnQJCQlwaXRjaDsKKwl1bnNpZ25lZCBpbnQJCQlmb3JtYXQ7CisJdW5zaWdu ZWQgaW50CQkJeDsKKwl1bnNpZ25lZCBpbnQJCQl5OworCXVuc2lnbmVkIGludAkJCXdpZHRoOwor CXVuc2lnbmVkIGludAkJCWhlaWdodDsKKwlib29sCQkJCWRpcnR5OworfTsKKworc3RydWN0IG10 a19wbGFuZV9zdGF0ZSB7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZQkJYmFzZTsKKwlzdHJ1Y3Qg bXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUJcGVuZGluZzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IG10a19kcm1fcGxhbmUgKnRvX210a19wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBsYW5lLCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSwgYmFz ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqCit0b19tdGtf cGxhbmVfc3RhdGUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIGNv bnRhaW5lcl9vZihzdGF0ZSwgc3RydWN0IG10a19wbGFuZV9zdGF0ZSwgYmFzZSk7Cit9CisKK2lu dCBtdGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbXRrX2RybV9w bGFuZSAqbXRrX3BsYW5lLAorCQkgICB1bnNpZ25lZCBsb25nIHBvc3NpYmxlX2NydGNzLCBlbnVt IGRybV9wbGFuZV90eXBlIHR5cGUsCisJCSAgIHVuc2lnbmVkIGludCB6cG9zKTsKKworI2VuZGlm Ci0tIAoyLjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK