From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v8 02/13] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Mon, 4 Jan 2016 18:36:34 +0100 Message-ID: <1451929005-16372-3-git-send-email-p.zabel@pengutronix.de> References: <1451929005-16372-1-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1451929005-16372-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Stephen Boyd , Tomasz Figa , Kumar Gala List-Id: devicetree@vger.kernel.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0 aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0 IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8 ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IFBoaWxpcHAgWmFiZWwgPHAuemFi ZWxAcGVuZ3V0cm9uaXguZGU+Ci0tLQpDaGFuZ2VzIHNpbmNlIHY3OgogLSBNb3ZlIFBBTkVMIGFu ZCBNSVBJX0RTSSBjb25maWcgc2VsZWN0aW9uIHRvIGxhdGVyIHBhdGNoZXMKIC0gU29ydCBvYmpl Y3QgZmlsZXMgYWxwaGFiZXRpY2FsbHkgaW4gTWFrZWZpbGUKIC0gRHJvcCBtdGtfY3J0Yy0+cGlw ZSwgdXNlIGRybV9jcnRjX2hhbmRsZV92YmxhbmsgaW5zdGVhZAogLSBNb3ZlIGNvcGllZCBldmVu dCBmcm9tIG10a19jcnRjX3N0YXRlIGJhY2sgdG8gbXRrX2NydGMKIC0gV2FpdCBmb3IgZXhjbHVz aXZlIGZlbmNlcyBvbiBpbmNvbWluZyBmcmFtZWJ1ZmZlcnMKICAgdXNpbmcgcmVzZXJ2YXRpb25f b2JqZWN0X3dhaXRfdGltZW91dF9yY3UgaW4gLmF0b21pY19jb21wbGV0ZSgpLgogLSBBZGQgbWlz c2luZyBhdG9taWMgZGVzdHJveV9zdGF0ZSBjYWxsYmFja3MKIC0gUmVuYW1lIG10a19jcnRjX2Rk cF9wb3dlcl9vbi9vZiB0byBfY2xrX2VuYWJsZS9kaXNhYmxlCiAtIEFkZCBhIHBlbmRpbmdfcGxh bmVzIGZsYWcgdG8gbXRrX2NydGMgc28gd2UgY2FuIGF0b21pY2FsbHkgdXBkYXRlIHRoZSBwbGFu ZQogICBjb25maWd1cmF0aW9uCiAtIEZvbGQgbXRrX2RybV9jcnRjX2NvbW1pdCBpbnRvIG10a19k cm1fY3J0Y19hdG9taWNfZmx1c2gKIC0gTWFrZSBhbGwgZGRwX2NvbXAgY2FsbGJhY2tzIHRha2Ug YSBzdHJ1Y3QgbXRrX2RkcF9jb21wICogZmlyc3QgcGFyYW1ldGVyLgogLSBGaXggT0QgZGRwX2Nv bXAgZnVuY3Rpb24gc2V0dXAKIC0gRGVmZXIgdW50aWwgaW9tbXUgaXMgcHJlc2VudAogLSBGaXgg cHJvYmUgZXJyb3IgcGF0aAogLSBSZWxheCBzb21lIHdyaXRlbHMKLS0tCiBkcml2ZXJzL2dwdS9k cm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL0tjb25maWcgICAgICAgICAgICB8ICAxMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv TWFrZWZpbGUgICAgICAgICAgIHwgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZGlzcF9vdmwuYyAgICAgfCAzMDEgKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2NydGMuYyAgICAgfCA2MDMgKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oICAgICB8ICAzMiArKwog ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgICAgICB8IDM1NSArKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaCAgICAgIHwg IDQxICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jIHwgMjc1 ICsrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21w LmggfCAxNDggKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMg ICAgICB8IDU3NyArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZHJ2LmggICAgICB8ICA1MiArKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2ZiLmMgICAgICAgfCAxNjUgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2ZiLmggICAgICAgfCAgMjkgKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2dlbS5jICAgICAgfCAyMjcgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTUgKysrCiBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQyICsrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oICAgIHwgIDU5ICsrKwogMTkgZmlsZXMgY2hh bmdlZCwgMzE4NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3Bs YW5lLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1 L2RybS9LY29uZmlnCmluZGV4IGM0YmY5YTEuLjhmZGIwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0yNjYsMyAr MjY2LDUgQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnIgogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUv ZHJtL3ZjNC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u ZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL01ha2VmaWxlCmluZGV4IDFlOWZmNGMuLjYwN2E0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTcxLDYg KzcxLDcgQEAgb2JqLSQoQ09ORklHX0RSTV9NU00pICs9IG1zbS8KIG9iai0kKENPTkZJR19EUk1f VEVHUkEpICs9IHRlZ3JhLwogb2JqLSQoQ09ORklHX0RSTV9TVEkpICs9IHN0aS8KIG9iai0kKENP TkZJR19EUk1fSU1YKSArPSBpbXgvCitvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRp YXRlay8KIG9iai15CQkJKz0gaTJjLwogb2JqLXkJCQkrPSBwYW5lbC8KIG9iai15CQkJKz0gYnJp ZGdlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi44ZGFkODkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL0tjb25maWcKQEAgLTAsMCArMSwxMiBAQAorY29uZmlnIERSTV9NRURJQVRFSworCXRyaXN0 YXRlICJEUk0gU3VwcG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIKKwlkZXBlbmRzIG9uIERSTQorCWRl cGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCAoQVJNICYmIENPTVBJTEVfVEVTVCkKKwlzZWxlY3Qg RFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJc2VsZWN0IE1US19TTUkKKwloZWxw CisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBNZWRpYXRlayBTb0NzLgorCSAg VGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZWRpYXRlay1kcm0KKwkgIFRoaXMgZHJpdmVyIHBy b3ZpZGVzIGtlcm5lbCBtb2RlIHNldHRpbmcgYW5kCisJICBidWZmZXIgbWFuYWdlbWVudCB0byB1 c2Vyc3BhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYzdjYzQxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACittZWRpYXRlay1kcm0teSA6PSBt dGtfZGlzcF9vdmwubyBcCisJCSAgbXRrX2RybV9jcnRjLm8gXAorCQkgIG10a19kcm1fZGRwLm8g XAorCQkgIG10a19kcm1fZGRwX2NvbXAubyBcCisJCSAgbXRrX2RybV9kcnYubyBcCisJCSAgbXRr X2RybV9mYi5vIFwKKwkJICBtdGtfZHJtX2dlbS5vIFwKKwkJICBtdGtfZHJtX3BsYW5lLm8KKwor b2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi40NTVlNjJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kaXNwX292bC5jCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy MDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgv Y2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2Zf ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJt dGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lOVEVOCQkJMHgwMDA0 CisjZGVmaW5lIE9WTF9GTUVfQ1BMX0lOVAkJCQkJQklUKDEpCisjZGVmaW5lIERJU1BfUkVHX09W TF9JTlRTVEEJCQkweDAwMDgKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0VOCQkJCTB4MDAwYworI2Rl ZmluZSBESVNQX1JFR19PVkxfUlNUCQkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lf U0laRQkJCTB4MDAyMAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX0JHQ0xSCQkJMHgwMDI4Cisj ZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfQ09OCQkJMHgwMDJjCisjZGVmaW5lIERJU1BfUkVHX09W TF9DT04obikJCQkoMHgwMDMwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1NS Q19TSVpFKG4pCQkoMHgwMDM4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX09G RlNFVChuKQkJCSgweDAwM2MgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUElU Q0gobikJCQkoMHgwMDQ0ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFf Q1RSTChuKQkJKDB4MDBjMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1B X0dNQyhuKQkJKDB4MDBjOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9BRERS KG4pCQkJKDB4MGY0MCArIDB4MjAgKiAobikpCisKK2VudW0gT1ZMX0lOUFVUX0ZPUk1BVCB7CisJ T1ZMX0lORk1UX1JHQjU2NSA9IDAsCisJT1ZMX0lORk1UX1JHQjg4OCA9IDEsCisJT1ZMX0lORk1U X1JHQkE4ODg4ID0gMiwKKwlPVkxfSU5GTVRfQVJHQjg4ODggPSAzLAorfTsKKworI2RlZmluZQlP VkxfUkRNQV9NRU1fR01DCTB4NDA0MDIwMjAKKyNkZWZpbmUJT1ZMX0FFTgkJCUJJVCg4KQorI2Rl ZmluZQlPVkxfQUxQSEEJCTB4ZmYKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsIC0gRElT UF9PVkwgZHJpdmVyIHN0cnVjdHVyZQorICogQGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5p bmcgdHlwZSBlbnVtIGFuZCBoYXJkd2FyZSByZXNvdXJjZXMKKyAqIEBkcm1fZGV2aWNlIC0gYmFj a2xpbmsgdG8gYWxsb3cgdGhlIGlycSBoYW5kbGVyIHRvIGZpbmQgdGhlIGFzc29jaWF0ZWQgY3J0 YworICovCitzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQlkZHBf Y29tcDsKKwlzdHJ1Y3QgZHJtX2RldmljZQkJKmRybV9kZXY7Cit9OworCitzdGF0aWMgaXJxcmV0 dXJuX3QgbXRrX2Rpc3Bfb3ZsX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sK KwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2lkOworCXN0cnVjdCBtdGtfZGRwX2Nv bXAgKm92bCA9ICZwcml2LT5kZHBfY29tcDsKKworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24g aW50ZXJydXB0ICovCisJd3JpdGVsKDB4MCwgb3ZsLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVFNU QSk7CisKKwltdGtfY3J0Y19kZHBfaXJxKHByaXYtPmRybV9kZXYsIG92bCk7CisKKwlyZXR1cm4g SVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfZW5hYmxlX3ZibGFuayhzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbF9yZWxheGVkKE9WTF9GTUVfQ1BMX0lO VCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIG10 a19vdmxfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0 ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitz dGF0aWMgdm9pZCBtdGtfb3ZsX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJ d3JpdGVsX3JlbGF4ZWQoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKwor c3RhdGljIHZvaWQgbXRrX292bF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJ d3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKwor c3RhdGljIHZvaWQgbXRrX292bF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5z aWduZWQgaW50IHcsCisJCQkgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNo KQoreworCWlmICh3ICE9IDAgJiYgaCAhPSAwKQorCQl3cml0ZWxfcmVsYXhlZChoIDw8IDE2IHwg dywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9ST0lfU0laRSk7CisJd3JpdGVsX3JlbGF4ZWQo MHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUik7CisKKwl3cml0ZWwoMHgx LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JTVCk7CisJd3JpdGVsKDB4MCwgY29tcC0+cmVn cyArIERJU1BfUkVHX09WTF9SU1QpOworfQorCitzdGF0aWMgYm9vbCBoYXNfcmJfc3dhcHBlZCh1 bnNpZ25lZCBpbnQgZm10KQoreworCXN3aXRjaCAoZm10KSB7CisJY2FzZSBEUk1fRk9STUFUX0JH Ujg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4 OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoK KwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvdmxfZm10X2Nv bnZlcnQodW5zaWduZWQgaW50IGZtdCkKK3sKKwlzd2l0Y2ggKGZtdCkgeworCWNhc2UgRFJNX0ZP Uk1BVF9SR0I4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkJcmV0dXJuIE9WTF9JTkZN VF9SR0I4ODg7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRfQkdS NTY1OgorCQlyZXR1cm4gT1ZMX0lORk1UX1JHQjU2NTsKKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4 ODg6CisJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6CisJCXJldHVybiBPVkxfSU5GTVRfQVJHQjg4 ODg7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4 OgorCQlyZXR1cm4gT1ZMX0lORk1UX1JHQkE4ODg4OworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigi dW5zdXBwb3J0ZWQgZm9ybWF0WyUwOHhdXG4iLCBmbXQpOworCQlyZXR1cm4gT1ZMX0lORk1UX1JH Qjg4ODsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfb24oc3RydWN0IG10a19k ZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOwor CisJd3JpdGVsKDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4KSk7 CisJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRN QV9HTUMoaWR4KSk7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NS Q19DT04pOworCXJlZyA9IHJlZyB8IEJJVChpZHgpOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3Mg KyBESVNQX1JFR19PVkxfU1JDX0NPTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJf b2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5z aWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxf U1JDX0NPTik7CisJcmVnID0gcmVnICYgfkJJVChpZHgpOworCXdyaXRlbChyZWcsIGNvbXAtPnJl Z3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7CisKKwl3cml0ZWwoMHgwLCBjb21wLT5yZWdzICsg RElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9s YXllcl9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCwK KwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9w ZW5kaW5nX3N0YXRlICpwZW5kaW5nID0gJnN0YXRlLT5wZW5kaW5nOworCXVuc2lnbmVkIGludCBh ZGRyID0gcGVuZGluZy0+YWRkcjsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBwZW5kaW5nLT5waXRj aCAmIDB4ZmZmZjsKKwl1bnNpZ25lZCBpbnQgZm10ID0gcGVuZGluZy0+Zm9ybWF0OworCXVuc2ln bmVkIGludCBvZmZzZXQgPSAocGVuZGluZy0+eSA8PCAxNikgfCBwZW5kaW5nLT54OworCXVuc2ln bmVkIGludCBzcmNfc2l6ZSA9IChwZW5kaW5nLT5oZWlnaHQgPDwgMTYpIHwgcGVuZGluZy0+d2lk dGg7CisJdW5zaWduZWQgaW50IGNvbjsKKworCWNvbiA9IGhhc19yYl9zd2FwcGVkKGZtdCkgPDwg MjQgfCBvdmxfZm10X2NvbnZlcnQoZm10KSA8PCAxMjsKKwlpZiAoaWR4ICE9IDApCisJCWNvbiB8 PSBPVkxfQUVOIHwgT1ZMX0FMUEhBOworCisJd3JpdGVsKGNvbiwgY29tcC0+cmVncyArIERJU1Bf UkVHX09WTF9DT04oaWR4KSk7CisJd3JpdGVsKHBpdGNoLCBjb21wLT5yZWdzICsgRElTUF9SRUdf T1ZMX1BJVENIKGlkeCkpOworCXdyaXRlbChzcmNfc2l6ZSwgY29tcC0+cmVncyArIERJU1BfUkVH X09WTF9TUkNfU0laRShpZHgpKTsKKwl3cml0ZWwob2Zmc2V0LCBjb21wLT5yZWdzICsgRElTUF9S RUdfT1ZMX09GRlNFVChpZHgpKTsKKwl3cml0ZWwoYWRkciwgY29tcC0+cmVncyArIERJU1BfUkVH X09WTF9BRERSKGlkeCkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m dW5jcyBtdGtfZGlzcF9vdmxfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAor CS5zdGFydCA9IG10a19vdmxfc3RhcnQsCisJLnN0b3AgPSBtdGtfb3ZsX3N0b3AsCisJLmVuYWJs ZV92YmxhbmsgPSBtdGtfb3ZsX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRr X292bF9kaXNhYmxlX3ZibGFuaywKKwkubGF5ZXJfb24gPSBtdGtfb3ZsX2xheWVyX29uLAorCS5s YXllcl9vZmYgPSBtdGtfb3ZsX2xheWVyX29mZiwKKwkubGF5ZXJfY29uZmlnID0gbXRrX292bF9s YXllcl9jb25maWcsCit9OworCitzdGF0aWMgaW50IG10a19kaXNwX292bF9iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQl2b2lkICpkYXRhKQoreworCXN0 cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJldDsKKworCXByaXYtPmRybV9kZXYg PSBkcm1fZGV2OworCisJcmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZwcml2 LT5kZHBfY29tcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g cmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1l LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2 b2lkIG10a19kaXNwX292bF91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9 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 bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmNmU1NAotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpA QCAtMCwwICsxLDYwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpbmNsdWRlIDxhc20vYmFycmllci5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgv Y2xrLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPHNvYy9tZWRp YXRlay9zbWkuaD4KKworI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2Ry bV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rk cF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKyNpbmNsdWRlICJtdGtfZHJtX3Bs YW5lLmgiCisKKy8qKgorICogc3RydWN0IG10a19kcm1fY3J0YyAtIE1lZGlhVGVrIHNwZWNpZmlj IGNydGMgc3RydWN0dXJlLgorICogQGJhc2U6IGNydGMgb2JqZWN0LgorICogQGVuYWJsZWQ6IHJl Y29yZHMgd2hldGhlciBjcnRjX2VuYWJsZSBzdWNjZWVkZWQKKyAqIEBkb19mbHVzaDogZW5hYmxl ZCBieSBhdG9taWNfZmx1c2gsIGNhdXNlcyBwbGFuZSBhdG9taWNfdXBkYXRlIHRvIGNvbW1pdAor ICogICAgICAgICAgICBjaGFuZ2VkIHN0YXRlIGltbWVkaWF0ZWx5LgorICogQHBsYW5lczogYXJy YXkgb2YgNCBtdGtfZHJtX3BsYW5lIHN0cnVjdHVyZXMsIG9uZSBmb3IgZWFjaCBvdmVybGF5IHBs YW5lCisgKiBAcGVuZGluZ19wbGFuZXM6IHdoZXRoZXIgYW55IHBsYW5lIGhhcyBwZW5kaW5nIGNo YW5nZXMgdG8gYmUgYXBwbGllZAorICogQGNvbmZpZ19yZWdzOiBtZW1vcnkgbWFwcGVkIG1tc3lz IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BhY2UKKyAqIEBtdXRleDogaGFuZGxlIHRvIG9uZSBv ZiB0aGUgdGVuIGRpc3BfbXV0ZXggc3RyZWFtcworICogQGRkcF9jb21wX25yOiBudW1iZXIgb2Yg Y29tcG9uZW50cyBpbiBkZHBfY29tcAorICogQGRkcF9jb21wOiBhcnJheSBvZiBwb2ludGVycyB0 aGUgbXRrX2RkcF9jb21wIHN0cnVjdHVyZXMgdXNlZCBieSB0aGlzIGNydGMKKyAqLworc3RydWN0 IG10a19kcm1fY3J0YyB7CisJc3RydWN0IGRybV9jcnRjCQkJYmFzZTsKKwlib29sCQkJCWVuYWJs ZWQ7CisKKwlib29sCQkJCWRvX2ZsdXNoOworCWJvb2wJCQkJcGVuZGluZ19uZWVkc192Ymxhbms7 CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7CisKKwlzdHJ1Y3QgbXRr X2RybV9wbGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisJYm9vbAkJCQlwZW5kaW5nX3BsYW5l czsKKworCXZvaWQgX19pb21lbQkJCSpjb25maWdfcmVnczsKKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0 ZXgJCSptdXRleDsKKwl1bnNpZ25lZCBpbnQJCQlkZHBfY29tcF9ucjsKKwlzdHJ1Y3QgbXRrX2Rk cF9jb21wCQkqKmRkcF9jb21wOworfTsKKworc3RydWN0IG10a19jcnRjX3N0YXRlIHsKKwlzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRpbmdfY29uZmlnOworCXVu c2lnbmVkIGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19oZWln aHQ7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307CisKK3N0YXRpYyBpbmxp bmUgc3RydWN0IG10a19kcm1fY3J0YyAqdG9fbXRrX2NydGMoc3RydWN0IGRybV9jcnRjICpjKQor eworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kcm1fY3J0YywgYmFzZSk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19jcnRjX3N0YXRlICp0b19tdGtfY3J0Y19zdGF0 ZShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzLCBz dHJ1Y3QgbXRrX2NydGNfc3RhdGUsIGJhc2UpOworfQorCisvKgorICogR2l2ZW4gYSBERFAgc291 cmNlIGNvbXBvbmVudCAoT1ZMIG9yIFJETUEpLCBmaW5kIHRoZSBjcnRjIHRoYXQgaGFzIHRoaXMK KyAqIGNvbXBvbmVudCBhcyBmaXJzdCBlbGVtZW50IG9mIGl0cyBkZHBfY29tcCBhcnJheS4gVGhp cyBhbGxvd3MgdG8gZGVsaXZlcgorICogdGhlIHNvdXJjZSBjb21wb25lbnQncyBlbmQgb2YgZnJh bWUgaW50ZXJydXB0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGNydGMuCisgKi8KK3N0YXRpYyBzdHJ1 Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0Y19ieV9zcmNfY29tcChzdHJ1Y3QgbXRrX2RybV9wcml2 YXRlICpwcml2LAorCQkJCQkJIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmRkcF9jb21wKQoreworCXN0 cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IE1BWF9DUlRDOyBpKyspIHsKKwkJbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW2ld KTsKKwkJaWYgKG10a19jcnRjLT5kZHBfY29tcFswXSA9PSBkZHBfY29tcCkKKwkJCXJldHVybiBt dGtfY3J0YzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9j cnRjX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJ c3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFn cyk7CisJZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMtPmRldiwgbXRrX2NydGMtPmV2ZW50LT5w aXBlLCBtdGtfY3J0Yy0+ZXZlbnQpOworCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJbXRr X2NydGMtPmV2ZW50ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYt PmV2ZW50X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9maW5pc2hfcGFn ZV9mbGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWRybV9jcnRjX2hhbmRs ZV92YmxhbmsoJm10a19jcnRjLT5iYXNlKTsKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfbmVlZHNf dmJsYW5rKSB7CisJCW10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKKwkJ bXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5rID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMg dm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3Ry dWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlpbnQgaTsK KworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX3Vu cHJlcGFyZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisKKwltdGtfZGlzcF9tdXRleF9w dXQobXRrX2NydGMtPm11dGV4KTsKKworCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0 YXRpYyB2b2lkIG10a19kcm1fY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ c3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCWlmIChjcnRjLT5zdGF0ZSkgeworCQlp ZiAoY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYikKKwkJCWRybV9wcm9wZXJ0eV91bnJlZmVyZW5jZV9i bG9iKGNydGMtPnN0YXRlLT5tb2RlX2Jsb2IpOworCisJCXN0YXRlID0gdG9fbXRrX2NydGNfc3Rh dGUoY3J0Yy0+c3RhdGUpOworCQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9 IGVsc2UgeworCQlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwor CQlpZiAoIXN0YXRlKQorCQkJcmV0dXJuOworCQljcnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsK Kwl9CisKKwlzdGF0ZS0+YmFzZS5jcnRjID0gY3J0YzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3ph bGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJu IE5VTEw7CisKKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMs ICZzdGF0ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLmNydGMgIT0gY3J0Yyk7CisJ c3RhdGUtPmJhc2UuY3J0YyA9IGNydGM7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitz dGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1f YXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoY3J0Yywgc3RhdGUpOworCWtmcmVlKHRv X210a19jcnRjX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBib29sIG10a19kcm1fY3J0Y19t b2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2Rl KQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMgbWFuZGF0 b3J5LiAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfbW9k ZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19jcnRjX3N0 YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCXN0YXRlLT5w ZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGluZ19oZWln aHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNoID0gY3J0 Yy0+bW9kZS52cmVmcmVzaDsKKwl3bWIoKTsJLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0 ZXJzIGFyZSBzZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IHRy dWU7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw cml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9 IHRvX210a19jcnRjKHByaXYtPmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92 bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKworCW10a19kZHBfY29tcF9lbmFibGVfdmJsYW5r KG92bCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxh bmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0 IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19k cm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1 Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRw X2NvbXBfZGlzYWJsZV92Ymxhbmsob3ZsKTsKK30KKworc3RhdGljIGludCBtdGtfY3J0Y19kZHBf Y2xrX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQgcmV0Owor CWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkg PSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJcmV0ID0gY2xrX2VuYWJs ZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJP UigiRmFpbGVkIHRvIGVuYWJsZSBjbG9jayAlZDogJWRcbiIsIGksIHJldCk7CisJCQlnb3RvIGVy cjsKKwkJfQorCX0KKworCXJldHVybiAwOworZXJyOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJY2xr X2Rpc2FibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRj ICptdGtfY3J0YykKK3sKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1 bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQlj bGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2NydGNfZGRwX2h3X2luaXQoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJ c3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGludCB3 aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaDsKKwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVH X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoV0FSTl9PTighY3J0Yy0+c3RhdGUpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCXdpZHRoID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUu aGRpc3BsYXk7CisJaGVpZ2h0ID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXk7 CisJdnJlZnJlc2ggPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVmcmVzaDsKKworCXJl dCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoY3J0Yy0+ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7 CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBwb3dlciBkb21haW46ICVkXG4iLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG10a19kaXNwX211dGV4X3ByZXBhcmUobXRr X2NydGMtPm11dGV4KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBl bmFibGUgbXV0ZXggY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wbV9ydW50aW1lX3B1 dDsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfY2xrX2VuYWJsZShtdGtfY3J0Yyk7CisJaWYg KHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNvbXBvbmVudCBjbG9j a3M6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9tdXRleF91bnByZXBhcmU7CisJfQorCisJRFJN X0RFQlVHX0RSSVZFUigibWVkaWF0ZWtfZGRwX2RkcF9wYXRoX3NldHVwXG4iKTsKKwlmb3IgKGkg PSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10a19kZHBfYWRk X2NvbXBfdG9fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSBtdGtfY3J0Yy0+ZGRw X2NvbXBbaV0tPmlkLAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOworCQlt dGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCW10a19jcnRjLT5k ZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+ bXV0ZXgsIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2VuYWJs ZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJRFJNX0RFQlVHX0RSSVZFUigiZGRwX2Rpc3BfcGF0aF9w b3dlcl9vbiAlZHglZFxuIiwgd2lkdGgsIGhlaWdodCk7CisJZm9yIChpID0gMDsgaSA8IG10a19j cnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAgPSBt dGtfY3J0Yy0+ZGRwX2NvbXBbaV07CisKKwkJbXRrX2RkcF9jb21wX2NvbmZpZyhjb21wLCB3aWR0 aCwgaGVpZ2h0LCB2cmVmcmVzaCk7CisJCW10a19kZHBfY29tcF9zdGFydChjb21wKTsKKwl9CisK KwlyZXR1cm4gMDsKKworZXJyX211dGV4X3VucHJlcGFyZToKKwltdGtfZGlzcF9tdXRleF91bnBy ZXBhcmUobXRrX2NydGMtPm11dGV4KTsKK2Vycl9wbV9ydW50aW1lX3B1dDoKKwlwbV9ydW50aW1l X3B1dChjcnRjLT5kZXYtPmRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRr X2NydGNfZGRwX2h3X2Zpbmkoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRybSA9IG10a19jcnRjLT5iYXNlLmRldjsKKwlpbnQgaTsKKworCURS TV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19j cnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtfZGRwX2NvbXBfc3RvcChtdGtfY3J0Yy0+ZGRw X2NvbXBbaV0pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykK KwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQkgICBt dGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwltdGtfZGlzcF9tdXRleF9kaXNhYmxlKG10a19j cnRjLT5tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7 IGkrKykgeworCQltdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aChtdGtfY3J0Yy0+Y29uZmln X3JlZ3MsCisJCQkJCSAgICAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSAgICAg IG10a19jcnRjLT5kZHBfY29tcFtpICsgMV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3Zl X2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlk KTsKKwl9CisJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtf Y3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwltdGtfY3J0Y19kZHBfY2xrX2Rpc2FibGUobXRrX2Ny dGMpOworCW10a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJcG1f cnVudGltZV9wdXQoZHJtLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZW5h YmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtf Y3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10 a19jcnRjLT5kZHBfY29tcFswXTsKKwlpbnQgcmV0OworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMg JWRcbiIsIF9fZnVuY19fLCBjcnRjLT5iYXNlLmlkKTsKKworCXJldCA9IG10a19zbWlfbGFyYl9n ZXQob3ZsLT5sYXJiX2Rldik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBn ZXQgbGFyYjogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19k ZHBfaHdfaW5pdChtdGtfY3J0Yyk7CisJaWYgKHJldCkgeworCQltdGtfc21pX2xhcmJfcHV0KG92 bC0+bGFyYl9kZXYpOworCQlyZXR1cm47CisJfQorCisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMp OworCW10a19jcnRjLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9j cnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2Ny dGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAq b3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZF UigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRjLT5iYXNlLmlkKTsKKwlpZiAoV0FSTl9PTighbXRr X2NydGMtPmVuYWJsZWQpKQorCQlyZXR1cm47CisKKwkvKiBTZXQgYWxsIHBlbmRpbmcgcGxhbmUg c3RhdGUgdG8gZGlzYWJsZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKysp IHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNl OworCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0 ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCQlwbGFuZV9zdGF0ZS0+cGVu ZGluZy5lbmFibGUgPSBmYWxzZTsKKwkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1 ZTsKKwl9CisJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gdHJ1ZTsKKworCS8qIFdhaXQgZm9y IHBsYW5lcyB0byBiZSBkaXNhYmxlZCAqLworCWRybV9jcnRjX3dhaXRfb25lX3ZibGFuayhjcnRj KTsKKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisJbXRrX2NydGNfZGRwX2h3X2Zpbmko bXRrX2NydGMpOworCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7CisKKwltdGtfY3J0 Yy0+ZG9fZmx1c2ggPSBmYWxzZTsKKwltdGtfY3J0Yy0+ZW5hYmxlZCA9IGZhbHNlOworfQorCitz dGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQorewor CXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRj KTsKKworCWlmIChtdGtfY3J0Yy0+ZXZlbnQgJiYgc3RhdGUtPmJhc2UuZXZlbnQpCisJCURSTV9F UlJPUigibmV3IGV2ZW50IHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEgcGVuZGluZyBldmVudFxuIik7 CisKKwlpZiAoc3RhdGUtPmJhc2UuZXZlbnQpIHsKKwkJc3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUg PSBkcm1fY3J0Y19pbmRleChjcnRjKTsKKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNy dGMpICE9IDApOworCQltdGtfY3J0Yy0+ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsKKwkJc3Rh dGUtPmJhc2UuZXZlbnQgPSBOVUxMOworCX0KK30KKwordm9pZCBtdGtfZHJtX2NydGNfY2hlY2tf Zmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10 a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJaW50IGk7CisKKwlpZiAobXRrX2NydGMtPmRv X2ZsdXNoKSB7CisJCWlmIChtdGtfY3J0Yy0+ZXZlbnQpCisJCQltdGtfY3J0Yy0+cGVuZGluZ19u ZWVkc192YmxhbmsgPSB0cnVlOworCQlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKysp IHsKKwkJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFz ZTsKKwkJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCQlwbGFuZV9z dGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCQkJaWYgKHBsYW5lX3N0 YXRlLT5wZW5kaW5nLmRpcnR5KSB7CisJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0g dHJ1ZTsKKwkJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IGZhbHNlOworCQkJfQorCQl9 CisJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7CisJCW10a19jcnRjLT5kb19mbHVz aCA9IGZhbHNlOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2F0b21pY19mbHVz aChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRl ICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRv X210a19jcnRjKGNydGMpOworCisJbXRrX2NydGMtPmRvX2ZsdXNoID0gdHJ1ZTsKKwltdGtfZHJt X2NydGNfY2hlY2tfZmx1c2goY3J0Yyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny dGNfZnVuY3MgbXRrX2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcJCT0gZHJtX2F0b21pY19o ZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwCQk9IGRybV9hdG9taWNfaGVscGVyX3BhZ2Vf ZmxpcCwKKwkuZGVzdHJveQkJPSBtdGtfZHJtX2NydGNfZGVzdHJveSwKKwkucmVzZXQJCQk9IG10 a19kcm1fY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZQk9IG10a19kcm1fY3J0 Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlCT0gbXRrX2RybV9jcnRj X2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBl cl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAJPSBtdGtfZHJt X2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9mYgk9IG10a19kcm1fY3J0Y19tb2RlX3Nl dF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRjX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG10 a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVnaW4JPSBtdGtfZHJtX2NydGNfYXRvbWlj X2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJtX2NydGNfYXRvbWljX2ZsdXNoLAorfTsK Kworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAor CQlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0Yywgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFy eSwKKwkJc3RydWN0IGRybV9wbGFuZSAqY3Vyc29yLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlp bnQgcmV0OworCisJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZtdGtfY3J0 Yy0+YmFzZSwgcHJpbWFyeSwgY3Vyc29yLAorCQkJJm10a19jcnRjX2Z1bmNzKTsKKwlpZiAocmV0 KQorCQlnb3RvIGVycl9jbGVhbnVwX2NydGM7CisKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZtdGtf Y3J0Yy0+YmFzZSwgJm10a19jcnRjX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4gMDsKKworZXJy X2NsZWFudXBfY3J0YzoKKwlkcm1fY3J0Y19jbGVhbnVwKCZtdGtfY3J0Yy0+YmFzZSk7CisJcmV0 dXJuIHJldDsKK30KKwordm9pZCBtdGtfY3J0Y19kZHBfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICpk cm1fZGV2LCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwpCit7CisJc3RydWN0IG10a19kcm1fcHJp dmF0ZSAqcHJpdiA9IGRybV9kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMg Km10a19jcnRjOworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisJdW5zaWduZWQgaW50 IGk7CisKKwltdGtfY3J0YyA9IG10a19jcnRjX2J5X3NyY19jb21wKHByaXYsIG92bCk7CisJaWYg KFdBUk5fT04oIW10a19jcnRjKSkKKwkJcmV0dXJuOworCisJc3RhdGUgPSB0b19tdGtfY3J0Y19z dGF0ZShtdGtfY3J0Yy0+YmFzZS5zdGF0ZSk7CisKKwkvKgorCSAqIFRPRE86IGluc3RlYWQgb2Yg dXBkYXRpbmcgdGhlIHJlZ2lzdGVycyBoZXJlLCB3ZSBzaG91bGQgcHJlcGFyZQorCSAqIHdvcmtp bmcgcmVnaXN0ZXJzIGluIGF0b21pY19jb21taXQgYW5kIGxldCB0aGUgaGFyZHdhcmUgY29tbWFu ZAorCSAqIHF1ZXVlIHVwZGF0ZSBtb2R1bGUgcmVnaXN0ZXJzIG9uIHZibGFuay4KKwkgKi8KKwlp ZiAoc3RhdGUtPnBlbmRpbmdfY29uZmlnKSB7CisJCW10a19kZHBfY29tcF9jb25maWcob3ZsLCBz dGF0ZS0+cGVuZGluZ193aWR0aCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfaGVpZ2h0LAorCQkJ CSAgICBzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCk7CisKKwkJc3RhdGUtPnBlbmRpbmdfY29uZmln ID0gZmFsc2U7CisJfQorCisJaWYgKG10a19jcnRjLT5wZW5kaW5nX3BsYW5lcykgeworCQlmb3Ig KGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJCXN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJCXN0cnVjdCBtdGtfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlOworCisJCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShw bGFuZS0+c3RhdGUpOworCisJCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnKSB7CisJ CQkJaWYgKCFwbGFuZV9zdGF0ZS0+cGVuZGluZy5lbmFibGUpCisJCQkJCW10a19kZHBfY29tcF9s YXllcl9vZmYob3ZsLCBpKTsKKworCQkJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcob3ZsLCBp LCBwbGFuZV9zdGF0ZSk7CisKKwkJCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlKQor CQkJCQltdGtfZGRwX2NvbXBfbGF5ZXJfb24ob3ZsLCBpKTsKKworCQkJCXBsYW5lX3N0YXRlLT5w ZW5kaW5nLmNvbmZpZyA9IGZhbHNlOworCQkJfQorCQl9CisJCW10a19jcnRjLT5wZW5kaW5nX3Bs YW5lcyA9IGZhbHNlOworCX0KKworCW10a19kcm1fZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7 Cit9CisKK2ludCBtdGtfZHJtX2NydGNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2 LAorCQkJY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgKnBhdGgsIHVuc2lnbmVkIGludCBwYXRo X2xlbikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtX2Rldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHJtX2Rldi0+ZGV2OworCXN0cnVjdCBtdGtf ZHJtX2NydGMgKm10a19jcnRjOworCWVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZTsKKwl1bnNpZ25l ZCBpbnQgenBvczsKKwlpbnQgcGlwZSA9IHByaXYtPm51bV9waXBlczsKKwlpbnQgcmV0OworCWlu dCBpOworCisJbXRrX2NydGMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm10a19jcnRjKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFtdGtfY3J0YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdGtf Y3J0Yy0+Y29uZmlnX3JlZ3MgPSBwcml2LT5jb25maWdfcmVnczsKKwltdGtfY3J0Yy0+ZGRwX2Nv bXBfbnIgPSBwYXRoX2xlbjsKKwltdGtfY3J0Yy0+ZGRwX2NvbXAgPSBkZXZtX2ttYWxsb2NfYXJy YXkoZGV2LCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIsCisJCQkJCQlzaXplb2YoKm10a19jcnRjLT5k ZHBfY29tcCksCisJCQkJCQlHRlBfS0VSTkVMKTsKKworCW10a19jcnRjLT5tdXRleCA9IG10a19k aXNwX211dGV4X2dldChwcml2LT5tdXRleF9kZXYsIHBpcGUpOworCWlmIChJU19FUlIobXRrX2Ny dGMtPm11dGV4KSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19jcnRjLT5tdXRleCk7CisJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtdXRleDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJ CWVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQgPSBwYXRoW2ldOworCQlzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wOworCisJCWNvbXAgPSBwcml2LT5kZHBfY29tcFtjb21wX2lkXTsKKwkJaWYg KCFjb21wKSB7CisJCQlkZXZfZXJyKGRldiwgIkNvbXBvbmVudCAlcyBub3QgaW5pdGlhbGl6ZWRc biIsCisJCQkJcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRdLT5mdWxsX25hbWUpOworCQkJcmV0ID0g LUVOT0RFVjsKKwkJCWdvdG8gdW5wcmVwYXJlOworCQl9CisKKwkJcmV0ID0gY2xrX3ByZXBhcmUo Y29tcC0+Y2xrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsCisJCQkJIkZhaWxlZCB0 byBwcmVwYXJlIGNsb2NrIGZvciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJCXByaXYtPmNvbXBf bm9kZVtjb21wX2lkXS0+ZnVsbF9uYW1lLCByZXQpOworCQkJZ290byB1bnByZXBhcmU7CisJCX0K KworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBjb21wOworCX0KKworCWZvciAoenBvcyA9IDA7 IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykgeworCQl0eXBlID0gKHpwb3MgPT0gMCkgPyBE Uk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQkoenBvcyA9PSAxKSA/IERSTV9QTEFORV9UWVBF X0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZOworCQlyZXQgPSBtdGtfcGxh bmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBsYW5lc1t6cG9zXSwKKwkJCQkgICAgIEJJVChw aXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVucHJlcGFyZTsKKwl9CisK KwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1fZGV2LCBtdGtfY3J0YywgJm10a19jcnRjLT5w bGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMtPnBsYW5lc1sxXS5iYXNlLCBwaXBlKTsKKwlp ZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7CisKKwlwcml2LT5jcnRjW3BpcGVdID0gJm10 a19jcnRjLT5iYXNlOworCXByaXYtPm51bV9waXBlcysrOworCisJcmV0dXJuIDA7CisKK3VucHJl cGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa191bnByZXBhcmUobXRrX2NydGMtPmRkcF9j b21wW2ldLT5jbGspOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGViYTNj Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0 Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsg SW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq LworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisjZGVmaW5lIE1US19EUk1fQ1JUQ19ICisKKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisj aW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisjZGVmaW5lIE9WTF9MQVlFUl9OUgk0CisKK2lu dCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNp Z25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19j aGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBtdGtfZHJtX2NydGNfY29t bWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCk7CitpbnQgbXRr X2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVu dW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLAorCQkJdW5zaWduZWQgaW50IHBhdGhfbGVuKTsKKwor I2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2RkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTg0ZTQKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpAQCAt MCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl IDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K KyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCisj aW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19E SVNQX09WTDBfTU9VVF9FTgkweDA0MAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwx X01PVVRfRU4JMHgwNDQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfT0RfTU9VVF9FTgkJ MHgwNDgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfR0FNTUFfTU9VVF9FTgkweDA0Ywor I2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU4JMHgwNTAKKyNkZWZpbmUg RElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTgkweDA4NAorI2RlZmluZSBESVNQX1JF R19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOCTB4MDg4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJ R19EUElfU0VMX0lOCQkweDBhYworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9SRE1BMV9N T1VUX0VOCTB4MGM4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19NTVNZU19DR19DT04wCQkweDEw MAorCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX0VOKG4pCSgweDIwICsgMHgyMCAqIChuKSkKKyNk ZWZpbmUgRElTUF9SRUdfTVVURVhfUlNUKG4pCSgweDI4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUg RElTUF9SRUdfTVVURVhfTU9EKG4pCSgweDJjICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9S RUdfTVVURVhfU09GKG4pCSgweDMwICsgMHgyMCAqIChuKSkKKworI2RlZmluZSBNVVRFWF9NT0Rf RElTUF9PVkwwCQlCSVQoMTEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09WTDEJCUJJVCgxMikK KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTAJCUJJVCgxMykKKyNkZWZpbmUgTVVURVhfTU9E X0RJU1BfUkRNQTEJCUJJVCgxNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTIJCUJJVCgx NSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTAJCUJJVCgxNikKKyNkZWZpbmUgTVVURVhf TU9EX0RJU1BfV0RNQTEJCUJJVCgxNykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQ09MT1IwCQlC SVQoMTgpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMQkJQklUKDE5KQorI2RlZmluZSBN VVRFWF9NT0RfRElTUF9BQUwJCUJJVCgyMCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfR0FNTUEJ CUJJVCgyMSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfVUZPRQkJQklUKDIyKQorI2RlZmluZSBN VVRFWF9NT0RfRElTUF9QV00wCQlCSVQoMjMpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1BXTTEJ CUJJVCgyNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT0QJCUJJVCgyNSkKKworI2RlZmluZSBN VVRFWF9TT0ZfU0lOR0xFX01PREUJCTAKKyNkZWZpbmUgTVVURVhfU09GX0RTSTAJCQkxCisjZGVm aW5lIE1VVEVYX1NPRl9EU0kxCQkJMgorI2RlZmluZSBNVVRFWF9TT0ZfRFBJMAkJCTMKKworI2Rl ZmluZSBPVkwwX01PVVRfRU5fQ09MT1IwCQkweDEKKyNkZWZpbmUgT0RfTU9VVF9FTl9SRE1BMAkJ MHgxCisjZGVmaW5lIFVGT0VfTU9VVF9FTl9EU0kwCQkweDEKKyNkZWZpbmUgQ09MT1IwX1NFTF9J Tl9PVkwwCQkweDEKKyNkZWZpbmUgT1ZMMV9NT1VUX0VOX0NPTE9SMQkJMHgxCisjZGVmaW5lIEdB TU1BX01PVVRfRU5fUkRNQTEJCTB4MQorI2RlZmluZSBSRE1BMV9NT1VUX0RQSTAJCQkweDIKKyNk ZWZpbmUgRFBJMF9TRUxfSU5fUkRNQTEJCTB4MQorI2RlZmluZSBDT0xPUjFfU0VMX0lOX09WTDEJ CTB4MQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggeworCWludCBpZDsKKwlib29sIGNsYWltZWQ7 Cit9OworCitzdHJ1Y3QgbXRrX2RkcCB7CisJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0 IGNsawkJCSpjbGs7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJc3RydWN0IG10a19kaXNwX211 dGV4CQltdXRleFsxMF07Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG11dGV4X21v ZFtERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRfQUFMXSA9IE1VVEVY X01PRF9ESVNQX0FBTCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBdID0gTVVURVhfTU9EX0RJU1Bf Q09MT1IwLAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0gPSBNVVRFWF9NT0RfRElTUF9DT0xPUjEs CisJW0REUF9DT01QT05FTlRfR0FNTUFdID0gTVVURVhfTU9EX0RJU1BfR0FNTUEsCisJW0REUF9D T01QT05FTlRfT0RdID0gTVVURVhfTU9EX0RJU1BfT0QsCisJW0REUF9DT01QT05FTlRfT1ZMMF0g PSBNVVRFWF9NT0RfRElTUF9PVkwwLAorCVtERFBfQ09NUE9ORU5UX09WTDFdID0gTVVURVhfTU9E X0RJU1BfT1ZMMSwKKwlbRERQX0NPTVBPTkVOVF9QV00wXSA9IE1VVEVYX01PRF9ESVNQX1BXTTAs CisJW0REUF9DT01QT05FTlRfUFdNMV0gPSBNVVRFWF9NT0RfRElTUF9QV00xLAorCVtERFBfQ09N UE9ORU5UX1JETUEwXSA9IE1VVEVYX01PRF9ESVNQX1JETUEwLAorCVtERFBfQ09NUE9ORU5UX1JE TUExXSA9IE1VVEVYX01PRF9ESVNQX1JETUExLAorCVtERFBfQ09NUE9ORU5UX1JETUEyXSA9IE1V VEVYX01PRF9ESVNQX1JETUEyLAorCVtERFBfQ09NUE9ORU5UX1VGT0VdID0gTVVURVhfTU9EX0RJ U1BfVUZPRSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMCwK KwlbRERQX0NPTVBPTkVOVF9XRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMSwKK307CisKK3N0 YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9tb3V0X2VuKGVudW0gbXRrX2RkcF9jb21wX2lkIGN1 ciwKKwkJCQkgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkgICAgdW5zaWduZWQg aW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQX0NP TVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFkZHIg PSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMF9NT1VU X0VOX0NPTE9SMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09EICYmIG5leHQg PT0gRERQX0NPTVBPTkVOVF9SRE1BMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQ X09EX01PVVRfRU47CisJCXZhbHVlID0gT0RfTU9VVF9FTl9SRE1BMDsKKwl9IGVsc2UgaWYgKGN1 ciA9PSBERFBfQ09NUE9ORU5UX1VGT0UgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RTSTApIHsK KwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU47CisJCXZhbHVlID0g VUZPRV9NT1VUX0VOX0RTSTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwx ICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19D T05GSUdfRElTUF9PVkwxX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMV9NT1VUX0VOX0NPTE9SMTsK Kwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX0dBTU1BICYmIG5leHQgPT0gRERQX0NP TVBPTkVOVF9SRE1BMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01P VVRfRU47CisJCXZhbHVlID0gR0FNTUFfTU9VVF9FTl9SRE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9 PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJ CSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTjsKKwkJdmFsdWUgPSBS RE1BMV9NT1VUX0RQSTA7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2 YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtdGtfZGRwX3NlbF9pbihlbnVtIG10a19k ZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkg ICB1bnNpZ25lZCBpbnQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJaWYgKGN1 ciA9PSBERFBfQ09NUE9ORU5UX09WTDAgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMCkg eworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU47CisJCXZhbHVl ID0gQ09MT1IwX1NFTF9JTl9PVkwwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRf UkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKKwkJKmFkZHIgPSBESVNQX1JF R19DT05GSUdfRFBJX1NFTF9JTjsKKwkJdmFsdWUgPSBEUEkwX1NFTF9JTl9SRE1BMTsKKwl9IGVs c2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5U X0NPTE9SMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMV9TRUxfSU47 CisJCXZhbHVlID0gQ09MT1IxX1NFTF9JTl9PVkwxOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsK Kwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19wYXRo KHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9p ZCBjdXIsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KQoreworCXVuc2lnbmVk IGludCBhZGRyLCB2YWx1ZSwgcmVnOworCisJdmFsdWUgPSBtdGtfZGRwX21vdXRfZW4oY3VyLCBu ZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmln X3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdz ICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRy KTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFk ZHIpIHwgdmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsK Kwl9Cit9CisKK3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgodm9pZCBfX2lvbWVt ICpjb25maWdfcmVncywKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAg ZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUs IHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlm ICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+ dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9CisK Kwl2YWx1ZSA9IG10a19kZHBfc2VsX2luKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkg eworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+dmFsdWU7CisJ CXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9Cit9CisKK3N0cnVj dCBtdGtfZGlzcF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwg dW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKworCWlmIChpZCA+PSAxMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJ aWYgKGRkcC0+bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisK KwlkZHAtPm11dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsKKworCXJldHVybiAmZGRwLT5tdXRleFtp ZF07Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq bXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3Ry dWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRw LT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCW11dGV4LT5jbGFpbWVkID0gZmFsc2U7 Cit9CisKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq bXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3Ry dWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXJldHVybiBjbGtfcHJl cGFyZV9lbmFibGUoZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3VucHJlcGFy ZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAg PSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRl eC0+aWRdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRwLT5jbGspOworfQorCit2b2lkIG10 a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkg ICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBj b250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+ aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+ aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEREUF9DT01QT05FTlRfRFNJ MDoKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNhc2UgRERQX0NPTVBPTkVO VF9EU0kxOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKKwkJYnJlYWs7CisJY2FzZSBERFBfQ09N UE9ORU5UX0RQSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9EUEkwOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRCht dXRleC0+aWQpKTsKKwkJcmVnIHw9IG11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJl ZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlyZXR1cm47 CisJfQorCisJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9T T0YobXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3Ry dWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCQllbnVtIG10a19kZHBfY29tcF9pZCBpZCkK K3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRr X2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKwor CVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlk KSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTE6 CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXdyaXRlbF9yZWxheGVkKE1VVEVYX1NPRl9T SU5HTEVfTU9ERSwKKwkJCSAgICAgICBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0 ZXgtPmlkKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRw LT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlyZWcgJj0gfm11dGV4 X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVU RVhfTU9EKG11dGV4LT5pZCkpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0 ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19k ZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11 dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11 dGV4KTsKKworCXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+ aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9t dXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRl eCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9P TigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgwLCBkZHAtPnJl Z3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKworc3RhdGljIGludCBtdGtf ZGRwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwOworCXN0cnVjdCByZXNv dXJjZSAqcmVnczsKKwlpbnQgaTsKKworCWRkcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq ZGRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZHApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9y IChpID0gMDsgaSA8IDEwOyBpKyspCisJCWRkcC0+bXV0ZXhbaV0uaWQgPSBpOworCisJZGRwLT5j bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRkcC0+Y2xrKSkgewor CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VS UihkZHAtPmNsayk7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgMCk7CisJZGRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl diwgcmVncyk7CisJaWYgKElTX0VSUihkZHAtPnJlZ3MpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFp bGVkIHRvIG1hcCBtdXRleCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPnJl Z3MpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRkcCk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBkZHBfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxtdDgxNzMtZGlzcC1tdXRleCIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9m LCBkZHBfZHJpdmVyX2R0X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg bXRrX2RkcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kZHBfcHJvYmUsCisJLnJlbW92ZQkJ PSBtdGtfZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZGRw IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGRkcF9kcml2 ZXJfZHRfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXRrX2RkcF9k cml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9ERFBfSAor I2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisK K3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IG10a19kaXNwX211dGV4Owor Cit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdz LAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51bSBtdGtf ZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZv aWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3Vy LAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOworCitzdHJ1Y3QgbXRrX2Rpc3Bf bXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGlu dCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgg Km11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAoc3RydWN0IG10a19kaXNwX211 dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9pZCBtdGtf ZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10 a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lk IG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgs CisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlzcF9tdXRleF91bnBy ZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4 X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKKworI2VuZGlmIC8qIE1US19EUk1f RERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rk cF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTZmNmIKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCkBAIC0wLDAg KzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1 dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KKyAqCUNLIEh1IDxjay5o dUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9p cnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAibXRrX2Ry bV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisjaW5jbHVkZSAibXRrX2RybV9k ZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRQkJMHgwMDAwCisj ZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUwkJMHgwMDA0CisjZGVmaW5lIERJU1BfUkVH X1JETUFfR0xPQkFMX0NPTgkJMHgwMDEwCisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05f MAkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05fMQkJMHgwMDE4CisjZGVm aW5lIERJU1BfUkVHX1JETUFfRklGT19DT04JCQkweDAwNDAKKyNkZWZpbmUgUkRNQV9GSUZPX1VO REVSRkxPV19FTgkJCQlCSVQoMzEpCisjZGVmaW5lIFJETUFfRklGT19QU0VVRE9fU0laRShieXRl cykJCQkoKChieXRlcykgLyAxNikgPDwgMTYpCisjZGVmaW5lIFJETUFfT1VUUFVUX1ZBTElEX0ZJ Rk9fVEhSRVNIT0xEKGJ5dGVzKQkJKChieXRlcykgLyAxNikKKworI2RlZmluZSBESVNQX09EX0VO CQkJCTB4MDAwMAorI2RlZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAorI2RlZmluZSBESVNQ X09EX0lOVFNUQQkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCisjZGVm aW5lIERJU1BfT0RfU0laRQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJ CQkweDAwMDAKKworI2RlZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgwNDAwCisjZGVmaW5l IERJU1BfQ09MT1JfU1RBUlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4 MGM1MAorI2RlZmluZSBESVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisjZGVmaW5lCU9EX1JF TEFZX01PREUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgyKQorCisjZGVmaW5l CUNPTE9SX0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykK Kworc3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w LCB1bnNpZ25lZCBpbnQgdywKKwkJCSAgICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2 cmVmcmVzaCkKK3sKKwl3cml0ZWwodywgY29tcC0+cmVncyArIERJU1BfQ09MT1JfV0lEVEgpOwor CXdyaXRlbChoLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9IRUlHSFQpOworfQorCitzdGF0aWMg dm9pZCBtdGtfY29sb3Jfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0 ZWwoQ09MT1JfQllQQVNTX0FMTCB8IENPTE9SX1NFUV9TRUwsCisJICAgICAgIGNvbXAtPnJlZ3Mg KyBESVNQX0NPTE9SX0NGR19NQUlOKTsKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9D T0xPUl9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19k ZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNp Z25lZCBpbnQgdnJlZnJlc2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsg RElTUF9PRF9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtf ZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsKE9EX1JFTEFZX01PREUsIGNvbXAtPnJlZ3MgKyBE SVNQX09EX0NGRyk7CisJd3JpdGVsKDEsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKK30KKwor c3RhdGljIHZvaWQgbXRrX3JkbWFfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sK Kwl1bnNpZ25lZCBpbnQgcmVnOworCisJd3JpdGVsKDB4NCwgY29tcC0+cmVncyArIERJU1BfUkVH X1JETUFfSU5UX0VOQUJMRSk7CisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX1JE TUFfR0xPQkFMX0NPTik7CisJcmVnIHw9IDE7CisJd3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJ U1BfUkVHX1JETUFfR0xPQkFMX0NPTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2NvbmZp ZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCB3aWR0aCwKKwkJCSAgICB1bnNp Z25lZCBoZWlnaHQsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhy ZXNob2xkOworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsg RElTUF9SRUdfUkRNQV9TSVpFX0NPTl8wKTsKKwlyZWcgPSAocmVnICYgfigweGZmZikpIHwgKHdp ZHRoICYgMHhmZmYpOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX1NJ WkVfQ09OXzApOworCisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX1JETUFfU0la RV9DT05fMSk7CisJcmVnID0gKHJlZyAmIH4oMHhmZmZmZikpIHwgKGhlaWdodCAmIDB4ZmZmZmYp OworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEpOwor CisJLyoKKwkgKiBFbmFibGUgRklGTyB1bmRlcmZsb3cgc2luY2UgRFNJIGFuZCBEUEkgY2FuJ3Qg YmUgYmxvY2tlZC4KKwkgKiBLZWVwIHRoZSBGSUZPIHBzZXVkbyBzaXplIHJlc2V0IGRlZmF1bHQg b2YgOCBLaUIuIFNldCB0aGUKKwkgKiBvdXRwdXQgdGhyZXNob2xkIHRvIDYgbWljcm9zZWNvbmRz IHdpdGggNy82IG92ZXJoZWFkIHRvCisJICogYWNjb3VudCBmb3IgYmxhbmtpbmcsIGFuZCB3aXRo IGEgcGl4ZWwgZGVwdGggb2YgNCBieXRlczoKKwkgKi8KKwl0aHJlc2hvbGQgPSB3aWR0aCAqIGhl aWdodCAqIHZyZWZyZXNoICogNCAqIDcgLyAxMDAwMDAwOworCXJlZyA9IFJETUFfRklGT19VTkRF UkZMT1dfRU4gfAorCSAgICAgIFJETUFfRklGT19QU0VVRE9fU0laRShTWl84SykgfAorCSAgICAg IFJETUFfT1VUUFVUX1ZBTElEX0ZJRk9fVEhSRVNIT0xEKHRocmVzaG9sZCk7CisJd3JpdGVsKHJl ZywgY29tcC0+cmVncyArIERJU1BfUkVHX1JETUFfRklGT19DT04pOworfQorCitzdGF0aWMgdm9p ZCBtdGtfdWZvZV9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbChV Rk9fQllQQVNTLCBjb21wLT5yZWdzICsgRElTUF9SRUdfVUZPX1NUQVJUKTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX2NvbG9yID0geworCS5jb25maWcg PSBtdGtfY29sb3JfY29uZmlnLAorCS5zdGFydCA9IG10a19jb2xvcl9zdGFydCwKK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9vZCA9IHsKKwkuY29uZmln ID0gbXRrX29kX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfb2Rfc3RhcnQsCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfcmRtYSA9IHsKKwkuY29uZmlnID0g bXRrX3JkbWFfY29uZmlnLAorCS5zdGFydCA9IG10a19yZG1hX3N0YXJ0LAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7CisJLnN0YXJ0ID0g bXRrX3Vmb2Vfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19kZHBf Y29tcF9zdGVtW01US19ERFBfQ09NUF9UWVBFX01BWF0gPSB7CisJW01US19ESVNQX09WTF0gPSAi b3ZsIiwKKwlbTVRLX0RJU1BfUkRNQV0gPSAicmRtYSIsCisJW01US19ESVNQX1dETUFdID0gIndk bWEiLAorCVtNVEtfRElTUF9DT0xPUl0gPSAiY29sb3IiLAorCVtNVEtfRElTUF9BQUxdID0gImFh bCIsCisJW01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIsCisJW01US19ESVNQX1VGT0VdID0gInVm b2UiLAorCVtNVEtfRFNJXSA9ICJkc2kiLAorCVtNVEtfRFBJXSA9ICJkcGkiLAorCVtNVEtfRElT UF9QV01dID0gInB3bSIsCisJW01US19ESVNQX01VVEVYXSA9ICJtdXRleCIsCisJW01US19ESVNQ X09EXSA9ICJvZCIsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKKwllbnVtIG10 a19kZHBfY29tcF90eXBlIHR5cGU7CisJaW50IGFsaWFzX2lkOworCWNvbnN0IHN0cnVjdCBtdGtf ZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZGRwX2NvbXBf bWF0Y2ggbXRrX2RkcF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKKwlbRERQX0NP TVBPTkVOVF9BQUxdCT0geyBNVEtfRElTUF9BQUwsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVO VF9DT0xPUjBdCT0geyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9LAorCVtERFBfQ09N UE9ORU5UX0NPTE9SMV0JPSB7IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2NvbG9yIH0sCisJW0RE UF9DT01QT05FTlRfRFBJMF0JPSB7IE1US19EUEksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05F TlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfRFNJMV0J PSB7IE1US19EU0ksCQkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfR0FNTUFdCT0geyBNVEtf RElTUF9HQU1NQSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9IHsgTVRLX0RJU1Bf T0QsCTAsICZkZHBfb2QgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsgTVRLX0RJU1BfT1ZM LAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMV0JPSB7IE1US19ESVNQX09WTCwJMSwg TlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9QV00sCTAsIE5VTEwg fSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEsCTAsICZkZHBfcmRt YSB9LAorCVtERFBfQ09NUE9ORU5UX1JETUExXQk9IHsgTVRLX0RJU1BfUkRNQSwJMSwgJmRkcF9y ZG1hIH0sCisJW0REUF9DT01QT05FTlRfUkRNQTJdCT0geyBNVEtfRElTUF9SRE1BLAkyLCAmZGRw X3JkbWEgfSwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRk cF91Zm9lIH0sCisJW0REUF9DT01QT05FTlRfV0RNQTBdCT0geyBNVEtfRElTUF9XRE1BLAkwLCBO VUxMIH0sCisJW0REUF9DT01QT05FTlRfV0RNQTFdCT0geyBNVEtfRElTUF9XRE1BLAkxLCBOVUxM IH0sCit9OworCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBv Zl9hbGlhc19nZXRfaWQobm9kZSwgbXRrX2RkcF9jb21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50 IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZGRwX21hdGNoZXMpOyBpKysp IHsKKwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAg KGlkIDwgMCB8fCBpZCA9PSBtdGtfZGRwX21hdGNoZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJu IGk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJ ICAgICAgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3MpCit7CisJZW51bSBt dGtfZGRwX2NvbXBfdHlwZSB0eXBlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlOwor CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxhcmJfcGRldjsKKworCWlmIChjb21wX2lkIDwgMCB8 fCBjb21wX2lkID49IEREUF9DT01QT05FTlRfSURfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWNvbXAtPmlkID0gY29tcF9pZDsKKwljb21wLT5mdW5jcyA9IGZ1bmNzID86IG10a19kZHBfbWF0 Y2hlc1tjb21wX2lkXS5mdW5jczsKKworCWlmIChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJ MCB8fAorCSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfRFNJMCB8fAorCSAgICBjb21wX2lk ID09IEREUF9DT01QT05FTlRfUFdNMCkgeworCQljb21wLT5yZWdzID0gTlVMTDsKKwkJY29tcC0+ Y2xrID0gTlVMTDsKKwkJY29tcC0+aXJxID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcC0+ cmVncyA9IG9mX2lvbWFwKG5vZGUsIDApOworCWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwg MCk7CisJY29tcC0+Y2xrID0gb2ZfY2xrX2dldChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNvbXAt PmNsaykpCisJCWNvbXAtPmNsayA9IE5VTEw7CisKKwl0eXBlID0gbXRrX2RkcF9tYXRjaGVzW2Nv bXBfaWRdLnR5cGU7CisKKwkvKiBPbmx5IERNQSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUg TEFSQiBwcm9wZXJ0eSAqLworCWNvbXAtPmxhcmJfZGV2ID0gTlVMTDsKKwlpZiAodHlwZSAhPSBN VEtfRElTUF9PVkwgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9SRE1BICYmCisJICAgIHR5cGUg IT0gTVRLX0RJU1BfV0RNQSkKKwkJcmV0dXJuIDA7CisKKwlsYXJiX25vZGUgPSBvZl9wYXJzZV9w aGFuZGxlKG5vZGUsICJtZWRpYXRlayxsYXJiIiwgMCk7CisJaWYgKCFsYXJiX25vZGUpIHsKKwkJ ZGV2X2VycihkZXYsCisJCQkiTWlzc2luZyBtZWRpYWRlayxsYXJiIHBoYW5kbGUgaW4gJXMgbm9k ZVxuIiwKKwkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxh cmJfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobGFyYl9ub2RlKTsKKwlpZiAoIWxhcmJf cGRldikgeworCQlkZXZfd2FybihkZXYsICJXYWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwK KwkJCSBsYXJiX25vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0K KworCWNvbXAtPmxhcmJfZGV2ID0gJmxhcmJfcGRldi0+ZGV2OworCisJcmV0dXJuIDA7Cit9CisK K2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0 IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCWlmIChwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0p CisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0gPSBjb21w OworCXJldHVybiAwOworfQorCit2b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVyKHN0cnVjdCBk cm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10 a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlwcml2YXRlLT5k ZHBfY29tcFtjb21wLT5pZF0gPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2RkcF9jb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQw YzA2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2RkcF9jb21wLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUg TWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRERQX0NPTVBfSAorI2RlZmluZSBNVEtfRFJN X0REUF9DT01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKK3N0cnVjdCBkZXZpY2U7Citz dHJ1Y3QgZGV2aWNlX25vZGU7CitzdHJ1Y3QgZHJtX2RldmljZTsKK3N0cnVjdCBtdGtfcGxhbmVf c3RhdGU7CisKK2VudW0gbXRrX2RkcF9jb21wX3R5cGUgeworCU1US19ESVNQX09WTCwKKwlNVEtf RElTUF9SRE1BLAorCU1US19ESVNQX1dETUEsCisJTVRLX0RJU1BfQ09MT1IsCisJTVRLX0RJU1Bf QUFMLAorCU1US19ESVNQX0dBTU1BLAorCU1US19ESVNQX1VGT0UsCisJTVRLX0RTSSwKKwlNVEtf RFBJLAorCU1US19ESVNQX1BXTSwKKwlNVEtfRElTUF9NVVRFWCwKKwlNVEtfRElTUF9PRCwKKwlN VEtfRERQX0NPTVBfVFlQRV9NQVgsCit9OworCitlbnVtIG10a19kZHBfY29tcF9pZCB7CisJRERQ X0NPTVBPTkVOVF9BQUwsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9D T0xPUjEsCisJRERQX0NPTVBPTkVOVF9EUEkwLAorCUREUF9DT01QT05FTlRfRFNJMCwKKwlERFBf Q09NUE9ORU5UX0RTSTEsCisJRERQX0NPTVBPTkVOVF9HQU1NQSwKKwlERFBfQ09NUE9ORU5UX09E LAorCUREUF9DT01QT05FTlRfT1ZMMCwKKwlERFBfQ09NUE9ORU5UX09WTDEsCisJRERQX0NPTVBP TkVOVF9QV00wLAorCUREUF9DT01QT05FTlRfUFdNMSwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAor CUREUF9DT01QT05FTlRfUkRNQTEsCisJRERQX0NPTVBPTkVOVF9SRE1BMiwKKwlERFBfQ09NUE9O RU5UX1VGT0UsCisJRERQX0NPTVBPTkVOVF9XRE1BMCwKKwlERFBfQ09NUE9ORU5UX1dETUExLAor CUREUF9DT01QT05FTlRfSURfTUFYLAorfTsKKworc3RydWN0IG10a19kZHBfY29tcDsKKworc3Ry dWN0IG10a19kZHBfY29tcF9mdW5jcyB7CisJdm9pZCAoKmNvbmZpZykoc3RydWN0IG10a19kZHBf Y29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgaCwgdW5z aWduZWQgaW50IHZyZWZyZXNoKTsKKwl2b2lkICgqc3RhcnQpKHN0cnVjdCBtdGtfZGRwX2NvbXAg KmNvbXApOworCXZvaWQgKCpzdG9wKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lk ICgqZW5hYmxlX3ZibGFuaykoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKmRp c2FibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgqbGF5ZXJf b24pKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpOworCXZvaWQg KCpsYXllcl9vZmYpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgp OworCXZvaWQgKCpsYXllcl9jb25maWcpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2ln bmVkIGludCBpZHgsCisJCQkgICAgIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKTsKK307 CisKK3N0cnVjdCBtdGtfZGRwX2NvbXAgeworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9t ZW0gKnJlZ3M7CisJaW50IGlycTsKKwlzdHJ1Y3QgZGV2aWNlICpsYXJiX2RldjsKKwllbnVtIG10 a19kZHBfY29tcF9pZCBpZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpmdW5j czsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfY29uZmlnKHN0cnVjdCBt dGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBp bnQgaCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmIChjb21wLT5m dW5jcyAmJiBjb21wLT5mdW5jcy0+Y29uZmlnKQorCQljb21wLT5mdW5jcy0+Y29uZmlnKGNvbXAs IHcsIGgsIHZyZWZyZXNoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9z dGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBj b21wLT5mdW5jcy0+c3RhcnQpCisJCWNvbXAtPmZ1bmNzLT5zdGFydChjb21wKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv bXApCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5zdG9wKQorCQljb21wLT5m dW5jcy0+c3RvcChjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9l bmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1 bmNzICYmIGNvbXAtPmZ1bmNzLT5lbmFibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+ZW5hYmxl X3ZibGFuayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9kaXNh YmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5j cyAmJiBjb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCisJCWNvbXAtPmZ1bmNzLT5kaXNhYmxl X3ZibGFuayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXll cl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgdW5zaWduZWQgaW50IGlkeCkK K3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX29uKQorCQljb21wLT5m dW5jcy0+bGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19k ZHBfY29tcF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJICB1bnNp Z25lZCBpbnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJf b2ZmKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAg KmNvbXAsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1Y3QgbXRr X3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3Mt PmxheWVyX2NvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZyhjb21wLCBpZHgsIHN0 YXRlKTsKK30KKworaW50IG10a19kZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpu b2RlLAorCQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUpOworaW50IG10a19kZHBf Y29tcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpjb21wX25v ZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIGVudW0gbXRrX2RkcF9jb21w X2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1 bmNzKTsKK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwg c3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVy KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCisj ZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjIyYjQKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpA QCAtMCwwICsxLDU3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu CisgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJt L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1 ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1 ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgor CisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNp bmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNp bmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworI2RlZmlu ZSBEUklWRVJfTkFNRSAibWVkaWF0ZWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRpYXRlayBT b0MgRFJNIgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxNTA1MTMiCisjZGVmaW5lIERSSVZFUl9N QUpPUiAxCisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNf c2NoZWR1bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJcHJpdmF0ZS0+Y29tbWl0LnN0YXRlID0gc3RhdGU7 CisJc2NoZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0LndvcmspOworfQorCitzdGF0aWMgdm9p ZCBtdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShzdGF0 ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBpKQorCQltdGtfZmJfd2FpdChwbGFuZS0+c3RhdGUtPmZi KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9w cml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJbXRrX2F0b21pY193 YWl0X2Zvcl9mZW5jZXMoc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVz ZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5l cyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRf ZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92Ymxhbmtz KGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRybSwgc3Rh dGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10 a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG10a19k cm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IG10a19k cm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShwcml2YXRl LCBwcml2YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9taWNfY29t bWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2 YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJt X2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlmbHVz aF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9zd2Fw X3N0YXRlKGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3NjaGVkdWxl KHByaXZhdGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwg c3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbXRr X2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9tb2RlX2Zi X2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0 b21pY19jb21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBlbnVt IG10a19kZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDAs CisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQX0NPTVBP TkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlE RFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3RhdGljIGNv bnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NPTVBPTkVO VF9PVkwxLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJ RERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitzdGF0aWMg aW50IG10a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3Qg bXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXQ7CisKKwlpZiAoIWlvbW11X3ByZXNlbnQoJnBs YXRmb3JtX2J1c190eXBlKSkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwlwZGV2ID0gb2Zf ZmluZF9kZXZpY2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlpZiAoIXBkZXYpIHsK KwkJZGV2X2Vycihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3AtbXV0ZXggZGV2aWNlICVzXG4i LAorCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQocHJp dmF0ZS0+bXV0ZXhfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKwlwcml2YXRl LT5tdXRleF9kZXYgPSAmcGRldi0+ZGV2OworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsK KworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQ7CisJZHJtLT5tb2RlX2NvbmZpZy5t aW5faGVpZ2h0ID0gNjQ7CisKKwkvKgorCSAqIHNldCBtYXggd2lkdGggYW5kIGhlaWdodCBhcyBk ZWZhdWx0IHZhbHVlKDQwOTZ4NDA5NikuCisJICogdGhpcyB2YWx1ZSB3b3VsZCBiZSB1c2VkIHRv IGNoZWNrIGZyYW1lYnVmZmVyIHNpemUgbGltaXRhdGlvbgorCSAqIGF0IGRybV9tb2RlX2FkZGZi KCkuCisJICovCisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSA0MDk2OworCWRybS0+bW9k ZV9jb25maWcubWF4X2hlaWdodCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZt dGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzOworCisJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRy bS0+ZGV2LCBkcm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ19jbGVhbnVwOworCisJ LyoKKwkgKiBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gZml4ZWQgZGF0YSBzdHJlYW1zLCBlYWNo IHN0YXRpY2FsbHkKKwkgKiBhc3NpZ25lZCB0byBhIGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAg LT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBt dGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBf bWFpbikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCS8q IC4uLiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwly ZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRr X2RkcF9leHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsK KworCS8qCisJICogV2UgZG9uJ3QgdXNlIHRoZSBkcm1faXJxX2luc3RhbGwoKSBoZWxwZXJzIHBy b3ZpZGVkIGJ5IHRoZSBEUk0KKwkgKiBjb3JlLCBzbyB3ZSBuZWVkIHRvIHNldCB0aGlzIG1hbnVh bGx5IGluIG9yZGVyIHRvIGFsbG93IHRoZQorCSAqIERSTV9JT0NUTF9XQUlUX1ZCTEFOSyB0byBv cGVyYXRlIGNvcnJlY3RseS4KKwkgKi8KKwlkcm0tPmlycV9lbmFibGVkID0gdHJ1ZTsKKwlyZXQg PSBkcm1fdmJsYW5rX2luaXQoZHJtLCBNQVhfQ1JUQyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8g ZXJyX2NvbXBvbmVudF91bmJpbmQ7CisKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsK Kwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKKworCXJldHVybiAwOworCitlcnJfY29tcG9u ZW50X3VuYmluZDoKKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKK2Vycl9j b25maWdfY2xlYW51cDoKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9rbXNfZGVpbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pCit7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisKKwlkcm1fdmJs YW5rX2NsZWFudXAoZHJtKTsKKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsK Kwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworfQorCitzdGF0aWMgaW50IG10a19kcm1f dW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJbXRrX2RybV9rbXNfZGVpbml0KGRy bSk7CisJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtdGtfZHJtX2dlbV92bV9vcHMgPSB7 CisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV92bV9jbG9zZSwK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG10a19kcm1fZm9wcyA9 IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRybV9vcGVuLAorCS5yZWxlYXNl ID0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAorCS5tbWFwID0g bXRrX2RybV9nZW1fbW1hcCwKKwkucG9sbCA9IGRybV9wb2xsLAorCS5yZWFkID0gZHJtX3JlYWQs CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3Rs LAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgbXRrX2RybV9kcml2ZXIg PSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8IERS SVZFUl9QUklNRSB8CisJCQkgICBEUklWRVJfQVRPTUlDLAorCS51bmxvYWQgPSBtdGtfZHJtX3Vu bG9hZCwKKwkuc2V0X2J1c2lkID0gZHJtX3BsYXRmb3JtX3NldF9idXNpZCwKKworCS5nZXRfdmJs YW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5rX2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbXRrX2Ry bV9jcnRjX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rp c2FibGVfdmJsYW5rLAorCisJLmdlbV9mcmVlX29iamVjdCA9IG10a19kcm1fZ2VtX2ZyZWVfb2Jq ZWN0LAorCS5nZW1fdm1fb3BzID0gJm10a19kcm1fZ2VtX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUg PSBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gbXRrX2RybV9n ZW1fZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJv eSwKKworCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwK KwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdl bV9wcmltZV9leHBvcnQgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9y dCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbXRr X2dlbV9wcmltZV9nZXRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9tbWFwID0gbXRrX2RybV9nZW1f bW1hcF9idWYsCisJLmZvcHMgPSAmbXRrX2RybV9mb3BzLAorCisJLm5hbWUgPSBEUklWRVJfTkFN RSwKKwkuZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1ham9y ID0gRFJJVkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwKK307CisKK3N0YXRpYyBp bnQgY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJu IGRldi0+b2Zfbm9kZSA9PSBkYXRhOworfQorCitzdGF0aWMgaW50IG10a19kcm1fYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJaW50IHJldDsK KworCWRybSA9IGRybV9kZXZfYWxsb2MoJm10a19kcm1fZHJpdmVyLCBkZXYpOworCWlmICghZHJt KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9kZXZfc2V0X3VuaXF1ZShkcm0sIGRldl9uYW1l KGRldikpOworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQgPCAw KQorCQlnb3RvIGVycl9mcmVlOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXZhdGU7CisJcHJp dmF0ZS0+ZHJtID0gZHJtOworCisJcmV0ID0gbXRrX2RybV9rbXNfaW5pdChkcm0pOworCWlmIChy ZXQgPCAwKQorCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2Vycl91bnJl Z2lzdGVyOgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX2ZyZWU6CisJZHJtX2Rldl91 bnJlZihkcm0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fdW5iaW5k KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1fcHV0X2Rldihwcml2YXRlLT5kcm0pOwor CXByaXZhdGUtPmRybSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50 X21hc3Rlcl9vcHMgbXRrX2RybV9vcHMgPSB7CisJLmJpbmQJCT0gbXRrX2RybV9iaW5kLAorCS51 bmJpbmQJCT0gbXRrX2RybV91bmJpbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCBtdGtfZGRwX2NvbXBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRp YXRlayxtdDgxNzMtZGlzcC1vdmwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PVkwgfSwK Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCAgLmRhdGEgPSAo dm9pZCAqKU1US19ESVNQX1JETUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3 My1kaXNwLXdkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1dETUEgfSwKKwl7IC5jb21w YXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRhdGEgPSAodm9pZCAqKU1U S19ESVNQX0NPTE9SIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1h YWwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9BQUx9LAorCXsgLmNvbXBhdGlibGUgPSAi bWVkaWF0ZWssbXQ4MTczLWRpc3AtZ2FtbWEiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfR0FN TUEsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC11Zm9lIiwgIC5k YXRhID0gKHZvaWQgKilNVEtfRElTUF9VRk9FIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxtdDgxNzMtZHNpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFNJIH0sCisJeyAuY29t cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHBpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilN VEtfRFBJIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIs IC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9NVVRFWCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVk aWF0ZWssbXQ4MTczLWRpc3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUFdNIH0s CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vZCIsICAgIC5kYXRhID0g KHZvaWQgKilNVEtfRElTUF9PRCB9LAorCXsgfQorfTsKKworc3RhdGljIGludCBtdGtfZHJtX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlOworCXN0cnVj dCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgY29t cG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXByaXZh dGUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIXByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcHJpdmF0ZS0+ Y29tbWl0LmxvY2spOworCUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0LndvcmssIG10a19hdG9t aWNfd29yayk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9NRU0sIDApOworCXByaXZhdGUtPmNvbmZpZ19yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNl KGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKSkgeworCQlyZXQg PSBQVFJfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gaW9yZW1hcCBtbXN5cy1jb25maWcgcmVzb3VyY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBESVNQIGZ1bmN0aW9uIGJs b2NrcyAqLworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLT5wYXJlbnQsIG5v ZGUpIHsKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CisJCWVudW0gbXRrX2Rk cF9jb21wX3R5cGUgY29tcF90eXBlOworCQlpbnQgY29tcF9pZDsKKworCQlvZl9pZCA9IG9mX21h dGNoX25vZGUobXRrX2RkcF9jb21wX2R0X2lkcywgbm9kZSk7CisJCWlmICghb2ZfaWQpCisJCQlj b250aW51ZTsKKworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKKwkJCWRl dl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVzXG4iLAorCQkJCW5vZGUt PmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBfdHlwZSA9IChlbnVtIG10 a19kZHBfY29tcF90eXBlKW9mX2lkLT5kYXRhOworCisJCWlmIChjb21wX3R5cGUgPT0gTVRLX0RJ U1BfTVVURVgpIHsKKwkJCXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9ub2RlX2dldChub2RlKTsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQobm9k ZSwgY29tcF90eXBlKTsKKwkJaWYgKGNvbXBfaWQgPCAwKSB7CisJCQlkZXZfd2FybihkZXYsICJT a2lwcGluZyB1bmtub3duIGNvbXBvbmVudCAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJpdmF0ZS0+Y29tcF9ub2RlW2NvbXBfaWRdID0gb2Zf bm9kZV9nZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3VycmVudGx5IG9ubHkgdGhlIE9WTCwgRFNJ LCBhbmQgRFBJIGJsb2NrcyBoYXZlIHNlcGFyYXRlCisJCSAqIGNvbXBvbmVudCBwbGF0Zm9ybSBk cml2ZXJzIGFuZCBpbml0aWFsaXplIHRoZWlyIG93biBERFAKKwkJICogY29tcG9uZW50IHN0cnVj dHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4KKwkJICovCisJCWlmIChjb21w X3R5cGUgPT0gTVRLX0RJU1BfT1ZMIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RTSSB8fAor CQkgICAgY29tcF90eXBlID09IE1US19EUEkpIHsKKwkJCWRldl9pbmZvKGRldiwgIkFkZGluZyBj b21wb25lbnQgbWF0Y2ggZm9yICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJY29t cG9uZW50X21hdGNoX2FkZChkZXYsICZtYXRjaCwgY29tcGFyZV9vZiwgbm9kZSk7CisJCX0gZWxz ZSB7CisJCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wOworCisJCQljb21wID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpjb21wKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJ CQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyX25vZGU7CisJCQl9CisKKwkJCXJldCA9IG10 a19kZHBfY29tcF9pbml0KGRldiwgbm9kZSwgY29tcCwgY29tcF9pZCwgTlVMTCk7CisJCQlpZiAo cmV0KQorCQkJCWdvdG8gZXJyX25vZGU7CisKKwkJCXByaXZhdGUtPmRkcF9jb21wW2NvbXBfaWRd ID0gY29tcDsKKwkJfQorCX0KKworCWlmICghcHJpdmF0ZS0+bXV0ZXhfbm9kZSkgeworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGRpc3AtbXV0ZXggbm9kZVxuIik7CisJCXJldCA9IC1F Tk9ERVY7CisJCWdvdG8gZXJyX25vZGU7CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsK KworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXZhdGUpOworCisJcmV0ID0gY29tcG9u ZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsICZtdGtfZHJtX29wcywgbWF0Y2gpOworCWlm IChyZXQpCisJCWdvdG8gZXJyX3BtOworCisJcmV0dXJuIDA7CisKK2Vycl9wbToKKwlwbV9ydW50 aW1lX2Rpc2FibGUoZGV2KTsKK2Vycl9ub2RlOgorCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4 X25vZGUpOworCWZvciAoaSA9IDA7IGkgPCBERFBfQ09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlv Zl9ub2RlX3B1dChwcml2YXRlLT5jb21wX25vZGVbaV0pOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgbXRrX2RybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7CisJaW50IGk7CisKKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRr X2RybV9vcHMpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlvZl9ub2RlX3B1 dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9J RF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+Y29tcF9ub2RlW2ldKTsKKworCXJl dHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG10a19kcm1f c3lzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZh dGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gcHJpdmF0ZS0+ZHJtOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOworCisJZHJt X2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKGRybSk7CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChk cm0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcuY29ubmVj dG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50IG9sZF9kcG1zID0gY29ubi0+ZHBtczsKKworCQlpZiAo Y29ubi0+ZnVuY3MtPmRwbXMpCisJCQljb25uLT5mdW5jcy0+ZHBtcyhjb25uLCBEUk1fTU9ERV9E UE1TX09GRik7CisKKwkJLyogU2V0IHRoZSBvbGQgbW9kZSBiYWNrIHRvIHRoZSBjb25uZWN0b3Ig Zm9yIHJlc3VtZSAqLworCQljb25uLT5kcG1zID0gb2xkX2RwbXM7CisJfQorCWRybV9tb2Rlc2V0 X3VubG9ja19hbGwoZHJtKTsKKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3N1c3Bl bmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3Jlc3VtZShz dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRl LT5kcm07CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47CisKKwlkcm1fbW9kZXNldF9sb2Nr X2FsbChkcm0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcu Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50IGRlc2lyZWRfbW9kZSA9IGNvbm4tPmRwbXM7 CisKKwkJLyoKKwkJICogYXQgc3VzcGVuZCB0aW1lLCB3ZSBzYXZlIGRwbXMgdG8gY29ubmVjdG9y LT5kcG1zLAorCQkgKiByZXN0b3JlIHRoZSBvbGRfZHBtcywgYW5kIGF0IGN1cnJlbnQgdGltZSwg dGhlIGNvbm5lY3RvcgorCQkgKiBkcG1zIHN0YXR1cyBtdXN0IGJlIERSTV9NT0RFX0RQTVNfT0ZG LgorCQkgKi8KKwkJY29ubi0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT0ZGOworCisJCS8qCisJCSAq IElmIHRoZSBjb25uZWN0b3IgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGR1cmluZyBzdXNwZW5kLAor CQkgKiBkaXNjb25uZWN0IGl0IGZyb20gdGhlIGVuY29kZXIgYW5kIGxlYXZlIGl0IG9mZi4gV2Un bGwgbm90aWZ5CisJCSAqIHVzZXJzcGFjZSBhdCB0aGUgZW5kLgorCQkgKi8KKwkJaWYgKGNvbm4t PmZ1bmNzLT5kcG1zKQorCQkJY29ubi0+ZnVuY3MtPmRwbXMoY29ubiwgZGVzaXJlZF9tb2RlKTsK Kwl9CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkcm0pOworCisJZHJtX2ttc19oZWxwZXJfcG9s bF9lbmFibGUoZHJtKTsKKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3Jlc3VtZVxu Iik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10 a19kcm1fcG1fb3BzLCBtdGtfZHJtX3N5c19zdXNwZW5kLAorCQkJIG10a19kcm1fc3lzX3Jlc3Vt ZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kcm1fb2ZfaWRzW10g PSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbW1zeXMiLCB9LAorCXsgfQor fTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RybV9wbGF0Zm9ybV9kcml2 ZXIgPSB7CisJLnByb2JlCT0gbXRrX2RybV9wcm9iZSwKKwkucmVtb3ZlCT0gbXRrX2RybV9yZW1v dmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZHJtIiwKKwkJLm9mX21hdGNo X3RhYmxlID0gbXRrX2RybV9vZl9pZHMsCisJCS5wbSAgICAgPSAmbXRrX2RybV9wbV9vcHMsCisJ fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29uc3QgbXRrX2RybV9k cml2ZXJzW10gPSB7CisJJm10a19kcm1fcGxhdGZvcm1fZHJpdmVyLAorCSZtdGtfZGlzcF9vdmxf ZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRrX2RybV9pbml0KHZvaWQpCit7CisJ aW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19kcm1f ZHJpdmVycyk7IGkrKykgeworCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIobXRrX2Ry bV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJl Z2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkgICAgICAgbXRrX2RybV9kcml2ZXJzW2ldLT5k cml2ZXIubmFtZSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CisK K2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKG10 a19kcm1fZHJpdmVyc1tpXSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4 aXQgbXRrX2RybV9leGl0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBBUlJBWV9TSVpF KG10a19kcm1fZHJpdmVycykgLSAxOyBpID49IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJpdmVyX3Vu cmVnaXN0ZXIobXRrX2RybV9kcml2ZXJzW2ldKTsKK30KKworbW9kdWxlX2luaXQobXRrX2RybV9p bml0KTsKK21vZHVsZV9leGl0KG10a19kcm1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIllUIFNI RU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYXRl ayBTb0MgRFJNIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi43NWUxYjdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZHJ2LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx NSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9EUlZfSAorI2RlZmluZSBNVEtfRFJNX0RS Vl9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAu aCIKKworI2RlZmluZSBNQVhfQ1JUQwkyCisjZGVmaW5lIE1BWF9DT05ORUNUT1IJMgorCitzdHJ1 Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9ub2RlOworc3RydWN0IGRybV9jcnRjOworc3RydWN0 IGRybV9kZXZpY2U7CitzdHJ1Y3QgZHJtX2ZiX2hlbHBlcjsKK3N0cnVjdCBkcm1fcHJvcGVydHk7 CitzdHJ1Y3QgcmVnbWFwOworCitzdHJ1Y3QgbXRrX2RybV9wcml2YXRlIHsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZHJtOworCisJc3RydWN0IGRybV9jcnRjICpjcnRjW01BWF9DUlRDXTsKKwl1bnNp Z25lZCBpbnQgbnVtX3BpcGVzOworCisJc3RydWN0IGRldmljZV9ub2RlICptdXRleF9ub2RlOwor CXN0cnVjdCBkZXZpY2UgKm11dGV4X2RldjsKKwl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOwor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2RlW0REUF9DT01QT05FTlRfSURfTUFYXTsKKwlz dHJ1Y3QgbXRrX2RkcF9jb21wICpkZHBfY29tcFtERFBfQ09NUE9ORU5UX0lEX01BWF07CisKKwlz dHJ1Y3QgeworCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7CisJCXN0cnVjdCB3b3Jr X3N0cnVjdCB3b3JrOworCQlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl9IGNvbW1pdDsKK307CisKK2V4 dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXI7CisKKyNlbmRp ZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQxNmNmCi0tLSAvZGV2L251bGwK 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 KwkJCQkJCSAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlLAorCQkJCQkJICAgc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlp bnQgcmV0OworCisJaWYgKGRybV9mb3JtYXRfbnVtX3BsYW5lcyhtb2RlLT5waXhlbF9mb3JtYXQp ICE9IDEpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJbXRrX2ZiID0ga3phbGxvYyhz aXplb2YoKm10a19mYiksIEdGUF9LRVJORUwpOworCWlmICghbXRrX2ZiKQorCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKKworCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmbXRrX2Zi LT5iYXNlLCBtb2RlKTsKKworCW10a19mYi0+Z2VtX29iaiA9IG9iajsKKworCXJldCA9IGRybV9m cmFtZWJ1ZmZlcl9pbml0KGRldiwgJm10a19mYi0+YmFzZSwgJm10a19kcm1fZmJfZnVuY3MpOwor CWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZl clxuIik7CisJCWtmcmVlKG10a19mYik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJ cmV0dXJuIG10a19mYjsKK30KKworLyoKKyAqIFdhaXQgZm9yIGFueSBleGNsdXNpdmUgZmVuY2Ug aW4gZmIncyBnZW0gb2JqZWN0J3MgcmVzZXJ2YXRpb24gb2JqZWN0LgorICoKKyAqIFJldHVybnMg LUVSRVNUQVJUU1lTIGlmIGludGVycnVwdGVkLCBlbHNlIDAuCisgKi8KK2ludCBtdGtfZmJfd2Fp dChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg KmdlbTsKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2OworCWxvbmcgcmV0OworCisJ aWYgKCFmYikKKwkJcmV0dXJuIDA7CisKKwlnZW0gPSBtdGtfZmJfZ2V0X2dlbV9vYmooZmIpOwor CWlmICghZ2VtIHx8ICFnZW0tPmRtYV9idWYgfHwgIWdlbS0+ZG1hX2J1Zi0+cmVzdikKKwkJcmV0 dXJuIDA7CisKKwlyZXN2ID0gZ2VtLT5kbWFfYnVmLT5yZXN2OworCXJldCA9IHJlc2VydmF0aW9u X29iamVjdF93YWl0X3RpbWVvdXRfcmN1KHJlc3YsIGZhbHNlLCB0cnVlLAorCQkJCQkJICBNQVhf U0NIRURVTEVfVElNRU9VVCk7CisJLyogTUFYX1NDSEVEVUxFX1RJTUVPVVQgb24gc3VjY2Vzcywg LUVSRVNUQVJUU1lTIGlmIGludGVycnVwdGVkICovCisJaWYgKFdBUk5fT04ocmV0IDwgMCkpCisJ CXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq bXRrX2RybV9tb2RlX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAg ICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCQkgICAgICAgc3RydWN0IGRybV9tb2RlX2Zi X2NtZDIgKmNtZCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiOworCXN0cnVjdCBkcm1f Z2VtX29iamVjdCAqZ2VtOworCXVuc2lnbmVkIGludCB3aWR0aCA9IGNtZC0+d2lkdGg7CisJdW5z aWduZWQgaW50IGhlaWdodCA9IGNtZC0+aGVpZ2h0OworCXVuc2lnbmVkIGludCBzaXplLCBicHA7 CisJaW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMoY21kLT5waXhlbF9mb3Jt YXQpICE9IDEpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJZ2VtID0gZHJtX2dlbV9v YmplY3RfbG9va3VwKGRldiwgZmlsZSwgY21kLT5oYW5kbGVzWzBdKTsKKwlpZiAoIWdlbSkKKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwlicHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChj bWQtPnBpeGVsX2Zvcm1hdCwgMCk7CisJc2l6ZSA9IChoZWlnaHQgLSAxKSAqIGNtZC0+cGl0Y2hl c1swXSArIHdpZHRoICogYnBwOworCXNpemUgKz0gY21kLT5vZmZzZXRzWzBdOworCisJaWYgKGdl bS0+c2l6ZSA8IHNpemUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bnJlZmVyZW5jZTsK Kwl9CisKKwltdGtfZmIgPSBtdGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCBjbWQsIGdlbSk7 CisJaWYgKElTX0VSUihtdGtfZmIpKSB7CisJCXJldCA9IFBUUl9FUlIobXRrX2ZiKTsKKwkJZ290 byB1bnJlZmVyZW5jZTsKKwl9CisKKwlyZXR1cm4gJm10a19mYi0+YmFzZTsKKwordW5yZWZlcmVu Y2U6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKKwlyZXR1cm4g RVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZmIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5YzdhZgotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKQEAgLTAsMCArMSwyOSBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9G Ql9ICisjZGVmaW5lIE1US19EUk1fRkJfSAorCisjZGVmaW5lIE1BWF9GQl9PQkoJMworCitzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm10a19mYl9nZXRfZ2VtX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYik7CitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOwor c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCQkg ICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCk7CisKK3ZvaWQgbXRrX2RybV9tb2Rl X291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgbXRrX2Zi ZGV2X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgbXRrX2ZiZGV2X2Rlc3Ry b3koc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0ZCX0ggKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uOTZjYzk4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9nZW0uaD4KKworI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisKK3N0YXRpYyBz dHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkJCQl1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IG10a19kcm1fZ2Vt X29iaiAqbXRrX2dlbV9vYmo7CisJaW50IHJldDsKKworCXNpemUgPSByb3VuZF91cChzaXplLCBQ QUdFX1NJWkUpOworCisJbXRrX2dlbV9vYmogPSBremFsbG9jKHNpemVvZigqbXRrX2dlbV9vYmop LCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19nZW1fb2JqKQorCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKKworCXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQoZGV2LCAmbXRrX2dlbV9vYmotPmJh c2UsIHNpemUpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRp YWxpemUgZ2VtIG9iamVjdFxuIik7CisJCWtmcmVlKG10a19nZW1fb2JqKTsKKwkJcmV0dXJuIEVS Ul9QVFIocmV0KTsKKwl9CisKKwlyZXR1cm4gbXRrX2dlbV9vYmo7Cit9CisKK3N0cnVjdCBtdGtf ZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkJCQkgICB1bnNpZ25lZCBsb25nIHNpemUsIGJvb2wgYWxsb2Nfa21hcCkKK3sKKwlzdHJ1Y3Qg bXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwor CWludCByZXQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIHNpemUpOworCWlm IChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfQ0FTVChtdGtfZ2VtKTsKKworCW9iaiA9 ICZtdGtfZ2VtLT5iYXNlOworCisJaW5pdF9kbWFfYXR0cnMoJm10a19nZW0tPmRtYV9hdHRycyk7 CisJZG1hX3NldF9hdHRyKERNQV9BVFRSX1dSSVRFX0NPTUJJTkUsICZtdGtfZ2VtLT5kbWFfYXR0 cnMpOworCisJaWYgKCFhbGxvY19rbWFwKQorCQlkbWFfc2V0X2F0dHIoRE1BX0FUVFJfTk9fS0VS TkVMX01BUFBJTkcsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJbXRrX2dlbS0+Y29va2llID0g ZG1hX2FsbG9jX2F0dHJzKGRldi0+ZGV2LCBvYmotPnNpemUsCisJCQkJKGRtYV9hZGRyX3QgKikm bXRrX2dlbS0+ZG1hX2FkZHIsIEdGUF9LRVJORUwsCisJCQkJJm10a19nZW0tPmRtYV9hdHRycyk7 CisJaWYgKCFtdGtfZ2VtLT5jb29raWUpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2Nh dGUgJXp4IGJ5dGUgZG1hIGJ1ZmZlciIsIG9iai0+c2l6ZSk7CisJCXJldCA9IC1FTk9NRU07CisJ CWdvdG8gZXJyX2dlbV9mcmVlOworCX0KKworCWlmIChhbGxvY19rbWFwKQorCQltdGtfZ2VtLT5r dmFkZHIgPSBtdGtfZ2VtLT5jb29raWU7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJjb29raWUgPSAl cCBkbWFfYWRkciA9ICVwYWRcbiIsCisJCQkgbXRrX2dlbS0+Y29va2llLCAmbXRrX2dlbS0+ZG1h X2FkZHIpOworCisJcmV0dXJuIG10a19nZW07CisKK2Vycl9nZW1fZnJlZToKKwlkcm1fZ2VtX29i amVjdF9yZWxlYXNlKG9iaik7CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0 KTsKK30KKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dl bV9vYmoob2JqKTsKKworCWRtYV9mcmVlX2F0dHJzKG9iai0+ZGV2LT5kZXYsIG9iai0+c2l6ZSwg bXRrX2dlbS0+Y29va2llLAorCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5k bWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8K Kwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKwor aW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVt YiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7 CisKKwlhcmdzLT5waXRjaCA9IGFyZ3MtPndpZHRoICogRElWX1JPVU5EX1VQKGFyZ3MtPmJwcCwg OCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRrX2dl bSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAoSVNf RVJSKG10a19nZW0pKQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICogYWxs b2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICog YW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRy bV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+aGFu ZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJvcCBy ZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0dXJu IDA7CisKK2Vycl9oYW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZtdGtf Z2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9tYXBf b2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVj dF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0 KQorCQlnb3RvIG91dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9i ai0+dm1hX25vZGUpOworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNl dCk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCisKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0 b19tdGtfZ2VtX29iaihvYmopOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBvYmotPmRldjsK KworCS8qCisJICogZG1hX2FsbG9jX2F0dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0IHBhZ2UgdGFi bGUgZm9yIG10a19nZW0sIHNvIGNsZWFyCisJICogVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0 IGJ5IGRybV9nZW1fbW1hcF9vYmooKS9kcm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2bWEtPnZtX2Zs YWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9wZ29mZiA9IDA7CisKKwlyZXQgPSBkbWFfbW1h cF9hdHRycyhkcm0tPmRldiwgdm1hLCBtdGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRy LAorCQkJICAgICBvYmotPnNpemUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJ CWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJt X2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2Jq LCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBt dGtfZHJtX2dlbV9vYmplY3RfbW1hcChvYmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9t bWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9t bWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+ dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwg dm1hKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVj dC4KKyAqIE5vdGU6IEJvdGggdGhlIHRhYmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUg aXRzZWxmIG11c3QgYmUgZnJlZWQgYnkKKyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5z IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRS KCkgZXJyb3IuCisgKi8KK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFi bGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29i aiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRy bSA9IG9iai0+ZGV2OworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3Qg PSBremFsbG9jKHNpemVvZigqc2d0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKGRybS0+ ZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9i ai0+c2l6ZSwKKwkJCQkgICAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShz Z3QpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uaCBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjliZGVlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9nZW0uaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChj KSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTVRLX0RSTV9HRU1fSF8KKyNkZWZpbmUgX01U S19EUk1fR0VNX0hfCisKKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorCisvKgorICogbXRrIGRy bSBidWZmZXIgc3RydWN0dXJlLgorICoKKyAqIEBiYXNlOiBhIGdlbSBvYmplY3QuCisgKgktIGEg bmV3IGhhbmRsZSB0byB0aGlzIGdlbSBvYmplY3Qgd291bGQgYmUgY3JlYXRlZAorICoJYnkgZHJt X2dlbV9oYW5kbGVfY3JlYXRlKCkuCisgKiBAY29va2llOiB0aGUgcmV0dXJuIHZhbHVlIG9mIGRt YV9hbGxvY19hdHRycygpLCBrZWVwIGl0IGZvciBkbWFfZnJlZV9hdHRycygpCisgKiBAa3ZhZGRy OiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIGdlbSBidWZmZXIuCisgKiBAZG1hX2FkZHI6IGRt YSBhZGRyZXNzIG9mIGdlbSBidWZmZXIuCisgKiBAZG1hX2F0dHJzOiBkbWEgYXR0cmlidXRlcyBv ZiBnZW0gYnVmZmVyLgorICoKKyAqIFAuUy4gdGhpcyBvYmplY3Qgd291bGQgYmUgdHJhbnNmZXJy ZWQgdG8gdXNlciBhcyBrbXNfYm8uaGFuZGxlIHNvCisgKgl1c2VyIGNhbiBhY2Nlc3MgdGhlIGJ1 ZmZlciB0aHJvdWdoIGttc19iby5oYW5kbGUuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmog eworCXN0cnVjdCBkcm1fZ2VtX29iamVjdAliYXNlOworCXZvaWQJCQkqY29va2llOworCXZvaWQJ CQkqa3ZhZGRyOworCWRtYV9hZGRyX3QJCWRtYV9hZGRyOworCXN0cnVjdCBkbWFfYXR0cnMJZG1h X2F0dHJzOworfTsKKworI2RlZmluZSB0b19tdGtfZ2VtX29iaih4KQljb250YWluZXJfb2YoeCwg c3RydWN0IG10a19kcm1fZ2VtX29iaiwgYmFzZSkKKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29i amVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSk7CitzdHJ1Y3QgbXRrX2RybV9nZW1fb2Jq ICptdGtfZHJtX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJdW5zaWduZWQg bG9uZyBzaXplLCBib29sIGFsbG9jX2ttYXApOworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRl KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOworaW50IG10a19kcm1fZ2VtX2R1bWJf bWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0KTsKK2ludCBtdGtfZHJt X2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7 CitpbnQgbXRrX2RybV9nZW1fbW1hcF9idWYoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJ CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9w cmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCisjZW5kaWYK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMgYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmU5YjZiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICog Q29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1 QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX3BsYW5lX2hlbHBlci5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5j bHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5j bHVkZSAibXRrX2RybV9mYi5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAi bXRrX2RybV9wbGFuZS5oIgorCitzdGF0aWMgY29uc3QgdWludDMyX3QgZm9ybWF0c1tdID0gewor CURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFU X1JHQjU2NSwKK307CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9lbmFibGUoc3RydWN0IG10a19k cm1fcGxhbmUgKm10a19wbGFuZSwgYm9vbCBlbmFibGUsCisJCQkgICAgIGRtYV9hZGRyX3QgYWRk ciwgc3RydWN0IGRybV9yZWN0ICpkZXN0KQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0g Jm10a19wbGFuZS0+YmFzZTsKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210 a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXVuc2lnbmVkIGludCBwaXRjaCwgZm9ybWF0 OworCWludCB4LCB5OworCisJaWYgKFdBUk5fT04oIXBsYW5lLT5zdGF0ZSB8fCAoZW5hYmxlICYm ICFwbGFuZS0+c3RhdGUtPmZiKSkpCisJCXJldHVybjsKKworCWlmIChwbGFuZS0+c3RhdGUtPmZi KSB7CisJCXBpdGNoID0gcGxhbmUtPnN0YXRlLT5mYi0+cGl0Y2hlc1swXTsKKwkJZm9ybWF0ID0g cGxhbmUtPnN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0OworCX0gZWxzZSB7CisJCXBpdGNoID0gMDsK KwkJZm9ybWF0ID0gRFJNX0ZPUk1BVF9SR0JBODg4ODsKKwl9CisKKwl4ID0gcGxhbmUtPnN0YXRl LT5jcnRjX3g7CisJeSA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y195OworCisJaWYgKHggPCAwKSB7CisJ CWFkZHIgLT0geCAqIDQ7CisJCXggPSAwOworCX0KKworCWlmICh5IDwgMCkgeworCQlhZGRyIC09 IHkgKiBwaXRjaDsKKwkJeSA9IDA7CisJfQorCisJc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZW5h YmxlOworCXN0YXRlLT5wZW5kaW5nLnBpdGNoID0gcGl0Y2g7CisJc3RhdGUtPnBlbmRpbmcuZm9y bWF0ID0gZm9ybWF0OworCXN0YXRlLT5wZW5kaW5nLmFkZHIgPSBhZGRyOworCXN0YXRlLT5wZW5k aW5nLnggPSB4OworCXN0YXRlLT5wZW5kaW5nLnkgPSB5OworCXN0YXRlLT5wZW5kaW5nLndpZHRo ID0gZGVzdC0+eDIgLSBkZXN0LT54MTsKKwlzdGF0ZS0+cGVuZGluZy5oZWlnaHQgPSBkZXN0LT55 MiAtIGRlc3QtPnkxOworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGlj IHZvaWQgbXRrX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVj dCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJaWYgKHBsYW5lLT5zdGF0ZSkgeworCQlpZiAo cGxhbmUtPnN0YXRlLT5mYikKKwkJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShwbGFuZS0+ c3RhdGUtPmZiKTsKKworCQlzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUp OworCQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9IGVsc2UgeworCQlzdGF0 ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YXRlKQor CQkJcmV0dXJuOworCQlwbGFuZS0+c3RhdGUgPSAmc3RhdGUtPmJhc2U7CisJfQorCisJc3RhdGUt PmJhc2UucGxhbmUgPSBwbGFuZTsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQgPSBEUk1fRk9STUFU X1JHQjU2NTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm10a19wbGFuZV9k dXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IG10a19w bGFuZV9zdGF0ZSAqb2xkX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7 CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6 ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOwor CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZzdGF0 ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLnBsYW5lICE9IHBsYW5lKTsKKworCXN0 YXRlLT5wZW5kaW5nID0gb2xkX3N0YXRlLT5wZW5kaW5nOworCisJcmV0dXJuICZzdGF0ZS0+YmFz ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAorCQkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sK KwlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUsIHN0YXRlKTsK KwlrZnJlZSh0b19tdGtfcGxhbmVfc3RhdGUoc3RhdGUpKTsKK30KKworCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9wbGFuZV9mdW5jcyBtdGtfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFu ZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRy bV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBkcm1fcGxhbmVfY2xl YW51cCwKKwkucmVzZXQgPSBtdGtfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSBtdGtfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9 IG10a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgbXRrX3BsYW5l X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3Rh dGUtPmZiOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlib29sIHZpc2li bGU7CisJc3RydWN0IGRybV9yZWN0IGRlc3QgPSB7CisJCS54MSA9IHN0YXRlLT5jcnRjX3gsCisJ CS55MSA9IHN0YXRlLT5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+Y3J0 Y193LAorCQkueTIgPSBzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNfaCwKKwl9OworCXN0cnVj dCBkcm1fcmVjdCBzcmMgPSB7CisJCS8qIDE2LjE2IGZpeGVkIHBvaW50ICovCisJCS54MSA9IHN0 YXRlLT5zcmNfeCwKKwkJLnkxID0gc3RhdGUtPnNyY195LAorCQkueDIgPSBzdGF0ZS0+c3JjX3gg KyBzdGF0ZS0+c3JjX3csCisJCS55MiA9IHN0YXRlLT5zcmNfeSArIHN0YXRlLT5zcmNfaCwKKwl9 OworCXN0cnVjdCBkcm1fcmVjdCBjbGlwID0geyAwLCB9OworCisJaWYgKCFmYikKKwkJcmV0dXJu IDA7CisKKwlpZiAoIW10a19mYl9nZXRfZ2VtX29iaihmYikpIHsKKwkJRFJNX0RFQlVHX0tNUygi YnVmZmVyIGlzIG51bGxcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXN0YXRl LT5jcnRjKQorCQlyZXR1cm4gMDsKKworCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRj X3N0YXRlKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmNydGMpOworCWlmIChJU19FUlIoY3J0Y19zdGF0 ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJY2xpcC54MiA9IGNydGNfc3Rh dGUtPm1vZGUuaGRpc3BsYXk7CisJY2xpcC55MiA9IGNydGNfc3RhdGUtPm1vZGUudmRpc3BsYXk7 CisKKwlyZXR1cm4gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIHN0YXRlLT5j cnRjLCBmYiwKKwkJCQkJICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAgIERSTV9QTEFO RV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElO RywKKwkJCQkJICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30KKworc3RhdGljIHZvaWQgbXRr X3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgIHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0 YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXN0cnVjdCBk cm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnZW07CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1Y3QgbXRrX2Ry bV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3QgZHJtX3Jl Y3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194LAorCQkueTEgPSBzdGF0ZS0+ YmFzZS5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNfeCArIHN0YXRlLT5iYXNlLmNy dGNfdywKKwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3RhdGUtPmJhc2UuY3J0Y19oLAor CX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWNydGMpCisJCXJl dHVybjsKKworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9kZS5oZGlzcGxh eTsKKwljbGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUudmRpc3BsYXk7CisJ ZHJtX3JlY3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwlnZW0gPSBtdGtfZmJfZ2V0X2dl bV9vYmooc3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19tdGtfZ2VtX29iaihnZW0pOwor CW10a19wbGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtfZ2VtLT5kbWFfYWRkciwgJmRl c3QpOworCisJbXRrX2RybV9jcnRjX2NoZWNrX2ZsdXNoKGNydGMpOworfQorCitzdGF0aWMgdm9p ZCBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJ ICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19w bGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwor CXN0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZhbHNlOworCXdtYigpOworCXN0YXRlLT5wZW5kaW5n LmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVy X2Z1bmNzIG10a19wbGFuZV9oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19jaGVjayA9IG10a19w bGFuZV9hdG9taWNfY2hlY2ssCisJLmF0b21pY191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3Vw ZGF0ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsCit9Owor CitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19k cm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywg ZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcykKK3sKKwlp bnQgZXJyOworCisJZXJyID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRldiwgJm10a19wbGFu ZS0+YmFzZSwgcG9zc2libGVfY3J0Y3MsCisJCQkmbXRrX3BsYW5lX2Z1bmNzLCBmb3JtYXRzLCBB UlJBWV9TSVpFKGZvcm1hdHMpLCB0eXBlKTsKKworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZHJt X3BsYW5lX2hlbHBlcl9hZGQoJm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxwZXJfZnVu Y3MpOworCW10a19wbGFuZS0+aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNzJhN2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX3BsYW5lLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5j b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpZm5kZWYgX01US19EUk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExBTkVfSF8K KworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisK K3N0cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVuc2ln bmVkIGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7CisJ Ym9vbAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJ dW5zaWduZWQgaW50CQkJcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVuc2lnbmVk IGludAkJCXg7CisJdW5zaWduZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0aDsKKwl1 bnNpZ25lZCBpbnQJCQloZWlnaHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVjdCBtdGtf cGxhbmVfc3RhdGUgeworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3RydWN0IG10 a19wbGFuZV9wZW5kaW5nX3N0YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVj dCBtdGtfZHJtX3BsYW5lICp0b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7 CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUsIGJhc2Up OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9fbXRrX3Bs YW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBjb250 YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQorCitpbnQg bXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxh bmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBk cm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRpZgot LSAKMi42LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==