From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: Re: [PATCH v14 2/8] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Tue, 26 Apr 2016 10:05:22 +0200 Message-ID: <1461657922.3599.27.camel@pengutronix.de> References: <1460387376-11799-1-git-send-email-p.zabel@pengutronix.de> <1460387376-11799-3-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: <1460387376-11799-3-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 , Emil Velikov , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , Pawel Moll , Ian Campbell , YT Shen , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Stephen Boyd , Tomasz Figa , kernel@pengutronix.de, Kumar Gala List-Id: devicetree@vger.kernel.org RnJvbSAyNDk4Mjk2MWE3NDA2YzljNmVkMTM5MzI5YzllZTEyNjNkZGM5MmMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgpEYXRlOiBNb24s IDQgSmFuIDIwMTYgMTg6MzY6MzQgKzAxMDAKU3ViamVjdDogW1BBVENIIHYxNC41IDIvOF0gZHJt L21lZGlhdGVrOiBBZGQgRFJNIERyaXZlciBmb3IgTWVkaWF0ZWsgU29DIE1UODE3My4KClRoaXMg cGF0Y2ggYWRkcyBhbiBpbml0aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMg RElTUApzdWJzeXN0ZW0uIEl0IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0 cmVhbXMgZnJvbSB0aGUKT1ZMMC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywg cmVzcGVjdGl2ZWx5LgoKU2lnbmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4K U2lnbmVkLW9mZi1ieTogWVQgU2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYt Ynk6IERhbmllbCBLdXJ0eiA8ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJp YmJ5IEhzaWVoIDxiaWJieS5oc2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBI dWFuZyA8bGl0dGxlY3ZyQGNocm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJl bCA8cC56YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjE0OgogLSBGaXhl ZCBtb2R1bGUgYnVpbGQKLS0tCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAg ICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAgICAgICB8 ICAxMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgIHwgIDEx ICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYyAgICAgfCAzMDIgKysr KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jICAg IHwgMjQwICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0 Yy5jICAgICB8IDU4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggICAgIHwgIDMyICsrCiBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kZHAuYyAgICAgIHwgMzUzICsrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaCAgICAgIHwgIDQxICsrCiBkcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jIHwgMjI1ICsrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIHwgMTUwICsrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jICAgICAgfCA1NjUgKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k cnYuaCAgICAgIHwgIDU3ICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIu YyAgICAgICB8IDE2NSArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZmIuaCAgICAgICB8ICAyMyArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2Vt LmMgICAgICB8IDI2OSArKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9nZW0uaCAgICAgIHwgIDU5ICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fcGxhbmUuYyAgICB8IDI0MCArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX3BsYW5lLmggICAgfCAgNTkgKysrCiAyMCBmaWxlcyBjaGFuZ2VkLCAzMzg4IGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv S2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlz cF9vdmwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZGlzcF9yZG1hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9jcnRjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9kZHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2RkcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29u ZmlnCmluZGV4IGYyYTc0ZDAuLjU0ODIwMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9L Y29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0yODEsMyArMjgxLDUgQEAg c291cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS92YzQvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9LY29u ZmlnIgorCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl CmluZGV4IDZlYjk0ZmMuLjAyYjFmM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTczLDYgKzczLDcgQEAgb2Jq LSQoQ09ORklHX0RSTV9NU00pICs9IG1zbS8KIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9IHRl Z3JhLwogb2JqLSQoQ09ORklHX0RSTV9TVEkpICs9IHN0aS8KIG9iai0kKENPTkZJR19EUk1fSU1Y KSArPSBpbXgvCitvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay8KIG9iai15 CQkJKz0gaTJjLwogb2JqLXkJCQkrPSBwYW5lbC8KIG9iai15CQkJKz0gYnJpZGdlLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFk ODkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcK QEAgLTAsMCArMSwxMiBAQAorY29uZmlnIERSTV9NRURJQVRFSworCXRyaXN0YXRlICJEUk0gU3Vw cG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIKKwlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gQVJD SF9NRURJQVRFSyB8fCAoQVJNICYmIENPTVBJTEVfVEVTVCkKKwlzZWxlY3QgRFJNX0tNU19IRUxQ RVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJc2VsZWN0IE1US19TTUkKKwloZWxwCisJICBDaG9vc2Ug dGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBNZWRpYXRlayBTb0NzLgorCSAgVGhlIG1vZHVsZSB3 aWxsIGJlIGNhbGxlZCBtZWRpYXRlay1kcm0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5l bCBtb2RlIHNldHRpbmcgYW5kCisJICBidWZmZXIgbWFuYWdlbWVudCB0byB1c2Vyc3BhY2UuCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZDRiZGU3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9N YWtlZmlsZQpAQCAtMCwwICsxLDExIEBACittZWRpYXRlay1kcm0teSA6PSBtdGtfZGlzcF9vdmwu byBcCisJCSAgbXRrX2Rpc3BfcmRtYS5vIFwKKwkJICBtdGtfZHJtX2NydGMubyBcCisJCSAgbXRr X2RybV9kZHAubyBcCisJCSAgbXRrX2RybV9kZHBfY29tcC5vIFwKKwkJICBtdGtfZHJtX2Rydi5v IFwKKwkJICBtdGtfZHJtX2ZiLm8gXAorCQkgIG10a19kcm1fZ2VtLm8gXAorCQkgIG10a19kcm1f cGxhbmUubworCitvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay1kcm0ubwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjhmNjI2NzFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogQ29w eXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5j bHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVk ZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIK KyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lO VEVOCQkJMHgwMDA0CisjZGVmaW5lIE9WTF9GTUVfQ1BMX0lOVAkJCQkJQklUKDEpCisjZGVmaW5l IERJU1BfUkVHX09WTF9JTlRTVEEJCQkweDAwMDgKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0VOCQkJ CTB4MDAwYworI2RlZmluZSBESVNQX1JFR19PVkxfUlNUCQkJMHgwMDE0CisjZGVmaW5lIERJU1Bf UkVHX09WTF9ST0lfU0laRQkJCTB4MDAyMAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX0JHQ0xS CQkJMHgwMDI4CisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfQ09OCQkJMHgwMDJjCisjZGVmaW5l IERJU1BfUkVHX09WTF9DT04obikJCQkoMHgwMDMwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElT UF9SRUdfT1ZMX1NSQ19TSVpFKG4pCQkoMHgwMDM4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElT UF9SRUdfT1ZMX09GRlNFVChuKQkJCSgweDAwM2MgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQ X1JFR19PVkxfUElUQ0gobikJCQkoMHgwMDQ0ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9S RUdfT1ZMX1JETUFfQ1RSTChuKQkJKDB4MDBjMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1Bf UkVHX09WTF9SRE1BX0dNQyhuKQkJKDB4MDBjOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1Bf UkVHX09WTF9BRERSKG4pCQkJKDB4MGY0MCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUJT1ZMX1JE TUFfTUVNX0dNQwkweDQwNDAyMDIwCisKKyNkZWZpbmUgT1ZMX0NPTl9CWVRFX1NXQVAJQklUKDI0 KQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I1NjUJKDAgPDwgMTIpCisjZGVmaW5lIE9WTF9D T05fQ0xSRk1UX1JHQjg4OAkoMSA8PCAxMikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCQTg4 ODgJKDIgPDwgMTIpCisjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4CSgzIDw8IDEyKQor I2RlZmluZQlPVkxfQ09OX0FFTgkJQklUKDgpCisjZGVmaW5lCU9WTF9DT05fQUxQSEEJCTB4ZmYK KworLyoqCisgKiBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsIC0gRElTUF9PVkwgZHJpdmVyIHN0cnVjdHVy ZQorICogQGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVtIGFuZCBoYXJk d2FyZSByZXNvdXJjZXMKKyAqIEBjcnRjIC0gYXNzb2NpYXRlZCBjcnRjIHRvIHJlcG9ydCB2Ymxh bmsgZXZlbnRzIHRvCisgKi8KK3N0cnVjdCBtdGtfZGlzcF9vdmwgeworCXN0cnVjdCBtdGtfZGRw X2NvbXAJCWRkcF9jb21wOworCXN0cnVjdCBkcm1fY3J0YwkJCSpjcnRjOworfTsKKworc3RhdGlj IGlycXJldHVybl90IG10a19kaXNwX292bF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZf aWQpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9pZDsKKwlzdHJ1Y3QgbXRr X2RkcF9jb21wICpvdmwgPSAmcHJpdi0+ZGRwX2NvbXA7CisKKwkvKiBDbGVhciBmcmFtZSBjb21w bGV0aW9uIGludGVycnVwdCAqLworCXdyaXRlbCgweDAsIG92bC0+cmVncyArIERJU1BfUkVHX09W TF9JTlRTVEEpOworCisJaWYgKCFwcml2LT5jcnRjKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlt dGtfY3J0Y19kZHBfaXJxKHByaXYtPmNydGMsIG92bCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wLAorCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtf ZGlzcF9vdmwgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwK KwkJCQkJCSBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gY3J0YzsKKwl3cml0ZWxfcmVsYXhl ZChPVkxfRk1FX0NQTF9JTlQsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQor CitzdGF0aWMgdm9pZCBtdGtfb3ZsX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAg KmNvbXApCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21w LCBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsLAorCQkJCQkJIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMg PSBOVUxMOworCXdyaXRlbF9yZWxheGVkKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9J TlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfc3RhcnQoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCkKK3sKKwl3cml0ZWxfcmVsYXhlZCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P VkxfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX3N0b3Aoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCkKK3sKKwl3cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P VkxfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJCSAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25l ZCBpbnQgdnJlZnJlc2gpCit7CisJaWYgKHcgIT0gMCAmJiBoICE9IDApCisJCXdyaXRlbF9yZWxh eGVkKGggPDwgMTYgfCB3LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JPSV9TSVpFKTsKKwl3 cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUk9JX0JHQ0xSKTsK KworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUlNUKTsKKwl3cml0ZWwo MHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JTVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10 a19vdmxfbGF5ZXJfb24oc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlk eCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJd3JpdGVsKDB4MSwgY29tcC0+cmVncyArIERJ U1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4KSk7CisJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIGNv bXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9HTUMoaWR4KSk7CisKKwlyZWcgPSByZWFkbChj b21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOworCXJlZyA9IHJlZyB8IEJJVChpZHgp OworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7Cit9CisK K3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs IHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRs KGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7CisJcmVnID0gcmVnICYgfkJJVChp ZHgpOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7CisK Kwl3cml0ZWwoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgpKTsK K30KKworc3RhdGljIHVuc2lnbmVkIGludCBvdmxfZm10X2NvbnZlcnQodW5zaWduZWQgaW50IGZt dCkKK3sKKwlzd2l0Y2ggKGZtdCkgeworCWRlZmF1bHQ6CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2 NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjU2NTsKKwljYXNlIERSTV9GT1JNQVRfQkdS NTY1OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCNTY1IHwgT1ZMX0NPTl9CWVRFX1NXQVA7 CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4 ODsKKwljYXNlIERSTV9GT1JNQVRfQkdSODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdC ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4OgorCWNh c2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4 OworCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6 CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9BUkdCODg4OCB8IE9WTF9DT05fQllURV9TV0FQOwor CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJ CXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0JBODg4ODsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4 ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRf UkdCQTg4ODggfCBPVkxfQ09OX0JZVEVfU1dBUDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19v dmxfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBp ZHgsCisJCQkJIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBtdGtf cGxhbmVfcGVuZGluZ19zdGF0ZSAqcGVuZGluZyA9ICZzdGF0ZS0+cGVuZGluZzsKKwl1bnNpZ25l ZCBpbnQgYWRkciA9IHBlbmRpbmctPmFkZHI7CisJdW5zaWduZWQgaW50IHBpdGNoID0gcGVuZGlu Zy0+cGl0Y2ggJiAweGZmZmY7CisJdW5zaWduZWQgaW50IGZtdCA9IHBlbmRpbmctPmZvcm1hdDsK Kwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gKHBlbmRpbmctPnkgPDwgMTYpIHwgcGVuZGluZy0+eDsK Kwl1bnNpZ25lZCBpbnQgc3JjX3NpemUgPSAocGVuZGluZy0+aGVpZ2h0IDw8IDE2KSB8IHBlbmRp bmctPndpZHRoOworCXVuc2lnbmVkIGludCBjb247CisKKwlpZiAoIXBlbmRpbmctPmVuYWJsZSkK KwkJbXRrX292bF9sYXllcl9vZmYoY29tcCwgaWR4KTsKKworCWNvbiA9IG92bF9mbXRfY29udmVy dChmbXQpOworCWlmIChpZHggIT0gMCkKKwkJY29uIHw9IE9WTF9DT05fQUVOIHwgT1ZMX0NPTl9B TFBIQTsKKworCXdyaXRlbF9yZWxheGVkKGNvbiwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9D T04oaWR4KSk7CisJd3JpdGVsX3JlbGF4ZWQocGl0Y2gsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P VkxfUElUQ0goaWR4KSk7CisJd3JpdGVsX3JlbGF4ZWQoc3JjX3NpemUsIGNvbXAtPnJlZ3MgKyBE SVNQX1JFR19PVkxfU1JDX1NJWkUoaWR4KSk7CisJd3JpdGVsX3JlbGF4ZWQob2Zmc2V0LCBjb21w LT5yZWdzICsgRElTUF9SRUdfT1ZMX09GRlNFVChpZHgpKTsKKwl3cml0ZWxfcmVsYXhlZChhZGRy LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0FERFIoaWR4KSk7CisKKwlpZiAocGVuZGluZy0+ ZW5hYmxlKQorCQltdGtfb3ZsX2xheWVyX29uKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX292bF9mdW5jcyA9IHsKKwkuY29u ZmlnID0gbXRrX292bF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX292bF9zdGFydCwKKwkuc3RvcCA9 IG10a19vdmxfc3RvcCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19vdmxfZW5hYmxlX3ZibGFuaywK KwkuZGlzYWJsZV92YmxhbmsgPSBtdGtfb3ZsX2Rpc2FibGVfdmJsYW5rLAorCS5sYXllcl9vbiA9 IG10a19vdmxfbGF5ZXJfb24sCisJLmxheWVyX29mZiA9IG10a19vdmxfbGF5ZXJfb2ZmLAorCS5s YXllcl9jb25maWcgPSBtdGtfb3ZsX2xheWVyX2NvbmZpZywKK307CisKK3N0YXRpYyBpbnQgbXRr X2Rpc3Bfb3ZsX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs CisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsK KwlpbnQgcmV0OworCisJcmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZwcml2 LT5kZHBfY29tcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g cmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1l LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBtdGtfZGlzcF9vdmxfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLAorCQkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0 YTsKKworCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZGlzcF9vdmxfY29t cG9uZW50X29wcyA9IHsKKwkuYmluZAk9IG10a19kaXNwX292bF9iaW5kLAorCS51bmJpbmQgPSBt dGtfZGlzcF9vdmxfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXY7CisJaW50IGNvbXBfaWQ7CisJ aW50IGlycTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq cHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlp cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4g aXJxOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgbXRrX2Rpc3Bfb3ZsX2ly cV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBw cml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0 IGlycSAlZDogJWRcbiIsIGlycSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lk ID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUsIE1US19ESVNQX09WTCk7CisJaWYg KGNvbXBfaWQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlkZW50aWZ5IGJ5IGFs aWFzOiAlZFxuIiwgY29tcF9pZCk7CisJCXJldHVybiBjb21wX2lkOworCX0KKworCXJldCA9IG10 a19kZHBfY29tcF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAmcHJpdi0+ZGRwX2NvbXAsIGNvbXBf aWQsCisJCQkJJm10a19kaXNwX292bF9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVy biByZXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlyZXQg PSBjb21wb25lbnRfYWRkKGRldiwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKKwlpZiAo cmV0KQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0 KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRl diwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNo W10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCB9LAor CXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19kaXNwX292bF9kcml2ZXJfZHRf bWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXIgPSB7 CisJLnByb2JlCQk9IG10a19kaXNwX292bF9wcm9iZSwKKwkucmVtb3ZlCQk9IG10a19kaXNwX292 bF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRpc3Atb3ZsIiwK KwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX292 bF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k aXNwX3JkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmI4MGNiCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEu YwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1 ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o PgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29t cC5oIgorCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRQkJMHgwMDAwCisjZGVmaW5l IERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUwkJMHgwMDA0CisjZGVmaW5lIFJETUFfVEFSR0VUX0xJ TkVfSU5UCQkJCUJJVCg1KQorI2RlZmluZSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0lOVAkJCQlCSVQo NCkKKyNkZWZpbmUgUkRNQV9FT0ZfQUJOT1JNQUxfSU5UCQkJCUJJVCgzKQorI2RlZmluZSBSRE1B X0ZSQU1FX0VORF9JTlQJCQkJQklUKDIpCisjZGVmaW5lIFJETUFfRlJBTUVfU1RBUlRfSU5UCQkJ CUJJVCgxKQorI2RlZmluZSBSRE1BX1JFR19VUERBVEVfSU5UCQkJCUJJVCgwKQorI2RlZmluZSBE SVNQX1JFR19SRE1BX0dMT0JBTF9DT04JCTB4MDAxMAorI2RlZmluZSBSRE1BX0VOR0lORV9FTgkJ CQkJQklUKDApCisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05fMAkJMHgwMDE0CisjZGVm aW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05fMQkJMHgwMDE4CisjZGVmaW5lIERJU1BfUkVHX1JE TUFfVEFSR0VUX0xJTkUJCTB4MDAxYworI2RlZmluZSBESVNQX1JFR19SRE1BX0ZJRk9fQ09OCQkJ MHgwMDQwCisjZGVmaW5lIFJETUFfRklGT19VTkRFUkZMT1dfRU4JCQkJQklUKDMxKQorI2RlZmlu ZSBSRE1BX0ZJRk9fUFNFVURPX1NJWkUoYnl0ZXMpCQkJKCgoYnl0ZXMpIC8gMTYpIDw8IDE2KQor I2RlZmluZSBSRE1BX09VVFBVVF9WQUxJRF9GSUZPX1RIUkVTSE9MRChieXRlcykJCSgoYnl0ZXMp IC8gMTYpCisKKy8qKgorICogc3RydWN0IG10a19kaXNwX3JkbWEgLSBESVNQX1JETUEgZHJpdmVy IHN0cnVjdHVyZQorICogQGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVt IGFuZCBoYXJkd2FyZSByZXNvdXJjZXMKKyAqIEBjcnRjIC0gYXNzb2NpYXRlZCBjcnRjIHRvIHJl cG9ydCBpcnEgZXZlbnRzIHRvCisgKi8KK3N0cnVjdCBtdGtfZGlzcF9yZG1hIHsKKwlzdHJ1Y3Qg bXRrX2RkcF9jb21wCQlkZHBfY29tcDsKKwlzdHJ1Y3QgZHJtX2NydGMJCQkqY3J0YzsKK307CisK K3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9yZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZv aWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9pZDsKKwlz dHJ1Y3QgbXRrX2RkcF9jb21wICpyZG1hID0gJnByaXYtPmRkcF9jb21wOworCisJLyogQ2xlYXIg ZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMHgwLCByZG1hLT5yZWdzICsg RElTUF9SRUdfUkRNQV9JTlRfU1RBVFVTKTsKKworCWlmICghcHJpdi0+Y3J0YykKKwkJcmV0dXJu IElSUV9OT05FOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5jcnRjLCByZG1hKTsKKworCXJl dHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgcmRtYV91cGRhdGVfYml0cyhzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICB1bnNpZ25l ZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wID0gcmVh ZGwoY29tcC0+cmVncyArIHJlZyk7CisKKwl0bXAgPSAodG1wICYgfm1hc2spIHwgKHZhbCAmIG1h c2spOworCXdyaXRlbCh0bXAsIGNvbXAtPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBt dGtfcmRtYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICAg c3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0g Y29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9yZG1hLAorCQkJCQkJICBkZHBfY29t cCk7CisKKwlwcml2LT5jcnRjID0gY3J0YzsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1Bf UkVHX1JETUFfSU5UX0VOQUJMRSwgUkRNQV9GUkFNRV9FTkRfSU5ULAorCQkJIFJETUFfRlJBTUVf RU5EX0lOVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2Rpc2FibGVfdmJsYW5rKHN0cnVj dCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBj b250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX3JkbWEsCisJCQkJCQkgIGRkcF9jb21w KTsKKworCXByaXYtPmNydGMgPSBOVUxMOworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9S RUdfUkRNQV9JTlRfRU5BQkxFLCBSRE1BX0ZSQU1FX0VORF9JTlQsIDApOworfQorCitzdGF0aWMg dm9pZCBtdGtfcmRtYV9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXJkbWFf dXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OLCBSRE1BX0VOR0lORV9F TiwKKwkJCSBSRE1BX0VOR0lORV9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX3N0b3Ao c3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJ U1BfUkVHX1JETUFfR0xPQkFMX0NPTiwgUkRNQV9FTkdJTkVfRU4sIDApOworfQorCitzdGF0aWMg dm9pZCBtdGtfcmRtYV9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQg aW50IHdpZHRoLAorCQkJICAgIHVuc2lnbmVkIGludCBoZWlnaHQsIHVuc2lnbmVkIGludCB2cmVm cmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOworCXVuc2lnbmVkIGludCByZWc7CisK KwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfU0laRV9DT05fMCwgMHhmZmYs IHdpZHRoKTsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfU0laRV9DT05f MSwgMHhmZmZmZiwgaGVpZ2h0KTsKKworCS8qCisJICogRW5hYmxlIEZJRk8gdW5kZXJmbG93IHNp bmNlIERTSSBhbmQgRFBJIGNhbid0IGJlIGJsb2NrZWQuCisJICogS2VlcCB0aGUgRklGTyBwc2V1 ZG8gc2l6ZSByZXNldCBkZWZhdWx0IG9mIDggS2lCLiBTZXQgdGhlCisJICogb3V0cHV0IHRocmVz aG9sZCB0byA2IG1pY3Jvc2Vjb25kcyB3aXRoIDcvNiBvdmVyaGVhZCB0bworCSAqIGFjY291bnQg Zm9yIGJsYW5raW5nLCBhbmQgd2l0aCBhIHBpeGVsIGRlcHRoIG9mIDQgYnl0ZXM6CisJICovCisJ dGhyZXNob2xkID0gd2lkdGggKiBoZWlnaHQgKiB2cmVmcmVzaCAqIDQgKiA3IC8gMTAwMDAwMDsK KwlyZWcgPSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0VOIHwKKwkgICAgICBSRE1BX0ZJRk9fUFNFVURP X1NJWkUoU1pfOEspIHwKKwkgICAgICBSRE1BX09VVFBVVF9WQUxJRF9GSUZPX1RIUkVTSE9MRCh0 aHJlc2hvbGQpOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX0ZJRk9f Q09OKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgbXRrX2Rp c3BfcmRtYV9mdW5jcyA9IHsKKwkuY29uZmlnID0gbXRrX3JkbWFfY29uZmlnLAorCS5zdGFydCA9 IG10a19yZG1hX3N0YXJ0LAorCS5zdG9wID0gbXRrX3JkbWFfc3RvcCwKKwkuZW5hYmxlX3ZibGFu ayA9IG10a19yZG1hX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX3JkbWFf ZGlzYWJsZV92YmxhbmssCit9OworCitzdGF0aWMgaW50IG10a19kaXNwX3JkbWFfYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICAgIHZvaWQgKmRh dGEpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJldDsKKworCXJl dCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVu dCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgdm9pZCBtdGtfZGlzcF9yZG1h X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCQkg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKworCW10a19k ZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMg PSB7CisJLmJpbmQJPSBtdGtfZGlzcF9yZG1hX2JpbmQsCisJLnVuYmluZCA9IG10a19kaXNwX3Jk bWFfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9yZG1hX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl djsKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdjsKKwlpbnQgY29tcF9pZDsKKwlpbnQgaXJx OworCWludCByZXQ7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisK Kwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUsIE1US19ESVNQX1JE TUEpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVu dGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisK KwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJnByaXYtPmRkcF9j b21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9yZG1hX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50OiAlZFxuIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEaXNhYmxlIGFuZCBjbGVhciBwZW5kaW5nIGlu dGVycnVwdHMgKi8KKwl3cml0ZWwoMHgwLCBwcml2LT5kZHBfY29tcC5yZWdzICsgRElTUF9SRUdf UkRNQV9JTlRfRU5BQkxFKTsKKwl3cml0ZWwoMHgwLCBwcml2LT5kZHBfY29tcC5yZWdzICsgRElT UF9SRUdfUkRNQV9JTlRfU1RBVFVTKTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBp cnEsIG10a19kaXNwX3JkbWFfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9UUklHR0VSX05P TkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2 LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxuIiwgaXJxLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOworCisJcmV0ID0g Y29tcG9uZW50X2FkZChkZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMpOworCWlmIChy ZXQpCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBjb21wb25lbnQ6ICVkXG4iLCByZXQp OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfZGlzcF9yZG1hX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRl diwgJm10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0 Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCB9 LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19kaXNwX3JkbWFfZHJpdmVy X2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9yZG1hX2RyaXZl ciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3BfcmRtYV9wcm9iZSwKKwkucmVtb3ZlCQk9IG10a19k aXNwX3JkbWFfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1kaXNw LXJkbWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRr X2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhj YjZjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2NydGMuYwpAQCAtMCwwICsxLDU4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRp YVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICovCisKKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9j cnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVk ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUg PHNvYy9tZWRpYXRlay9zbWkuaD4KKworI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVk ZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNpbmNsdWRlICJt dGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKyNpbmNsdWRlICJt dGtfZHJtX3BsYW5lLmgiCisKKy8qKgorICogc3RydWN0IG10a19kcm1fY3J0YyAtIE1lZGlhVGVr IHNwZWNpZmljIGNydGMgc3RydWN0dXJlLgorICogQGJhc2U6IGNydGMgb2JqZWN0LgorICogQGVu YWJsZWQ6IHJlY29yZHMgd2hldGhlciBjcnRjX2VuYWJsZSBzdWNjZWVkZWQKKyAqIEBwbGFuZXM6 IGFycmF5IG9mIDQgbXRrX2RybV9wbGFuZSBzdHJ1Y3R1cmVzLCBvbmUgZm9yIGVhY2ggb3Zlcmxh eSBwbGFuZQorICogQHBlbmRpbmdfcGxhbmVzOiB3aGV0aGVyIGFueSBwbGFuZSBoYXMgcGVuZGlu ZyBjaGFuZ2VzIHRvIGJlIGFwcGxpZWQKKyAqIEBjb25maWdfcmVnczogbWVtb3J5IG1hcHBlZCBt bXN5cyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwYWNlCisgKiBAbXV0ZXg6IGhhbmRsZSB0byBv bmUgb2YgdGhlIHRlbiBkaXNwX211dGV4IHN0cmVhbXMKKyAqIEBkZHBfY29tcF9ucjogbnVtYmVy IG9mIGNvbXBvbmVudHMgaW4gZGRwX2NvbXAKKyAqIEBkZHBfY29tcDogYXJyYXkgb2YgcG9pbnRl cnMgdGhlIG10a19kZHBfY29tcCBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhpcyBjcnRjCisgKi8KK3N0 cnVjdCBtdGtfZHJtX2NydGMgeworCXN0cnVjdCBkcm1fY3J0YwkJCWJhc2U7CisJYm9vbAkJCQll bmFibGVkOworCisJYm9vbAkJCQlwZW5kaW5nX25lZWRzX3ZibGFuazsKKwlzdHJ1Y3QgZHJtX3Bl bmRpbmdfdmJsYW5rX2V2ZW50CSpldmVudDsKKworCXN0cnVjdCBtdGtfZHJtX3BsYW5lCQlwbGFu ZXNbT1ZMX0xBWUVSX05SXTsKKwlib29sCQkJCXBlbmRpbmdfcGxhbmVzOworCisJdm9pZCBfX2lv bWVtCQkJKmNvbmZpZ19yZWdzOworCXN0cnVjdCBtdGtfZGlzcF9tdXRleAkJKm11dGV4OworCXVu c2lnbmVkIGludAkJCWRkcF9jb21wX25yOworCXN0cnVjdCBtdGtfZGRwX2NvbXAJCSoqZGRwX2Nv bXA7Cit9OworCitzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgeworCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZQkJYmFzZTsKKworCWJvb2wJCQkJcGVuZGluZ19jb25maWc7CisJdW5zaWduZWQgaW50CQkJcGVu ZGluZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX2hlaWdodDsKKwl1bnNpZ25lZCBp bnQJCQlwZW5kaW5nX3ZyZWZyZXNoOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2Ry bV9jcnRjICp0b19tdGtfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmMpCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RybV9jcnRjLCBiYXNlKTsKK30KKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnRvX210a19jcnRjX3N0YXRlKHN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqcykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHMsIHN0cnVjdCBtdGtfY3J0Y19z dGF0ZSwgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9m bGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9s b2NrX2lycXNhdmUoJmNydGMtPmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCWRybV9zZW5kX3Zi bGFua19ldmVudChjcnRjLT5kZXYsIG10a19jcnRjLT5ldmVudC0+cGlwZSwgbXRrX2NydGMtPmV2 ZW50KTsKKwlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOworCW10a19jcnRjLT5ldmVudCA9IE5V TEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFn cyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmluaXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRr X2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZtdGtfY3J0 Yy0+YmFzZSk7CisJaWYgKG10a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuaykgeworCQltdGtf ZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7CisJCW10a19jcnRjLT5wZW5kaW5n X25lZWRzX3ZibGFuayA9IGZhbHNlOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRj X2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMg Km10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJCWNsa191bnByZXBhcmUobXRrX2NydGMt PmRkcF9jb21wW2ldLT5jbGspOworCisJbXRrX2Rpc3BfbXV0ZXhfcHV0KG10a19jcnRjLT5tdXRl eCk7CisKKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJt X2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfY3J0Y19z dGF0ZSAqc3RhdGU7CisKKwlpZiAoY3J0Yy0+c3RhdGUpIHsKKwkJaWYgKGNydGMtPnN0YXRlLT5t b2RlX2Jsb2IpCisJCQlkcm1fcHJvcGVydHlfdW5yZWZlcmVuY2VfYmxvYihjcnRjLT5zdGF0ZS0+ bW9kZV9ibG9iKTsKKworCQlzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsK KwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBlbHNlIHsKKwkJc3RhdGUg PSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzdGF0ZSkKKwkJ CXJldHVybjsKKwkJY3J0Yy0+c3RhdGUgPSAmc3RhdGUtPmJhc2U7CisJfQorCisJc3RhdGUtPmJh c2UuY3J0YyA9IGNydGM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm10a19k cm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVj dCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0 ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJX19kcm1f YXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShjcnRjLCAmc3RhdGUtPmJhc2UpOwor CisJV0FSTl9PTihzdGF0ZS0+YmFzZS5jcnRjICE9IGNydGMpOworCXN0YXRlLT5iYXNlLmNydGMg PSBjcnRjOworCisJcmV0dXJuICZzdGF0ZS0+YmFzZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2Ry bV9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgICBz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0 Y19kZXN0cm95X3N0YXRlKGNydGMsIHN0YXRlKTsKKwlrZnJlZSh0b19tdGtfY3J0Y19zdGF0ZShz dGF0ZSkpOworfQorCitzdGF0aWMgYm9vbCBtdGtfZHJtX2NydGNfbW9kZV9maXh1cChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sK KwkvKiBOb3RoaW5nIHRvIGRvIGhlcmUsIGJ1dCB0aGlzIGNhbGxiYWNrIGlzIG1hbmRhdG9yeS4g Ki8KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX21vZGVfc2V0 X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAq c3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisKKwlzdGF0ZS0+cGVuZGlu Z193aWR0aCA9IGNydGMtPm1vZGUuaGRpc3BsYXk7CisJc3RhdGUtPnBlbmRpbmdfaGVpZ2h0ID0g Y3J0Yy0+bW9kZS52ZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCA9IGNydGMtPm1v ZGUudnJlZnJlc2g7CisJd21iKCk7CS8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBh cmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+cGVuZGluZ19jb25maWcgPSB0cnVlOwor fQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRy bSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9 IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19t dGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBt dGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZW5hYmxlX3ZibGFuayhvdmws ICZtdGtfY3J0Yy0+YmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfZHJtX2NydGNf ZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUp Cit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJ c3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3Bp cGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07 CisKKwltdGtfZGRwX2NvbXBfZGlzYWJsZV92Ymxhbmsob3ZsKTsKK30KKworc3RhdGljIGludCBt dGtfY3J0Y19kZHBfY2xrX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sK KwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19f KTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJcmV0 ID0gY2xrX2VuYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisJCWlmIChyZXQpIHsK KwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBjbG9jayAlZDogJWRcbiIsIGksIHJldCk7 CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworZXJyOgorCXdoaWxlICgtLWkg Pj0gMCkKKwkJY2xrX2Rpc2FibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShzdHJ1Y3Qg bXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIo IiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9u cjsgaSsrKQorCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisK K3N0YXRpYyBpbnQgbXRrX2NydGNfZGRwX2h3X2luaXQoc3RydWN0IG10a19kcm1fY3J0YyAqbXRr X2NydGMpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVu c2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaDsKKwlpbnQgcmV0OworCWludCBpOwor CisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoV0FSTl9PTighY3J0 Yy0+c3RhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdpZHRoID0gY3J0Yy0+c3RhdGUtPmFk anVzdGVkX21vZGUuaGRpc3BsYXk7CisJaGVpZ2h0ID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21v ZGUudmRpc3BsYXk7CisJdnJlZnJlc2ggPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVm cmVzaDsKKworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoY3J0Yy0+ZGV2LT5kZXYpOworCWlm IChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBwb3dlciBkb21haW46 ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG10a19kaXNwX211dGV4 X3ByZXBhcmUobXRrX2NydGMtPm11dGV4KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1Io IkZhaWxlZCB0byBlbmFibGUgbXV0ZXggY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9w bV9ydW50aW1lX3B1dDsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfY2xrX2VuYWJsZShtdGtf Y3J0Yyk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNv bXBvbmVudCBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9tdXRleF91bnByZXBhcmU7 CisJfQorCisJRFJNX0RFQlVHX0RSSVZFUigibWVkaWF0ZWtfZGRwX2RkcF9wYXRoX3NldHVwXG4i KTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJ CW10a19kZHBfYWRkX2NvbXBfdG9fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSBt dGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2kgKyAx XS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJ CW10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtfZGlzcF9tdXRleF9hZGRfY29t cChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCW10a19kaXNw X211dGV4X2VuYWJsZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IG10a19j cnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAgPSBt dGtfY3J0Yy0+ZGRwX2NvbXBbaV07CisKKwkJbXRrX2RkcF9jb21wX2NvbmZpZyhjb21wLCB3aWR0 aCwgaGVpZ2h0LCB2cmVmcmVzaCk7CisJCW10a19kZHBfY29tcF9zdGFydChjb21wKTsKKwl9CisK KwkvKiBJbml0aWFsbHkgY29uZmlndXJlIGFsbCBwbGFuZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwg T1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2Ny dGMtPnBsYW5lc1tpXS5iYXNlOworCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZTsKKworCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwor CQltdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKG10a19jcnRjLT5kZHBfY29tcFswXSwgaSwKKwkJ CQkJICBwbGFuZV9zdGF0ZSk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9tdXRleF91bnByZXBh cmU6CisJbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CitlcnJfcG1f cnVudGltZV9wdXQ6CisJcG1fcnVudGltZV9wdXQoY3J0Yy0+ZGV2LT5kZXYpOworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9od19maW5pKHN0cnVjdCBtdGtfZHJt X2NydGMgKm10a19jcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBtdGtfY3J0Yy0+ YmFzZS5kZXY7CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18p OworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJbXRrX2Rk cF9jb21wX3N0b3AobXRrX2NydGMtPmRkcF9jb21wW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRr X2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10 a19jcnRjLT5tdXRleCwKKwkJCQkJICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRr X2Rpc3BfbXV0ZXhfZGlzYWJsZShtdGtfY3J0Yy0+bXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBt dGtfY3J0Yy0+ZGRwX2NvbXBfbnIgLSAxOyBpKyspIHsKKwkJbXRrX2RkcF9yZW1vdmVfY29tcF9m cm9tX3BhdGgobXRrX2NydGMtPmNvbmZpZ19yZWdzLAorCQkJCQkgICAgICBtdGtfY3J0Yy0+ZGRw X2NvbXBbaV0tPmlkLAorCQkJCQkgICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaSArIDFdLT5pZCk7 CisJCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwKKwkJCQkJICAg bXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJfQorCW10a19kaXNwX211dGV4X3JlbW92ZV9j b21wKG10a19jcnRjLT5tdXRleCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2Ny dGNfZGRwX2Nsa19kaXNhYmxlKG10a19jcnRjKTsKKwltdGtfZGlzcF9tdXRleF91bnByZXBhcmUo bXRrX2NydGMtPm11dGV4KTsKKworCXBtX3J1bnRpbWVfcHV0KGRybS0+ZGV2KTsKK30KKworc3Rh dGljIHZvaWQgbXRrX2RybV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ c3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1 Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisJaW50IHJldDsK KworCURSTV9ERUJVR19EUklWRVIoIiVzICVkXG4iLCBfX2Z1bmNfXywgY3J0Yy0+YmFzZS5pZCk7 CisKKwlyZXQgPSBtdGtfc21pX2xhcmJfZ2V0KG92bC0+bGFyYl9kZXYpOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGxhcmI6ICVkXG4iLCByZXQpOworCQlyZXR1cm47 CisJfQorCisJcmV0ID0gbXRrX2NydGNfZGRwX2h3X2luaXQobXRrX2NydGMpOworCWlmIChyZXQp IHsKKwkJbXRrX3NtaV9sYXJiX3B1dChvdmwtPmxhcmJfZGV2KTsKKwkJcmV0dXJuOworCX0KKwor CWRybV9jcnRjX3ZibGFua19vbihjcnRjKTsKKwltdGtfY3J0Yy0+ZW5hYmxlZCA9IHRydWU7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMp OworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKwlp bnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzICVkXG4iLCBfX2Z1bmNfXywgY3J0Yy0+YmFz ZS5pZCk7CisJaWYgKCFtdGtfY3J0Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJLyogU2V0IGFs bCBwZW5kaW5nIHBsYW5lIHN0YXRlIHRvIGRpc2FibGVkICovCisJZm9yIChpID0gMDsgaSA8IE9W TF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRj LT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7 CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJ cGxhbmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZmFsc2U7CisJCXBsYW5lX3N0YXRlLT5wZW5k aW5nLmNvbmZpZyA9IHRydWU7CisJfQorCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7 CisKKwkvKiBXYWl0IGZvciBwbGFuZXMgdG8gYmUgZGlzYWJsZWQgKi8KKwlkcm1fY3J0Y193YWl0 X29uZV92YmxhbmsoY3J0Yyk7CisKKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOworCW10a19j cnRjX2RkcF9od19maW5pKG10a19jcnRjKTsKKwltdGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9k ZXYpOworCisJbXRrX2NydGMtPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgbXRr X2RybV9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAg c3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2Ny dGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCXN0cnVj dCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisKKwlpZiAobXRr X2NydGMtPmV2ZW50ICYmIHN0YXRlLT5iYXNlLmV2ZW50KQorCQlEUk1fRVJST1IoIm5ldyBldmVu dCB3aGlsZSB0aGVyZSBpcyBzdGlsbCBhIHBlbmRpbmcgZXZlbnRcbiIpOworCisJaWYgKHN0YXRl LT5iYXNlLmV2ZW50KSB7CisJCXN0YXRlLT5iYXNlLmV2ZW50LT5waXBlID0gZHJtX2NydGNfaW5k ZXgoY3J0Yyk7CisJCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsKKwkJ bXRrX2NydGMtPmV2ZW50ID0gc3RhdGUtPmJhc2UuZXZlbnQ7CisJCXN0YXRlLT5iYXNlLmV2ZW50 ID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfZmx1c2go c3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq b2xkX2NydGNfc3RhdGUpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19t dGtfY3J0YyhjcnRjKTsKKwl1bnNpZ25lZCBpbnQgcGVuZGluZ19wbGFuZXMgPSAwOworCWludCBp OworCisJaWYgKG10a19jcnRjLT5ldmVudCkKKwkJbXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJs YW5rID0gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQlzdHJ1 Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0ZSA9IHRvX210 a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcu ZGlydHkpIHsKKwkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZyA9IHRydWU7CisJCQlwbGFu ZV9zdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IGZhbHNlOworCQkJcGVuZGluZ19wbGFuZXMgfD0gQklU KGkpOworCQl9CisJfQorCWlmIChwZW5kaW5nX3BsYW5lcykKKwkJbXRrX2NydGMtPnBlbmRpbmdf cGxhbmVzID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBt dGtfY3J0Y19mdW5jcyA9IHsKKwkuc2V0X2NvbmZpZwkJPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRf Y29uZmlnLAorCS5wYWdlX2ZsaXAJCT0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5k ZXN0cm95CQk9IG10a19kcm1fY3J0Y19kZXN0cm95LAorCS5yZXNldAkJCT0gbXRrX2RybV9jcnRj X3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0gbXRrX2RybV9jcnRjX2R1cGxpY2F0 ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBtdGtfZHJtX2NydGNfZGVzdHJveV9z dGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIG10 a19jcnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cAk9IG10a19kcm1fY3J0Y19tb2Rl X2ZpeHVwLAorCS5tb2RlX3NldF9ub2ZiCT0gbXRrX2RybV9jcnRjX21vZGVfc2V0X25vZmIsCisJ LmVuYWJsZQkJPSBtdGtfZHJtX2NydGNfZW5hYmxlLAorCS5kaXNhYmxlCT0gbXRrX2RybV9jcnRj X2Rpc2FibGUsCisJLmF0b21pY19iZWdpbgk9IG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4sCisJ LmF0b21pY19mbHVzaAk9IG10a19kcm1fY3J0Y19hdG9taWNfZmx1c2gsCit9OworCitzdGF0aWMg aW50IG10a19kcm1fY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0 cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjLAorCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpw cmltYXJ5LAorCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IsIHVuc2lnbmVkIGludCBw aXBlKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRy bSwgJm10a19jcnRjLT5iYXNlLCBwcmltYXJ5LCBjdXJzb3IsCisJCQkJCSZtdGtfY3J0Y19mdW5j cywgTlVMTCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY2xlYW51cF9jcnRjOworCisJZHJtX2Ny dGNfaGVscGVyX2FkZCgmbXRrX2NydGMtPmJhc2UsICZtdGtfY3J0Y19oZWxwZXJfZnVuY3MpOwor CisJcmV0dXJuIDA7CisKK2Vycl9jbGVhbnVwX2NydGM6CisJZHJtX2NydGNfY2xlYW51cCgmbXRr X2NydGMtPmJhc2UpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbXRrX2NydGNfZGRwX2lycShz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCkKK3sKKwlzdHJ1 Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXN0cnVjdCBt dGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShtdGtfY3J0Yy0+YmFzZS5z dGF0ZSk7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKgorCSAqIFRPRE86IGluc3RlYWQgb2YgdXBk YXRpbmcgdGhlIHJlZ2lzdGVycyBoZXJlLCB3ZSBzaG91bGQgcHJlcGFyZQorCSAqIHdvcmtpbmcg cmVnaXN0ZXJzIGluIGF0b21pY19jb21taXQgYW5kIGxldCB0aGUgaGFyZHdhcmUgY29tbWFuZAor CSAqIHF1ZXVlIHVwZGF0ZSBtb2R1bGUgcmVnaXN0ZXJzIG9uIHZibGFuay4KKwkgKi8KKwlpZiAo c3RhdGUtPnBlbmRpbmdfY29uZmlnKSB7CisJCW10a19kZHBfY29tcF9jb25maWcob3ZsLCBzdGF0 ZS0+cGVuZGluZ193aWR0aCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfaGVpZ2h0LAorCQkJCSAg ICBzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCk7CisKKwkJc3RhdGUtPnBlbmRpbmdfY29uZmlnID0g ZmFsc2U7CisJfQorCisJaWYgKG10a19jcnRjLT5wZW5kaW5nX3BsYW5lcykgeworCQlmb3IgKGkg PSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l ID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlOworCisJCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFu ZS0+c3RhdGUpOworCisJCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnKSB7CisJCQkJ bXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhvdmwsIGksIHBsYW5lX3N0YXRlKTsKKwkJCQlwbGFu ZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSBmYWxzZTsKKwkJCX0KKwkJfQorCQltdGtfY3J0Yy0+ cGVuZGluZ19wbGFuZXMgPSBmYWxzZTsKKwl9CisKKwltdGtfZHJtX2ZpbmlzaF9wYWdlX2ZsaXAo bXRrX2NydGMpOworfQorCitpbnQgbXRrX2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLCB1bnNpZ25l ZCBpbnQgcGF0aF9sZW4pCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybV9k ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRybV9kZXYtPmRldjsKKwlz dHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YzsKKwllbnVtIGRybV9wbGFuZV90eXBlIHR5cGU7 CisJdW5zaWduZWQgaW50IHpwb3M7CisJaW50IHBpcGUgPSBwcml2LT5udW1fcGlwZXM7CisJaW50 IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwYXRoX2xlbjsgaSsrKSB7CisJCWVu dW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQgPSBwYXRoW2ldOworCQlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5vZGU7CisKKwkJbm9kZSA9IHByaXYtPmNvbXBfbm9kZVtjb21wX2lkXTsKKwkJaWYgKCFu b2RlKSB7CisJCQlkZXZfaW5mbyhkZXYsCisJCQkJICJOb3QgY3JlYXRpbmcgY3J0YyAlZCBiZWNh dXNlIGNvbXBvbmVudCAlZCBpcyBkaXNhYmxlZCBvciBtaXNzaW5nXG4iLAorCQkJCSBwaXBlLCBj b21wX2lkKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJbXRrX2NydGMgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKm10a19jcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdGtfY3J0YykK KwkJcmV0dXJuIC1FTk9NRU07CisKKwltdGtfY3J0Yy0+Y29uZmlnX3JlZ3MgPSBwcml2LT5jb25m aWdfcmVnczsKKwltdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgPSBwYXRoX2xlbjsKKwltdGtfY3J0Yy0+ ZGRwX2NvbXAgPSBkZXZtX2ttYWxsb2NfYXJyYXkoZGV2LCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIs CisJCQkJCQlzaXplb2YoKm10a19jcnRjLT5kZHBfY29tcCksCisJCQkJCQlHRlBfS0VSTkVMKTsK KworCW10a19jcnRjLT5tdXRleCA9IG10a19kaXNwX211dGV4X2dldChwcml2LT5tdXRleF9kZXYs IHBpcGUpOworCWlmIChJU19FUlIobXRrX2NydGMtPm11dGV4KSkgeworCQlyZXQgPSBQVFJfRVJS KG10a19jcnRjLT5tdXRleCk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtdXRleDog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG10a19j cnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCWVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQg PSBwYXRoW2ldOworCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wOworCQlzdHJ1Y3QgZGV2aWNl X25vZGUgKm5vZGU7CisKKwkJbm9kZSA9IHByaXYtPmNvbXBfbm9kZVtjb21wX2lkXTsKKwkJY29t cCA9IHByaXYtPmRkcF9jb21wW2NvbXBfaWRdOworCQlpZiAoIWNvbXApIHsKKwkJCWRldl9lcnIo ZGV2LCAiQ29tcG9uZW50ICVzIG5vdCBpbml0aWFsaXplZFxuIiwKKwkJCQlub2RlLT5mdWxsX25h bWUpOworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gdW5wcmVwYXJlOworCQl9CisKKwkJcmV0 ID0gY2xrX3ByZXBhcmUoY29tcC0+Y2xrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYs CisJCQkJIkZhaWxlZCB0byBwcmVwYXJlIGNsb2NrIGZvciBjb21wb25lbnQgJXM6ICVkXG4iLAor CQkJCW5vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJCWdvdG8gdW5wcmVwYXJlOworCQl9CisKKwkJ bXRrX2NydGMtPmRkcF9jb21wW2ldID0gY29tcDsKKwl9CisKKwlmb3IgKHpwb3MgPSAwOyB6cG9z IDwgT1ZMX0xBWUVSX05SOyB6cG9zKyspIHsKKwkJdHlwZSA9ICh6cG9zID09IDApID8gRFJNX1BM QU5FX1RZUEVfUFJJTUFSWSA6CisJCQkJKHpwb3MgPT0gMSkgPyBEUk1fUExBTkVfVFlQRV9DVVJT T1IgOgorCQkJCQkJRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKKwkJcmV0ID0gbXRrX3BsYW5lX2lu aXQoZHJtX2RldiwgJm10a19jcnRjLT5wbGFuZXNbenBvc10sCisJCQkJICAgICBCSVQocGlwZSks IHR5cGUsIHpwb3MpOworCQlpZiAocmV0KQorCQkJZ290byB1bnByZXBhcmU7CisJfQorCisJcmV0 ID0gbXRrX2RybV9jcnRjX2luaXQoZHJtX2RldiwgbXRrX2NydGMsICZtdGtfY3J0Yy0+cGxhbmVz WzBdLmJhc2UsCisJCQkJJm10a19jcnRjLT5wbGFuZXNbMV0uYmFzZSwgcGlwZSk7CisJaWYgKHJl dCA8IDApCisJCWdvdG8gdW5wcmVwYXJlOworCisJcHJpdi0+Y3J0Y1twaXBlXSA9ICZtdGtfY3J0 Yy0+YmFzZTsKKwlwcml2LT5udW1fcGlwZXMrKzsKKworCXJldHVybiAwOworCit1bnByZXBhcmU6 CisJd2hpbGUgKC0taSA+PSAwKQorCQljbGtfdW5wcmVwYXJlKG10a19jcnRjLT5kZHBfY29tcFtp XS0+Y2xrKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9jcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlNTU2NgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApA QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwor I2lmbmRlZiBNVEtfRFJNX0NSVENfSAorI2RlZmluZSBNVEtfRFJNX0NSVENfSAorCisjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1 ZGUgIm10a19kcm1fcGxhbmUuaCIKKworI2RlZmluZSBPVkxfTEFZRVJfTlIJNAorCitpbnQgbXRr X2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQg aW50IHBpcGUpOwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCBtdGtfZHJtX2NydGNfY2hlY2tf Zmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK3ZvaWQgbXRrX2RybV9jcnRjX2NvbW1pdChz dHJ1Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBtdGtfY3J0Y19kZHBfaXJxKHN0cnVjdCBkcm1f Y3J0YyAqY3J0Yywgc3RydWN0IG10a19kZHBfY29tcCAqb3ZsKTsKK2ludCBtdGtfZHJtX2NydGNf Y3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LAorCQkJY29uc3QgZW51bSBtdGtfZGRw X2NvbXBfaWQgKnBhdGgsCisJCQl1bnNpZ25lZCBpbnQgcGF0aF9sZW4pOworCisjZW5kaWYgLyog TVRLX0RSTV9DUlRDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2RkcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiYTkzNTUKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpAQCAtMCwwICsxLDM1 MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRl IDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCisjaW5jbHVkZSAi bXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDBf TU9VVF9FTgkweDA0MAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwxX01PVVRfRU4J MHgwNDQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfT0RfTU9VVF9FTgkJMHgwNDgKKyNk ZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfR0FNTUFfTU9VVF9FTgkweDA0YworI2RlZmluZSBE SVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU4JMHgwNTAKKyNkZWZpbmUgRElTUF9SRUdf Q09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTgkweDA4NAorI2RlZmluZSBESVNQX1JFR19DT05GSUdf RElTUF9DT0xPUjFfU0VMX0lOCTB4MDg4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19EUElfU0VM X0lOCQkweDBhYworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9SRE1BMV9NT1VUX0VOCTB4 MGM4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19NTVNZU19DR19DT04wCQkweDEwMAorCisjZGVm aW5lIERJU1BfUkVHX01VVEVYX0VOKG4pCSgweDIwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElT UF9SRUdfTVVURVhfUlNUKG4pCSgweDI4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdf TVVURVhfTU9EKG4pCSgweDJjICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhf U09GKG4pCSgweDMwICsgMHgyMCAqIChuKSkKKworI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkww CQlCSVQoMTEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09WTDEJCUJJVCgxMikKKyNkZWZpbmUg TVVURVhfTU9EX0RJU1BfUkRNQTAJCUJJVCgxMykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRN QTEJCUJJVCgxNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTIJCUJJVCgxNSkKKyNkZWZp bmUgTVVURVhfTU9EX0RJU1BfV0RNQTAJCUJJVCgxNikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1Bf V0RNQTEJCUJJVCgxNykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQ09MT1IwCQlCSVQoMTgpCisj ZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMQkJQklUKDE5KQorI2RlZmluZSBNVVRFWF9NT0Rf RElTUF9BQUwJCUJJVCgyMCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfR0FNTUEJCUJJVCgyMSkK KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfVUZPRQkJQklUKDIyKQorI2RlZmluZSBNVVRFWF9NT0Rf RElTUF9QV00wCQlCSVQoMjMpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1BXTTEJCUJJVCgyNCkK KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT0QJCUJJVCgyNSkKKworI2RlZmluZSBNVVRFWF9TT0Zf U0lOR0xFX01PREUJCTAKKyNkZWZpbmUgTVVURVhfU09GX0RTSTAJCQkxCisjZGVmaW5lIE1VVEVY X1NPRl9EU0kxCQkJMgorI2RlZmluZSBNVVRFWF9TT0ZfRFBJMAkJCTMKKworI2RlZmluZSBPVkww X01PVVRfRU5fQ09MT1IwCQkweDEKKyNkZWZpbmUgT0RfTU9VVF9FTl9SRE1BMAkJMHgxCisjZGVm aW5lIFVGT0VfTU9VVF9FTl9EU0kwCQkweDEKKyNkZWZpbmUgQ09MT1IwX1NFTF9JTl9PVkwwCQkw eDEKKyNkZWZpbmUgT1ZMMV9NT1VUX0VOX0NPTE9SMQkJMHgxCisjZGVmaW5lIEdBTU1BX01PVVRf RU5fUkRNQTEJCTB4MQorI2RlZmluZSBSRE1BMV9NT1VUX0RQSTAJCQkweDIKKyNkZWZpbmUgRFBJ MF9TRUxfSU5fUkRNQTEJCTB4MQorI2RlZmluZSBDT0xPUjFfU0VMX0lOX09WTDEJCTB4MQorCitz dHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggeworCWludCBpZDsKKwlib29sIGNsYWltZWQ7Cit9OworCitz dHJ1Y3QgbXRrX2RkcCB7CisJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0IGNsawkJCSpj bGs7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJc3RydWN0IG10a19kaXNwX211dGV4CQltdXRl eFsxMF07Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG11dGV4X21vZFtERFBfQ09N UE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRfQUFMXSA9IE1VVEVYX01PRF9ESVNQ X0FBTCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBdID0gTVVURVhfTU9EX0RJU1BfQ09MT1IwLAor CVtERFBfQ09NUE9ORU5UX0NPTE9SMV0gPSBNVVRFWF9NT0RfRElTUF9DT0xPUjEsCisJW0REUF9D T01QT05FTlRfR0FNTUFdID0gTVVURVhfTU9EX0RJU1BfR0FNTUEsCisJW0REUF9DT01QT05FTlRf T0RdID0gTVVURVhfTU9EX0RJU1BfT0QsCisJW0REUF9DT01QT05FTlRfT1ZMMF0gPSBNVVRFWF9N T0RfRElTUF9PVkwwLAorCVtERFBfQ09NUE9ORU5UX09WTDFdID0gTVVURVhfTU9EX0RJU1BfT1ZM MSwKKwlbRERQX0NPTVBPTkVOVF9QV00wXSA9IE1VVEVYX01PRF9ESVNQX1BXTTAsCisJW0REUF9D T01QT05FTlRfUFdNMV0gPSBNVVRFWF9NT0RfRElTUF9QV00xLAorCVtERFBfQ09NUE9ORU5UX1JE TUEwXSA9IE1VVEVYX01PRF9ESVNQX1JETUEwLAorCVtERFBfQ09NUE9ORU5UX1JETUExXSA9IE1V VEVYX01PRF9ESVNQX1JETUExLAorCVtERFBfQ09NUE9ORU5UX1JETUEyXSA9IE1VVEVYX01PRF9E SVNQX1JETUEyLAorCVtERFBfQ09NUE9ORU5UX1VGT0VdID0gTVVURVhfTU9EX0RJU1BfVUZPRSwK KwlbRERQX0NPTVBPTkVOVF9XRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMCwKKwlbRERQX0NP TVBPTkVOVF9XRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMSwKK307CisKK3N0YXRpYyB1bnNp Z25lZCBpbnQgbXRrX2RkcF9tb3V0X2VuKGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkg ICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkgICAgdW5zaWduZWQgaW50ICphZGRy KQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9P VkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JF R19DT05GSUdfRElTUF9PVkwwX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMF9NT1VUX0VOX0NPTE9S MDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09EICYmIG5leHQgPT0gRERQX0NP TVBPTkVOVF9SRE1BMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX09EX01PVVRf RU47CisJCXZhbHVlID0gT0RfTU9VVF9FTl9SRE1BMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBf Q09NUE9ORU5UX1VGT0UgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RTSTApIHsKKwkJKmFkZHIg PSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU47CisJCXZhbHVlID0gVUZPRV9NT1VU X0VOX0RTSTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQg PT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElT UF9PVkwxX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMV9NT1VUX0VOX0NPTE9SMTsKKwl9IGVsc2Ug aWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX0dBTU1BICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9S RE1BMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRfRU47CisJ CXZhbHVlID0gR0FNTUFfTU9VVF9FTl9SRE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09N UE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRyID0g RElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTjsKKwkJdmFsdWUgPSBSRE1BMV9NT1VU X0RQSTA7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30K Kworc3RhdGljIHVuc2lnbmVkIGludCBtdGtfZGRwX3NlbF9pbihlbnVtIG10a19kZHBfY29tcF9p ZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkgICB1bnNpZ25l ZCBpbnQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJaWYgKGN1ciA9PSBERFBf Q09NUE9ORU5UX09WTDAgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMCkgeworCQkqYWRk ciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU47CisJCXZhbHVlID0gQ09MT1Iw X1NFTF9JTl9PVkwwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfUkRNQTEgJiYg bmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdf RFBJX1NFTF9JTjsKKwkJdmFsdWUgPSBEUEkwX1NFTF9JTl9SRE1BMTsKKwl9IGVsc2UgaWYgKGN1 ciA9PSBERFBfQ09NUE9ORU5UX09WTDEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMSkg eworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMV9TRUxfSU47CisJCXZhbHVl ID0gQ09MT1IxX1NFTF9JTl9PVkwxOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisKKwly ZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19wYXRoKHZvaWQgX19p b21lbSAqY29uZmlnX3JlZ3MsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJ CQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KQoreworCXVuc2lnbmVkIGludCBhZGRy LCB2YWx1ZSwgcmVnOworCisJdmFsdWUgPSBtdGtfZGRwX21vdXRfZW4oY3VyLCBuZXh0LCAmYWRk cik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBh ZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7 CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAo dmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpIHwgdmFs dWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9Cit9CisK K3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdf cmVncywKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtf ZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKwor CXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkg eworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+dmFsdWU7CisJ CXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9CisKKwl2YWx1ZSA9 IG10a19kZHBfc2VsX2luKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcg PSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+dmFsdWU7CisJCXdyaXRlbF9y ZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9Cit9CisKK3N0cnVjdCBtdGtfZGlz cF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQg aW50IGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK KworCWlmIChpZCA+PSAxMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKGRkcC0+ bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisKKwlkZHAtPm11 dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsKKworCXJldHVybiAmZGRwLT5tdXRleFtpZF07Cit9CisK K3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7 CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19k ZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFtt dXRleC0+aWRdICE9IG11dGV4KTsKKworCW11dGV4LT5jbGFpbWVkID0gZmFsc2U7Cit9CisKK2lu dCBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7 CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19k ZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXJldHVybiBjbGtfcHJlcGFyZV9lbmFi bGUoZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3VucHJlcGFyZShzdHJ1Y3Qg bXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWlu ZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsK KwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211 dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0g bXRrX2RkcF9jb21wX2lkIGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJf b2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwl1 bnNpZ25lZCBpbnQgcmVnOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11 dGV4KTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEREUF9DT01QT05FTlRfRFNJMDoKKwkJcmVn ID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kxOgor CQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKKwkJYnJlYWs7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQ STA6CisJCXJlZyA9IE1VVEVYX1NPRl9EUEkwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcg PSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQp KTsKKwkJcmVnIHw9IG11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5y ZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlyZXR1cm47CisJfQorCisJ d3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgt PmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3RydWN0IG10a19k aXNwX211dGV4ICptdXRleCwKKwkJCQllbnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1 Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJ CQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04o JmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2Fz ZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTE6CisJY2FzZSBE RFBfQ09NUE9ORU5UX0RQSTA6CisJCXdyaXRlbF9yZWxheGVkKE1VVEVYX1NPRl9TSU5HTEVfTU9E RSwKKwkJCSAgICAgICBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRwLT5yZWdzICsg RElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlyZWcgJj0gfm11dGV4X21vZFtpZF07 CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11 dGV4LT5pZCkpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxl KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9 IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4 LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKwor CXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30K Kwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0 ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0 IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5t dXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgwLCBkZHAtPnJlZ3MgKyBESVNQ X1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwOworCXN0cnVjdCByZXNvdXJjZSAqcmVn czsKKwlpbnQgaTsKKworCWRkcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRwKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFkZHApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsg aSA8IDEwOyBpKyspCisJCWRkcC0+bXV0ZXhbaV0uaWQgPSBpOworCisJZGRwLT5jbGsgPSBkZXZt X2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRkcC0+Y2xrKSkgeworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPmNs ayk7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7CisJZGRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7 CisJaWYgKElTX0VSUihkZHAtPnJlZ3MpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIG1h cCBtdXRleCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPnJlZ3MpOworCX0K KworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRkcCk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBtdGtfZGRwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor eworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkZHBf ZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt ZGlzcC1tdXRleCIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkZHBfZHJp dmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGRwX2RyaXZlciA9 IHsKKwkucHJvYmUJCT0gbXRrX2RkcF9wcm9iZSwKKwkucmVtb3ZlCQk9IG10a19kZHBfcmVtb3Zl LAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1kZHAiLAorCQkub3duZXIJPSBU SElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gZGRwX2RyaXZlcl9kdF9tYXRjaCwKKwl9 LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5o IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjMTE3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRERQX0gKKyNk ZWZpbmUgTVRLX0RSTV9ERFBfSAorCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCitz dHJ1Y3QgcmVnbWFwOworc3RydWN0IGRldmljZTsKK3N0cnVjdCBtdGtfZGlzcF9tdXRleDsKKwor dm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVncywK KwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCSAgICAgIGVudW0gbXRrX2Rk cF9jb21wX2lkIG5leHQpOwordm9pZCBtdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aCh2b2lk IF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwK KwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KTsKKworc3RydWN0IG10a19kaXNwX211 dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQg aWQpOworaW50IG10a19kaXNwX211dGV4X3ByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICpt dXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRl eCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rp c3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtf ZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBt dGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4LAor CQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfdW5wcmVw YXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9w dXQoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0RE UF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBf Y29tcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTcwZmNmCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwpAQCAtMCwwICsx LDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRo b3JzOgorICoJWVQgU2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+CisgKglDSyBIdSA8Y2suaHVA bWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvb2Yu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJx Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgIm10a19kcm1f ZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRw X2NvbXAuaCIKKworI2RlZmluZSBESVNQX09EX0VOCQkJCTB4MDAwMAorI2RlZmluZSBESVNQX09E X0lOVEVOCQkJCTB4MDAwOAorI2RlZmluZSBESVNQX09EX0lOVFNUQQkJCQkweDAwMGMKKyNkZWZp bmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCisjZGVmaW5lIERJU1BfT0RfU0laRQkJCQkweDAwMzAK KworI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJCQkweDAwMDAKKworI2RlZmluZSBESVNQX0NP TE9SX0NGR19NQUlOCQkJMHgwNDAwCisjZGVmaW5lIERJU1BfQ09MT1JfU1RBUlQJCQkweDBjMDAK KyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4MGM1MAorI2RlZmluZSBESVNQX0NPTE9SX0hF SUdIVAkJCTB4MGM1NAorCisjZGVmaW5lCU9EX1JFTEFZX01PREUJCUJJVCgwKQorCisjZGVmaW5l CVVGT19CWVBBU1MJCUJJVCgyKQorCisjZGVmaW5lCUNPTE9SX0JZUEFTU19BTEwJQklUKDcpCisj ZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykKKworc3RhdGljIHZvaWQgbXRrX2NvbG9yX2Nv bmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJCSAgICAg dW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl3cml0ZWwodywgY29t cC0+cmVncyArIERJU1BfQ09MT1JfV0lEVEgpOworCXdyaXRlbChoLCBjb21wLT5yZWdzICsgRElT UF9DT0xPUl9IRUlHSFQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfY29sb3Jfc3RhcnQoc3RydWN0 IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoQ09MT1JfQllQQVNTX0FMTCB8IENPTE9S X1NFUV9TRUwsCisJICAgICAgIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX0NGR19NQUlOKTsKKwl3 cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9TVEFSVCk7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50 IHcsCisJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJd3Jp dGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsgRElTUF9PRF9TSVpFKTsKK30KKworc3RhdGlj IHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVs KE9EX1JFTEFZX01PREUsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0NGRyk7CisJd3JpdGVsKDEsIGNv bXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQo c3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoVUZPX0JZUEFTUywgY29tcC0+ cmVncyArIERJU1BfUkVHX1VGT19TVEFSVCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRr X2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvciA9IHsKKwkuY29uZmlnID0gbXRrX2NvbG9yX2NvbmZp ZywKKwkuc3RhcnQgPSBtdGtfY29sb3Jfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IG10a19kZHBfY29tcF9mdW5jcyBkZHBfb2QgPSB7CisJLmNvbmZpZyA9IG10a19vZF9jb25maWcs CisJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtf ZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7CisJLnN0YXJ0ID0gbXRrX3Vmb2Vfc3RhcnQsCit9 OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19kZHBfY29tcF9zdGVtW01US19ERFBf Q09NUF9UWVBFX01BWF0gPSB7CisJW01US19ESVNQX09WTF0gPSAib3ZsIiwKKwlbTVRLX0RJU1Bf UkRNQV0gPSAicmRtYSIsCisJW01US19ESVNQX1dETUFdID0gIndkbWEiLAorCVtNVEtfRElTUF9D T0xPUl0gPSAiY29sb3IiLAorCVtNVEtfRElTUF9BQUxdID0gImFhbCIsCisJW01US19ESVNQX0dB TU1BXSA9ICJnYW1tYSIsCisJW01US19ESVNQX1VGT0VdID0gInVmb2UiLAorCVtNVEtfRFNJXSA9 ICJkc2kiLAorCVtNVEtfRFBJXSA9ICJkcGkiLAorCVtNVEtfRElTUF9QV01dID0gInB3bSIsCisJ W01US19ESVNQX01VVEVYXSA9ICJtdXRleCIsCisJW01US19ESVNQX09EXSA9ICJvZCIsCit9Owor CitzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKKwllbnVtIG10a19kZHBfY29tcF90eXBlIHR5 cGU7CisJaW50IGFsaWFzX2lkOworCWNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1 bmNzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfbWF0Y2ggbXRrX2Rk cF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKKwlbRERQX0NPTVBPTkVOVF9BQUxd CT0geyBNVEtfRElTUF9BQUwsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBdCT0g eyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9LAorCVtERFBfQ09NUE9ORU5UX0NPTE9S MV0JPSB7IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2NvbG9yIH0sCisJW0REUF9DT01QT05FTlRf RFBJMF0JPSB7IE1US19EUEksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfRFNJMF0JPSB7 IE1US19EU0ksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfRFNJMV0JPSB7IE1US19EU0ks CQkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfR0FNTUFdCT0geyBNVEtfRElTUF9HQU1NQSwJ MCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9IHsgTVRLX0RJU1BfT0QsCTAsICZkZHBf b2QgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsgTVRLX0RJU1BfT1ZMLAkwLCBOVUxMIH0s CisJW0REUF9DT01QT05FTlRfT1ZMMV0JPSB7IE1US19ESVNQX09WTCwJMSwgTlVMTCB9LAorCVtE RFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9QV00sCTAsIE5VTEwgfSwKKwlbRERQX0NP TVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBP TkVOVF9SRE1BMV0JPSB7IE1US19ESVNQX1JETUEsCTEsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVO VF9SRE1BMl0JPSB7IE1US19ESVNQX1JETUEsCTIsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9V Rk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRkcF91Zm9lIH0sCisJW0REUF9DT01QT05FTlRf V0RNQTBdCT0geyBNVEtfRElTUF9XRE1BLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfV0RN QTFdCT0geyBNVEtfRElTUF9XRE1BLAkxLCBOVUxMIH0sCit9OworCitpbnQgbXRrX2RkcF9jb21w X2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90 eXBlIGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBvZl9hbGlhc19nZXRfaWQobm9kZSwgbXRrX2Rk cF9jb21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsKKwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtf ZGRwX21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAgKGlkIDwgMCB8fCBpZCA9PSBtdGtfZGRwX21h dGNoZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7 Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51 bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG10a19kZHBf Y29tcF9mdW5jcyAqZnVuY3MpCit7CisJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB0eXBlOworCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxh cmJfcGRldjsKKworCWlmIChjb21wX2lkIDwgMCB8fCBjb21wX2lkID49IEREUF9DT01QT05FTlRf SURfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbXAtPmlkID0gY29tcF9pZDsKKwljb21w LT5mdW5jcyA9IGZ1bmNzID86IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS5mdW5jczsKKworCWlm IChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJMCB8fAorCSAgICBjb21wX2lkID09IEREUF9D T01QT05FTlRfRFNJMCB8fAorCSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfUFdNMCkgewor CQljb21wLT5yZWdzID0gTlVMTDsKKwkJY29tcC0+Y2xrID0gTlVMTDsKKwkJY29tcC0+aXJxID0g MDsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcC0+cmVncyA9IG9mX2lvbWFwKG5vZGUsIDApOwor CWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwgMCk7CisJY29tcC0+Y2xrID0gb2ZfY2xrX2dl dChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNvbXAtPmNsaykpCisJCWNvbXAtPmNsayA9IE5VTEw7 CisKKwl0eXBlID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBfaWRdLnR5cGU7CisKKwkvKiBPbmx5IERN QSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUgTEFSQiBwcm9wZXJ0eSAqLworCWNvbXAtPmxh cmJfZGV2ID0gTlVMTDsKKwlpZiAodHlwZSAhPSBNVEtfRElTUF9PVkwgJiYKKwkgICAgdHlwZSAh PSBNVEtfRElTUF9SRE1BICYmCisJICAgIHR5cGUgIT0gTVRLX0RJU1BfV0RNQSkKKwkJcmV0dXJu IDA7CisKKwlsYXJiX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5vZGUsICJtZWRpYXRlayxsYXJi IiwgMCk7CisJaWYgKCFsYXJiX25vZGUpIHsKKwkJZGV2X2VycihkZXYsCisJCQkiTWlzc2luZyBt ZWRpYWRlayxsYXJiIHBoYW5kbGUgaW4gJXMgbm9kZVxuIiwKKwkJCW5vZGUtPmZ1bGxfbmFtZSk7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxhcmJfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5 X25vZGUobGFyYl9ub2RlKTsKKwlpZiAoIWxhcmJfcGRldikgeworCQlkZXZfd2FybihkZXYsICJX YWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwKKwkJCSBsYXJiX25vZGUtPmZ1bGxfbmFtZSk7 CisJCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0K KwlvZl9ub2RlX3B1dChsYXJiX25vZGUpOworCisJY29tcC0+bGFyYl9kZXYgPSAmbGFyYl9wZGV2 LT5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVj dCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCisJaWYgKHBy aXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXZhdGUt PmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2Rk cF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBf Y29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5k ZXZfcHJpdmF0ZTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IE5VTEw7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApAQCAtMCwwICsxLDE1MCBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9E RFBfQ09NUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0NPTVBfSAorCisjaW5jbHVkZSA8bGludXgv aW8uaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1f Y3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IG10a19wbGFuZV9zdGF0ZTsKKworZW51 bSBtdGtfZGRwX2NvbXBfdHlwZSB7CisJTVRLX0RJU1BfT1ZMLAorCU1US19ESVNQX1JETUEsCisJ TVRLX0RJU1BfV0RNQSwKKwlNVEtfRElTUF9DT0xPUiwKKwlNVEtfRElTUF9BQUwsCisJTVRLX0RJ U1BfR0FNTUEsCisJTVRLX0RJU1BfVUZPRSwKKwlNVEtfRFNJLAorCU1US19EUEksCisJTVRLX0RJ U1BfUFdNLAorCU1US19ESVNQX01VVEVYLAorCU1US19ESVNQX09ELAorCU1US19ERFBfQ09NUF9U WVBFX01BWCwKK307CisKK2VudW0gbXRrX2RkcF9jb21wX2lkIHsKKwlERFBfQ09NUE9ORU5UX0FB TCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMSwKKwlERFBf Q09NUE9ORU5UX0RQSTAsCisJRERQX0NPTVBPTkVOVF9EU0kwLAorCUREUF9DT01QT05FTlRfRFNJ MSwKKwlERFBfQ09NUE9ORU5UX0dBTU1BLAorCUREUF9DT01QT05FTlRfT0QsCisJRERQX0NPTVBP TkVOVF9PVkwwLAorCUREUF9DT01QT05FTlRfT1ZMMSwKKwlERFBfQ09NUE9ORU5UX1BXTTAsCisJ RERQX0NPTVBPTkVOVF9QV00xLAorCUREUF9DT01QT05FTlRfUkRNQTAsCisJRERQX0NPTVBPTkVO VF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX1JETUEyLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlE RFBfQ09NUE9ORU5UX1dETUEwLAorCUREUF9DT01QT05FTlRfV0RNQTEsCisJRERQX0NPTVBPTkVO VF9JRF9NQVgsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wOworCitzdHJ1Y3QgbXRrX2RkcF9j b21wX2Z1bmNzIHsKKwl2b2lkICgqY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1 bnNpZ25lZCBpbnQgdywKKwkJICAgICAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJl ZnJlc2gpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9p ZCAoKnN0b3ApKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCXZvaWQgKCplbmFibGVfdmJs YW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwor CXZvaWQgKCpkaXNhYmxlX3ZibGFuaykoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9p ZCAoKmxheWVyX29uKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4 KTsKKwl2b2lkICgqbGF5ZXJfb2ZmKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25l ZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpz dGF0ZSk7Cit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wIHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJ dm9pZCBfX2lvbWVtICpyZWdzOworCWludCBpcnE7CisJc3RydWN0IGRldmljZSAqbGFyYl9kZXY7 CisJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQ7CisJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m dW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2NvbmZp ZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdywg dW5zaWduZWQgaW50IGgsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlp ZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmNvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmNv bmZpZyhjb21wLCB3LCBoLCB2cmVmcmVzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtf ZGRwX2NvbXBfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPnN0YXJ0KQorCQljb21wLT5mdW5jcy0+c3RhcnQoY29tcCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RvcChzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RvcCkK KwkJY29tcC0+ZnVuY3MtPnN0b3AoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtf ZGRwX2NvbXBfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkg ICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAt PmZ1bmNzLT5lbmFibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+ZW5hYmxlX3ZibGFuayhjb21w LCBjcnRjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9kaXNhYmxlX3Zi bGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBj b21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCisJCWNvbXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFu ayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9vbihz dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlp ZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX29uKQorCQljb21wLT5mdW5jcy0+ bGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29t cF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJICB1bnNpZ25lZCBp bnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKQor CQljb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs CisJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5l X3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVy X2NvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZyhjb21wLCBpZHgsIHN0YXRlKTsK K30KKworaW50IG10a19kZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAor CQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUpOworaW50IG10a19kZHBfY29tcF9p bml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpjb21wX25vZGUsCisJ CSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIGVudW0gbXRrX2RkcF9jb21wX2lkIGNv bXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKTsK K2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0 IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVyKHN0cnVj dCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCisjZW5kaWYg LyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMWI0NWQKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpAQCAtMCww ICsxLDU2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBB dXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxp bnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxp bnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5j bHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNpbmNsdWRl ICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRl ICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworI2RlZmluZSBEUklW RVJfTkFNRSAibWVkaWF0ZWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRpYXRlayBTb0MgRFJN IgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxNTA1MTMiCisjZGVmaW5lIERSSVZFUl9NQUpPUiAx CisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfc2NoZWR1 bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUpCit7CisJcHJpdmF0ZS0+Y29tbWl0LnN0YXRlID0gc3RhdGU7CisJc2No ZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0LndvcmspOworfQorCitzdGF0aWMgdm9pZCBtdGtf YXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7 CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxh bmUsIHBsYW5lX3N0YXRlLCBpKQorCQltdGtfZmJfd2FpdChwbGFuZS0+c3RhdGUtPmZiKTsKK30K Kworc3RhdGljIHZvaWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRl ICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJbXRrX2F0b21pY193YWl0X2Zv cl9mZW5jZXMoc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlz YWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhkcm0s IHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxl cyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKGRybSwg c3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRybSwgc3RhdGUpOwor CWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9t aWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG10a19kcm1fcHJp dmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IG10a19kcm1fcHJp dmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShwcml2YXRlLCBwcml2 YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9taWNfY29tbWl0KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw cml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2F0b21p Y19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlmbHVzaF93b3Jr KCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9zd2FwX3N0YXRl KGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3NjaGVkdWxlKHByaXZh dGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgc3RhdGUp OworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbXRrX2RybV9t b2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9tb2RlX2ZiX2NyZWF0 ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19j b21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIG10a19k ZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDAsCisJRERQ X0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQX0NPTVBPTkVOVF9P RCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09N UE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3RhdGljIGNvbnN0IGVu dW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NPTVBPTkVOVF9PVkwx LAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJRERQX0NP TVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitzdGF0aWMgaW50IG10 a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgbXRrX2Ry bV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldDsKKworCWlm ICghaW9tbXVfcHJlc2VudCgmcGxhdGZvcm1fYnVzX3R5cGUpKQorCQlyZXR1cm4gLUVQUk9CRV9E RUZFUjsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZhdGUtPm11dGV4X25v ZGUpOworCWlmICghcGRldikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiV2FpdGluZyBmb3IgZGlz cC1tdXRleCBkZXZpY2UgJXNcbiIsCisJCQlwcml2YXRlLT5tdXRleF9ub2RlLT5mdWxsX25hbWUp OworCQlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwkJcmV0dXJuIC1FUFJPQkVf REVGRVI7CisJfQorCXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7CisKKwlkcm1fbW9k ZV9jb25maWdfaW5pdChkcm0pOworCisJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDsK Kwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKKworCS8qCisJICogc2V0IG1heCB3 aWR0aCBhbmQgaGVpZ2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4KKwkgKiB0aGlzIHZh bHVlIHdvdWxkIGJlIHVzZWQgdG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0aW9uCisJ ICogYXQgZHJtX21vZGVfYWRkZmIoKS4KKwkgKi8KKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0 aCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5NjsKKwlkcm0tPm1v ZGVfY29uZmlnLmZ1bmNzID0gJm10a19kcm1fbW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBj b21wb25lbnRfYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf Y29uZmlnX2NsZWFudXA7CisKKwkvKgorCSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBmaXhl ZCBkYXRhIHN0cmVhbXMsIGVhY2ggb3B0aW9uYWwsCisJICogYW5kIGVhY2ggc3RhdGljYWxseSBh c3NpZ25lZCB0byBhIGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJE TUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRl KGRybSwgbXRrX2RkcF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQg PCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBD T0xPUjEgLT4gR0FNTUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNf Y3JlYXRlKGRybSwgbXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAo cmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKworCS8qIFVzZSBPVkwgZGV2 aWNlIGZvciBhbGwgRE1BIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworCW5wID0gcHJpdmF0ZS0+Y29t cF9ub2RlW210a19kZHBfbWFpblswXV0gPzoKKwkgICAgIHByaXZhdGUtPmNvbXBfbm9kZVttdGtf ZGRwX2V4dFswXV07CisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApOworCWlmICgh cGRldikgeworCQlyZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKGRybS0+ZGV2LCAiTmVlZCBhdCBs ZWFzdCBvbmUgT1ZMIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisJ fQorCisJcHJpdmF0ZS0+ZG1hX2RldiA9ICZwZGV2LT5kZXY7CisKKwkvKgorCSAqIFdlIGRvbid0 IHVzZSB0aGUgZHJtX2lycV9pbnN0YWxsKCkgaGVscGVycyBwcm92aWRlZCBieSB0aGUgRFJNCisJ ICogY29yZSwgc28gd2UgbmVlZCB0byBzZXQgdGhpcyBtYW51YWxseSBpbiBvcmRlciB0byBhbGxv dyB0aGUKKwkgKiBEUk1fSU9DVExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisJ ICovCisJZHJtLT5pcnFfZW5hYmxlZCA9IHRydWU7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRy bSwgTUFYX0NSVEMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5k OworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7CisJZHJtX21vZGVfY29uZmlnX3Jl c2V0KGRybSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2NvbXBvbmVudF91bmJpbmQ6CisJY29tcG9u ZW50X3VuYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CitlcnJfY29uZmlnX2NsZWFudXA6CisJZHJt X21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19kcm1fa21zX2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9r bXNfaGVscGVyX3BvbGxfZmluaShkcm0pOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7CisJ Y29tcG9uZW50X3VuYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJZHJtX21vZGVfY29uZmlnX2Ns ZWFudXAoZHJtKTsKK30KKworc3RhdGljIGludCBtdGtfZHJtX3VubG9hZChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKQoreworCW10a19kcm1fa21zX2RlaW5pdChkcm0pOworCWRybS0+ZGV2X3ByaXZh dGUgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3Bl cmF0aW9uc19zdHJ1Y3QgbXRrX2RybV9nZW1fdm1fb3BzID0geworCS5vcGVuID0gZHJtX2dlbV92 bV9vcGVuLAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtdGtfZHJtX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19N T0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCS51 bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkubW1hcCA9IG10a19kcm1fZ2VtX21tYXAsCisJ LnBvbGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFkLAorI2lmZGVmIENPTkZJR19DT01Q QVQKKwkuY29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorfTsKKworc3Rh dGljIHN0cnVjdCBkcm1fZHJpdmVyIG10a19kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVy ZXMgPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUgfAorCQkJICAg RFJJVkVSX0FUT01JQywKKwkudW5sb2FkID0gbXRrX2RybV91bmxvYWQsCisKKwkuZ2V0X3ZibGFu a19jb3VudGVyID0gZHJtX3ZibGFua19jb3VudCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19kcm1f Y3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19kaXNh YmxlX3ZibGFuaywKKworCS5nZW1fZnJlZV9vYmplY3QgPSBtdGtfZHJtX2dlbV9mcmVlX29iamVj dCwKKwkuZ2VtX3ZtX29wcyA9ICZtdGtfZHJtX2dlbV92bV9vcHMsCisJLmR1bWJfY3JlYXRlID0g bXRrX2RybV9nZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9IG10a19kcm1fZ2Vt X2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ks CisKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCisJ LnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAorCS5nZW1f cHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9pbXBvcnQg PSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IG10a19n ZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gbXRr X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9tbWFwID0gbXRrX2RybV9n ZW1fbW1hcF9idWYsCisJLmZvcHMgPSAmbXRrX2RybV9mb3BzLAorCisJLm5hbWUgPSBEUklWRVJf TkFNRSwKKwkuZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1h am9yID0gRFJJVkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwKK307CisKK3N0YXRp YyBpbnQgY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJcmV0 dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRhOworfQorCitzdGF0aWMgaW50IG10a19kcm1fYmluZChz dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJaW50IHJl dDsKKworCWRybSA9IGRybV9kZXZfYWxsb2MoJm10a19kcm1fZHJpdmVyLCBkZXYpOworCWlmICgh ZHJtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9kZXZfc2V0X3VuaXF1ZShkcm0sIGRldl9u YW1lKGRldikpOworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQg PCAwKQorCQlnb3RvIGVycl9mcmVlOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXZhdGU7CisJ cHJpdmF0ZS0+ZHJtID0gZHJtOworCisJcmV0ID0gbXRrX2RybV9rbXNfaW5pdChkcm0pOworCWlm IChyZXQgPCAwKQorCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2Vycl91 bnJlZ2lzdGVyOgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX2ZyZWU6CisJZHJtX2Rl dl91bnJlZihkcm0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fdW5i aW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2 YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1fcHV0X2Rldihwcml2YXRlLT5kcm0p OworCXByaXZhdGUtPmRybSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9u ZW50X21hc3Rlcl9vcHMgbXRrX2RybV9vcHMgPSB7CisJLmJpbmQJCT0gbXRrX2RybV9iaW5kLAor CS51bmJpbmQJCT0gbXRrX2RybV91bmJpbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBtdGtfZGRwX2NvbXBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJt ZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PVkwg fSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCAgLmRhdGEg PSAodm9pZCAqKU1US19ESVNQX1JETUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10 ODE3My1kaXNwLXdkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1dETUEgfSwKKwl7IC5j b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRhdGEgPSAodm9pZCAq KU1US19ESVNQX0NPTE9SIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlz cC1hYWwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9BQUx9LAorCXsgLmNvbXBhdGlibGUg PSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtZ2FtbWEiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1Bf R0FNTUEsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC11Zm9lIiwg IC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9VRk9FIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRp YXRlayxtdDgxNzMtZHNpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFNJIH0sCisJeyAu Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHBpIiwgICAgICAgIC5kYXRhID0gKHZvaWQg KilNVEtfRFBJIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRl eCIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9NVVRFWCB9LAorCXsgLmNvbXBhdGlibGUgPSAi bWVkaWF0ZWssbXQ4MTczLWRpc3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUFdN IH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vZCIsICAgIC5kYXRh ID0gKHZvaWQgKilNVEtfRElTUF9PRCB9LAorCXsgfQorfTsKKworc3RhdGljIGludCBtdGtfZHJt X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlOworCXN0 cnVjdCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3Qg Y29tcG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXBy aXZhdGUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXZhdGUpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcHJpdmF0 ZS0+Y29tbWl0LmxvY2spOworCUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0LndvcmssIG10a19h dG9taWNfd29yayk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP VVJDRV9NRU0sIDApOworCXByaXZhdGUtPmNvbmZpZ19yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKSkgeworCQly ZXQgPSBQVFJfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gaW9yZW1hcCBtbXN5cy1jb25maWcgcmVzb3VyY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBESVNQIGZ1bmN0aW9u IGJsb2NrcyAqLworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLT5wYXJlbnQs IG5vZGUpIHsKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CisJCWVudW0gbXRr X2RkcF9jb21wX3R5cGUgY29tcF90eXBlOworCQlpbnQgY29tcF9pZDsKKworCQlvZl9pZCA9IG9m X21hdGNoX25vZGUobXRrX2RkcF9jb21wX2R0X2lkcywgbm9kZSk7CisJCWlmICghb2ZfaWQpCisJ CQljb250aW51ZTsKKworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKKwkJ CWRldl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVzXG4iLAorCQkJCW5v ZGUtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBfdHlwZSA9IChlbnVt IG10a19kZHBfY29tcF90eXBlKW9mX2lkLT5kYXRhOworCisJCWlmIChjb21wX3R5cGUgPT0gTVRL X0RJU1BfTVVURVgpIHsKKwkJCXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9ub2RlX2dldChub2Rl KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQo bm9kZSwgY29tcF90eXBlKTsKKwkJaWYgKGNvbXBfaWQgPCAwKSB7CisJCQlkZXZfd2FybihkZXYs ICJTa2lwcGluZyB1bmtub3duIGNvbXBvbmVudCAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1l KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJpdmF0ZS0+Y29tcF9ub2RlW2NvbXBfaWRdID0g b2Zfbm9kZV9nZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3VycmVudGx5IG9ubHkgdGhlIE9WTCwg UkRNQSwgRFNJLCBhbmQgRFBJIGJsb2NrcyBoYXZlCisJCSAqIHNlcGFyYXRlIGNvbXBvbmVudCBw bGF0Zm9ybSBkcml2ZXJzIGFuZCBpbml0aWFsaXplIHRoZWlyIG93bgorCQkgKiBERFAgY29tcG9u ZW50IHN0cnVjdHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4KKwkJICovCisJ CWlmIChjb21wX3R5cGUgPT0gTVRLX0RJU1BfT1ZMIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRL X0RJU1BfUkRNQSB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EU0kgfHwKKwkJICAgIGNvbXBf dHlwZSA9PSBNVEtfRFBJKSB7CisJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1h dGNoIGZvciAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbXBvbmVudF9tYXRj aF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIG5vZGUpOworCQl9IGVsc2UgeworCQkJc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcDsKKworCQkJY29tcCA9IGRldm1fa3phbGxvYyhkZXYsIHNp emVvZigqY29tcCksIEdGUF9LRVJORUwpOworCQkJaWYgKCFjb21wKSB7CisJCQkJcmV0ID0gLUVO T01FTTsKKwkJCQlnb3RvIGVycl9ub2RlOworCQkJfQorCisJCQlyZXQgPSBtdGtfZGRwX2NvbXBf aW5pdChkZXYsIG5vZGUsIGNvbXAsIGNvbXBfaWQsIE5VTEwpOworCQkJaWYgKHJldCkKKwkJCQln b3RvIGVycl9ub2RlOworCisJCQlwcml2YXRlLT5kZHBfY29tcFtjb21wX2lkXSA9IGNvbXA7CisJ CX0KKwl9CisKKwlpZiAoIXByaXZhdGUtPm11dGV4X25vZGUpIHsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gZmluZCBkaXNwLW11dGV4IG5vZGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQln b3RvIGVycl9ub2RlOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2YXRlKTsKKworCXJldCA9IGNvbXBvbmVudF9tYXN0ZXJf YWRkX3dpdGhfbWF0Y2goZGV2LCAmbXRrX2RybV9vcHMsIG1hdGNoKTsKKwlpZiAocmV0KQorCQln b3RvIGVycl9wbTsKKworCXJldHVybiAwOworCitlcnJfcG06CisJcG1fcnVudGltZV9kaXNhYmxl KGRldik7CitlcnJfbm9kZToKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlm b3IgKGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQo cHJpdmF0ZS0+Y29tcF9ub2RlW2ldKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10 a19kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10 a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlu dCBpOworCisJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm10a19kcm1fb3BzKTsK KwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+ bXV0ZXhfbm9kZSk7CisJZm9yIChpID0gMDsgaSA8IEREUF9DT01QT05FTlRfSURfTUFYOyBpKysp CisJCW9mX25vZGVfcHV0KHByaXZhdGUtPmNvbXBfbm9kZVtpXSk7CisKKwlyZXR1cm4gMDsKK30K KworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBtdGtfZHJtX3N5c19zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZh dGUtPmRybTsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkcm0pOworCisJcHJpdmF0 ZS0+c3VzcGVuZF9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3N1c3BlbmQoZHJtKTsKKwlpZiAo SVNfRVJSKHByaXZhdGUtPnN1c3BlbmRfc3RhdGUpKSB7CisJCWRybV9rbXNfaGVscGVyX3BvbGxf ZW5hYmxlKGRybSk7CisJCXJldHVybiBQVFJfRVJSKHByaXZhdGUtPnN1c3BlbmRfc3RhdGUpOwor CX0KKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3N1c3BlbmRcbiIpOworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisKKwlkcm1f YXRvbWljX2hlbHBlcl9yZXN1bWUoZHJtLCBwcml2YXRlLT5zdXNwZW5kX3N0YXRlKTsKKwlkcm1f a21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOworCisJRFJNX0RFQlVHX0RSSVZFUigibXRrX2Ry bV9zeXNfcmVzdW1lXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExF X0RFVl9QTV9PUFMobXRrX2RybV9wbV9vcHMsIG10a19kcm1fc3lzX3N1c3BlbmQsCisJCQkgbXRr X2RybV9zeXNfcmVzdW1lKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRr X2RybV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1tbXN5 cyIsIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHJt X3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJPSBtdGtfZHJtX3Byb2JlLAorCS5yZW1vdmUJ PSBtdGtfZHJtX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1kcm0i LAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX29mX2lkcywKKwkJLnBtICAgICA9ICZtdGtf ZHJtX3BtX29wcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBj b25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsKKwkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCisJ Jm10a19kZHBfZHJpdmVyLAorCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAorCSZtdGtfZGlzcF9yZG1h X2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQorewor CWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJt X2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10a19k cm1fZHJpdmVyc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byBy ZWdpc3RlciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10a19kcm1fZHJpdmVyc1tpXS0+ ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOwor CitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlciht dGtfZHJtX2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19l eGl0IG10a19kcm1fZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0la RShtdGtfZHJtX2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91 bnJlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19kcm1f aW5pdCk7Cittb2R1bGVfZXhpdChtdGtfZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJZVCBT SEVOIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0 ZWsgU29DIERSTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMjdkYzhmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2Rydi5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRFJWX0gKKyNkZWZpbmUgTVRLX0RSTV9E UlZfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21w LmgiCisKKyNkZWZpbmUgTUFYX0NSVEMJMgorI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKKworc3Ry dWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVj dCBkcm1fZGV2aWNlOworc3RydWN0IGRybV9mYl9oZWxwZXI7CitzdHJ1Y3QgZHJtX3Byb3BlcnR5 Oworc3RydWN0IHJlZ21hcDsKKworc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRybTsKKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2OworCisJc3RydWN0IGRybV9j cnRjICpjcnRjW01BWF9DUlRDXTsKKwl1bnNpZ25lZCBpbnQgbnVtX3BpcGVzOworCisJc3RydWN0 IGRldmljZV9ub2RlICptdXRleF9ub2RlOworCXN0cnVjdCBkZXZpY2UgKm11dGV4X2RldjsKKwl2 b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2Rl W0REUF9DT01QT05FTlRfSURfTUFYXTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpkZHBfY29tcFtE RFBfQ09NUE9ORU5UX0lEX01BWF07CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGU7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCQlzdHJ1Y3QgbXV0ZXgg bG9jazsKKwl9IGNvbW1pdDsKKworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdXNwZW5kX3N0 YXRlOworfTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXI7 CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0 ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRp ZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2 NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8 bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNs dWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJt dGtfZHJtX2dlbS5oIgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVy ZS4KKyAqCisgKiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJy YXkgb2YgZ2VtIG9iamVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyCWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUg cGxhbmUgKi8KKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5l IHRvX210a19mYih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisK K3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIo ZmIpOworCisJcmV0dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJt X2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkK K3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVy biBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRs ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZi KTsKKworCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3Vu cmVmZXJlbmNlX3VubG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2Zi X2Z1bmNzID0geworCS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAor CS5kZXN0cm95ID0gbXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtf ZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQkJY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50 IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAh PSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6 ZW9mKCptdGtfZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+ YmFzZSwgbW9kZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJh bWVidWZmZXJfaW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlp ZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJc biIpOworCQlrZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJl dHVybiBtdGtfZmI7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGlu IGZiJ3MgZ2VtIG9iamVjdCdzIHJlc2VydmF0aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1F UkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCwgZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQo c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpn ZW07CisJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlm ICghZmIpCisJCXJldHVybiAwOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlp ZiAoIWdlbSB8fCAhZ2VtLT5kbWFfYnVmIHx8ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVy biAwOworCisJcmVzdiA9IGdlbS0+ZG1hX2J1Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9v YmplY3Rfd2FpdF90aW1lb3V0X3JjdShyZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1ND SEVEVUxFX1RJTUVPVVQpOworCS8qIE1BWF9TQ0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1F UkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCAqLworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQly ZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10 a19kcm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9k ZV9mYl9jbWQyICpjbWQpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOwor CXVuc2lnbmVkIGludCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwg YnBwOworCWludCByZXQ7CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxf Zm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9n ZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0p CisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9j cHAoY21kLT5waXhlbF9mb3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBp dGNoZXNbMF0gKyB3aWR0aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlm IChnZW0tPnNpemUgPCBzaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVu Y2U7CisJfQorCisJbXRrX2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBn ZW0pOworCWlmIChJU19FUlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJ CWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVm ZXJlbmNlOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0 dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMg QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19E Uk1fRkJfSAorI2RlZmluZSBNVEtfRFJNX0ZCX0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpt dGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19m Yl93YWl0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJ ICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBk cm1fbW9kZV9mYl9jbWQyICpjbWQpOworCisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmE3NzNiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9nZW0uYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRr X2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCitzdGF0aWMgc3RydWN0IG10 a19kcm1fZ2VtX29iaiAqbXRrX2RybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkJCQkJdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10 a19nZW1fb2JqOworCWludCByZXQ7CisKKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpF KTsKKworCW10a19nZW1fb2JqID0ga3phbGxvYyhzaXplb2YoKm10a19nZW1fb2JqKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFtdGtfZ2VtX29iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisK KwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXpl KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGdl bSBvYmplY3RcbiIpOworCQlrZnJlZShtdGtfZ2VtX29iaik7CisJCXJldHVybiBFUlJfUFRSKHJl dCk7CisJfQorCisJcmV0dXJuIG10a19nZW1fb2JqOworfQorCitzdHJ1Y3QgbXRrX2RybV9nZW1f b2JqICptdGtfZHJtX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAg c2l6ZV90IHNpemUsIGJvb2wgYWxsb2Nfa21hcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRl ICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtf Z2VtOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwltdGtfZ2Vt ID0gbXRrX2RybV9nZW1faW5pdChkZXYsIHNpemUpOworCWlmIChJU19FUlIobXRrX2dlbSkpCisJ CXJldHVybiBFUlJfQ0FTVChtdGtfZ2VtKTsKKworCW9iaiA9ICZtdGtfZ2VtLT5iYXNlOworCisJ aW5pdF9kbWFfYXR0cnMoJm10a19nZW0tPmRtYV9hdHRycyk7CisJZG1hX3NldF9hdHRyKERNQV9B VFRSX1dSSVRFX0NPTUJJTkUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJaWYgKCFhbGxvY19r bWFwKQorCQlkbWFfc2V0X2F0dHIoRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcsICZtdGtfZ2Vt LT5kbWFfYXR0cnMpOworCisJbXRrX2dlbS0+Y29va2llID0gZG1hX2FsbG9jX2F0dHJzKHByaXYt PmRtYV9kZXYsIG9iai0+c2l6ZSwKKwkJCQkJICAmbXRrX2dlbS0+ZG1hX2FkZHIsIEdGUF9LRVJO RUwsCisJCQkJCSAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKCFtdGtfZ2VtLT5jb29raWUp IHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgJXp4IGJ5dGUgZG1hIGJ1ZmZlciIs IG9iai0+c2l6ZSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2dlbV9mcmVlOworCX0K KworCWlmIChhbGxvY19rbWFwKQorCQltdGtfZ2VtLT5rdmFkZHIgPSBtdGtfZ2VtLT5jb29raWU7 CisKKwlEUk1fREVCVUdfRFJJVkVSKCJjb29raWUgPSAlcCBkbWFfYWRkciA9ICVwYWQgc2l6ZSA9 ICV6dVxuIiwKKwkJCSBtdGtfZ2VtLT5jb29raWUsICZtdGtfZ2VtLT5kbWFfYWRkciwKKwkJCSBz aXplKTsKKworCXJldHVybiBtdGtfZ2VtOworCitlcnJfZ2VtX2ZyZWU6CisJZHJtX2dlbV9vYmpl Y3RfcmVsZWFzZShvYmopOworCWtmcmVlKG10a19nZW0pOworCXJldHVybiBFUlJfUFRSKHJldCk7 Cit9CisKK3ZvaWQgbXRrX2RybV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1f b2JqKG9iaik7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZf cHJpdmF0ZTsKKworCWlmIChtdGtfZ2VtLT5zZykKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9i aiwgbXRrX2dlbS0+c2cpOworCWVsc2UKKwkJZG1hX2ZyZWVfYXR0cnMocHJpdi0+ZG1hX2Rldiwg b2JqLT5zaXplLCBtdGtfZ2VtLT5jb29raWUsCisJCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIs ICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2Vt IG9iamVjdC4gKi8KKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtf Z2VtKTsKK30KKworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9k ZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2Vt OworCWludCByZXQ7CisKKwlhcmdzLT5waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAq IGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0 OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNl KTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKwor CS8qCisJICogYWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdp c3RlcmVkCisJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAq LworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNl LCAmYXJncy0+aGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOwor CisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cu ICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2Up OworCisJcmV0dXJuIDA7CisKK2Vycl9oYW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVf b2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9n ZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0 KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBk cm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmop IHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2Jq KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zm c2V0X2FkZHIoJm9iai0+dm1hX25vZGUpOworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxs eFxuIiwgKm9mZnNldCk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxv Y2tlZChvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2Jq ZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCisKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmog Km10a19nZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUg KnByaXYgPSBvYmotPmRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKgorCSAqIGRtYV9hbGxvY19hdHRy cygpIGFsbG9jYXRlZCBhIHN0cnVjdCBwYWdlIHRhYmxlIGZvciBtdGtfZ2VtLCBzbyBjbGVhcgor CSAqIFZNX1BGTk1BUCBmbGFnIHRoYXQgd2FzIHNldCBieSBkcm1fZ2VtX21tYXBfb2JqKCkvZHJt X2dlbV9tbWFwKCkuCisJICovCisJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+ dm1fcGdvZmYgPSAwOworCisJcmV0ID0gZG1hX21tYXBfYXR0cnMocHJpdi0+ZG1hX2Rldiwgdm1h LCBtdGtfZ2VtLT5jb29raWUsCisJCQkgICAgIG10a19nZW0tPmRtYV9hZGRyLCBvYmotPnNpemUs ICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1h KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50 IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1h cChvYmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxw LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJ cmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFs bG9jYXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhl IHRhYmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQg YnkKKyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3 bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVj dCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19n ZW1fb2JqKG9iaik7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5k ZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwlpbnQgcmV0OworCisJc2d0ID0g a3phbGxvYyhzaXplb2YoKnNndCksIEdGUF9LRVJORUwpOworCWlmICghc2d0KQorCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKKworCXJldCA9IGRtYV9nZXRfc2d0YWJsZV9hdHRycyhwcml2LT5k bWFfZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIs IG9iai0+c2l6ZSwKKwkJCQkgICAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgewor CQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJl ZShzZ3QpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisK K3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCwgc3RydWN0IHNnX3RhYmxlICpzZykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtf Z2VtOworCWludCByZXQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBp OworCWRtYV9hZGRyX3QgZXhwZWN0ZWQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChk ZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJl dHVybiBFUlJfUFRSKFBUUl9FUlIobXRrX2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRk cmVzcyhzZy0+c2dsKTsKKwlmb3JfZWFjaF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsK KwkJaWYgKHNnX2RtYV9hZGRyZXNzKHMpICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNn X3RhYmxlIGlzIG5vdCBjb250aWd1b3VzIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBl cnJfZ2VtX2ZyZWU7CisJCX0KKwkJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2Rt YV9sZW4ocyk7CisJfQorCisJbXRrX2dlbS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+ c2dsKTsKKwltdGtfZ2VtLT5zZyA9IHNnOworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitl cnJfZ2VtX2ZyZWU6CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uM2EyYTU2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln aHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmlu ZSBfTVRLX0RSTV9HRU1fSF8KKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBt dGsgZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUuCisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAq CS0gYSBuZXcgaGFuZGxlIHRvIHRoaXMgZ2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKgli eSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoKS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUg b2YgZG1hX2FsbG9jX2F0dHJzKCksIGtlZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBr dmFkZHI6IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRk cjogZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1 dGVzIG9mIGdlbSBidWZmZXIuCisgKgorICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFu c2ZlcnJlZCB0byB1c2VyIGFzIGttc19iby5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0 aGUgYnVmZmVyIHRocm91Z2gga21zX2JvLmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2Vt X29iaiB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJ dm9pZAkJCSprdmFkZHI7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRy cwlkbWFfYXR0cnM7CisJc3RydWN0IHNnX3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210 a19nZW1fb2JqKHgpCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNl KQorCit2b2lkIG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Z2VtKTsKK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgYm9vbCBhbGxvY19rbWFwKTsK K2ludCBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwg c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1 bWIgKmFyZ3MpOworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5k bGUsCisJCQkJdWludDY0X3QgKm9mZnNldCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3Qg ZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2Vt X21tYXBfYnVmKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFi bGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpt dGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJ c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9w bGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODk4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpAQCAtMCwwICsxLDI0MCBA QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENL IEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0 Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Ry di5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgor I2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10g PSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9G T1JNQVRfUkdCNTY1LAorfTsKKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2VuYWJsZShzdHJ1Y3Qg bXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLCBib29sIGVuYWJsZSwKKwkJCSAgICAgZG1hX2FkZHJf dCBhZGRyLCBzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxh bmUgPSAmbXRrX3BsYW5lLT5iYXNlOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0g dG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoLCBm b3JtYXQ7CisJaW50IHgsIHk7CisKKwlpZiAoV0FSTl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFi bGUgJiYgIXBsYW5lLT5zdGF0ZS0+ZmIpKSkKKwkJcmV0dXJuOworCisJaWYgKHBsYW5lLT5zdGF0 ZS0+ZmIpIHsKKwkJcGl0Y2ggPSBwbGFuZS0+c3RhdGUtPmZiLT5waXRjaGVzWzBdOworCQlmb3Jt YXQgPSBwbGFuZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGl0Y2gg PSAwOworCQlmb3JtYXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4OworCX0KKworCXggPSBwbGFuZS0+ c3RhdGUtPmNydGNfeDsKKwl5ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3k7CisKKwlpZiAoeCA8IDAp IHsKKwkJYWRkciAtPSB4ICogNDsKKwkJeCA9IDA7CisJfQorCisJaWYgKHkgPCAwKSB7CisJCWFk ZHIgLT0geSAqIHBpdGNoOworCQl5ID0gMDsKKwl9CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUg PSBlbmFibGU7CisJc3RhdGUtPnBlbmRpbmcucGl0Y2ggPSBwaXRjaDsKKwlzdGF0ZS0+cGVuZGlu Zy5mb3JtYXQgPSBmb3JtYXQ7CisJc3RhdGUtPnBlbmRpbmcuYWRkciA9IGFkZHI7CisJc3RhdGUt PnBlbmRpbmcueCA9IHg7CisJc3RhdGUtPnBlbmRpbmcueSA9IHk7CisJc3RhdGUtPnBlbmRpbmcu d2lkdGggPSBkZXN0LT54MiAtIGRlc3QtPngxOworCXN0YXRlLT5wZW5kaW5nLmhlaWdodCA9IGRl c3QtPnkyIC0gZGVzdC0+eTE7CisJd21iKCk7IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1l dGVycyBhcmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRy dWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCWlmIChwbGFuZS0+ c3RhdGUpIHsKKwkJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfdW5y ZWZlcmVuY2UocGxhbmUtPnN0YXRlLT5mYik7CisKKwkJc3RhdGUgPSB0b19tdGtfcGxhbmVfc3Rh dGUocGxhbmUtPnN0YXRlKTsKKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJ fSBlbHNlIHsKKwkJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsK KwkJaWYgKCFzdGF0ZSkKKwkJCXJldHVybjsKKwkJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNl OworCX0KKworCXN0YXRlLT5iYXNlLnBsYW5lID0gcGxhbmU7CisJc3RhdGUtPnBlbmRpbmcuZm9y bWF0ID0gRFJNX0ZPUk1BVF9SR0I1NjU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICptdGtfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQor eworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0 ZShwbGFuZS0+c3RhdGUpOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJc3Rh dGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQor CQlyZXR1cm4gTlVMTDsKKworCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0 YXRlKHBsYW5lLCAmc3RhdGUtPmJhc2UpOworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5wbGFuZSAh PSBwbGFuZSk7CisKKwlzdGF0ZS0+cGVuZGluZyA9IG9sZF9zdGF0ZS0+cGVuZGluZzsKKworCXJl dHVybiAmc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJv eV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRl KHBsYW5lLCBzdGF0ZSk7CisJa2ZyZWUodG9fbXRrX3BsYW5lX3N0YXRlKHN0YXRlKSk7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG10a19wbGFuZV9mdW5jcyA9IHsK KwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNh YmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9 IGRybV9wbGFuZV9jbGVhbnVwLAorCS5yZXNldCA9IG10a19wbGFuZV9yZXNldCwKKwkuYXRvbWlj X2R1cGxpY2F0ZV9zdGF0ZSA9IG10a19wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19k ZXN0cm95X3N0YXRlID0gbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGlj IGludCBtdGtfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJ CSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRl OworCWJvb2wgdmlzaWJsZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3Rh dGUtPmNydGNfeCwKKwkJLnkxID0gc3RhdGUtPmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmNydGNf eCArIHN0YXRlLT5jcnRjX3csCisJCS55MiA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19o LAorCX07CisJc3RydWN0IGRybV9yZWN0IHNyYyA9IHsKKwkJLyogMTYuMTYgZml4ZWQgcG9pbnQg Ki8KKwkJLngxID0gc3RhdGUtPnNyY194LAorCQkueTEgPSBzdGF0ZS0+c3JjX3ksCisJCS54MiA9 IHN0YXRlLT5zcmNfeCArIHN0YXRlLT5zcmNfdywKKwkJLnkyID0gc3RhdGUtPnNyY195ICsgc3Rh dGUtPnNyY19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAo IWZiKQorCQlyZXR1cm4gMDsKKworCWlmICghbXRrX2ZiX2dldF9nZW1fb2JqKGZiKSkgeworCQlE Uk1fREVCVUdfS01TKCJidWZmZXIgaXMgbnVsbFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0K KworCWlmICghc3RhdGUtPmNydGMpCisJCXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9h dG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElT X0VSUihjcnRjX3N0YXRlKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwljbGlw LngyID0gY3J0Y19zdGF0ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+ bW9kZS52ZGlzcGxheTsKKworCXJldHVybiBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShw bGFuZSwgc3RhdGUtPmNydGMsIGZiLAorCQkJCQkgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJ CQkJICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCSAgICAgRFJNX1BMQU5F X0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJCQkgICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30K Kworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCisJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlz dHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+ c3RhdGUpOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dl bTsKKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5l KTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194 LAorCQkueTEgPSBzdGF0ZS0+YmFzZS5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNf eCArIHN0YXRlLT5iYXNlLmNydGNfdywKKwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3Rh dGUtPmJhc2UuY3J0Y19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisK KwlpZiAoIWNydGMpCisJCXJldHVybjsKKworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5z dGF0ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUt Pm1vZGUudmRpc3BsYXk7CisJZHJtX3JlY3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwln ZW0gPSBtdGtfZmJfZ2V0X2dlbV9vYmooc3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19t dGtfZ2VtX29iaihnZW0pOworCW10a19wbGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtf Z2VtLT5kbWFfYWRkciwgJmRlc3QpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWlj X2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUg PSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nLmVu YWJsZSA9IGZhbHNlOworCXdtYigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBp cyBzZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9o ZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ss CisJLmF0b21pY191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rp c2FibGUgPSBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsCit9OworCitpbnQgbXRrX3BsYW5lX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFu ZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlw ZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcykKK3sKKwlpbnQgZXJyOworCisJZXJyID0g ZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRldiwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVf Y3J0Y3MsCisJCQkJICAgICAgICZtdGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAg IEFSUkFZX1NJWkUoZm9ybWF0cyksIHR5cGUsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQor CisJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxw ZXJfZnVuY3MpOworCW10a19wbGFuZS0+aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNzJhN2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly aWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRp YXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICovCisKKyNpZm5kZWYgX01US19EUk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExB TkVfSF8KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+CisKK3N0cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOwor CXVuc2lnbmVkIGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0 ZSB7CisJYm9vbAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFk ZHI7CisJdW5zaWduZWQgaW50CQkJcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVu c2lnbmVkIGludAkJCXg7CisJdW5zaWduZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0 aDsKKwl1bnNpZ25lZCBpbnQJCQloZWlnaHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVj dCBtdGtfcGxhbmVfc3RhdGUgeworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3Ry dWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5l IHN0cnVjdCBtdGtfZHJtX3BsYW5lICp0b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUs IGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9f bXRrX3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVy biBjb250YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQor CitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19k cm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywg ZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNl bmRpZgotLSAKMi44LjAucmMzCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==