From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v16 3/8] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Fri, 6 May 2016 15:05:49 +0200 Message-ID: <1462539954-26158-4-git-send-email-p.zabel@pengutronix.de> References: <1462539954-26158-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: <1462539954-26158-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala List-Id: devicetree@vger.kernel.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0 aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0 IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8 ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjE1OgogLSBSZWJhc2VkIG9udG8gZHJtLW5leHQK IC0gVXNlIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCkgaW5zdGVhZCBvZiBkcm1fc2VuZF92 YmxhbmtfZXZlbnQoKQogLSBPcmRlciBtdGtfZHJtX2RyaXZlcnMgYWxwaGFiZXRpY2FsbHkKLS0t CiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRy aXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAgICAgICB8ICAxNCArCiBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYyAgICAgfCAzMDIgKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jICAgIHwgMjQwICsrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jICAgICB8IDU4MiArKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9jcnRjLmggICAgIHwgIDMyICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k ZHAuYyAgICAgIHwgMzUzICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9kZHAuaCAgICAgIHwgIDQxICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kZHBfY29tcC5jIHwgMjI1ICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIHwgMTUwICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2Rydi5jICAgICAgfCA1NTggKysrKysrKysrKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTcgKysr CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAgIHwgIDIzICsr CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwgMjY5ICsrKysr KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAg NTkgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQw ICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCAg ICB8ICA1OSArKysKIDIwIGZpbGVzIGNoYW5nZWQsIDMzODMgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k ZHBfY29tcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZGRwX2NvbXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9mYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fZmIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggMTZlNGMyMS4u ZmMzNTczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKQEAgLTI4OCwzICsyODgsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS9ldG5hdml2L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hcmMvS2NvbmZp ZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL0tjb25maWciCisKK3NvdXJj ZSAiZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNDNjMmFi Zi4uMmJkM2U1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNzQsNiArNzQsNyBAQCBvYmotJChDT05GSUdfRFJN X01TTSkgKz0gbXNtLwogb2JqLSQoQ09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmotJChD T05GSUdfRFJNX1NUSSkgKz0gc3RpLwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8KK29i ai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLwogb2JqLXkJCQkrPSBpMmMvCiBv YmoteQkJCSs9IHBhbmVsLwogb2JqLXkJCQkrPSBicmlkZ2UvCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u ZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTUzNzEKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMCwwICsxLDE0 IEBACitjb25maWcgRFJNX01FRElBVEVLCisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBNZWRp YXRlayBTb0NzIgorCWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8 IChBUk0gJiYgQ09NUElMRV9URVNUKQorCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKKwlzZWxl Y3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJc2VsZWN0IE1FTU9SWQorCXNl bGVjdCBNVEtfU01JCisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEg TWVkaWF0ZWsgU29Dcy4KKwkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJt CisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAorCSAgYnVm ZmVyIG1hbmFnZW1lbnQgdG8gdXNlcnNwYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YmRlN2MKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAor bWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAorCQkgIG10a19kaXNwX3JkbWEubyBc CisJCSAgbXRrX2RybV9jcnRjLm8gXAorCQkgIG10a19kcm1fZGRwLm8gXAorCQkgIG10a19kcm1f ZGRwX2NvbXAubyBcCisJCSAgbXRrX2RybV9kcnYubyBcCisJCSAgbXRrX2RybV9mYi5vIFwKKwkJ ICBtdGtfZHJtX2dlbS5vIFwKKwkJICBtdGtfZHJtX3BsYW5lLm8KKworb2JqLSQoQ09ORklHX0RS TV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZGlzcF9vdmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjYyNjcxZgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwu YwpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1 ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o PgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29t cC5oIgorCisjZGVmaW5lIERJU1BfUkVHX09WTF9JTlRFTgkJCTB4MDAwNAorI2RlZmluZSBPVkxf Rk1FX0NQTF9JTlQJCQkJCUJJVCgxKQorI2RlZmluZSBESVNQX1JFR19PVkxfSU5UU1RBCQkJMHgw MDA4CisjZGVmaW5lIERJU1BfUkVHX09WTF9FTgkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9SRUdf T1ZMX1JTVAkJCTB4MDAxNAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX1NJWkUJCQkweDAwMjAK KyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUgkJCTB4MDAyOAorI2RlZmluZSBESVNQX1JF R19PVkxfU1JDX0NPTgkJCTB4MDAyYworI2RlZmluZSBESVNQX1JFR19PVkxfQ09OKG4pCQkJKDB4 MDAzMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0laRShuKQkJKDB4 MDAzOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9PRkZTRVQobikJCQkoMHgw MDNjICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1BJVENIKG4pCQkJKDB4MDA0 NCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0NUUkwobikJCSgweDAw YzAgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUkRNQV9HTUMobikJCSgweDAw YzggKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfQUREUihuKQkJCSgweDBmNDAg KyAweDIwICogKG4pKQorCisjZGVmaW5lCU9WTF9SRE1BX01FTV9HTUMJMHg0MDQwMjAyMAorCisj ZGVmaW5lIE9WTF9DT05fQllURV9TV0FQCUJJVCgyNCkKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRf UkdCNTY1CSgwIDw8IDEyKQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I4ODgJKDEgPDwgMTIp CisjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX1JHQkE4ODg4CSgyIDw8IDEyKQorI2RlZmluZSBPVkxf Q09OX0NMUkZNVF9BUkdCODg4OAkoMyA8PCAxMikKKyNkZWZpbmUJT1ZMX0NPTl9BRU4JCUJJVCg4 KQorI2RlZmluZQlPVkxfQ09OX0FMUEhBCQkweGZmCisKKy8qKgorICogc3RydWN0IG10a19kaXNw X292bCAtIERJU1BfT1ZMIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVy ZSBjb250YWluaW5nIHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAt IGFzc29jaWF0ZWQgY3J0YyB0byByZXBvcnQgdmJsYW5rIGV2ZW50cyB0bworICovCitzdHJ1Y3Qg bXRrX2Rpc3Bfb3ZsIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQlkZHBfY29tcDsKKwlzdHJ1Y3Qg ZHJtX2NydGMJCQkqY3J0YzsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9vdmxf aXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtdGtfZGlzcF9v dmwgKnByaXYgPSBkZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gJnByaXYtPmRk cF9jb21wOworCisJLyogQ2xlYXIgZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1cHQgKi8KKwl3cml0 ZWwoMHgwLCBvdmwtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5UU1RBKTsKKworCWlmICghcHJpdi0+ Y3J0YykKKwkJcmV0dXJuIElSUV9OT05FOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5jcnRj LCBvdmwpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3Zs X2VuYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgIHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gY29udGFpbmVy X29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9vdmwsCisJCQkJCQkgZGRwX2NvbXApOworCisJcHJp di0+Y3J0YyA9IGNydGM7CisJd3JpdGVsX3JlbGF4ZWQoT1ZMX0ZNRV9DUExfSU5ULCBjb21wLT5y ZWdzICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9kaXNh YmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZGlz cF9vdmwgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwKKwkJ CQkJCSBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsKKwl3cml0ZWxfcmVsYXhlZCgw eDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMgdm9pZCBt dGtfb3ZsX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4 ZWQoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQg bXRrX292bF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4 ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQg bXRrX292bF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcs CisJCQkgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmICh3 ICE9IDAgJiYgaCAhPSAwKQorCQl3cml0ZWxfcmVsYXhlZChoIDw8IDE2IHwgdywgY29tcC0+cmVn cyArIERJU1BfUkVHX09WTF9ST0lfU0laRSk7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5y ZWdzICsgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUik7CisKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdz ICsgRElTUF9SRUdfT1ZMX1JTVCk7CisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVH X09WTF9SU1QpOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29uKHN0cnVjdCBtdGtf ZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJlZzsK KworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlkeCkp OworCXdyaXRlbChPVkxfUkRNQV9NRU1fR01DLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JE TUFfR01DKGlkeCkpOworCisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9T UkNfQ09OKTsKKwlyZWcgPSByZWcgfCBCSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdz ICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVy X29mZihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVu c2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZM X1NSQ19DT04pOworCXJlZyA9IHJlZyAmIH5CSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5y ZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOworCisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyAr IERJU1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQg b3ZsX2ZtdF9jb252ZXJ0KHVuc2lnbmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwlk ZWZhdWx0OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiBPVkxfQ09OX0NMUkZN VF9SR0I1NjU7CisJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xS Rk1UX1JHQjU2NSB8IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6 CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I4ODg7CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4 ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4OCB8IE9WTF9DT05fQllURV9TV0FQOwor CWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJ CXJldHVybiBPVkxfQ09OX0NMUkZNVF9BUkdCODg4ODsKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4 ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRf QVJHQjg4ODggfCBPVkxfQ09OX0JZVEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6 CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdC QTg4ODg7CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdS ODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQkE4ODg4IHwgT1ZMX0NPTl9CWVRFX1NX QVA7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRr X2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJCSBzdHJ1Y3QgbXRrX3BsYW5l X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgKnBlbmRp bmcgPSAmc3RhdGUtPnBlbmRpbmc7CisJdW5zaWduZWQgaW50IGFkZHIgPSBwZW5kaW5nLT5hZGRy OworCXVuc2lnbmVkIGludCBwaXRjaCA9IHBlbmRpbmctPnBpdGNoICYgMHhmZmZmOworCXVuc2ln bmVkIGludCBmbXQgPSBwZW5kaW5nLT5mb3JtYXQ7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IChw ZW5kaW5nLT55IDw8IDE2KSB8IHBlbmRpbmctPng7CisJdW5zaWduZWQgaW50IHNyY19zaXplID0g KHBlbmRpbmctPmhlaWdodCA8PCAxNikgfCBwZW5kaW5nLT53aWR0aDsKKwl1bnNpZ25lZCBpbnQg Y29uOworCisJaWYgKCFwZW5kaW5nLT5lbmFibGUpCisJCW10a19vdmxfbGF5ZXJfb2ZmKGNvbXAs IGlkeCk7CisKKwljb24gPSBvdmxfZm10X2NvbnZlcnQoZm10KTsKKwlpZiAoaWR4ICE9IDApCisJ CWNvbiB8PSBPVkxfQ09OX0FFTiB8IE9WTF9DT05fQUxQSEE7CisKKwl3cml0ZWxfcmVsYXhlZChj b24sIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfQ09OKGlkeCkpOworCXdyaXRlbF9yZWxheGVk KHBpdGNoLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1BJVENIKGlkeCkpOworCXdyaXRlbF9y ZWxheGVkKHNyY19zaXplLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKGlkeCkp OworCXdyaXRlbF9yZWxheGVkKG9mZnNldCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9PRkZT RVQoaWR4KSk7CisJd3JpdGVsX3JlbGF4ZWQoYWRkciwgY29tcC0+cmVncyArIERJU1BfUkVHX09W TF9BRERSKGlkeCkpOworCisJaWYgKHBlbmRpbmctPmVuYWJsZSkKKwkJbXRrX292bF9sYXllcl9v bihjb21wLCBpZHgpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5j cyBtdGtfZGlzcF9vdmxfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAorCS5z dGFydCA9IG10a19vdmxfc3RhcnQsCisJLnN0b3AgPSBtdGtfb3ZsX3N0b3AsCisJLmVuYWJsZV92 YmxhbmsgPSBtdGtfb3ZsX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX292 bF9kaXNhYmxlX3ZibGFuaywKKwkubGF5ZXJfb24gPSBtdGtfb3ZsX2xheWVyX29uLAorCS5sYXll cl9vZmYgPSBtdGtfb3ZsX2xheWVyX29mZiwKKwkubGF5ZXJfY29uZmlnID0gbXRrX292bF9sYXll cl9jb25maWcsCit9OworCitzdGF0aWMgaW50IG10a19kaXNwX292bF9iaW5kKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgICB2b2lkICpkYXRhKQorewor CXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IG10a19k ZHBfY29tcF9yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAw KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRc biIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCQl2b2lkICpkYXRhKQor eworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdp c3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGNvbXBvbmVudF9vcHMgbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQJPSBt dGtfZGlzcF9vdmxfYmluZCwKKwkudW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX3VuYmluZCwKK307CisK K3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2Rp c3Bfb3ZsICpwcml2OworCWludCBjb21wX2lkOworCWludCBpcnE7CisJaW50IHJldDsKKworCXBy aXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2 LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCXJldCA9IGRldm1fcmVxdWVz dF9pcnEoZGV2LCBpcnEsIG10a19kaXNwX292bF9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFG X1RSSUdHRVJfTk9ORSwgZGV2X25hbWUoZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2 LT5vZl9ub2RlLCBNVEtfRElTUF9PVkwpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQly ZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+ b2Zfbm9kZSwgJnByaXYtPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9vdmxfZnVu Y3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBj b21wb25lbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3Nl dF9kcnZkYXRhKHBkZXYsIHByaXYpOworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtf ZGlzcF9vdmxfY29tcG9uZW50X29wcyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gYWRkIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IG10a19kaXNwX292bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZGlzcF9vdmxfY29tcG9uZW50 X29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAi bWVkaWF0ZWssbXQ4MTczLWRpc3Atb3ZsIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGlzcF9vdmxf cHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGlzcF9vdmxfcmVtb3ZlLAorCS5kcml2ZXIJCT0gewor CQkubmFtZQk9ICJtZWRpYXRlay1kaXNwLW92bCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAor CQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9 OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiODBjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNp bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0 Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19S RE1BX0lOVF9FTkFCTEUJCTB4MDAwMAorI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJ CTB4MDAwNAorI2RlZmluZSBSRE1BX1RBUkdFVF9MSU5FX0lOVAkJCQlCSVQoNSkKKyNkZWZpbmUg UkRNQV9GSUZPX1VOREVSRkxPV19JTlQJCQkJQklUKDQpCisjZGVmaW5lIFJETUFfRU9GX0FCTk9S TUFMX0lOVAkJCQlCSVQoMykKKyNkZWZpbmUgUkRNQV9GUkFNRV9FTkRfSU5UCQkJCUJJVCgyKQor I2RlZmluZSBSRE1BX0ZSQU1FX1NUQVJUX0lOVAkJCQlCSVQoMSkKKyNkZWZpbmUgUkRNQV9SRUdf VVBEQVRFX0lOVAkJCQlCSVQoMCkKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OCQkw eDAwMTAKKyNkZWZpbmUgUkRNQV9FTkdJTkVfRU4JCQkJCUJJVCgwKQorI2RlZmluZSBESVNQX1JF R19SRE1BX1NJWkVfQ09OXzAJCTB4MDAxNAorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVfQ09O XzEJCTB4MDAxOAorI2RlZmluZSBESVNQX1JFR19SRE1BX1RBUkdFVF9MSU5FCQkweDAwMWMKKyNk ZWZpbmUgRElTUF9SRUdfUkRNQV9GSUZPX0NPTgkJCTB4MDA0MAorI2RlZmluZSBSRE1BX0ZJRk9f VU5ERVJGTE9XX0VOCQkJCUJJVCgzMSkKKyNkZWZpbmUgUkRNQV9GSUZPX1BTRVVET19TSVpFKGJ5 dGVzKQkJCSgoKGJ5dGVzKSAvIDE2KSA8PCAxNikKKyNkZWZpbmUgUkRNQV9PVVRQVVRfVkFMSURf RklGT19USFJFU0hPTEQoYnl0ZXMpCQkoKGJ5dGVzKSAvIDE2KQorCisvKioKKyAqIHN0cnVjdCBt dGtfZGlzcF9yZG1hIC0gRElTUF9SRE1BIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAt IHN0cnVjdHVyZSBjb250YWluaW5nIHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisg KiBAY3J0YyAtIGFzc29jaWF0ZWQgY3J0YyB0byByZXBvcnQgaXJxIGV2ZW50cyB0bworICovCitz dHJ1Y3QgbXRrX2Rpc3BfcmRtYSB7CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJ c3RydWN0IGRybV9jcnRjCQkJKmNydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rp c3BfcmRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10 a19kaXNwX3JkbWEgKnByaXYgPSBkZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqcmRtYSA9 ICZwcml2LT5kZHBfY29tcDsKKworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0 ICovCisJd3JpdGVsKDB4MCwgcmRtYS0+cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7 CisKKwlpZiAoIXByaXYtPmNydGMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2Rk cF9pcnEocHJpdi0+Y3J0YywgcmRtYSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0 YXRpYyB2b2lkIHJkbWFfdXBkYXRlX2JpdHMoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5z aWduZWQgaW50IHJlZywKKwkJCSAgICAgdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2 YWwpCit7CisJdW5zaWduZWQgaW50IHRtcCA9IHJlYWRsKGNvbXAtPnJlZ3MgKyByZWcpOworCisJ dG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKKwl3cml0ZWwodG1wLCBjb21wLT5y ZWdzICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfZW5hYmxlX3ZibGFuayhzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK KwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3Qg bXRrX2Rpc3BfcmRtYSwKKwkJCQkJCSAgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNydGM7 CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUsIFJETUFf RlJBTUVfRU5EX0lOVCwKKwkJCSBSRE1BX0ZSQU1FX0VORF9JTlQpOworfQorCitzdGF0aWMgdm9p ZCBtdGtfcmRtYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQorewor CXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBt dGtfZGlzcF9yZG1hLAorCQkJCQkJICBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsK KwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwgUkRNQV9G UkFNRV9FTkRfSU5ULCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RhcnQoc3RydWN0 IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVH X1JETUFfR0xPQkFMX0NPTiwgUkRNQV9FTkdJTkVfRU4sCisJCQkgUkRNQV9FTkdJTkVfRU4pOwor fQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp Cit7CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04sIFJE TUFfRU5HSU5FX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfY29uZmlnKHN0cnVj dCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCSAgICB1bnNpZ25l ZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJdW5zaWduZWQgaW50IHRo cmVzaG9sZDsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBE SVNQX1JFR19SRE1BX1NJWkVfQ09OXzAsIDB4ZmZmLCB3aWR0aCk7CisJcmRtYV91cGRhdGVfYml0 cyhjb21wLCBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEsIDB4ZmZmZmYsIGhlaWdodCk7CisKKwkv KgorCSAqIEVuYWJsZSBGSUZPIHVuZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBi bG9ja2VkLgorCSAqIEtlZXAgdGhlIEZJRk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4 IEtpQi4gU2V0IHRoZQorCSAqIG91dHB1dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0 aCA3LzYgb3ZlcmhlYWQgdG8KKwkgKiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBw aXhlbCBkZXB0aCBvZiA0IGJ5dGVzOgorCSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0 ICogdnJlZnJlc2ggKiA0ICogNyAvIDEwMDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxP V19FTiB8CisJICAgICAgUkRNQV9GSUZPX1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRN QV9PVVRQVVRfVkFMSURfRklGT19USFJFU0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCBj b21wLT5yZWdzICsgRElTUF9SRUdfUkRNQV9GSUZPX0NPTik7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX3JkbWFfZnVuY3MgPSB7CisJLmNvbmZp ZyA9IG10a19yZG1hX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfcmRtYV9zdGFydCwKKwkuc3RvcCA9 IG10a19yZG1hX3N0b3AsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtfcmRtYV9lbmFibGVfdmJsYW5r LAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19yZG1hX2Rpc2FibGVfdmJsYW5rLAorfTsKKworc3Rh dGljIGludCBtdGtfZGlzcF9yZG1hX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlICptYXN0ZXIsCisJCQkgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9y ZG1hICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRy bV9kZXYgPSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIo ZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJZGV2LT5vZl9u b2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisK K30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3BfcmRtYV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10 a19kaXNwX3JkbWEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtX2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2 LCAmcHJpdi0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9v cHMgbXRrX2Rpc3BfcmRtYV9jb21wb25lbnRfb3BzID0geworCS5iaW5kCT0gbXRrX2Rpc3BfcmRt YV9iaW5kLAorCS51bmJpbmQgPSBtdGtfZGlzcF9yZG1hX3VuYmluZCwKK307CisKK3N0YXRpYyBp bnQgbXRrX2Rpc3BfcmRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kaXNwX3JkbWEg KnByaXY7CisJaW50IGNvbXBfaWQ7CisJaW50IGlycTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwor CWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9n ZXRfaWQoZGV2LT5vZl9ub2RlLCBNVEtfRElTUF9SRE1BKTsKKwlpZiAoY29tcF9pZCA8IDApIHsK KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21w X2lkKTsKKwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQo ZGV2LCBkZXYtPm9mX25vZGUsICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rp c3BfcmRtYV9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBp bml0aWFsaXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ LyogRGlzYWJsZSBhbmQgY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4MCwg cHJpdi0+ZGRwX2NvbXAucmVncyArIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSk7CisJd3JpdGVs KDB4MCwgcHJpdi0+ZGRwX2NvbXAucmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisK KwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBtdGtfZGlzcF9yZG1hX2lycV9oYW5k bGVyLAorCQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBwcml2KTsK KwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAl ZDogJWRcbiIsIGlycSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRrX2Rp c3BfcmRtYV9jb21wb25lbnRfb3BzKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgIkZhaWxl ZCB0byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgbXRrX2Rpc3BfcmRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVu dF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1yZG1hIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNF X1RBQkxFKG9mLCBtdGtfZGlzcF9yZG1hX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kaXNw X3JkbWFfcHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGlzcF9yZG1hX3JlbW92ZSwKKwkuZHJpdmVy CQk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZGlzcC1yZG1hIiwKKwkJLm93bmVyCT0gVEhJU19N T0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNo LAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f Y3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTVmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKQEAgLTAsMCArMSw1ODIgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL2Jh cnJpZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX3BsYW5lX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUg PGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21pLmg+CisKKyNp bmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1 ZGUgIm10a19kcm1fZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1 ZGUgIm10a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisvKioKKyAq IHN0cnVjdCBtdGtfZHJtX2NydGMgLSBNZWRpYVRlayBzcGVjaWZpYyBjcnRjIHN0cnVjdHVyZS4K KyAqIEBiYXNlOiBjcnRjIG9iamVjdC4KKyAqIEBlbmFibGVkOiByZWNvcmRzIHdoZXRoZXIgY3J0 Y19lbmFibGUgc3VjY2VlZGVkCisgKiBAcGxhbmVzOiBhcnJheSBvZiA0IG10a19kcm1fcGxhbmUg c3RydWN0dXJlcywgb25lIGZvciBlYWNoIG92ZXJsYXkgcGxhbmUKKyAqIEBwZW5kaW5nX3BsYW5l czogd2hldGhlciBhbnkgcGxhbmUgaGFzIHBlbmRpbmcgY2hhbmdlcyB0byBiZSBhcHBsaWVkCisg KiBAY29uZmlnX3JlZ3M6IG1lbW9yeSBtYXBwZWQgbW1zeXMgY29uZmlndXJhdGlvbiByZWdpc3Rl ciBzcGFjZQorICogQG11dGV4OiBoYW5kbGUgdG8gb25lIG9mIHRoZSB0ZW4gZGlzcF9tdXRleCBz dHJlYW1zCisgKiBAZGRwX2NvbXBfbnI6IG51bWJlciBvZiBjb21wb25lbnRzIGluIGRkcF9jb21w CisgKiBAZGRwX2NvbXA6IGFycmF5IG9mIHBvaW50ZXJzIHRoZSBtdGtfZGRwX2NvbXAgc3RydWN0 dXJlcyB1c2VkIGJ5IHRoaXMgY3J0YworICovCitzdHJ1Y3QgbXRrX2RybV9jcnRjIHsKKwlzdHJ1 Y3QgZHJtX2NydGMJCQliYXNlOworCWJvb2wJCQkJZW5hYmxlZDsKKworCWJvb2wJCQkJcGVuZGlu Z19uZWVkc192Ymxhbms7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7 CisKKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisJYm9vbAkJ CQlwZW5kaW5nX3BsYW5lczsKKworCXZvaWQgX19pb21lbQkJCSpjb25maWdfcmVnczsKKwlzdHJ1 Y3QgbXRrX2Rpc3BfbXV0ZXgJCSptdXRleDsKKwl1bnNpZ25lZCBpbnQJCQlkZHBfY29tcF9ucjsK KwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQkqKmRkcF9jb21wOworfTsKKworc3RydWN0IG10a19jcnRj X3N0YXRlIHsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRp bmdfY29uZmlnOworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50 CQkJcGVuZGluZ19oZWlnaHQ7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307 CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kcm1fY3J0YyAqdG9fbXRrX2NydGMoc3RydWN0 IGRybV9jcnRjICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kcm1f Y3J0YywgYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19jcnRjX3N0YXRlICp0 b19tdGtfY3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnMpCit7CisJcmV0dXJuIGNv bnRhaW5lcl9vZihzLCBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUsIGJhc2UpOworfQorCitzdGF0aWMg dm9pZCBtdGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICpt dGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMtPmJhc2U7CisJ dW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2 ZW50X2xvY2ssIGZsYWdzKTsKKwlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBtdGtf Y3J0Yy0+ZXZlbnQpOworCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJbXRrX2NydGMtPmV2 ZW50ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYtPmV2ZW50X2xv Y2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKHN0 cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWRybV9jcnRjX2hhbmRsZV92Ymxhbmso Jm10a19jcnRjLT5iYXNlKTsKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5rKSB7 CisJCW10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKKwkJbXRrX2NydGMt PnBlbmRpbmdfbmVlZHNfdmJsYW5rID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtf ZHJtX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19k cm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlpbnQgaTsKKworCWZvciAo aSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX3VucHJlcGFyZSht dGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisKKwltdGtfZGlzcF9tdXRleF9wdXQobXRrX2Ny dGMtPm11dGV4KTsKKworCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0YXRpYyB2b2lk IG10a19kcm1fY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10 a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCWlmIChjcnRjLT5zdGF0ZSkgeworCQlpZiAoY3J0Yy0+ c3RhdGUtPm1vZGVfYmxvYikKKwkJCWRybV9wcm9wZXJ0eV91bnJlZmVyZW5jZV9ibG9iKGNydGMt PnN0YXRlLT5tb2RlX2Jsb2IpOworCisJCXN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+ c3RhdGUpOworCQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9IGVsc2Ugewor CQlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0 YXRlKQorCQkJcmV0dXJuOworCQljcnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKwl9CisKKwlz dGF0ZS0+YmFzZS5jcnRjID0gY3J0YzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7 CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhzaXpl b2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisK KwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMsICZzdGF0ZS0+ YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLmNydGMgIT0gY3J0Yyk7CisJc3RhdGUtPmJh c2UuY3J0YyA9IGNydGM7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitzdGF0aWMgdm9p ZCBtdGtfZHJtX2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJ ICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWljX2hl bHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoY3J0Yywgc3RhdGUpOworCWtmcmVlKHRvX210a19jcnRj X3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBib29sIG10a19kcm1fY3J0Y19tb2RlX2ZpeHVw KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9t b2RlKQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMgbWFu ZGF0b3J5LiAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNf bW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19jcnRj X3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCXN0YXRl LT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGluZ19o ZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNoID0g Y3J0Yy0+bW9kZS52cmVmcmVzaDsKKwl3bWIoKTsJLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJh bWV0ZXJzIGFyZSBzZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9 IHRydWU7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRl ICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0 YyA9IHRvX210a19jcnRjKHByaXYtPmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2NvbXAg Km92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKworCW10a19kZHBfY29tcF9lbmFibGVfdmJs YW5rKG92bCwgJm10a19jcnRjLT5iYXNlKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG10a19k cm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBp bnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJp dmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKHByaXYt PmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBf Y29tcFswXTsKKworCW10a19kZHBfY29tcF9kaXNhYmxlX3ZibGFuayhvdmwpOworfQorCitzdGF0 aWMgaW50IG10a19jcnRjX2RkcF9jbGtfZW5hYmxlKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19j cnRjKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwg X19mdW5jX18pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykg eworCQlyZXQgPSBjbGtfZW5hYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKwkJaWYg KHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxuIiwg aSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJd2hp bGUgKC0taSA+PSAwKQorCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2Nsa19kaXNhYmxl KHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWludCBpOworCisJRFJNX0RFQlVH X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk cF9jb21wX25yOyBpKyspCisJCWNsa19kaXNhYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xr KTsKK30KKworc3RhdGljIGludCBtdGtfY3J0Y19kZHBfaHdfaW5pdChzdHJ1Y3QgbXRrX2RybV9j cnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMtPmJh c2U7CisJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQsIHZyZWZyZXNoOworCWludCByZXQ7CisJ aW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWlmIChXQVJO X09OKCFjcnRjLT5zdGF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2lkdGggPSBjcnRjLT5z dGF0ZS0+YWRqdXN0ZWRfbW9kZS5oZGlzcGxheTsKKwloZWlnaHQgPSBjcnRjLT5zdGF0ZS0+YWRq dXN0ZWRfbW9kZS52ZGlzcGxheTsKKwl2cmVmcmVzaCA9IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9t b2RlLnZyZWZyZXNoOworCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhjcnRjLT5kZXYtPmRl dik7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIHBvd2Vy IGRvbWFpbjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXRrX2Rp c3BfbXV0ZXhfcHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCWlmIChyZXQgPCAwKSB7CisJCURS TV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBtdXRleCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdv dG8gZXJyX3BtX3J1bnRpbWVfcHV0OworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9jbGtfZW5h YmxlKG10a19jcnRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBl bmFibGUgY29tcG9uZW50IGNsb2NrczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX211dGV4X3Vu cHJlcGFyZTsKKwl9CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtZWRpYXRla19kZHBfZGRwX3BhdGhf c2V0dXBcbiIpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgLSAxOyBp KyspIHsKKwkJbXRrX2RkcF9hZGRfY29tcF90b19wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywK KwkJCQkJIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSBtdGtfY3J0Yy0+ZGRwX2Nv bXBbaSArIDFdLT5pZCk7CisJCW10a19kaXNwX211dGV4X2FkZF9jb21wKG10a19jcnRjLT5tdXRl eCwKKwkJCQkJbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJfQorCW10a19kaXNwX211dGV4 X2FkZF9jb21wKG10a19jcnRjLT5tdXRleCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJ bXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKG10a19jcnRjLT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJc3RydWN0IG10a19kZHBfY29tcCAq Y29tcCA9IG10a19jcnRjLT5kZHBfY29tcFtpXTsKKworCQltdGtfZGRwX2NvbXBfY29uZmlnKGNv bXAsIHdpZHRoLCBoZWlnaHQsIHZyZWZyZXNoKTsKKwkJbXRrX2RkcF9jb21wX3N0YXJ0KGNvbXAp OworCX0KKworCS8qIEluaXRpYWxseSBjb25maWd1cmUgYWxsIHBsYW5lcyAqLworCWZvciAoaSA9 IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9 ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5z dGF0ZSk7CisJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcobXRrX2NydGMtPmRkcF9jb21wWzBd LCBpLAorCQkJCQkgIHBsYW5lX3N0YXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX211dGV4 X3VucHJlcGFyZToKKwltdGtfZGlzcF9tdXRleF91bnByZXBhcmUobXRrX2NydGMtPm11dGV4KTsK K2Vycl9wbV9ydW50aW1lX3B1dDoKKwlwbV9ydW50aW1lX3B1dChjcnRjLT5kZXYtPmRldik7CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2h3X2Zpbmkoc3RydWN0 IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG10 a19jcnRjLT5iYXNlLmRldjsKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBf X2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQor CQltdGtfZGRwX2NvbXBfc3RvcChtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0pOworCWZvciAoaSA9IDA7 IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3Zl X2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlk KTsKKwltdGtfZGlzcF9tdXRleF9kaXNhYmxlKG10a19jcnRjLT5tdXRleCk7CisJZm9yIChpID0g MDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgeworCQltdGtfZGRwX3JlbW92 ZV9jb21wX2Zyb21fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSAgICAgIG10a19j cnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSAgICAgIG10a19jcnRjLT5kZHBfY29tcFtpICsg MV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LAor CQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwl9CisJbXRrX2Rpc3BfbXV0ZXhf cmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsK KwltdGtfY3J0Y19kZHBfY2xrX2Rpc2FibGUobXRrX2NydGMpOworCW10a19kaXNwX211dGV4X3Vu cHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJcG1fcnVudGltZV9wdXQoZHJtLT5kZXYpOwor fQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMp OworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKwlp bnQgcmV0OworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRjLT5i YXNlLmlkKTsKKworCXJldCA9IG10a19zbWlfbGFyYl9nZXQob3ZsLT5sYXJiX2Rldik7CisJaWYg KHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7CisJ CXJldHVybjsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfaHdfaW5pdChtdGtfY3J0Yyk7CisJ aWYgKHJldCkgeworCQltdGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9kZXYpOworCQlyZXR1cm47 CisJfQorCisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOworCW10a19jcnRjLT5lbmFibGVkID0g dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9j cnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2Ny dGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21w WzBdOworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBj cnRjLT5iYXNlLmlkKTsKKwlpZiAoIW10a19jcnRjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwkv KiBTZXQgYWxsIHBlbmRpbmcgcGxhbmUgc3RhdGUgdG8gZGlzYWJsZWQgKi8KKwlmb3IgKGkgPSAw OyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAm bXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh dGUpOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsKKwkJcGxhbmVfc3Rh dGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1ZTsKKwl9CisJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVz ID0gdHJ1ZTsKKworCS8qIFdhaXQgZm9yIHBsYW5lcyB0byBiZSBkaXNhYmxlZCAqLworCWRybV9j cnRjX3dhaXRfb25lX3ZibGFuayhjcnRjKTsKKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7 CisJbXRrX2NydGNfZGRwX2h3X2ZpbmkobXRrX2NydGMpOworCW10a19zbWlfbGFyYl9wdXQob3Zs LT5sYXJiX2Rldik7CisKKwltdGtfY3J0Yy0+ZW5hYmxlZCA9IGZhbHNlOworfQorCitzdGF0aWMg dm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJ CQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVj dCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7 CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwor CWlmIChtdGtfY3J0Yy0+ZXZlbnQgJiYgc3RhdGUtPmJhc2UuZXZlbnQpCisJCURSTV9FUlJPUigi bmV3IGV2ZW50IHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEgcGVuZGluZyBldmVudFxuIik7CisKKwlp ZiAoc3RhdGUtPmJhc2UuZXZlbnQpIHsKKwkJc3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUgPSBkcm1f Y3J0Y19pbmRleChjcnRjKTsKKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9 IDApOworCQltdGtfY3J0Yy0+ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsKKwkJc3RhdGUtPmJh c2UuZXZlbnQgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2F0b21p Y19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgc3RydWN0IGRybV9jcnRj X3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0 YyA9IHRvX210a19jcnRjKGNydGMpOworCXVuc2lnbmVkIGludCBwZW5kaW5nX3BsYW5lcyA9IDA7 CisJaW50IGk7CisKKwlpZiAobXRrX2NydGMtPmV2ZW50KQorCQltdGtfY3J0Yy0+cGVuZGluZ19u ZWVkc192YmxhbmsgPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykg eworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7 CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRl ID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCWlmIChwbGFuZV9zdGF0ZS0+ cGVuZGluZy5kaXJ0eSkgeworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1ZTsK KwkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5ID0gZmFsc2U7CisJCQlwZW5kaW5nX3BsYW5l cyB8PSBCSVQoaSk7CisJCX0KKwl9CisJaWYgKHBlbmRpbmdfcGxhbmVzKQorCQltdGtfY3J0Yy0+ cGVuZGluZ19wbGFuZXMgPSB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRj X2Z1bmNzIG10a19jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnCQk9IGRybV9hdG9taWNfaGVs cGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2Zs aXAsCisJLmRlc3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ksCisJLnJlc2V0CQkJPSBtdGtf ZHJtX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBtdGtfZHJtX2NydGNf ZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IG10a19kcm1fY3J0Y19k ZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJf ZnVuY3MgbXRrX2NydGNfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwCT0gbXRrX2RybV9j cnRjX21vZGVfZml4dXAsCisJLm1vZGVfc2V0X25vZmIJPSBtdGtfZHJtX2NydGNfbW9kZV9zZXRf bm9mYiwKKwkuZW5hYmxlCQk9IG10a19kcm1fY3J0Y19lbmFibGUsCisJLmRpc2FibGUJPSBtdGtf ZHJtX2NydGNfZGlzYWJsZSwKKwkuYXRvbWljX2JlZ2luCT0gbXRrX2RybV9jcnRjX2F0b21pY19i ZWdpbiwKKwkuYXRvbWljX2ZsdXNoCT0gbXRrX2RybV9jcnRjX2F0b21pY19mbHVzaCwKK307CisK K3N0YXRpYyBpbnQgbXRrX2RybV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJ CSAgICAgc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMsCisJCQkgICAgIHN0cnVjdCBkcm1f cGxhbmUgKnByaW1hcnksCisJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmUgKmN1cnNvciwgdW5zaWdu ZWQgaW50IHBpcGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9w bGFuZXMoZHJtLCAmbXRrX2NydGMtPmJhc2UsIHByaW1hcnksIGN1cnNvciwKKwkJCQkJJm10a19j cnRjX2Z1bmNzLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGVhbnVwX2NydGM7CisK Kwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZtdGtfY3J0Yy0+YmFzZSwgJm10a19jcnRjX2hlbHBlcl9m dW5jcyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2NsZWFudXBfY3J0YzoKKwlkcm1fY3J0Y19jbGVh bnVwKCZtdGtfY3J0Yy0+YmFzZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBtdGtfY3J0Y19k ZHBfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IG10a19kZHBfY29tcCAqb3ZsKQor eworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJ c3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKG10a19jcnRj LT5iYXNlLnN0YXRlKTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qCisJICogVE9ETzogaW5zdGVh ZCBvZiB1cGRhdGluZyB0aGUgcmVnaXN0ZXJzIGhlcmUsIHdlIHNob3VsZCBwcmVwYXJlCisJICog d29ya2luZyByZWdpc3RlcnMgaW4gYXRvbWljX2NvbW1pdCBhbmQgbGV0IHRoZSBoYXJkd2FyZSBj b21tYW5kCisJICogcXVldWUgdXBkYXRlIG1vZHVsZSByZWdpc3RlcnMgb24gdmJsYW5rLgorCSAq LworCWlmIChzdGF0ZS0+cGVuZGluZ19jb25maWcpIHsKKwkJbXRrX2RkcF9jb21wX2NvbmZpZyhv dmwsIHN0YXRlLT5wZW5kaW5nX3dpZHRoLAorCQkJCSAgICBzdGF0ZS0+cGVuZGluZ19oZWlnaHQs CisJCQkJICAgIHN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNoKTsKKworCQlzdGF0ZS0+cGVuZGluZ19j b25maWcgPSBmYWxzZTsKKwl9CisKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzKSB7CisJ CWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQkJc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQkJc3RydWN0IG10a19wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0 YXRlKHBsYW5lLT5zdGF0ZSk7CisKKwkJCWlmIChwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcp IHsKKwkJCQltdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKG92bCwgaSwgcGxhbmVfc3RhdGUpOwor CQkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZyA9IGZhbHNlOworCQkJfQorCQl9CisJCW10 a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IGZhbHNlOworCX0KKworCW10a19kcm1fZmluaXNoX3Bh Z2VfZmxpcChtdGtfY3J0Yyk7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfY3JlYXRlKHN0cnVjdCBk cm1fZGV2aWNlICpkcm1fZGV2LAorCQkJY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgKnBhdGgs IHVuc2lnbmVkIGludCBwYXRoX2xlbikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2 ID0gZHJtX2Rldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHJtX2Rldi0+ ZGV2OworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjOworCWVudW0gZHJtX3BsYW5lX3R5 cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgenBvczsKKwlpbnQgcGlwZSA9IHByaXYtPm51bV9waXBl czsKKwlpbnQgcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBhdGhfbGVuOyBpKysp IHsKKwkJZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRdOwor CQlpZiAoIW5vZGUpIHsKKwkJCWRldl9pbmZvKGRldiwKKwkJCQkgIk5vdCBjcmVhdGluZyBjcnRj ICVkIGJlY2F1c2UgY29tcG9uZW50ICVkIGlzIGRpc2FibGVkIG9yIG1pc3NpbmdcbiIsCisJCQkJ IHBpcGUsIGNvbXBfaWQpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwltdGtfY3J0YyA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqbXRrX2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10 a19jcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW10a19jcnRjLT5jb25maWdfcmVncyA9IHBy aXYtPmNvbmZpZ19yZWdzOworCW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBhdGhfbGVuOworCW10 a19jcnRjLT5kZHBfY29tcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIG10a19jcnRjLT5kZHBf Y29tcF9uciwKKwkJCQkJCXNpemVvZigqbXRrX2NydGMtPmRkcF9jb21wKSwKKwkJCQkJCUdGUF9L RVJORUwpOworCisJbXRrX2NydGMtPm11dGV4ID0gbXRrX2Rpc3BfbXV0ZXhfZ2V0KHByaXYtPm11 dGV4X2RldiwgcGlwZSk7CisJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgpKSB7CisJCXJldCA9 IFBUUl9FUlIobXRrX2NydGMtPm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0 IG11dGV4OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJZW51bSBtdGtfZGRwX2NvbXBfaWQg Y29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXA7CisJCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRd OworCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9pZF07CisJCWlmICghY29tcCkgeworCQkJ ZGV2X2VycihkZXYsICJDb21wb25lbnQgJXMgbm90IGluaXRpYWxpemVkXG4iLAorCQkJCW5vZGUt PmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byB1bnByZXBhcmU7CisJCX0K KworCQlyZXQgPSBjbGtfcHJlcGFyZShjb21wLT5jbGspOworCQlpZiAocmV0KSB7CisJCQlkZXZf ZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUgY2xvY2sgZm9yIGNvbXBvbmVudCAlczog JWRcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQkJZ290byB1bnByZXBhcmU7CisJ CX0KKworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBjb21wOworCX0KKworCWZvciAoenBvcyA9 IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykgeworCQl0eXBlID0gKHpwb3MgPT0gMCkg PyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQkoenBvcyA9PSAxKSA/IERSTV9QTEFORV9U WVBFX0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZOworCQlyZXQgPSBtdGtf cGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBsYW5lc1t6cG9zXSwKKwkJCQkgICAgIEJJ VChwaXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVucHJlcGFyZTsKKwl9 CisKKwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1fZGV2LCBtdGtfY3J0YywgJm10a19jcnRj LT5wbGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMtPnBsYW5lc1sxXS5iYXNlLCBwaXBlKTsK KwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7CisKKwlwcml2LT5jcnRjW3BpcGVdID0g Jm10a19jcnRjLT5iYXNlOworCXByaXYtPm51bV9waXBlcysrOworCisJcmV0dXJuIDA7CisKK3Vu cHJlcGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa191bnByZXBhcmUobXRrX2NydGMtPmRk cF9jb21wW2ldLT5jbGspOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWU1 NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f Y3J0Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFU ZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqLworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisjZGVmaW5lIE1US19EUk1fQ1JUQ19ICisK KyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgi CisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisjZGVmaW5lIE9WTF9MQVlFUl9OUgk0CisK K2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1 bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0 Y19jaGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBtdGtfZHJtX2NydGNf Y29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwpOworaW50IG10a19k cm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBlbnVt IG10a19kZHBfY29tcF9pZCAqcGF0aCwKKwkJCXVuc2lnbmVkIGludCBwYXRoX2xlbik7CisKKyNl bmRpZiAvKiBNVEtfRFJNX0NSVENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k ZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2JhOTM1NQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCkBAIC0w LDAgKzEsMzUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNp bmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJ U1BfT1ZMMF9NT1VUX0VOCTB4MDQwCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDFf TU9VVF9FTgkweDA0NAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VUX0VOCQkw eDA0OAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1NQV9NT1VUX0VOCTB4MDRjCisj ZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX1VGT0VfTU9VVF9FTgkweDA1MAorI2RlZmluZSBE SVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjBfU0VMX0lOCTB4MDg0CisjZGVmaW5lIERJU1BfUkVH X0NPTkZJR19ESVNQX0NPTE9SMV9TRUxfSU4JMHgwODgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklH X0RQSV9TRUxfSU4JCTB4MGFjCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01P VVRfRU4JMHgwYzgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX01NU1lTX0NHX0NPTjAJCTB4MTAw CisKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfRU4obikJKDB4MjAgKyAweDIwICogKG4pKQorI2Rl ZmluZSBESVNQX1JFR19NVVRFWF9SU1QobikJKDB4MjggKyAweDIwICogKG4pKQorI2RlZmluZSBE SVNQX1JFR19NVVRFWF9NT0QobikJKDB4MmMgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JF R19NVVRFWF9TT0YobikJKDB4MzAgKyAweDIwICogKG4pKQorCisjZGVmaW5lIE1VVEVYX01PRF9E SVNQX09WTDAJCUJJVCgxMSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZMMQkJQklUKDEyKQor I2RlZmluZSBNVVRFWF9NT0RfRElTUF9SRE1BMAkJQklUKDEzKQorI2RlZmluZSBNVVRFWF9NT0Rf RElTUF9SRE1BMQkJQklUKDE0KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9SRE1BMgkJQklUKDE1 KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9XRE1BMAkJQklUKDE2KQorI2RlZmluZSBNVVRFWF9N T0RfRElTUF9XRE1BMQkJQklUKDE3KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjAJCUJJ VCgxOCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQ09MT1IxCQlCSVQoMTkpCisjZGVmaW5lIE1V VEVYX01PRF9ESVNQX0FBTAkJQklUKDIwKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9HQU1NQQkJ QklUKDIxKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9VRk9FCQlCSVQoMjIpCisjZGVmaW5lIE1V VEVYX01PRF9ESVNQX1BXTTAJCUJJVCgyMykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMQkJ QklUKDI0KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PRAkJQklUKDI1KQorCisjZGVmaW5lIE1V VEVYX1NPRl9TSU5HTEVfTU9ERQkJMAorI2RlZmluZSBNVVRFWF9TT0ZfRFNJMAkJCTEKKyNkZWZp bmUgTVVURVhfU09GX0RTSTEJCQkyCisjZGVmaW5lIE1VVEVYX1NPRl9EUEkwCQkJMworCisjZGVm aW5lIE9WTDBfTU9VVF9FTl9DT0xPUjAJCTB4MQorI2RlZmluZSBPRF9NT1VUX0VOX1JETUEwCQkw eDEKKyNkZWZpbmUgVUZPRV9NT1VUX0VOX0RTSTAJCTB4MQorI2RlZmluZSBDT0xPUjBfU0VMX0lO X09WTDAJCTB4MQorI2RlZmluZSBPVkwxX01PVVRfRU5fQ09MT1IxCQkweDEKKyNkZWZpbmUgR0FN TUFfTU9VVF9FTl9SRE1BMQkJMHgxCisjZGVmaW5lIFJETUExX01PVVRfRFBJMAkJCTB4MgorI2Rl ZmluZSBEUEkwX1NFTF9JTl9SRE1BMQkJMHgxCisjZGVmaW5lIENPTE9SMV9TRUxfSU5fT1ZMMQkJ MHgxCisKK3N0cnVjdCBtdGtfZGlzcF9tdXRleCB7CisJaW50IGlkOworCWJvb2wgY2xhaW1lZDsK K307CisKK3N0cnVjdCBtdGtfZGRwIHsKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlzdHJ1Y3Qg Y2xrCQkJKmNsazsKKwl2b2lkIF9faW9tZW0JCQkqcmVnczsKKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0 ZXgJCW11dGV4WzEwXTsKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbXV0ZXhfbW9k W0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKKwlbRERQX0NPTVBPTkVOVF9BQUxdID0gTVVURVhf TU9EX0RJU1BfQUFMLAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMF0gPSBNVVRFWF9NT0RfRElTUF9D T0xPUjAsCisJW0REUF9DT01QT05FTlRfQ09MT1IxXSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMSwK KwlbRERQX0NPTVBPTkVOVF9HQU1NQV0gPSBNVVRFWF9NT0RfRElTUF9HQU1NQSwKKwlbRERQX0NP TVBPTkVOVF9PRF0gPSBNVVRFWF9NT0RfRElTUF9PRCwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXSA9 IE1VVEVYX01PRF9ESVNQX09WTDAsCisJW0REUF9DT01QT05FTlRfT1ZMMV0gPSBNVVRFWF9NT0Rf RElTUF9PVkwxLAorCVtERFBfQ09NUE9ORU5UX1BXTTBdID0gTVVURVhfTU9EX0RJU1BfUFdNMCwK KwlbRERQX0NPTVBPTkVOVF9QV00xXSA9IE1VVEVYX01PRF9ESVNQX1BXTTEsCisJW0REUF9DT01Q T05FTlRfUkRNQTBdID0gTVVURVhfTU9EX0RJU1BfUkRNQTAsCisJW0REUF9DT01QT05FTlRfUkRN QTFdID0gTVVURVhfTU9EX0RJU1BfUkRNQTEsCisJW0REUF9DT01QT05FTlRfUkRNQTJdID0gTVVU RVhfTU9EX0RJU1BfUkRNQTIsCisJW0REUF9DT01QT05FTlRfVUZPRV0gPSBNVVRFWF9NT0RfRElT UF9VRk9FLAorCVtERFBfQ09NUE9ORU5UX1dETUEwXSA9IE1VVEVYX01PRF9ESVNQX1dETUEwLAor CVtERFBfQ09NUE9ORU5UX1dETUExXSA9IE1VVEVYX01PRF9ESVNQX1dETUExLAorfTsKKworc3Rh dGljIHVuc2lnbmVkIGludCBtdGtfZGRwX21vdXRfZW4oZW51bSBtdGtfZGRwX2NvbXBfaWQgY3Vy LAorCQkJCSAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0LAorCQkJCSAgICB1bnNpZ25lZCBp bnQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJaWYgKGN1ciA9PSBERFBfQ09N UE9ORU5UX09WTDAgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMCkgeworCQkqYWRkciA9 IERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDBfTU9VVF9FTjsKKwkJdmFsdWUgPSBPVkwwX01PVVRf RU5fQ09MT1IwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT0QgJiYgbmV4dCA9 PSBERFBfQ09NUE9ORU5UX1JETUEwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1Bf T0RfTU9VVF9FTjsKKwkJdmFsdWUgPSBPRF9NT1VUX0VOX1JETUEwOworCX0gZWxzZSBpZiAoY3Vy ID09IEREUF9DT01QT05FTlRfVUZPRSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFNJMCkgewor CQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1VGT0VfTU9VVF9FTjsKKwkJdmFsdWUgPSBV Rk9FX01PVVRfRU5fRFNJMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEg JiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NP TkZJR19ESVNQX09WTDFfTU9VVF9FTjsKKwkJdmFsdWUgPSBPVkwxX01PVVRfRU5fQ09MT1IxOwor CX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfR0FNTUEgJiYgbmV4dCA9PSBERFBfQ09N UE9ORU5UX1JETUExKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfR0FNTUFfTU9V VF9FTjsKKwkJdmFsdWUgPSBHQU1NQV9NT1VUX0VOX1JETUExOworCX0gZWxzZSBpZiAoY3VyID09 IEREUF9DT01QT05FTlRfUkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKKwkJ KmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9SRE1BMV9NT1VUX0VOOworCQl2YWx1ZSA9IFJE TUExX01PVVRfRFBJMDsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IDA7CisJfQorCisJcmV0dXJuIHZh bHVlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfc2VsX2luKGVudW0gbXRrX2Rk cF9jb21wX2lkIGN1ciwKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0LAorCQkJCSAg IHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlpZiAoY3Vy ID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7 CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTjsKKwkJdmFsdWUg PSBDT0xPUjBfU0VMX0lOX09WTDA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9S RE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMCkgeworCQkqYWRkciA9IERJU1BfUkVH X0NPTkZJR19EUElfU0VMX0lOOworCQl2YWx1ZSA9IERQSTBfU0VMX0lOX1JETUExOworCX0gZWxz ZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRf Q09MT1IxKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IxX1NFTF9JTjsK KwkJdmFsdWUgPSBDT0xPUjFfU0VMX0lOX09WTDE7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAwOwor CX0KKworCXJldHVybiB2YWx1ZTsKK30KKwordm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgo dm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lk IGN1ciwKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5zaWduZWQg aW50IGFkZHIsIHZhbHVlLCByZWc7CisKKwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIsIG5l eHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdf cmVncyArIGFkZHIpIHwgdmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3Mg KyBhZGRyKTsKKwl9CisKKwl2YWx1ZSA9IG10a19kZHBfc2VsX2luKGN1ciwgbmV4dCwgJmFkZHIp OworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRk cikgfCB2YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOwor CX0KK30KKwordm9pZCBtdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aCh2b2lkIF9faW9tZW0g KmNvbmZpZ19yZWdzLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkgICBl bnVtIG10a19kZHBfY29tcF9pZCBuZXh0KQoreworCXVuc2lnbmVkIGludCBhZGRyLCB2YWx1ZSwg cmVnOworCisJdmFsdWUgPSBtdGtfZGRwX21vdXRfZW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYg KHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSAmIH52 YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOworCX0KKwor CXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7 CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSAmIH52YWx1ZTsKKwkJ d3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOworCX0KK30KKworc3RydWN0 IG10a19kaXNwX211dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCB1 bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCisJaWYgKGlkID49IDEwKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlp ZiAoZGRwLT5tdXRleFtpZF0uY2xhaW1lZCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwor CWRkcC0+bXV0ZXhbaWRdLmNsYWltZWQgPSB0cnVlOworCisJcmV0dXJuICZkZHAtPm11dGV4W2lk XTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9wdXQoc3RydWN0IG10a19kaXNwX211dGV4ICpt dXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1 Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisKKwlXQVJOX09OKCZkZHAt Pm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOworCisJbXV0ZXgtPmNsYWltZWQgPSBmYWxzZTsK K30KKworaW50IG10a19kaXNwX211dGV4X3ByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICpt dXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1 Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJcmV0dXJuIGNsa19wcmVw YXJlX2VuYWJsZShkZHAtPmNsayk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJl KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9 IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4 LT5pZF0pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkZHAtPmNsayk7Cit9CisKK3ZvaWQgbXRr X2Rpc3BfbXV0ZXhfYWRkX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCSAg ICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNv bnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5p ZF0pOworCXVuc2lnbmVkIGludCByZWc7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5p ZF0gIT0gbXV0ZXgpOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kw OgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKKwkJYnJlYWs7CisJY2FzZSBERFBfQ09NUE9ORU5U X0RTSTE6CisJCXJlZyA9IE1VVEVYX1NPRl9EU0kwOworCQlicmVhazsKKwljYXNlIEREUF9DT01Q T05FTlRfRFBJMDoKKwkJcmVnID0gTVVURVhfU09GX0RQSTA7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11 dGV4LT5pZCkpOworCQlyZWcgfD0gbXV0ZXhfbW9kW2lkXTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVn LCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJldHVybjsK Kwl9CisKKwl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX1NP RihtdXRleC0+aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChzdHJ1 Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQor eworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtf ZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJ V0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQp IHsKKwljYXNlIEREUF9DT01QT05FTlRfRFNJMDoKKwljYXNlIEREUF9DT01QT05FTlRfRFNJMToK KwljYXNlIEREUF9DT01QT05FTlRfRFBJMDoKKwkJd3JpdGVsX3JlbGF4ZWQoTVVURVhfU09GX1NJ TkdMRV9NT0RFLAorCQkJICAgICAgIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX1NPRihtdXRl eC0+aWQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAt PnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJlZyAmPSB+bXV0ZXhf bW9kW2lkXTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRF WF9NT0QobXV0ZXgtPmlkKSk7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBtdGtfZGlzcF9tdXRl eF9lbmFibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2Rk cCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0 ZXhbbXV0ZXgtPmlkXSk7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0 ZXgpOworCisJd3JpdGVsKDEsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX0VOKG11dGV4LT5p ZCkpOworfQorCit2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19kaXNwX211 dGV4ICptdXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4 LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisKKwlXQVJOX09O KCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOworCisJd3JpdGVsKDAsIGRkcC0+cmVn cyArIERJU1BfUkVHX01VVEVYX0VOKG11dGV4LT5pZCkpOworfQorCitzdGF0aWMgaW50IG10a19k ZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZGRwICpkZHA7CisJc3RydWN0IHJlc291 cmNlICpyZWdzOworCWludCBpOworCisJZGRwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpk ZHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3Ig KGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJZGRwLT5tdXRleFtpXS5pZCA9IGk7CisKKwlkZHAtPmNs ayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOworCWlmIChJU19FUlIoZGRwLT5jbGspKSB7CisJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJS KGRkcC0+Y2xrKTsKKwl9CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElP UkVTT1VSQ0VfTUVNLCAwKTsKKwlkZHAtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2 LCByZWdzKTsKKwlpZiAoSVNfRVJSKGRkcC0+cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gbWFwIG11dGV4IHJlZ2lzdGVyc1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRkcC0+cmVn cyk7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGRwKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IG10a19kZHBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIGRkcF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr LG10ODE3My1kaXNwLW11dGV4IiB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IGRkcF9kcml2ZXJfZHRfbWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kZHBf ZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGRwX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2Rk cF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRkcCIsCisJCS5v d25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBkZHBfZHJpdmVyX2R0X21h dGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZGRwLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKQEAgLTAsMCArMSw0MSBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9E RFBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21w LmgiCisKK3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IG10a19kaXNwX211 dGV4OworCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZp Z19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51 bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9w YXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBf aWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOworCitzdHJ1Y3QgbXRr X2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2ln bmVkIGludCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3Bf bXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAoc3RydWN0IG10a19k aXNwX211dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9p ZCBtdGtfZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2 b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7 Cit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq bXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlzcF9tdXRl eF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNw X211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKKworI2VuZGlmIC8qIE1U S19EUk1fRERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2RkcF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29t cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzBmY2YKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCkBA IC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4K KyAqIEF1dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KKyAqCUNLIEh1 IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxs aW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51 eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAi bXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisjaW5jbHVkZSAibXRr X2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfT0RfRU4JCQkJMHgwMDAwCisjZGVmaW5l IERJU1BfT0RfSU5URU4JCQkJMHgwMDA4CisjZGVmaW5lIERJU1BfT0RfSU5UU1RBCQkJCTB4MDAw YworI2RlZmluZSBESVNQX09EX0NGRwkJCQkweDAwMjAKKyNkZWZpbmUgRElTUF9PRF9TSVpFCQkJ CTB4MDAzMAorCisjZGVmaW5lIERJU1BfUkVHX1VGT19TVEFSVAkJCTB4MDAwMAorCisjZGVmaW5l IERJU1BfQ09MT1JfQ0ZHX01BSU4JCQkweDA0MDAKKyNkZWZpbmUgRElTUF9DT0xPUl9TVEFSVAkJ CTB4MGMwMAorI2RlZmluZSBESVNQX0NPTE9SX1dJRFRICQkJMHgwYzUwCisjZGVmaW5lIERJU1Bf Q09MT1JfSEVJR0hUCQkJMHgwYzU0CisKKyNkZWZpbmUJT0RfUkVMQVlfTU9ERQkJQklUKDApCisK KyNkZWZpbmUJVUZPX0JZUEFTUwkJQklUKDIpCisKKyNkZWZpbmUJQ09MT1JfQllQQVNTX0FMTAlC SVQoNykKKyNkZWZpbmUJQ09MT1JfU0VRX1NFTAkJQklUKDEzKQorCitzdGF0aWMgdm9pZCBtdGtf Y29sb3JfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3LAor CQkJICAgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCXdyaXRl bCh3LCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9XSURUSCk7CisJd3JpdGVsKGgsIGNvbXAtPnJl Z3MgKyBESVNQX0NPTE9SX0hFSUdIVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jb2xvcl9zdGFy dChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbChDT0xPUl9CWVBBU1NfQUxM IHwgQ09MT1JfU0VRX1NFTCwKKwkgICAgICAgY29tcC0+cmVncyArIERJU1BfQ09MT1JfQ0ZHX01B SU4pOworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX1NUQVJUKTsKK30KKwor c3RhdGljIHZvaWQgbXRrX29kX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNp Z25lZCBpbnQgdywKKwkJCSAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkK K3sKKwl3cml0ZWwodyA8PCAxNiB8IGgsIGNvbXAtPnJlZ3MgKyBESVNQX09EX1NJWkUpOworfQor CitzdGF0aWMgdm9pZCBtdGtfb2Rfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sK Kwl3cml0ZWwoT0RfUkVMQVlfTU9ERSwgY29tcC0+cmVncyArIERJU1BfT0RfQ0ZHKTsKKwl3cml0 ZWwoMSwgY29tcC0+cmVncyArIERJU1BfT0RfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfdWZv ZV9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbChVRk9fQllQQVNT LCBjb21wLT5yZWdzICsgRElTUF9SRUdfVUZPX1NUQVJUKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX2NvbG9yID0geworCS5jb25maWcgPSBtdGtfY29s b3JfY29uZmlnLAorCS5zdGFydCA9IG10a19jb2xvcl9zdGFydCwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9vZCA9IHsKKwkuY29uZmlnID0gbXRrX29k X2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfb2Rfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfdWZvZSA9IHsKKwkuc3RhcnQgPSBtdGtfdWZvZV9z dGFydCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXRrX2RkcF9jb21wX3N0ZW1b TVRLX0REUF9DT01QX1RZUEVfTUFYXSA9IHsKKwlbTVRLX0RJU1BfT1ZMXSA9ICJvdmwiLAorCVtN VEtfRElTUF9SRE1BXSA9ICJyZG1hIiwKKwlbTVRLX0RJU1BfV0RNQV0gPSAid2RtYSIsCisJW01U S19ESVNQX0NPTE9SXSA9ICJjb2xvciIsCisJW01US19ESVNQX0FBTF0gPSAiYWFsIiwKKwlbTVRL X0RJU1BfR0FNTUFdID0gImdhbW1hIiwKKwlbTVRLX0RJU1BfVUZPRV0gPSAidWZvZSIsCisJW01U S19EU0ldID0gImRzaSIsCisJW01US19EUEldID0gImRwaSIsCisJW01US19ESVNQX1BXTV0gPSAi cHdtIiwKKwlbTVRLX0RJU1BfTVVURVhdID0gIm11dGV4IiwKKwlbTVRLX0RJU1BfT0RdID0gIm9k IiwKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXBfbWF0Y2ggeworCWVudW0gbXRrX2RkcF9jb21w X3R5cGUgdHlwZTsKKwlpbnQgYWxpYXNfaWQ7CisJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m dW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9tYXRj aCBtdGtfZGRwX21hdGNoZXNbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0geworCVtERFBfQ09NUE9O RU5UX0FBTF0JPSB7IE1US19ESVNQX0FBTCwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0NP TE9SMF0JPSB7IE1US19ESVNQX0NPTE9SLAkwLCAmZGRwX2NvbG9yIH0sCisJW0REUF9DT01QT05F TlRfQ09MT1IxXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTEsICZkZHBfY29sb3IgfSwKKwlbRERQX0NP TVBPTkVOVF9EUEkwXQk9IHsgTVRLX0RQSSwJCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9E U0kwXQk9IHsgTVRLX0RTSSwJCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9EU0kxXQk9IHsg TVRLX0RTSSwJCTEsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9HQU1NQV0JPSB7IE1US19ESVNQ X0dBTU1BLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT0RdCT0geyBNVEtfRElTUF9PRCwJ MCwgJmRkcF9vZCB9LAorCVtERFBfQ09NUE9ORU5UX09WTDBdCT0geyBNVEtfRElTUF9PVkwsCTAs IE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXQk9IHsgTVRLX0RJU1BfT1ZMLAkxLCBOVUxM IH0sCisJW0REUF9DT01QT05FTlRfUFdNMF0JPSB7IE1US19ESVNQX1BXTSwJMCwgTlVMTCB9LAor CVtERFBfQ09NUE9ORU5UX1JETUEwXQk9IHsgTVRLX0RJU1BfUkRNQSwJMCwgTlVMTCB9LAorCVtE RFBfQ09NUE9ORU5UX1JETUExXQk9IHsgTVRLX0RJU1BfUkRNQSwJMSwgTlVMTCB9LAorCVtERFBf Q09NUE9ORU5UX1JETUEyXQk9IHsgTVRLX0RJU1BfUkRNQSwJMiwgTlVMTCB9LAorCVtERFBfQ09N UE9ORU5UX1VGT0VdCT0geyBNVEtfRElTUF9VRk9FLAkwLCAmZGRwX3Vmb2UgfSwKKwlbRERQX0NP TVBPTkVOVF9XRE1BMF0JPSB7IE1US19ESVNQX1dETUEsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBP TkVOVF9XRE1BMV0JPSB7IE1US19ESVNQX1dETUEsCTEsIE5VTEwgfSwKK307CisKK2ludCBtdGtf ZGRwX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCWVudW0gbXRrX2Rk cF9jb21wX3R5cGUgY29tcF90eXBlKQoreworCWludCBpZCA9IG9mX2FsaWFzX2dldF9pZChub2Rl LCBtdGtfZGRwX2NvbXBfc3RlbVtjb21wX3R5cGVdKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKG10a19kZHBfbWF0Y2hlcyk7IGkrKykgeworCQlpZiAoY29tcF90eXBl ID09IG10a19kZHBfbWF0Y2hlc1tpXS50eXBlICYmCisJCSAgICAoaWQgPCAwIHx8IGlkID09IG10 a19kZHBfbWF0Y2hlc1tpXS5hbGlhc19pZCkpCisJCQlyZXR1cm4gaTsKKwl9CisKKwlyZXR1cm4g LUVJTlZBTDsKK30KKworaW50IG10a19kZHBfY29tcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkgICAgICBzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wLCBlbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qg bXRrX2RkcF9jb21wX2Z1bmNzICpmdW5jcykKK3sKKwllbnVtIG10a19kZHBfY29tcF90eXBlIHR5 cGU7CisJc3RydWN0IGRldmljZV9ub2RlICpsYXJiX25vZGU7CisJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqbGFyYl9wZGV2OworCisJaWYgKGNvbXBfaWQgPCAwIHx8IGNvbXBfaWQgPj0gRERQX0NP TVBPTkVOVF9JRF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJY29tcC0+aWQgPSBjb21wX2lk OworCWNvbXAtPmZ1bmNzID0gZnVuY3MgPzogbXRrX2RkcF9tYXRjaGVzW2NvbXBfaWRdLmZ1bmNz OworCisJaWYgKGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9EUEkwIHx8CisJICAgIGNvbXBfaWQg PT0gRERQX0NPTVBPTkVOVF9EU0kwIHx8CisJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9Q V00wKSB7CisJCWNvbXAtPnJlZ3MgPSBOVUxMOworCQljb21wLT5jbGsgPSBOVUxMOworCQljb21w LT5pcnEgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwljb21wLT5yZWdzID0gb2ZfaW9tYXAobm9k ZSwgMCk7CisJY29tcC0+aXJxID0gb2ZfaXJxX2dldChub2RlLCAwKTsKKwljb21wLT5jbGsgPSBv Zl9jbGtfZ2V0KG5vZGUsIDApOworCWlmIChJU19FUlIoY29tcC0+Y2xrKSkKKwkJY29tcC0+Y2xr ID0gTlVMTDsKKworCXR5cGUgPSBtdGtfZGRwX21hdGNoZXNbY29tcF9pZF0udHlwZTsKKworCS8q IE9ubHkgRE1BIGNhcGFibGUgY29tcG9uZW50cyBuZWVkIHRoZSBMQVJCIHByb3BlcnR5ICovCisJ Y29tcC0+bGFyYl9kZXYgPSBOVUxMOworCWlmICh0eXBlICE9IE1US19ESVNQX09WTCAmJgorCSAg ICB0eXBlICE9IE1US19ESVNQX1JETUEgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9XRE1BKQor CQlyZXR1cm4gMDsKKworCWxhcmJfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgIm1lZGlh dGVrLGxhcmIiLCAwKTsKKwlpZiAoIWxhcmJfbm9kZSkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJN aXNzaW5nIG1lZGlhZGVrLGxhcmIgcGhhbmRsZSBpbiAlcyBub2RlXG4iLAorCQkJbm9kZS0+ZnVs bF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGFyYl9wZGV2ID0gb2ZfZmluZF9k ZXZpY2VfYnlfbm9kZShsYXJiX25vZGUpOworCWlmICghbGFyYl9wZGV2KSB7CisJCWRldl93YXJu KGRldiwgIldhaXRpbmcgZm9yIGxhcmIgZGV2aWNlICVzXG4iLAorCQkJIGxhcmJfbm9kZS0+ZnVs bF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQobGFyYl9ub2RlKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVG RVI7CisJfQorCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisKKwljb21wLT5sYXJiX2RldiA9ICZs YXJiX3BkZXYtPmRldjsKKworCXJldHVybiAwOworfQorCitpbnQgbXRrX2RkcF9jb21wX3JlZ2lz dGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7 CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7CisK KwlpZiAocHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdKQorCQlyZXR1cm4gLUVCVVNZOworCisJ cHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0gY29tcDsKKwlyZXR1cm4gMDsKK30KKwordm9p ZCBtdGtfZGRwX2NvbXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3Qg bXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUg PSBkcm0tPmRldl9wcml2YXRlOworCisJcHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0gTlVM TDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9j b21wLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTNiYTkKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCkBAIC0wLDAgKzEs MTUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBN VEtfRFJNX0REUF9DT01QX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBfQ09NUF9ICisKKyNpbmNsdWRl IDxsaW51eC9pby5oPgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9ub2RlOworc3Ry dWN0IGRybV9jcnRjOworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRl OworCitlbnVtIG10a19kZHBfY29tcF90eXBlIHsKKwlNVEtfRElTUF9PVkwsCisJTVRLX0RJU1Bf UkRNQSwKKwlNVEtfRElTUF9XRE1BLAorCU1US19ESVNQX0NPTE9SLAorCU1US19ESVNQX0FBTCwK KwlNVEtfRElTUF9HQU1NQSwKKwlNVEtfRElTUF9VRk9FLAorCU1US19EU0ksCisJTVRLX0RQSSwK KwlNVEtfRElTUF9QV00sCisJTVRLX0RJU1BfTVVURVgsCisJTVRLX0RJU1BfT0QsCisJTVRLX0RE UF9DT01QX1RZUEVfTUFYLAorfTsKKworZW51bSBtdGtfZGRwX2NvbXBfaWQgeworCUREUF9DT01Q T05FTlRfQUFMLAorCUREUF9DT01QT05FTlRfQ09MT1IwLAorCUREUF9DT01QT05FTlRfQ09MT1Ix LAorCUREUF9DT01QT05FTlRfRFBJMCwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBP TkVOVF9EU0kxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlE RFBfQ09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRf UFdNMCwKKwlERFBfQ09NUE9ORU5UX1BXTTEsCisJRERQX0NPTVBPTkVOVF9SRE1BMCwKKwlERFBf Q09NUE9ORU5UX1JETUExLAorCUREUF9DT01QT05FTlRfUkRNQTIsCisJRERQX0NPTVBPTkVOVF9V Rk9FLAorCUREUF9DT01QT05FTlRfV0RNQTAsCisJRERQX0NPTVBPTkVOVF9XRE1BMSwKKwlERFBf Q09NUE9ORU5UX0lEX01BWCwKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXA7CisKK3N0cnVjdCBt dGtfZGRwX2NvbXBfZnVuY3MgeworCXZvaWQgKCpjb25maWcpKHN0cnVjdCBtdGtfZGRwX2NvbXAg KmNvbXAsIHVuc2lnbmVkIGludCB3LAorCQkgICAgICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVk IGludCB2cmVmcmVzaCk7CisJdm9pZCAoKnN0YXJ0KShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w KTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKmVu YWJsZV92YmxhbmspKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yyk7CisJdm9pZCAoKmRpc2FibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w KTsKKwl2b2lkICgqbGF5ZXJfb24pKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVk IGludCBpZHgpOworCXZvaWQgKCpsYXllcl9vZmYpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs IHVuc2lnbmVkIGludCBpZHgpOworCXZvaWQgKCpsYXllcl9jb25maWcpKHN0cnVjdCBtdGtfZGRw X2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgsCisJCQkgICAgIHN0cnVjdCBtdGtfcGxhbmVf c3RhdGUgKnN0YXRlKTsKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXAgeworCXN0cnVjdCBjbGsg KmNsazsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJaW50IGlycTsKKwlzdHJ1Y3QgZGV2aWNlICps YXJiX2RldjsKKwllbnVtIG10a19kZHBfY29tcF9pZCBpZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2Rk cF9jb21wX2Z1bmNzICpmdW5jczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2Nv bXBfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICAgICAgIHVuc2lnbmVk IGludCB3LCB1bnNpZ25lZCBpbnQgaCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHZyZWZyZXNo KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+Y29uZmlnKQorCQljb21wLT5m dW5jcy0+Y29uZmlnKGNvbXAsIHcsIGgsIHZyZWZyZXNoKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIG10a19kZHBfY29tcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlm IChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RhcnQpCisJCWNvbXAtPmZ1bmNzLT5zdGFy dChjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9zdG9wKHN0cnVj dCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNz LT5zdG9wKQorCQljb21wLT5mdW5jcy0+c3RvcChjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIG10a19kZHBfY29tcF9lbmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs CisJCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlpZiAoY29tcC0+ZnVuY3Mg JiYgY29tcC0+ZnVuY3MtPmVuYWJsZV92YmxhbmspCisJCWNvbXAtPmZ1bmNzLT5lbmFibGVfdmJs YW5rKGNvbXAsIGNydGMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2Rp c2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1 bmNzICYmIGNvbXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFuaykKKwkJY29tcC0+ZnVuY3MtPmRpc2Fi bGVfdmJsYW5rKGNvbXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xh eWVyX29uKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSB1bnNpZ25lZCBpbnQgaWR4 KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJfb24pCisJCWNvbXAt PmZ1bmNzLT5sYXllcl9vbihjb21wLCBpZHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRr X2RkcF9jb21wX2xheWVyX29mZihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgIHVu c2lnbmVkIGludCBpZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5sYXll cl9vZmYpCisJCWNvbXAtPmZ1bmNzLT5sYXllcl9vZmYoY29tcCwgaWR4KTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9jb25maWcoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaWR4LAorCQkJCQkgICAgIHN0cnVjdCBt dGtfcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5j cy0+bGF5ZXJfY29uZmlnKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfY29uZmlnKGNvbXAsIGlkeCwg c3RhdGUpOworfQorCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUg Km5vZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSk7CitpbnQgbXRrX2Rk cF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbXBf bm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBtdGtfZGRwX2Nv bXBfaWQgY29tcF9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAq ZnVuY3MpOworaW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKK3ZvaWQgbXRrX2RkcF9jb21wX3VucmVnaXN0 ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisK KyNlbmRpZiAvKiBNVEtfRFJNX0REUF9DT01QX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlNTY1NAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5j CkBAIC0wLDAgKzEsNTU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIElu Yy4KKyAqIEF1dGhvcjogWVQgU0hFTiA8eXQuc2hlbkBtZWRpYXRlay5jb20+CisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5o PgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRm b3JtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAibXRrX2Ry bV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rk cF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Zi LmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAibWVk aWF0ZWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRpYXRlayBTb0MgRFJNIgorI2RlZmluZSBE UklWRVJfREFURSAiMjAxNTA1MTMiCisjZGVmaW5lIERSSVZFUl9NQUpPUiAxCisjZGVmaW5lIERS SVZFUl9NSU5PUiAwCisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfc2NoZWR1bGUoc3RydWN0IG10 a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpCit7CisJcHJpdmF0ZS0+Y29tbWl0LnN0YXRlID0gc3RhdGU7CisJc2NoZWR1bGVfd29yaygm cHJpdmF0ZS0+Y29tbWl0LndvcmspOworfQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX3dhaXRf Zm9yX2ZlbmNlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRy bV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJ aW50IGk7CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0 YXRlLCBpKQorCQltdGtfZmJfd2FpdChwbGFuZS0+c3RhdGUtPmZiKTsKK30KKworc3RhdGljIHZv aWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlLAor CQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJbXRrX2F0b21pY193YWl0X2Zvcl9mZW5jZXMoc3Rh dGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBz dGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhkcm0sIHN0YXRlLCBmYWxz ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhkcm0sIHN0YXRl KTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKGRybSwgc3RhdGUpOworCWRy bV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNf c3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0 ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IG10a19kcm1fcHJpdmF0ZSwgY29tbWl0 LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShwcml2YXRlLCBwcml2YXRlLT5jb21taXQu c3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAg ICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJt LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJl cGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11 dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlmbHVzaF93b3JrKCZwcml2YXRlLT5j b21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9zd2FwX3N0YXRlKGRybSwgc3RhdGUp OworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3NjaGVkdWxlKHByaXZhdGUsIHN0YXRlKTsK KwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgc3RhdGUpOworCisJbXV0ZXhf dW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbXRrX2RybV9tb2RlX2NvbmZpZ19m dW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZSwKKwkuYXRvbWlj X2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBtdGtf YXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCBt dGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9D T0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlERFBfQ09N UE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX0RTSTAs CisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9j b21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01Q T05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9SRE1B MSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fa21zX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw cml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldDsKKworCWlmICghaW9tbXVfcHJl c2VudCgmcGxhdGZvcm1fYnVzX3R5cGUpKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCXBk ZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZhdGUtPm11dGV4X25vZGUpOworCWlmICgh cGRldikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiV2FpdGluZyBmb3IgZGlzcC1tdXRleCBkZXZp Y2UgJXNcbiIsCisJCQlwcml2YXRlLT5tdXRleF9ub2RlLT5mdWxsX25hbWUpOworCQlvZl9ub2Rl X3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQor CXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7CisKKwlkcm1fbW9kZV9jb25maWdfaW5p dChkcm0pOworCisJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDsKKwlkcm0tPm1vZGVf Y29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKKworCS8qCisJICogc2V0IG1heCB3aWR0aCBhbmQgaGVp Z2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4KKwkgKiB0aGlzIHZhbHVlIHdvdWxkIGJl IHVzZWQgdG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0aW9uCisJICogYXQgZHJtX21v ZGVfYWRkZmIoKS4KKwkgKi8KKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDQwOTY7CisJ ZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5NjsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1 bmNzID0gJm10a19kcm1fbW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBjb21wb25lbnRfYmlu ZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX2NsZWFu dXA7CisKKwkvKgorCSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBmaXhlZCBkYXRhIHN0cmVh bXMsIGVhY2ggb3B0aW9uYWwsCisJICogYW5kIGVhY2ggc3RhdGljYWxseSBhc3NpZ25lZCB0byBh IGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0Ug LT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2Rk cF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQgPCAwKQorCQlnb3Rv IGVycl9jb21wb25lbnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FN TUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwg bXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJ Z290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKworCS8qIFVzZSBPVkwgZGV2aWNlIGZvciBhbGwg RE1BIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworCW5wID0gcHJpdmF0ZS0+Y29tcF9ub2RlW210a19k ZHBfbWFpblswXV0gPzoKKwkgICAgIHByaXZhdGUtPmNvbXBfbm9kZVttdGtfZGRwX2V4dFswXV07 CisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApOworCWlmICghcGRldikgeworCQly ZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKGRybS0+ZGV2LCAiTmVlZCBhdCBsZWFzdCBvbmUgT1ZM IGRldmljZVxuIik7CisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisJfQorCisJcHJpdmF0 ZS0+ZG1hX2RldiA9ICZwZGV2LT5kZXY7CisKKwkvKgorCSAqIFdlIGRvbid0IHVzZSB0aGUgZHJt X2lycV9pbnN0YWxsKCkgaGVscGVycyBwcm92aWRlZCBieSB0aGUgRFJNCisJICogY29yZSwgc28g d2UgbmVlZCB0byBzZXQgdGhpcyBtYW51YWxseSBpbiBvcmRlciB0byBhbGxvdyB0aGUKKwkgKiBE Uk1fSU9DVExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisJICovCisJZHJtLT5p cnFfZW5hYmxlZCA9IHRydWU7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgTUFYX0NSVEMp OworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCisJZHJtX2tt c19oZWxwZXJfcG9sbF9pbml0KGRybSk7CisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisK KwlyZXR1cm4gMDsKKworZXJyX2NvbXBvbmVudF91bmJpbmQ6CisJY29tcG9uZW50X3VuYmluZF9h bGwoZHJtLT5kZXYsIGRybSk7CitlcnJfY29uZmlnX2NsZWFudXA6CisJZHJtX21vZGVfY29uZmln X2NsZWFudXAoZHJtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1f a21zX2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9rbXNfaGVscGVyX3Bv bGxfZmluaShkcm0pOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7CisJY29tcG9uZW50X3Vu YmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXRrX2RybV9mb3BzID0g eworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLnJlbGVhc2Ug PSBkcm1fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisJLm1tYXAgPSBt dGtfZHJtX2dlbV9tbWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJlYWQgPSBkcm1fcmVhZCwK KyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGws CisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBtdGtfZHJtX2RyaXZlciA9 IHsKKwkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX01PREVTRVQgfCBEUklWRVJfR0VNIHwgRFJJ VkVSX1BSSU1FIHwKKwkJCSAgIERSSVZFUl9BVE9NSUMsCisKKwkuZ2V0X3ZibGFua19jb3VudGVy ID0gZHJtX3ZibGFua19jb3VudCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19lbmFi bGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFu aywKKworCS5nZW1fZnJlZV9vYmplY3QgPSBtdGtfZHJtX2dlbV9mcmVlX29iamVjdCwKKwkuZ2Vt X3ZtX29wcyA9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCisJLmR1bWJfY3JlYXRlID0gbXRrX2RybV9n ZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9IG10a19kcm1fZ2VtX2R1bWJfbWFw X29mZnNldCwKKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisKKwkucHJp bWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCisJLnByaW1lX2Zk X3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAorCS5nZW1fcHJpbWVfZXhw b3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2Vt X3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IG10a19nZW1fcHJpbWVf Z2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gbXRrX2dlbV9wcmlt ZV9pbXBvcnRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9tbWFwID0gbXRrX2RybV9nZW1fbW1hcF9i dWYsCisJLmZvcHMgPSAmbXRrX2RybV9mb3BzLAorCisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwku ZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1ham9yID0gRFJJ VkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwKK307CisKK3N0YXRpYyBpbnQgY29t cGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGRldi0+ b2Zfbm9kZSA9PSBkYXRhOworfQorCitzdGF0aWMgaW50IG10a19kcm1fYmluZChzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJaW50IHJldDsKKworCWRy bSA9IGRybV9kZXZfYWxsb2MoJm10a19kcm1fZHJpdmVyLCBkZXYpOworCWlmICghZHJtKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWRybV9kZXZfc2V0X3VuaXF1ZShkcm0sIGRldl9uYW1lKGRldikp OworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQgPCAwKQorCQln b3RvIGVycl9mcmVlOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXZhdGU7CisJcHJpdmF0ZS0+ ZHJtID0gZHJtOworCisJcmV0ID0gbXRrX2RybV9rbXNfaW5pdChkcm0pOworCWlmIChyZXQgPCAw KQorCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lzdGVy OgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX2ZyZWU6CisJZHJtX2Rldl91bnJlZihk cm0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fdW5iaW5kKHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1fcHV0X2Rldihwcml2YXRlLT5kcm0pOworCXByaXZh dGUtPmRybSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rl cl9vcHMgbXRrX2RybV9vcHMgPSB7CisJLmJpbmQJCT0gbXRrX2RybV9iaW5kLAorCS51bmJpbmQJ CT0gbXRrX2RybV91bmJpbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBtdGtfZGRwX2NvbXBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxt dDgxNzMtZGlzcC1vdmwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PVkwgfSwKKwl7IC5j b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCAgLmRhdGEgPSAodm9pZCAq KU1US19ESVNQX1JETUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNw LXdkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1dETUEgfSwKKwl7IC5jb21wYXRpYmxl ID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQ X0NPTE9SIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1hYWwiLCAg IC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9BQUx9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0 ZWssbXQ4MTczLWRpc3AtZ2FtbWEiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfR0FNTUEsIH0s CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC11Zm9lIiwgIC5kYXRhID0g KHZvaWQgKilNVEtfRElTUF9VRk9FIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgx NzMtZHNpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFNJIH0sCisJeyAuY29tcGF0aWJs ZSA9ICJtZWRpYXRlayxtdDgxNzMtZHBpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFBJ IH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIsIC5kYXRh ID0gKHZvaWQgKilNVEtfRElTUF9NVVRFWCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWss bXQ4MTczLWRpc3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUFdNIH0sCisJeyAu Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vZCIsICAgIC5kYXRhID0gKHZvaWQg KilNVEtfRElTUF9PRCB9LAorCXsgfQorfTsKKworc3RhdGljIGludCBtdGtfZHJtX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBk ZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlOworCXN0cnVjdCByZXNv dXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgY29tcG9uZW50 X21hdGNoICptYXRjaCA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXByaXZhdGUgPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBy aXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcHJpdmF0ZS0+Y29tbWl0 LmxvY2spOworCUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0LndvcmssIG10a19hdG9taWNfd29y ayk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0s IDApOworCXByaXZhdGUtPmNvbmZpZ19yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg bWVtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKSkgeworCQlyZXQgPSBQVFJf RVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9y ZW1hcCBtbXN5cy1jb25maWcgcmVzb3VyY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBESVNQIGZ1bmN0aW9uIGJsb2NrcyAq LworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLT5wYXJlbnQsIG5vZGUpIHsK KwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CisJCWVudW0gbXRrX2RkcF9jb21w X3R5cGUgY29tcF90eXBlOworCQlpbnQgY29tcF9pZDsKKworCQlvZl9pZCA9IG9mX21hdGNoX25v ZGUobXRrX2RkcF9jb21wX2R0X2lkcywgbm9kZSk7CisJCWlmICghb2ZfaWQpCisJCQljb250aW51 ZTsKKworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKKwkJCWRldl9kYmco ZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVzXG4iLAorCQkJCW5vZGUtPmZ1bGxf bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBfdHlwZSA9IChlbnVtIG10a19kZHBf Y29tcF90eXBlKW9mX2lkLT5kYXRhOworCisJCWlmIChjb21wX3R5cGUgPT0gTVRLX0RJU1BfTVVU RVgpIHsKKwkJCXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9ub2RlX2dldChub2RlKTsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQobm9kZSwgY29t cF90eXBlKTsKKwkJaWYgKGNvbXBfaWQgPCAwKSB7CisJCQlkZXZfd2FybihkZXYsICJTa2lwcGlu ZyB1bmtub3duIGNvbXBvbmVudCAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJcHJpdmF0ZS0+Y29tcF9ub2RlW2NvbXBfaWRdID0gb2Zfbm9kZV9n ZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3VycmVudGx5IG9ubHkgdGhlIE9WTCwgUkRNQSwgRFNJ LCBhbmQgRFBJIGJsb2NrcyBoYXZlCisJCSAqIHNlcGFyYXRlIGNvbXBvbmVudCBwbGF0Zm9ybSBk cml2ZXJzIGFuZCBpbml0aWFsaXplIHRoZWlyIG93bgorCQkgKiBERFAgY29tcG9uZW50IHN0cnVj dHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4KKwkJICovCisJCWlmIChjb21w X3R5cGUgPT0gTVRLX0RJU1BfT1ZMIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RJU1BfUkRN QSB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EU0kgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBN VEtfRFBJKSB7CisJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1hdGNoIGZvciAl c1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2 LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIG5vZGUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG10a19k ZHBfY29tcCAqY29tcDsKKworCQkJY29tcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY29t cCksIEdGUF9LRVJORUwpOworCQkJaWYgKCFjb21wKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJ CQlnb3RvIGVycl9ub2RlOworCQkJfQorCisJCQlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYs IG5vZGUsIGNvbXAsIGNvbXBfaWQsIE5VTEwpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycl9u b2RlOworCisJCQlwcml2YXRlLT5kZHBfY29tcFtjb21wX2lkXSA9IGNvbXA7CisJCX0KKwl9CisK KwlpZiAoIXByaXZhdGUtPm11dGV4X25vZGUpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g ZmluZCBkaXNwLW11dGV4IG5vZGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9u b2RlOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2 ZGF0YShwZGV2LCBwcml2YXRlKTsKKworCXJldCA9IGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhf bWF0Y2goZGV2LCAmbXRrX2RybV9vcHMsIG1hdGNoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9w bTsKKworCXJldHVybiAwOworCitlcnJfcG06CisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7Citl cnJfbm9kZToKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkgPSAw OyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+ Y29tcF9ub2RlW2ldKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kcm1fcmVt b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJp dmF0ZSAqcHJpdmF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisJaW50IGk7CisKKwlkcm1fY29ubmVjdG9yX3Vu cmVnaXN0ZXJfYWxsKGRybSk7CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CisJbXRrX2RybV9r bXNfZGVpbml0KGRybSk7CisJZHJtX2Rldl91bnJlZihkcm0pOworCisJY29tcG9uZW50X21hc3Rl cl9kZWwoJnBkZXYtPmRldiwgJm10a19kcm1fb3BzKTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBk ZXYtPmRldik7CisJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJZm9yIChpID0g MDsgaSA8IEREUF9DT01QT05FTlRfSURfTUFYOyBpKyspCisJCW9mX25vZGVfcHV0KHByaXZhdGUt PmNvbXBfbm9kZVtpXSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVF UAorc3RhdGljIGludCBtdGtfZHJtX3N5c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKworCWRybV9rbXNfaGVs cGVyX3BvbGxfZGlzYWJsZShkcm0pOworCisJcHJpdmF0ZS0+c3VzcGVuZF9zdGF0ZSA9IGRybV9h dG9taWNfaGVscGVyX3N1c3BlbmQoZHJtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPnN1c3BlbmRf c3RhdGUpKSB7CisJCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRybSk7CisJCXJldHVybiBQ VFJfRVJSKHByaXZhdGUtPnN1c3BlbmRfc3RhdGUpOworCX0KKworCURSTV9ERUJVR19EUklWRVIo Im10a19kcm1fc3lzX3N1c3BlbmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10 a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1f cHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisKKwlkcm1fYXRvbWljX2hlbHBlcl9yZXN1bWUoZHJt LCBwcml2YXRlLT5zdXNwZW5kX3N0YXRlKTsKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShk cm0pOworCisJRFJNX0RFQlVHX0RSSVZFUigibXRrX2RybV9zeXNfcmVzdW1lXG4iKTsKKwlyZXR1 cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXRrX2RybV9wbV9v cHMsIG10a19kcm1fc3lzX3N1c3BlbmQsCisJCQkgbXRrX2RybV9zeXNfcmVzdW1lKTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2RybV9vZl9pZHNbXSA9IHsKKwl7IC5j b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1tbXN5cyIsIH0sCisJeyB9Cit9OworCitzdGF0 aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciA9IHsKKwku cHJvYmUJPSBtdGtfZHJtX3Byb2JlLAorCS5yZW1vdmUJPSBtdGtfZHJtX3JlbW92ZSwKKwkuZHJp dmVyCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1kcm0iLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBt dGtfZHJtX29mX2lkcywKKwkJLnBtICAgICA9ICZtdGtfZHJtX3BtX29wcywKKwl9LAorfTsKKwor c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9 IHsKKwkmbXRrX2RkcF9kcml2ZXIsCisJJm10a19kaXNwX292bF9kcml2ZXIsCisJJm10a19kaXNw X3JkbWFfZHJpdmVyLAorCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKK307CisKK3N0YXRpYyBp bnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJtX2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0 ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7CisJCWlmIChy ZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciAlcyBkcml2ZXI6ICVkXG4i LAorCQkJICAgICAgIG10a19kcm1fZHJpdmVyc1tpXS0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCQln b3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAw KQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0pOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG10a19kcm1fZXhpdCh2b2lkKQor eworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0laRShtdGtfZHJtX2RyaXZlcnMpIC0gMTsg aSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKG10a19kcm1fZHJpdmVy c1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19kcm1faW5pdCk7Cittb2R1bGVfZXhpdChtdGtf ZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJZVCBTSEVOIDx5dC5zaGVuQG1lZGlhdGVrLmNv bT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgU29DIERSTSBkcml2ZXIiKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkYzhmYQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCkBAIC0wLDAg KzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVm IE1US19EUk1fRFJWX0gKKyNkZWZpbmUgTVRLX0RSTV9EUlZfSAorCisjaW5jbHVkZSA8bGludXgv aW8uaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgTUFYX0NSVEMJ MgorI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZp Y2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IGRy bV9mYl9oZWxwZXI7CitzdHJ1Y3QgZHJtX3Byb3BlcnR5Oworc3RydWN0IHJlZ21hcDsKKworc3Ry dWN0IG10a19kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlzdHJ1Y3Qg ZGV2aWNlICpkbWFfZGV2OworCisJc3RydWN0IGRybV9jcnRjICpjcnRjW01BWF9DUlRDXTsKKwl1 bnNpZ25lZCBpbnQgbnVtX3BpcGVzOworCisJc3RydWN0IGRldmljZV9ub2RlICptdXRleF9ub2Rl OworCXN0cnVjdCBkZXZpY2UgKm11dGV4X2RldjsKKwl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdz OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2RlW0REUF9DT01QT05FTlRfSURfTUFYXTsK KwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpkZHBfY29tcFtERFBfQ09NUE9ORU5UX0lEX01BWF07CisK KwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7CisJCXN0cnVjdCB3 b3JrX3N0cnVjdCB3b3JrOworCQlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl9IGNvbW1pdDsKKworCXN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdXNwZW5kX3N0YXRlOworfTsKKworZXh0ZXJuIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1 ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2lu Y2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisvKgorICog bXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBAZmI6IGRybSBmcmFt ZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2VtIG9iamVjdHMuCisgKi8K K3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyCWJhc2U7CisJLyog Rm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8KKwlzdHJ1Y3QgZHJtX2dl bV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19mYih4KSBjb250YWluZXJf b2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAq bXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVj dCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJcmV0dXJuIG10a19mYi0+ Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAq bXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUo ZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10 a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3Qg bXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRybV9mcmFtZWJ1ZmZlcl9j bGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG10a19m Yi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0geworCS5jcmVhdGVfaGFu ZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95ID0gbXRrX2RybV9mYl9k ZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVm ZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJY29uc3Qgc3RydWN0IGRybV9t b2RlX2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQorewor CXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0 X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtfZmIpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcm1faGVs cGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+YmFzZSwgbW9kZSk7CisKKwltdGtfZmIt PmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZtdGtf ZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigi ZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJcbiIpOworCQlrZnJlZShtdGtfZmIpOwor CQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtfZmI7Cit9CisKKy8qCisg KiBXYWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGluIGZiJ3MgZ2VtIG9iamVjdCdzIHJlc2Vy dmF0aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRl ZCwgZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IHJlc2VydmF0aW9u X29iamVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlmICghZmIpCisJCXJldHVybiAwOworCisJ Z2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlpZiAoIWdlbSB8fCAhZ2VtLT5kbWFfYnVm IHx8ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVybiAwOworCisJcmVzdiA9IGdlbS0+ZG1h X2J1Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2FpdF90aW1lb3V0X3JjdShy ZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCS8qIE1B WF9TQ0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRl ZCAqLworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7 Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwK KwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpCit7CisJc3Ry dWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKKwl1 bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQgPSBj bWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWludCByZXQ7CisKKwlpZiAo ZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZp bGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVybiBFUlJfUFRSKC1FTk9F TlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5waXhlbF9mb3JtYXQsIDAp OworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3aWR0aCAqIGJwcDsK KwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNpemUgPCBzaXplKSB7CisJ CXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJbXRrX2ZiID0gbXRr X2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlmIChJU19FUlIobXRrX2Zi KSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQor CisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgorCWRybV9nZW1fb2JqZWN0 X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAorI2RlZmluZSBNVEtfRFJN X0ZCX0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19mYl93YWl0KHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpOwor CisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzNiZmEKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwpAQCAt MCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8 bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJt dGtfZHJtX2dlbS5oIgorCitzdGF0aWMgc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9n ZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJdW5zaWduZWQgbG9uZyBzaXpl KQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW1fb2JqOworCWludCByZXQ7CisK KwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKworCW10a19nZW1fb2JqID0ga3ph bGxvYyhzaXplb2YoKm10a19nZW1fb2JqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdGtfZ2VtX29i aikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9p bml0KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGdlbSBvYmplY3RcbiIpOworCQlrZnJlZSht dGtfZ2VtX29iaik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG10a19n ZW1fb2JqOworfQorCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc2l6ZV90IHNpemUsIGJvb2wgYWxsb2Nf a21hcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqOworCWludCByZXQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYs IHNpemUpOworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfQ0FTVChtdGtfZ2Vt KTsKKworCW9iaiA9ICZtdGtfZ2VtLT5iYXNlOworCisJaW5pdF9kbWFfYXR0cnMoJm10a19nZW0t PmRtYV9hdHRycyk7CisJZG1hX3NldF9hdHRyKERNQV9BVFRSX1dSSVRFX0NPTUJJTkUsICZtdGtf Z2VtLT5kbWFfYXR0cnMpOworCisJaWYgKCFhbGxvY19rbWFwKQorCQlkbWFfc2V0X2F0dHIoRE1B X0FUVFJfTk9fS0VSTkVMX01BUFBJTkcsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJbXRrX2dl bS0+Y29va2llID0gZG1hX2FsbG9jX2F0dHJzKHByaXYtPmRtYV9kZXYsIG9iai0+c2l6ZSwKKwkJ CQkJICAmbXRrX2dlbS0+ZG1hX2FkZHIsIEdGUF9LRVJORUwsCisJCQkJCSAgJm10a19nZW0tPmRt YV9hdHRycyk7CisJaWYgKCFtdGtfZ2VtLT5jb29raWUpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gYWxsb2NhdGUgJXp4IGJ5dGUgZG1hIGJ1ZmZlciIsIG9iai0+c2l6ZSk7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gZXJyX2dlbV9mcmVlOworCX0KKworCWlmIChhbGxvY19rbWFwKQorCQlt dGtfZ2VtLT5rdmFkZHIgPSBtdGtfZ2VtLT5jb29raWU7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJj b29raWUgPSAlcCBkbWFfYWRkciA9ICVwYWQgc2l6ZSA9ICV6dVxuIiwKKwkJCSBtdGtfZ2VtLT5j b29raWUsICZtdGtfZ2VtLT5kbWFfYWRkciwKKwkJCSBzaXplKTsKKworCXJldHVybiBtdGtfZ2Vt OworCitlcnJfZ2VtX2ZyZWU6CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworCWtmcmVl KG10a19nZW0pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3ZvaWQgbXRrX2RybV9nZW1f ZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10a19k cm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisJc3RydWN0IG10a19k cm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChtdGtfZ2Vt LT5zZykKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dlbS0+c2cpOworCWVsc2UK KwkJZG1hX2ZyZWVfYXR0cnMocHJpdi0+ZG1hX2Rldiwgb2JqLT5zaXplLCBtdGtfZ2VtLT5jb29r aWUsCisJCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOwor CisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8KKwlkcm1fZ2VtX29i amVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKworaW50IG10a19kcm1f Z2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sK KwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisKKwlhcmdzLT5w aXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+ c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRrX2dlbSA9IG10a19kcm1f Z2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKG10a19nZW0p KQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICogYWxsb2NhdGUgYSBpZCBv ZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBo YXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxl X2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJv bSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dlbV9vYmplY3RfdW5y ZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9o YW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsK KwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQz Ml90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2 LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0 ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91 dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9iai0+dm1hX25vZGUp OworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNldCk7CisKK291dDoK Kwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCisKK3sKKwlp bnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0b19tdGtfZ2VtX29i aihvYmopOworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBvYmotPmRldi0+ZGV2X3By aXZhdGU7CisKKwkvKgorCSAqIGRtYV9hbGxvY19hdHRycygpIGFsbG9jYXRlZCBhIHN0cnVjdCBw YWdlIHRhYmxlIGZvciBtdGtfZ2VtLCBzbyBjbGVhcgorCSAqIFZNX1BGTk1BUCBmbGFnIHRoYXQg d2FzIHNldCBieSBkcm1fZ2VtX21tYXBfb2JqKCkvZHJtX2dlbV9tbWFwKCkuCisJICovCisJdm1h LT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+dm1fcGdvZmYgPSAwOworCisJcmV0ID0g ZG1hX21tYXBfYXR0cnMocHJpdi0+ZG1hX2Rldiwgdm1hLCBtdGtfZ2VtLT5jb29raWUsCisJCQkg ICAgIG10a19nZW0tPmRtYV9hZGRyLCBvYmotPnNpemUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOwor CWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKworCXJldHVybiByZXQ7Cit9CisK K2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1f bW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChvYmosIHZtYSk7Cit9CisKK2ludCBt dGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJcmV0 ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG10a19kcm1fZ2VtX29iamVj dF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgc2dfdGFibGUgZm9yIHRo aXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhlIHRhYmxlJ3MgY29udGVudHMsIGFuZCB0 aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQgYnkKKyAqICAgICAgIHRoZSBjYWxsZXIu CisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBv ciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmlt ZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10 a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisJc3RydWN0IG10 a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc2df dGFibGUgKnNndDsKKwlpbnQgcmV0OworCisJc2d0ID0ga3phbGxvYyhzaXplb2YoKnNndCksIEdG UF9LRVJORUwpOworCWlmICghc2d0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJl dCA9IGRtYV9nZXRfc2d0YWJsZV9hdHRycyhwcml2LT5kbWFfZGV2LCBzZ3QsIG10a19nZW0tPmNv b2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwKKwkJCQkgICAgJm10 a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBh bGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOworCQlyZXR1cm4gRVJSX1BU UihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAq bXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZykK K3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisJc3RydWN0 IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOworCWRtYV9hZGRyX3QgZXhwZWN0ZWQ7 CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXpl KTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIobXRr X2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwlmb3JfZWFj aF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJaWYgKHNnX2RtYV9hZGRyZXNzKHMp ICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3RhYmxlIGlzIG5vdCBjb250aWd1b3Vz Iik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfZ2VtX2ZyZWU7CisJCX0KKwkJZXhw ZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9sZW4ocyk7CisJfQorCisJbXRrX2dl bS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwltdGtfZ2VtLT5zZyA9IHNn OworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJfZ2VtX2ZyZWU6CisJa2ZyZWUobXRr X2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyYTU2Mgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5o CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5j LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor CisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBfTVRLX0RSTV9HRU1fSF8KKworI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsgZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUu CisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0gYSBuZXcgaGFuZGxlIHRvIHRoaXMg Z2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUo KS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2FsbG9jX2F0dHJzKCksIGtl ZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFkZHI6IGtlcm5lbCB2aXJ0dWFsIGFk ZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjogZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1 ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdlbSBidWZmZXIuCisgKgor ICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2ZlcnJlZCB0byB1c2VyIGFzIGttc19i by5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVyIHRocm91Z2gga21zX2Jv LmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29iaiB7CisJc3RydWN0IGRybV9nZW1f b2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9pZAkJCSprdmFkZHI7CisJZG1hX2Fk ZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlkbWFfYXR0cnM7CisJc3RydWN0IHNn X3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19nZW1fb2JqKHgpCWNvbnRhaW5lcl9v Zih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQorCit2b2lkIG10a19kcm1fZ2VtX2Zy ZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKTsKK3N0cnVjdCBtdGtfZHJtX2dl bV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qg c2l6ZSwKKwkJCQkJICAgYm9vbCBhbGxvY19rbWFwKTsKK2ludCBtdGtfZHJtX2dlbV9kdW1iX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOworaW50IG10a19kcm1f Z2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUsCisJCQkJdWludDY0X3QgKm9mZnNl dCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2VtX21tYXBfYnVmKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3N0cnVjdCBz Z190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190 YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5jODk4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fcGxhbmUuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5jb20+ CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9o ZWxwZXIuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1f ZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1f ZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxhbmUu aCIKKworc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4 OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfUkdCNTY1LAorfTsKKworc3Rh dGljIHZvaWQgbXRrX3BsYW5lX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5l LCBib29sIGVuYWJsZSwKKwkJCSAgICAgZG1hX2FkZHJfdCBhZGRyLCBzdHJ1Y3QgZHJtX3JlY3Qg KmRlc3QpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX3BsYW5lLT5iYXNlOwor CXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5l LT5zdGF0ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoLCBmb3JtYXQ7CisJaW50IHgsIHk7CisKKwlp ZiAoV0FSTl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFibGUgJiYgIXBsYW5lLT5zdGF0ZS0+ZmIp KSkKKwkJcmV0dXJuOworCisJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpIHsKKwkJcGl0Y2ggPSBwbGFu ZS0+c3RhdGUtPmZiLT5waXRjaGVzWzBdOworCQlmb3JtYXQgPSBwbGFuZS0+c3RhdGUtPmZiLT5w aXhlbF9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGl0Y2ggPSAwOworCQlmb3JtYXQgPSBEUk1fRk9S TUFUX1JHQkE4ODg4OworCX0KKworCXggPSBwbGFuZS0+c3RhdGUtPmNydGNfeDsKKwl5ID0gcGxh bmUtPnN0YXRlLT5jcnRjX3k7CisKKwlpZiAoeCA8IDApIHsKKwkJYWRkciAtPSB4ICogNDsKKwkJ eCA9IDA7CisJfQorCisJaWYgKHkgPCAwKSB7CisJCWFkZHIgLT0geSAqIHBpdGNoOworCQl5ID0g MDsKKwl9CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBlbmFibGU7CisJc3RhdGUtPnBlbmRp bmcucGl0Y2ggPSBwaXRjaDsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQgPSBmb3JtYXQ7CisJc3Rh dGUtPnBlbmRpbmcuYWRkciA9IGFkZHI7CisJc3RhdGUtPnBlbmRpbmcueCA9IHg7CisJc3RhdGUt PnBlbmRpbmcueSA9IHk7CisJc3RhdGUtPnBlbmRpbmcud2lkdGggPSBkZXN0LT54MiAtIGRlc3Qt PngxOworCXN0YXRlLT5wZW5kaW5nLmhlaWdodCA9IGRlc3QtPnkyIC0gZGVzdC0+eTE7CisJd21i KCk7IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBhcmUgc2V0IGJlZm9yZSB1cGRh dGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10 a19wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgbXRrX3Bs YW5lX3N0YXRlICpzdGF0ZTsKKworCWlmIChwbGFuZS0+c3RhdGUpIHsKKwkJaWYgKHBsYW5lLT5z dGF0ZS0+ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2UocGxhbmUtPnN0YXRlLT5m Yik7CisKKwkJc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJbWVt c2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBlbHNlIHsKKwkJc3RhdGUgPSBremFs bG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzdGF0ZSkKKwkJCXJldHVy bjsKKwkJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNlOworCX0KKworCXN0YXRlLT5iYXNlLnBs YW5lID0gcGxhbmU7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gRFJNX0ZPUk1BVF9SR0I1NjU7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICptdGtfcGxhbmVfZHVwbGljYXRl X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3Rh dGUgKm9sZF9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXN0cnVj dCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3Rh dGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsKKworCV9fZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAmc3RhdGUtPmJhc2Up OworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5wbGFuZSAhPSBwbGFuZSk7CisKKwlzdGF0ZS0+cGVu ZGluZyA9IG9sZF9zdGF0ZS0+cGVuZGluZzsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7Cit9CisK K3N0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1f YXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHBsYW5lLCBzdGF0ZSk7CisJa2ZyZWUo dG9fbXRrX3BsYW5lX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X3BsYW5lX2Z1bmNzIG10a19wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0 b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19o ZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAorCS5y ZXNldCA9IG10a19wbGFuZV9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IG10a19w bGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gbXRrX2RybV9w bGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBtdGtfcGxhbmVfYXRvbWljX2No ZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wgdmlzaWJsZTsKKwlzdHJ1 Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmNydGNfeCwKKwkJLnkxID0gc3Rh dGUtPmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmNydGNfeCArIHN0YXRlLT5jcnRjX3csCisJCS55 MiA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oLAorCX07CisJc3RydWN0IGRybV9yZWN0 IHNyYyA9IHsKKwkJLyogMTYuMTYgZml4ZWQgcG9pbnQgKi8KKwkJLngxID0gc3RhdGUtPnNyY194 LAorCQkueTEgPSBzdGF0ZS0+c3JjX3ksCisJCS54MiA9IHN0YXRlLT5zcmNfeCArIHN0YXRlLT5z cmNfdywKKwkJLnkyID0gc3RhdGUtPnNyY195ICsgc3RhdGUtPnNyY19oLAorCX07CisJc3RydWN0 IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWZiKQorCQlyZXR1cm4gMDsKKworCWlm ICghbXRrX2ZiX2dldF9nZW1fb2JqKGZiKSkgeworCQlEUk1fREVCVUdfS01TKCJidWZmZXIgaXMg bnVsbFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghc3RhdGUtPmNydGMpCisJ CXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3Rh dGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkKKwkJcmV0 dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwljbGlwLngyID0gY3J0Y19zdGF0ZS0+bW9kZS5o ZGlzcGxheTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+bW9kZS52ZGlzcGxheTsKKworCXJldHVy biBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgc3RhdGUtPmNydGMsIGZiLAor CQkJCQkgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAgICBEUk1fUExBTkVfSEVMUEVS X05PX1NDQUxJTkcsCisJCQkJCSAgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJ CQkgICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BsYW5l X2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgIHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpz dGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07 CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1Y3QgbXRrX2RybV9wbGFu ZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVz dCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194LAorCQkueTEgPSBzdGF0ZS0+YmFzZS5j cnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNfeCArIHN0YXRlLT5iYXNlLmNydGNfdywK KwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3RhdGUtPmJhc2UuY3J0Y19oLAorCX07CisJ c3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWNydGMpCisJCXJldHVybjsK KworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9kZS5oZGlzcGxheTsKKwlj bGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUudmRpc3BsYXk7CisJZHJtX3Jl Y3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwlnZW0gPSBtdGtfZmJfZ2V0X2dlbV9vYmoo c3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19tdGtfZ2VtX29iaihnZW0pOworCW10a19w bGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtfZ2VtLT5kbWFfYWRkciwgJmRlc3QpOwor fQorCitzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7 CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxh bmUtPnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZhbHNlOworCXdtYigpOyAv KiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBpcyBzZXQgYmVmb3JlIHVwZGF0ZSAqLwor CXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21p Y19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ssCisJLmF0b21pY191cGRhdGUgPSBtdGtf cGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBtdGtfcGxhbmVfYXRvbWlj X2Rpc2FibGUsCit9OworCitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBw b3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBp bnQgenBvcykKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0 KGRldiwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVfY3J0Y3MsCisJCQkJICAgICAgICZtdGtf cGxhbmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoZm9ybWF0cyksIHR5 cGUsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZHJtX3BsYW5lX2hlbHBlcl9hZGQo Jm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxwZXJfZnVuY3MpOworCW10a19wbGFuZS0+ aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhN2IzZQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5l LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ bmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX01US19E Uk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExBTkVfSF8KKworI2luY2x1ZGUgPGRybS9k cm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBtdGtfZHJtX3Bs YW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVuc2lnbmVkIGludAkJCWlkeDsKK307 CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7CisJYm9vbAkJCQljb25maWc7CisJ Ym9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJdW5zaWduZWQgaW50CQkJcGl0 Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVuc2lnbmVkIGludAkJCXg7CisJdW5zaWdu ZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQloZWln aHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfc3RhdGUgeworCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0 YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHJtX3BsYW5lICp0 b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUsIGJhc2UpOworfQorCitzdGF0aWMgaW5s aW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9fbXRrX3BsYW5lX3N0YXRlKHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc3RhdGUsIHN0 cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQorCitpbnQgbXRrX3BsYW5lX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJ ICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBl LAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRpZgotLSAKMi44LjAucmMzCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK