From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v14 2/8] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Mon, 11 Apr 2016 17:09:30 +0200 Message-ID: <1460387376-11799-3-git-send-email-p.zabel@pengutronix.de> References: <1460387376-11799-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: <1460387376-11799-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 b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjEzOgogLSBVc2UgYXRvbWljIHN1c3BlbmQgaGVs cGVycwotLS0KIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAg IDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSAr CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAgIHwgIDEyICsKIGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSAgICAgICAgICAgfCAgMTEgKwogZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jICAgICB8IDMwMiArKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMgICAgfCAyNDAgKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwg NTgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2NydGMuaCAgICAgfCAgMzIgKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2RkcC5jICAgICAgfCAzNTUgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oICAgICAgfCAgNDEgKysKIGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMgfCAyMjUgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmggfCAxNTAgKysrKysrKwogZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgICAgICB8IDU2NCArKysrKysrKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAg fCAgNTYgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwg MTY1ICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAg IHwgIDIzICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwg MjY5ICsrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5o ICAgICAgfCAgNTkgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5j ICAgIHwgMjQwICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f cGxhbmUuaCAgICB8ICA1OSArKysKIDIwIGZpbGVzIGNoYW5nZWQsIDMzODggaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ny dGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2NydGMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2RkcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZGRwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kZHBfY29tcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaAoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXgg ZjJhNzRkMC4uNTQ4MjAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysr IGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI4MSwzICsyODEsNSBAQCBzb3VyY2UgImRy aXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3ZjNC9L Y29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L0tjb25maWciCisKK3Nv dXJjZSAiZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNmVi OTRmYy4uMDJiMWYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNzMsNiArNzMsNyBAQCBvYmotJChDT05GSUdf RFJNX01TTSkgKz0gbXNtLwogb2JqLSQoQ09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmot JChDT05GSUdfRFJNX1NUSSkgKz0gc3RpLwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8K K29iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLwogb2JqLXkJCQkrPSBpMmMv CiBvYmoteQkJCSs9IHBhbmVsLwogb2JqLXkJCQkrPSBicmlkZ2UvCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9L Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYWQ4OTIKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMCwwICsx LDEyIEBACitjb25maWcgRFJNX01FRElBVEVLCisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBN ZWRpYXRlayBTb0NzIgorCWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVL IHx8IChBUk0gJiYgQ09NUElMRV9URVNUKQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVj dCBJT01NVV9ETUEKKwlzZWxlY3QgTVRLX1NNSQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlv biBpZiB5b3UgaGF2ZSBhIE1lZGlhdGVrIFNvQ3MuCisJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2Fs bGVkIG1lZGlhdGVrLWRybQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0 dGluZyBhbmQKKwkgIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJkZTdj Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCkBA IC0wLDAgKzEsMTEgQEAKK21lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKKwkJICBt dGtfZGlzcF9yZG1hLm8gXAorCQkgIG10a19kcm1fY3J0Yy5vIFwKKwkJICBtdGtfZHJtX2RkcC5v IFwKKwkJICBtdGtfZHJtX2RkcF9jb21wLm8gXAorCQkgIG10a19kcm1fZHJ2Lm8gXAorCQkgIG10 a19kcm1fZmIubyBcCisJCSAgbXRrX2RybV9nZW0ubyBcCisJCSAgbXRrX2RybV9wbGFuZS5vCisK K29iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uOGY2MjY3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2Rpc3Bfb3ZsLmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUg Im10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19PVkxfSU5URU4JCQkweDAw MDQKKyNkZWZpbmUgT1ZMX0ZNRV9DUExfSU5UCQkJCQlCSVQoMSkKKyNkZWZpbmUgRElTUF9SRUdf T1ZMX0lOVFNUQQkJCTB4MDAwOAorI2RlZmluZSBESVNQX1JFR19PVkxfRU4JCQkJMHgwMDBjCisj ZGVmaW5lIERJU1BfUkVHX09WTF9SU1QJCQkweDAwMTQKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JP SV9TSVpFCQkJMHgwMDIwCisjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lfQkdDTFIJCQkweDAwMjgK KyNkZWZpbmUgRElTUF9SRUdfT1ZMX1NSQ19DT04JCQkweDAwMmMKKyNkZWZpbmUgRElTUF9SRUdf T1ZMX0NPTihuKQkJCSgweDAwMzAgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxf U1JDX1NJWkUobikJCSgweDAwMzggKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxf T0ZGU0VUKG4pCQkJKDB4MDAzYyArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9Q SVRDSChuKQkJCSgweDAwNDQgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUkRN QV9DVFJMKG4pCQkoMHgwMGMwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JE TUFfR01DKG4pCQkoMHgwMGM4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0FE RFIobikJCQkoMHgwZjQwICsgMHgyMCAqIChuKSkKKworI2RlZmluZQlPVkxfUkRNQV9NRU1fR01D CTB4NDA0MDIwMjAKKworI2RlZmluZSBPVkxfQ09OX0JZVEVfU1dBUAlCSVQoMjQpCisjZGVmaW5l IE9WTF9DT05fQ0xSRk1UX1JHQjU2NQkoMCA8PCAxMikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRf UkdCODg4CSgxIDw8IDEyKQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0JBODg4OAkoMiA8PCAx MikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODgJKDMgPDwgMTIpCisjZGVmaW5lCU9W TF9DT05fQUVOCQlCSVQoOCkKKyNkZWZpbmUJT1ZMX0NPTl9BTFBIQQkJMHhmZgorCisvKioKKyAq IHN0cnVjdCBtdGtfZGlzcF9vdmwgLSBESVNQX09WTCBkcml2ZXIgc3RydWN0dXJlCisgKiBAZGRw X2NvbXAgLSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0eXBlIGVudW0gYW5kIGhhcmR3YXJlIHJlc291 cmNlcworICogQGNydGMgLSBhc3NvY2lhdGVkIGNydGMgdG8gcmVwb3J0IHZibGFuayBldmVudHMg dG8KKyAqLworc3RydWN0IG10a19kaXNwX292bCB7CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRw X2NvbXA7CisJc3RydWN0IGRybV9jcnRjCQkJKmNydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJu X3QgbXRrX2Rpc3Bfb3ZsX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlz dHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2lkOworCXN0cnVjdCBtdGtfZGRwX2NvbXAg Km92bCA9ICZwcml2LT5kZHBfY29tcDsKKworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50 ZXJydXB0ICovCisJd3JpdGVsKDB4MCwgb3ZsLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVFNUQSk7 CisKKwlpZiAoIXByaXYtPmNydGMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2Rk cF9pcnEocHJpdi0+Y3J0Yywgb3ZsKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3Rh dGljIHZvaWQgbXRrX292bF9lbmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs CisJCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kaXNwX292bCAq cHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsLAorCQkJCQkJIGRk cF9jb21wKTsKKworCXByaXYtPmNydGMgPSBjcnRjOworCXdyaXRlbF9yZWxheGVkKE9WTF9GTUVf Q1BMX0lOVCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9JTlRFTik7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19vdmxfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sK KwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBt dGtfZGlzcF9vdmwsCisJCQkJCQkgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IE5VTEw7CisJ d3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30K Kworc3RhdGljIHZvaWQgbXRrX292bF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQor eworCXdyaXRlbF9yZWxheGVkKDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19vdmxfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQor eworCXdyaXRlbF9yZWxheGVkKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19vdmxfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs IHVuc2lnbmVkIGludCB3LAorCQkJICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVm cmVzaCkKK3sKKwlpZiAodyAhPSAwICYmIGggIT0gMCkKKwkJd3JpdGVsX3JlbGF4ZWQoaCA8PCAx NiB8IHcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUk9JX1NJWkUpOworCXdyaXRlbF9yZWxh eGVkKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9ST0lfQkdDTFIpOworCisJd3JpdGVs KDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SU1QpOworCXdyaXRlbCgweDAsIGNvbXAt PnJlZ3MgKyBESVNQX1JFR19PVkxfUlNUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXll cl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVu c2lnbmVkIGludCByZWc7CisKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZM X1JETUFfQ1RSTChpZHgpKTsKKwl3cml0ZWwoT1ZMX1JETUFfTUVNX0dNQywgY29tcC0+cmVncyAr IERJU1BfUkVHX09WTF9SRE1BX0dNQyhpZHgpKTsKKworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3Mg KyBESVNQX1JFR19PVkxfU1JDX0NPTik7CisJcmVnID0gcmVnIHwgQklUKGlkeCk7CisJd3JpdGVs KHJlZywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKK30KKworc3RhdGljIHZv aWQgbXRrX292bF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQg aW50IGlkeCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwoY29tcC0+cmVn cyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKKwlyZWcgPSByZWcgJiB+QklUKGlkeCk7CisJd3Jp dGVsKHJlZywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKKworCXdyaXRlbCgw eDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlkeCkpOworfQorCitzdGF0 aWMgdW5zaWduZWQgaW50IG92bF9mbXRfY29udmVydCh1bnNpZ25lZCBpbnQgZm10KQoreworCXN3 aXRjaCAoZm10KSB7CisJZGVmYXVsdDoKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlyZXR1 cm4gT1ZMX0NPTl9DTFJGTVRfUkdCNTY1OworCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6CisJCXJl dHVybiBPVkxfQ09OX0NMUkZNVF9SR0I1NjUgfCBPVkxfQ09OX0JZVEVfU1dBUDsKKwljYXNlIERS TV9GT1JNQVRfUkdCODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCODg4OworCWNhc2Ug RFJNX0ZPUk1BVF9CR1I4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I4ODggfCBPVkxf Q09OX0JZVEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6CisJY2FzZSBEUk1fRk9S TUFUX1JHQkE4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODg7CisJY2FzZSBE Uk1fRk9STUFUX0JHUlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwkJcmV0dXJu IE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJY2FzZSBEUk1f Rk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJcmV0dXJuIE9W TF9DT05fQ0xSRk1UX1JHQkE4ODg4OworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNl IERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0JBODg4OCB8 IE9WTF9DT05fQllURV9TV0FQOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9j b25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkg c3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9wZW5k aW5nX3N0YXRlICpwZW5kaW5nID0gJnN0YXRlLT5wZW5kaW5nOworCXVuc2lnbmVkIGludCBhZGRy ID0gcGVuZGluZy0+YWRkcjsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBwZW5kaW5nLT5waXRjaCAm IDB4ZmZmZjsKKwl1bnNpZ25lZCBpbnQgZm10ID0gcGVuZGluZy0+Zm9ybWF0OworCXVuc2lnbmVk IGludCBvZmZzZXQgPSAocGVuZGluZy0+eSA8PCAxNikgfCBwZW5kaW5nLT54OworCXVuc2lnbmVk IGludCBzcmNfc2l6ZSA9IChwZW5kaW5nLT5oZWlnaHQgPDwgMTYpIHwgcGVuZGluZy0+d2lkdGg7 CisJdW5zaWduZWQgaW50IGNvbjsKKworCWlmICghcGVuZGluZy0+ZW5hYmxlKQorCQltdGtfb3Zs X2xheWVyX29mZihjb21wLCBpZHgpOworCisJY29uID0gb3ZsX2ZtdF9jb252ZXJ0KGZtdCk7CisJ aWYgKGlkeCAhPSAwKQorCQljb24gfD0gT1ZMX0NPTl9BRU4gfCBPVkxfQ09OX0FMUEhBOworCisJ d3JpdGVsX3JlbGF4ZWQoY29uLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0NPTihpZHgpKTsK Kwl3cml0ZWxfcmVsYXhlZChwaXRjaCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9QSVRDSChp ZHgpKTsKKwl3cml0ZWxfcmVsYXhlZChzcmNfc2l6ZSwgY29tcC0+cmVncyArIERJU1BfUkVHX09W TF9TUkNfU0laRShpZHgpKTsKKwl3cml0ZWxfcmVsYXhlZChvZmZzZXQsIGNvbXAtPnJlZ3MgKyBE SVNQX1JFR19PVkxfT0ZGU0VUKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKGFkZHIsIGNvbXAtPnJl Z3MgKyBESVNQX1JFR19PVkxfQUREUihpZHgpKTsKKworCWlmIChwZW5kaW5nLT5lbmFibGUpCisJ CW10a19vdmxfbGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBt dGtfZGRwX2NvbXBfZnVuY3MgbXRrX2Rpc3Bfb3ZsX2Z1bmNzID0geworCS5jb25maWcgPSBtdGtf b3ZsX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfb3ZsX3N0YXJ0LAorCS5zdG9wID0gbXRrX292bF9z dG9wLAorCS5lbmFibGVfdmJsYW5rID0gbXRrX292bF9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxl X3ZibGFuayA9IG10a19vdmxfZGlzYWJsZV92YmxhbmssCisJLmxheWVyX29uID0gbXRrX292bF9s YXllcl9vbiwKKwkubGF5ZXJfb2ZmID0gbXRrX292bF9sYXllcl9vZmYsCisJLmxheWVyX2NvbmZp ZyA9IG10a19vdmxfbGF5ZXJfY29uZmlnLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9vdmxf YmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICAg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZk YXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCByZXQ7 CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21w KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBj b21wb25lbnQgJXM6ICVkXG4iLAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJ CXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kaXNw X292bF91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJ CQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCisJbXRr X2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIG10a19kaXNwX292bF9jb21wb25lbnRfb3Bz ID0geworCS5iaW5kCT0gbXRrX2Rpc3Bfb3ZsX2JpbmQsCisJLnVuYmluZCA9IG10a19kaXNwX292 bF91bmJpbmQsCit9OworCitzdGF0aWMgaW50IG10a19kaXNwX292bF9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7 CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdjsKKwlpbnQgY29tcF9pZDsKKwlpbnQgaXJxOwor CWludCByZXQ7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlycSA9IHBsYXRm b3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwly ZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIs CisJCQkgICAgICAgSVJRRl9UUklHR0VSX05PTkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAl ZFxuIiwgaXJxLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNvbXBfaWQgPSBtdGtfZGRw X2NvbXBfZ2V0X2lkKGRldi0+b2Zfbm9kZSwgTVRLX0RJU1BfT1ZMKTsKKwlpZiAoY29tcF9pZCA8 IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4i LCBjb21wX2lkKTsKKwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21w X2luaXQoZGV2LCBkZXYtPm9mX25vZGUsICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkm bXRrX2Rpc3Bfb3ZsX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk IHRvIGluaXRpYWxpemUgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVu dF9hZGQoZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpCisJCWRl dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rp c3Bfb3ZsX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7 IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW92bCIsIH0sCisJe30sCit9Owor TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCk7CisK K3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlciA9IHsKKwkucHJvYmUJ CT0gbXRrX2Rpc3Bfb3ZsX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2Rpc3Bfb3ZsX3JlbW92ZSwK KwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZGlzcC1vdmwiLAorCQkub3duZXIJ PSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9k dF9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZGlzcF9yZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYjgwY2IKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCkBAIC0wLDAg KzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1 ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv Y29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNs dWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNk ZWZpbmUgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFCQkweDAwMDAKKyNkZWZpbmUgRElTUF9SRUdf UkRNQV9JTlRfU1RBVFVTCQkweDAwMDQKKyNkZWZpbmUgUkRNQV9UQVJHRVRfTElORV9JTlQJCQkJ QklUKDUpCisjZGVmaW5lIFJETUFfRklGT19VTkRFUkZMT1dfSU5UCQkJCUJJVCg0KQorI2RlZmlu ZSBSRE1BX0VPRl9BQk5PUk1BTF9JTlQJCQkJQklUKDMpCisjZGVmaW5lIFJETUFfRlJBTUVfRU5E X0lOVAkJCQlCSVQoMikKKyNkZWZpbmUgUkRNQV9GUkFNRV9TVEFSVF9JTlQJCQkJQklUKDEpCisj ZGVmaW5lIFJETUFfUkVHX1VQREFURV9JTlQJCQkJQklUKDApCisjZGVmaW5lIERJU1BfUkVHX1JE TUFfR0xPQkFMX0NPTgkJMHgwMDEwCisjZGVmaW5lIFJETUFfRU5HSU5FX0VOCQkJCQlCSVQoMCkK KyNkZWZpbmUgRElTUF9SRUdfUkRNQV9TSVpFX0NPTl8wCQkweDAwMTQKKyNkZWZpbmUgRElTUF9S RUdfUkRNQV9TSVpFX0NPTl8xCQkweDAwMTgKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9UQVJHRVRf TElORQkJMHgwMDFjCisjZGVmaW5lIERJU1BfUkVHX1JETUFfRklGT19DT04JCQkweDAwNDAKKyNk ZWZpbmUgUkRNQV9GSUZPX1VOREVSRkxPV19FTgkJCQlCSVQoMzEpCisjZGVmaW5lIFJETUFfRklG T19QU0VVRE9fU0laRShieXRlcykJCQkoKChieXRlcykgLyAxNikgPDwgMTYpCisjZGVmaW5lIFJE TUFfT1VUUFVUX1ZBTElEX0ZJRk9fVEhSRVNIT0xEKGJ5dGVzKQkJKChieXRlcykgLyAxNikKKwor LyoqCisgKiBzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAtIERJU1BfUkRNQSBkcml2ZXIgc3RydWN0dXJl CisgKiBAZGRwX2NvbXAgLSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0eXBlIGVudW0gYW5kIGhhcmR3 YXJlIHJlc291cmNlcworICogQGNydGMgLSBhc3NvY2lhdGVkIGNydGMgdG8gcmVwb3J0IGlycSBl dmVudHMgdG8KKyAqLworc3RydWN0IG10a19kaXNwX3JkbWEgeworCXN0cnVjdCBtdGtfZGRwX2Nv bXAJCWRkcF9jb21wOworCXN0cnVjdCBkcm1fY3J0YwkJCSpjcnRjOworfTsKKworc3RhdGljIGly cXJldHVybl90IG10a19kaXNwX3JkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lk KQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gZGV2X2lkOworCXN0cnVjdCBtdGtf ZGRwX2NvbXAgKnJkbWEgPSAmcHJpdi0+ZGRwX2NvbXA7CisKKwkvKiBDbGVhciBmcmFtZSBjb21w bGV0aW9uIGludGVycnVwdCAqLworCXdyaXRlbCgweDAsIHJkbWEtPnJlZ3MgKyBESVNQX1JFR19S RE1BX0lOVF9TVEFUVVMpOworCisJaWYgKCFwcml2LT5jcnRjKQorCQlyZXR1cm4gSVJRX05PTkU7 CisKKwltdGtfY3J0Y19kZHBfaXJxKHByaXYtPmNydGMsIHJkbWEpOworCisJcmV0dXJuIElSUV9I QU5ETEVEOworfQorCitzdGF0aWMgdm9pZCByZG1hX3VwZGF0ZV9iaXRzKHN0cnVjdCBtdGtfZGRw X2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCBtYXNr LCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXVuc2lnbmVkIGludCB0bXAgPSByZWFkbChjb21wLT5y ZWdzICsgcmVnKTsKKworCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJd3Jp dGVsKHRtcCwgY29tcC0+cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2Vu YWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgICBzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBjb250YWluZXJf b2YoY29tcCwgc3RydWN0IG10a19kaXNwX3JkbWEsCisJCQkJCQkgIGRkcF9jb21wKTsKKworCXBy aXYtPmNydGMgPSBjcnRjOworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9J TlRfRU5BQkxFLCBSRE1BX0ZSQU1FX0VORF9JTlQsCisJCQkgUkRNQV9GUkFNRV9FTkRfSU5UKTsK K30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBf Y29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9v Zihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSwKKwkJCQkJCSAgZGRwX2NvbXApOworCisJcHJp di0+Y3J0YyA9IE5VTEw7CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0lO VF9FTkFCTEUsIFJETUFfRlJBTUVfRU5EX0lOVCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19y ZG1hX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJcmRtYV91cGRhdGVfYml0 cyhjb21wLCBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04sIFJETUFfRU5HSU5FX0VOLAorCQkJIFJE TUFfRU5HSU5FX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RvcChzdHJ1Y3QgbXRr X2RkcF9jb21wICpjb21wKQoreworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRN QV9HTE9CQUxfQ09OLCBSRE1BX0VOR0lORV9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19y ZG1hX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgd2lkdGgs CisJCQkgICAgdW5zaWduZWQgaW50IGhlaWdodCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKQorewor CXVuc2lnbmVkIGludCB0aHJlc2hvbGQ7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJkbWFfdXBk YXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9TSVpFX0NPTl8wLCAweGZmZiwgd2lkdGgpOwor CXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9TSVpFX0NPTl8xLCAweGZmZmZm LCBoZWlnaHQpOworCisJLyoKKwkgKiBFbmFibGUgRklGTyB1bmRlcmZsb3cgc2luY2UgRFNJIGFu ZCBEUEkgY2FuJ3QgYmUgYmxvY2tlZC4KKwkgKiBLZWVwIHRoZSBGSUZPIHBzZXVkbyBzaXplIHJl c2V0IGRlZmF1bHQgb2YgOCBLaUIuIFNldCB0aGUKKwkgKiBvdXRwdXQgdGhyZXNob2xkIHRvIDYg bWljcm9zZWNvbmRzIHdpdGggNy82IG92ZXJoZWFkIHRvCisJICogYWNjb3VudCBmb3IgYmxhbmtp bmcsIGFuZCB3aXRoIGEgcGl4ZWwgZGVwdGggb2YgNCBieXRlczoKKwkgKi8KKwl0aHJlc2hvbGQg PSB3aWR0aCAqIGhlaWdodCAqIHZyZWZyZXNoICogNCAqIDcgLyAxMDAwMDAwOworCXJlZyA9IFJE TUFfRklGT19VTkRFUkZMT1dfRU4gfAorCSAgICAgIFJETUFfRklGT19QU0VVRE9fU0laRShTWl84 SykgfAorCSAgICAgIFJETUFfT1VUUFVUX1ZBTElEX0ZJRk9fVEhSRVNIT0xEKHRocmVzaG9sZCk7 CisJd3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJU1BfUkVHX1JETUFfRklGT19DT04pOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtfZGlzcF9yZG1hX2Z1 bmNzID0geworCS5jb25maWcgPSBtdGtfcmRtYV9jb25maWcsCisJLnN0YXJ0ID0gbXRrX3JkbWFf c3RhcnQsCisJLnN0b3AgPSBtdGtfcmRtYV9zdG9wLAorCS5lbmFibGVfdmJsYW5rID0gbXRrX3Jk bWFfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBtdGtfcmRtYV9kaXNhYmxlX3Zi bGFuaywKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3BfcmRtYV9iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwlz dHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVj dCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXRrX2Rk cF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7CisJaWYgKHJldCA8IDAp IHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxu IiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2b2lkIG10a19kaXNwX3JkbWFfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJCSB2b2lkICpkYXRh KQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCisJbXRrX2RkcF9jb21wX3Vu cmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBjb21wb25lbnRfb3BzIG10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyA9IHsKKwkuYmlu ZAk9IG10a19kaXNwX3JkbWFfYmluZCwKKwkudW5iaW5kID0gbXRrX2Rpc3BfcmRtYV91bmJpbmQs Cit9OworCitzdGF0aWMgaW50IG10a19kaXNwX3JkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVj dCBtdGtfZGlzcF9yZG1hICpwcml2OworCWludCBjb21wX2lkOworCWludCBpcnE7CisJaW50IHJl dDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJaXJxID0gcGxhdGZvcm1fZ2V0 X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCWNvbXBfaWQg PSBtdGtfZGRwX2NvbXBfZ2V0X2lkKGRldi0+b2Zfbm9kZSwgTVRLX0RJU1BfUkRNQSk7CisJaWYg KGNvbXBfaWQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlkZW50aWZ5IGJ5IGFs aWFzOiAlZFxuIiwgY29tcF9pZCk7CisJCXJldHVybiBjb21wX2lkOworCX0KKworCXJldCA9IG10 a19kZHBfY29tcF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAmcHJpdi0+ZGRwX2NvbXAsIGNvbXBf aWQsCisJCQkJJm10a19kaXNwX3JkbWFfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCS8qIERpc2FibGUgYW5kIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAq LworCXdyaXRlbCgweDAsIHByaXYtPmRkcF9jb21wLnJlZ3MgKyBESVNQX1JFR19SRE1BX0lOVF9F TkFCTEUpOworCXdyaXRlbCgweDAsIHByaXYtPmRkcF9jb21wLnJlZ3MgKyBESVNQX1JFR19SRE1B X0lOVF9TVEFUVVMpOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgbXRrX2Rp c3BfcmRtYV9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1RSSUdHRVJfTk9ORSwgZGV2X25h bWUoZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlyZXQgPSBjb21wb25lbnRf YWRkKGRldiwgJm10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyk7CisJaWYgKHJldCkKKwkJZGV2 X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kaXNwX3JkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rp c3BfcmRtYV9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBtdGtfZGlzcF9yZG1hX2RyaXZlcl9kdF9tYXRjaFtdID0gewor CXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcmRtYSIsIH0sCisJe30sCit9 OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0Y2gp OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX3JkbWFfZHJpdmVyID0geworCS5w cm9iZQkJPSBtdGtfZGlzcF9yZG1hX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2Rpc3BfcmRtYV9y ZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRpc3AtcmRtYSIsCisJ CS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZGlzcF9yZG1h X2RyaXZlcl9kdF9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2NydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNlZmEwCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCkBA IC0wLDAgKzEsNTgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwor I2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8c29jL21lZGlh dGVrL3NtaS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJt X2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRw X2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxh bmUuaCIKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2RybV9jcnRjIC0gTWVkaWFUZWsgc3BlY2lmaWMg Y3J0YyBzdHJ1Y3R1cmUuCisgKiBAYmFzZTogY3J0YyBvYmplY3QuCisgKiBAZW5hYmxlZDogcmVj b3JkcyB3aGV0aGVyIGNydGNfZW5hYmxlIHN1Y2NlZWRlZAorICogQHBsYW5lczogYXJyYXkgb2Yg NCBtdGtfZHJtX3BsYW5lIHN0cnVjdHVyZXMsIG9uZSBmb3IgZWFjaCBvdmVybGF5IHBsYW5lCisg KiBAcGVuZGluZ19wbGFuZXM6IHdoZXRoZXIgYW55IHBsYW5lIGhhcyBwZW5kaW5nIGNoYW5nZXMg dG8gYmUgYXBwbGllZAorICogQGNvbmZpZ19yZWdzOiBtZW1vcnkgbWFwcGVkIG1tc3lzIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIgc3BhY2UKKyAqIEBtdXRleDogaGFuZGxlIHRvIG9uZSBvZiB0aGUg dGVuIGRpc3BfbXV0ZXggc3RyZWFtcworICogQGRkcF9jb21wX25yOiBudW1iZXIgb2YgY29tcG9u ZW50cyBpbiBkZHBfY29tcAorICogQGRkcF9jb21wOiBhcnJheSBvZiBwb2ludGVycyB0aGUgbXRr X2RkcF9jb21wIHN0cnVjdHVyZXMgdXNlZCBieSB0aGlzIGNydGMKKyAqLworc3RydWN0IG10a19k cm1fY3J0YyB7CisJc3RydWN0IGRybV9jcnRjCQkJYmFzZTsKKwlib29sCQkJCWVuYWJsZWQ7CisK Kwlib29sCQkJCXBlbmRpbmdfbmVlZHNfdmJsYW5rOworCXN0cnVjdCBkcm1fcGVuZGluZ192Ymxh bmtfZXZlbnQJKmV2ZW50OworCisJc3RydWN0IG10a19kcm1fcGxhbmUJCXBsYW5lc1tPVkxfTEFZ RVJfTlJdOworCWJvb2wJCQkJcGVuZGluZ19wbGFuZXM7CisKKwl2b2lkIF9faW9tZW0JCQkqY29u ZmlnX3JlZ3M7CisJc3RydWN0IG10a19kaXNwX211dGV4CQkqbXV0ZXg7CisJdW5zaWduZWQgaW50 CQkJZGRwX2NvbXBfbnI7CisJc3RydWN0IG10a19kZHBfY29tcAkJKipkZHBfY29tcDsKK307CisK K3N0cnVjdCBtdGtfY3J0Y19zdGF0ZSB7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlCQliYXNlOwor CisJYm9vbAkJCQlwZW5kaW5nX2NvbmZpZzsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX3dpZHRo OworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfaGVpZ2h0OworCXVuc2lnbmVkIGludAkJCXBlbmRp bmdfdnJlZnJlc2g7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHJtX2NydGMgKnRv X210a19jcnRjKHN0cnVjdCBkcm1fY3J0YyAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMs IHN0cnVjdCBtdGtfZHJtX2NydGMsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBt dGtfY3J0Y19zdGF0ZSAqdG9fbXRrX2NydGNfc3RhdGUoc3RydWN0IGRybV9jcnRjX3N0YXRlICpz KQoreworCXJldHVybiBjb250YWluZXJfb2Yocywgc3RydWN0IG10a19jcnRjX3N0YXRlLCBiYXNl KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0 IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10 a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJZHJtX3NlbmRfdmJsYW5rX2V2ZW50 KGNydGMtPmRldiwgbXRrX2NydGMtPmV2ZW50LT5waXBlLCBtdGtfY3J0Yy0+ZXZlbnQpOworCWRy bV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJbXRrX2NydGMtPmV2ZW50ID0gTlVMTDsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKK30KKwor c3RhdGljIHZvaWQgbXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKHN0cnVjdCBtdGtfZHJtX2NydGMg Km10a19jcnRjKQoreworCWRybV9jcnRjX2hhbmRsZV92YmxhbmsoJm10a19jcnRjLT5iYXNlKTsK KwlpZiAobXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5rKSB7CisJCW10a19kcm1fY3J0Y19m aW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKKwkJbXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJs YW5rID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMg PSB0b19tdGtfY3J0YyhjcnRjKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0 Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX3VucHJlcGFyZShtdGtfY3J0Yy0+ZGRwX2NvbXBb aV0tPmNsayk7CisKKwltdGtfZGlzcF9tdXRleF9wdXQobXRrX2NydGMtPm11dGV4KTsKKworCWRy bV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19yZXNl dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0 ZTsKKworCWlmIChjcnRjLT5zdGF0ZSkgeworCQlpZiAoY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYikK KwkJCWRybV9wcm9wZXJ0eV91bnJlZmVyZW5jZV9ibG9iKGNydGMtPnN0YXRlLT5tb2RlX2Jsb2Ip OworCisJCXN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCQltZW1zZXQo c3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9IGVsc2UgeworCQlzdGF0ZSA9IGt6YWxsb2Mo c2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YXRlKQorCQkJcmV0dXJuOwor CQljcnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKwl9CisKKwlzdGF0ZS0+YmFzZS5jcnRjID0g Y3J0YzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbXRrX2RybV9jcnRjX2R1 cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19jcnRj X3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlfX2RybV9hdG9taWNfaGVs cGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMsICZzdGF0ZS0+YmFzZSk7CisKKwlXQVJOX09O KHN0YXRlLT5iYXNlLmNydGMgIT0gY3J0Yyk7CisJc3RhdGUtPmJhc2UuY3J0YyA9IGNydGM7CisK KwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGVz dHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgIHN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lf c3RhdGUoY3J0Yywgc3RhdGUpOworCWtmcmVlKHRvX210a19jcnRjX3N0YXRlKHN0YXRlKSk7Cit9 CisKK3N0YXRpYyBib29sIG10a19kcm1fY3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJ ICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCS8qIE5vdGhp bmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMgbWFuZGF0b3J5LiAqLworCXJldHVy biB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRv X210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nX3dpZHRoID0g Y3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGluZ19oZWlnaHQgPSBjcnRjLT5tb2Rl LnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNoID0gY3J0Yy0+bW9kZS52cmVmcmVz aDsKKwl3bWIoKTsJLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYmVm b3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IHRydWU7Cit9CisKK2ludCBt dGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25l ZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZf cHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKHBy aXYtPmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5k ZHBfY29tcFswXTsKKworCW10a19kZHBfY29tcF9lbmFibGVfdmJsYW5rKG92bCwgJm10a19jcnRj LT5iYXNlKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxlX3Zi bGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1 Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRr X2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKHByaXYtPmNydGNbcGlwZV0pOworCXN0 cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKworCW10a19k ZHBfY29tcF9kaXNhYmxlX3ZibGFuayhvdmwpOworfQorCitzdGF0aWMgaW50IG10a19jcnRjX2Rk cF9jbGtfZW5hYmxlKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWludCByZXQ7 CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWZvciAo aSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQlyZXQgPSBjbGtfZW5h YmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxuIiwgaSwgcmV0KTsKKwkJCWdvdG8g ZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlj bGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2Nsa19kaXNhYmxlKHN0cnVjdCBtdGtfZHJtX2Ny dGMgKm10a19jcnRjKQoreworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9f ZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJ CWNsa19kaXNhYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKK30KKworc3RhdGljIGlu dCBtdGtfY3J0Y19kZHBfaHdfaW5pdChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sK KwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMtPmJhc2U7CisJdW5zaWduZWQgaW50 IHdpZHRoLCBoZWlnaHQsIHZyZWZyZXNoOworCWludCByZXQ7CisJaW50IGk7CisKKwlEUk1fREVC VUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWlmIChXQVJOX09OKCFjcnRjLT5zdGF0ZSkp CisJCXJldHVybiAtRUlOVkFMOworCisJd2lkdGggPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9k ZS5oZGlzcGxheTsKKwloZWlnaHQgPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52ZGlzcGxh eTsKKwl2cmVmcmVzaCA9IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLnZyZWZyZXNoOworCisJ cmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhjcnRjLT5kZXYtPmRldik7CisJaWYgKHJldCA8IDAp IHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIHBvd2VyIGRvbWFpbjogJWRcbiIsIHJl dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZSht dGtfY3J0Yy0+bXV0ZXgpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRv IGVuYWJsZSBtdXRleCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BtX3J1bnRpbWVf cHV0OworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9jbGtfZW5hYmxlKG10a19jcnRjKTsKKwlp ZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgY29tcG9uZW50IGNs b2NrczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX211dGV4X3VucHJlcGFyZTsKKwl9CisKKwlE Uk1fREVCVUdfRFJJVkVSKCJtZWRpYXRla19kZHBfZGRwX3BhdGhfc2V0dXBcbiIpOworCWZvciAo aSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgLSAxOyBpKyspIHsKKwkJbXRrX2RkcF9h ZGRfY29tcF90b19wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywKKwkJCQkJIG10a19jcnRjLT5k ZHBfY29tcFtpXS0+aWQsCisJCQkJCSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaSArIDFdLT5pZCk7CisJ CW10a19kaXNwX211dGV4X2FkZF9jb21wKG10a19jcnRjLT5tdXRleCwKKwkJCQkJbXRrX2NydGMt PmRkcF9jb21wW2ldLT5pZCk7CisJfQorCW10a19kaXNwX211dGV4X2FkZF9jb21wKG10a19jcnRj LT5tdXRleCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2Rpc3BfbXV0ZXhfZW5h YmxlKG10a19jcnRjLT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9j b21wX25yOyBpKyspIHsKKwkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcCA9IG10a19jcnRjLT5k ZHBfY29tcFtpXTsKKworCQltdGtfZGRwX2NvbXBfY29uZmlnKGNvbXAsIHdpZHRoLCBoZWlnaHQs IHZyZWZyZXNoKTsKKwkJbXRrX2RkcF9jb21wX3N0YXJ0KGNvbXApOworCX0KKworCS8qIEluaXRp YWxseSBjb25maWd1cmUgYWxsIHBsYW5lcyAqLworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJf TlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVz W2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBs YW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCW10a19kZHBf Y29tcF9sYXllcl9jb25maWcobXRrX2NydGMtPmRkcF9jb21wWzBdLCBpLAorCQkJCQkgIHBsYW5l X3N0YXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX211dGV4X3VucHJlcGFyZToKKwltdGtf ZGlzcF9tdXRleF91bnByZXBhcmUobXRrX2NydGMtPm11dGV4KTsKK2Vycl9wbV9ydW50aW1lX3B1 dDoKKwlwbV9ydW50aW1lX3B1dChjcnRjLT5kZXYtPmRldik7CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2h3X2Zpbmkoc3RydWN0IG10a19kcm1fY3J0YyAqbXRr X2NydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG10a19jcnRjLT5iYXNlLmRldjsK KwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChp ID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtfZGRwX2NvbXBfc3Rv cChtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRw X2NvbXBfbnI7IGkrKykKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11 dGV4LAorCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwltdGtfZGlzcF9tdXRl eF9kaXNhYmxlKG10a19jcnRjLT5tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5k ZHBfY29tcF9uciAtIDE7IGkrKykgeworCQltdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aCht dGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSAgICAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+ aWQsCisJCQkJCSAgICAgIG10a19jcnRjLT5kZHBfY29tcFtpICsgMV0tPmlkKTsKKwkJbXRrX2Rp c3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQkgICBtdGtfY3J0Yy0+ ZGRwX2NvbXBbaV0tPmlkKTsKKwl9CisJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2Ny dGMtPm11dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwltdGtfY3J0Y19kZHBfY2xr X2Rpc2FibGUobXRrX2NydGMpOworCW10a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0Yy0+ bXV0ZXgpOworCisJcG1fcnVudGltZV9wdXQoZHJtLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCBt dGtfZHJtX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRr X2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXN0cnVjdCBtdGtfZGRw X2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKwlpbnQgcmV0OworCisJRFJNX0RF QlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRjLT5iYXNlLmlkKTsKKworCXJldCA9 IG10a19zbWlfbGFyYl9nZXQob3ZsLT5sYXJiX2Rldik7CisJaWYgKHJldCkgeworCQlEUk1fRVJS T1IoIkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwly ZXQgPSBtdGtfY3J0Y19kZHBfaHdfaW5pdChtdGtfY3J0Yyk7CisJaWYgKHJldCkgeworCQltdGtf c21pX2xhcmJfcHV0KG92bC0+bGFyYl9kZXYpOworCQlyZXR1cm47CisJfQorCisJZHJtX2NydGNf dmJsYW5rX29uKGNydGMpOworCW10a19jcnRjLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGlj IHZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0 cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJc3RydWN0 IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCWludCBpOworCisJ RFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRjLT5iYXNlLmlkKTsKKwlp ZiAoIW10a19jcnRjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwkvKiBTZXQgYWxsIHBlbmRpbmcg cGxhbmUgc3RhdGUgdG8gZGlzYWJsZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05S OyBpKyspIHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tp XS5iYXNlOworCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQlwbGFu ZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCQlwbGFuZV9zdGF0 ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsKKwkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmln ID0gdHJ1ZTsKKwl9CisJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gdHJ1ZTsKKworCS8qIFdh aXQgZm9yIHBsYW5lcyB0byBiZSBkaXNhYmxlZCAqLworCWRybV9jcnRjX3dhaXRfb25lX3ZibGFu ayhjcnRjKTsKKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisJbXRrX2NydGNfZGRwX2h3 X2ZpbmkobXRrX2NydGMpOworCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7CisKKwlt dGtfY3J0Yy0+ZW5hYmxlZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNf YXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAq c3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisJc3RydWN0IG10a19kcm1f Y3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKworCWlmIChtdGtfY3J0Yy0+ZXZl bnQgJiYgc3RhdGUtPmJhc2UuZXZlbnQpCisJCURSTV9FUlJPUigibmV3IGV2ZW50IHdoaWxlIHRo ZXJlIGlzIHN0aWxsIGEgcGVuZGluZyBldmVudFxuIik7CisKKwlpZiAoc3RhdGUtPmJhc2UuZXZl bnQpIHsKKwkJc3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsK KwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworCQltdGtfY3J0Yy0+ ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsKKwkJc3RhdGUtPmJhc2UuZXZlbnQgPSBOVUxMOwor CX0KK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCisJCQkJICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19z dGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNy dGMpOworCXVuc2lnbmVkIGludCBwZW5kaW5nX3BsYW5lcyA9IDA7CisJaW50IGk7CisKKwlpZiAo bXRrX2NydGMtPmV2ZW50KQorCQltdGtfY3J0Yy0+cGVuZGluZ19uZWVkc192YmxhbmsgPSB0cnVl OworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0 YXRlKHBsYW5lLT5zdGF0ZSk7CisJCWlmIChwbGFuZV9zdGF0ZS0+cGVuZGluZy5kaXJ0eSkgewor CQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1ZTsKKwkJCXBsYW5lX3N0YXRlLT5w ZW5kaW5nLmRpcnR5ID0gZmFsc2U7CisJCQlwZW5kaW5nX3BsYW5lcyB8PSBCSVQoaSk7CisJCX0K Kwl9CisJaWYgKHBlbmRpbmdfcGxhbmVzKQorCQltdGtfY3J0Yy0+cGVuZGluZ19wbGFuZXMgPSB0 cnVlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIG10a19jcnRjX2Z1 bmNzID0geworCS5zZXRfY29uZmlnCQk9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsCisJ LnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCisJLmRlc3Ryb3kJCT0g bXRrX2RybV9jcnRjX2Rlc3Ryb3ksCisJLnJlc2V0CQkJPSBtdGtfZHJtX2NydGNfcmVzZXQsCisJ LmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBtdGtfZHJtX2NydGNfZHVwbGljYXRlX3N0YXRlLAor CS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IG10a19kcm1fY3J0Y19kZXN0cm95X3N0YXRlLAorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgbXRrX2NydGNfaGVs cGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwCT0gbXRrX2RybV9jcnRjX21vZGVfZml4dXAsCisJ Lm1vZGVfc2V0X25vZmIJPSBtdGtfZHJtX2NydGNfbW9kZV9zZXRfbm9mYiwKKwkuZW5hYmxlCQk9 IG10a19kcm1fY3J0Y19lbmFibGUsCisJLmRpc2FibGUJPSBtdGtfZHJtX2NydGNfZGlzYWJsZSwK KwkuYXRvbWljX2JlZ2luCT0gbXRrX2RybV9jcnRjX2F0b21pY19iZWdpbiwKKwkuYXRvbWljX2Zs dXNoCT0gbXRrX2RybV9jcnRjX2F0b21pY19mbHVzaCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2Ry bV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCSAgICAgc3RydWN0IG10a19k cm1fY3J0YyAqbXRrX2NydGMsCisJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCisJ CQkgICAgIHN0cnVjdCBkcm1fcGxhbmUgKmN1cnNvciwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJ aW50IHJldDsKKworCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmbXRrX2Ny dGMtPmJhc2UsIHByaW1hcnksIGN1cnNvciwKKwkJCQkJJm10a19jcnRjX2Z1bmNzLCBOVUxMKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGVhbnVwX2NydGM7CisKKwlkcm1fY3J0Y19oZWxwZXJf YWRkKCZtdGtfY3J0Yy0+YmFzZSwgJm10a19jcnRjX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4g MDsKKworZXJyX2NsZWFudXBfY3J0YzoKKwlkcm1fY3J0Y19jbGVhbnVwKCZtdGtfY3J0Yy0+YmFz ZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBtdGtfY3J0Y19kZHBfaXJxKHN0cnVjdCBkcm1f Y3J0YyAqY3J0Yywgc3RydWN0IG10a19kZHBfY29tcCAqb3ZsKQoreworCXN0cnVjdCBtdGtfZHJt X2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19jcnRjX3N0 YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKG10a19jcnRjLT5iYXNlLnN0YXRlKTsKKwl1 bnNpZ25lZCBpbnQgaTsKKworCS8qCisJICogVE9ETzogaW5zdGVhZCBvZiB1cGRhdGluZyB0aGUg cmVnaXN0ZXJzIGhlcmUsIHdlIHNob3VsZCBwcmVwYXJlCisJICogd29ya2luZyByZWdpc3RlcnMg aW4gYXRvbWljX2NvbW1pdCBhbmQgbGV0IHRoZSBoYXJkd2FyZSBjb21tYW5kCisJICogcXVldWUg dXBkYXRlIG1vZHVsZSByZWdpc3RlcnMgb24gdmJsYW5rLgorCSAqLworCWlmIChzdGF0ZS0+cGVu ZGluZ19jb25maWcpIHsKKwkJbXRrX2RkcF9jb21wX2NvbmZpZyhvdmwsIHN0YXRlLT5wZW5kaW5n X3dpZHRoLAorCQkJCSAgICBzdGF0ZS0+cGVuZGluZ19oZWlnaHQsCisJCQkJICAgIHN0YXRlLT5w ZW5kaW5nX3ZyZWZyZXNoKTsKKworCQlzdGF0ZS0+cGVuZGluZ19jb25maWcgPSBmYWxzZTsKKwl9 CisKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBP VkxfTEFZRVJfTlI7IGkrKykgeworCQkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2Ny dGMtPnBsYW5lc1tpXS5iYXNlOworCQkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGU7CisKKwkJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7 CisKKwkJCWlmIChwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcpIHsKKwkJCQltdGtfZGRwX2Nv bXBfbGF5ZXJfY29uZmlnKG92bCwgaSwgcGxhbmVfc3RhdGUpOworCQkJCXBsYW5lX3N0YXRlLT5w ZW5kaW5nLmNvbmZpZyA9IGZhbHNlOworCQkJfQorCQl9CisJCW10a19jcnRjLT5wZW5kaW5nX3Bs YW5lcyA9IGZhbHNlOworCX0KKworCW10a19kcm1fZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7 Cit9CisKK2ludCBtdGtfZHJtX2NydGNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2 LAorCQkJY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgKnBhdGgsIHVuc2lnbmVkIGludCBwYXRo X2xlbikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtX2Rldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHJtX2Rldi0+ZGV2OworCXN0cnVjdCBtdGtf ZHJtX2NydGMgKm10a19jcnRjOworCWVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZTsKKwl1bnNpZ25l ZCBpbnQgenBvczsKKwlpbnQgcGlwZSA9IHByaXYtPm51bV9waXBlczsKKwlpbnQgcmV0OworCWlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IHBhdGhfbGVuOyBpKyspIHsKKwkJZW51bSBtdGtfZGRw X2NvbXBfaWQgY29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsK KworCQlub2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRdOworCQlpZiAoIW5vZGUpIHsKKwkJ CWRldl9pbmZvKGRldiwKKwkJCQkgIk5vdCBjcmVhdGluZyBjcnRjICVkIGJlY2F1c2UgY29tcG9u ZW50ICVkIGlzIGRpc2FibGVkIG9yIG1pc3NpbmdcbiIsCisJCQkJIHBpcGUsIGNvbXBfaWQpOwor CQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwltdGtfY3J0YyA9IGRldm1fa3phbGxvYyhkZXYsIHNp emVvZigqbXRrX2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19jcnRjKQorCQlyZXR1cm4g LUVOT01FTTsKKworCW10a19jcnRjLT5jb25maWdfcmVncyA9IHByaXYtPmNvbmZpZ19yZWdzOwor CW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBhdGhfbGVuOworCW10a19jcnRjLT5kZHBfY29tcCA9 IGRldm1fa21hbGxvY19hcnJheShkZXYsIG10a19jcnRjLT5kZHBfY29tcF9uciwKKwkJCQkJCXNp emVvZigqbXRrX2NydGMtPmRkcF9jb21wKSwKKwkJCQkJCUdGUF9LRVJORUwpOworCisJbXRrX2Ny dGMtPm11dGV4ID0gbXRrX2Rpc3BfbXV0ZXhfZ2V0KHByaXYtPm11dGV4X2RldiwgcGlwZSk7CisJ aWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgpKSB7CisJCXJldCA9IFBUUl9FUlIobXRrX2NydGMt Pm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IG11dGV4OiAlZFxuIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9j b21wX25yOyBpKyspIHsKKwkJZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCA9IHBhdGhbaV07 CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXA7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9k ZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRdOworCQljb21wID0gcHJpdi0+ ZGRwX2NvbXBbY29tcF9pZF07CisJCWlmICghY29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21w b25lbnQgJXMgbm90IGluaXRpYWxpemVkXG4iLAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCQly ZXQgPSAtRU5PREVWOworCQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQlyZXQgPSBjbGtfcHJl cGFyZShjb21wLT5jbGspOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiRmFp bGVkIHRvIHByZXBhcmUgY2xvY2sgZm9yIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQkJbm9kZS0+ ZnVsbF9uYW1lLCByZXQpOworCQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQltdGtfY3J0Yy0+ ZGRwX2NvbXBbaV0gPSBjb21wOworCX0KKworCWZvciAoenBvcyA9IDA7IHpwb3MgPCBPVkxfTEFZ RVJfTlI7IHpwb3MrKykgeworCQl0eXBlID0gKHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9Q UklNQVJZIDoKKwkJCQkoenBvcyA9PSAxKSA/IERSTV9QTEFORV9UWVBFX0NVUlNPUiA6CisJCQkJ CQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZOworCQlyZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2 LCAmbXRrX2NydGMtPnBsYW5lc1t6cG9zXSwKKwkJCQkgICAgIEJJVChwaXBlKSwgdHlwZSwgenBv cyk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVucHJlcGFyZTsKKwl9CisKKwlyZXQgPSBtdGtfZHJt X2NydGNfaW5pdChkcm1fZGV2LCBtdGtfY3J0YywgJm10a19jcnRjLT5wbGFuZXNbMF0uYmFzZSwK KwkJCQkmbXRrX2NydGMtPnBsYW5lc1sxXS5iYXNlLCBwaXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJ Z290byB1bnByZXBhcmU7CisKKwlwcml2LT5jcnRjW3BpcGVdID0gJm10a19jcnRjLT5iYXNlOwor CXByaXYtPm51bV9waXBlcysrOworCisJcmV0dXJuIDA7CisKK3VucHJlcGFyZToKKwl3aGlsZSAo LS1pID49IDApCisJCWNsa191bnByZXBhcmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOwor CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWU1NTY2Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCkBAIC0wLDAgKzEs MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1U S19EUk1fQ1JUQ19ICisjZGVmaW5lIE1US19EUk1fQ1JUQ19ICisKKyNpbmNsdWRlIDxkcm0vZHJt X2NydGMuaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2Ry bV9wbGFuZS5oIgorCisjZGVmaW5lIE9WTF9MQVlFUl9OUgk0CisKK2ludCBtdGtfZHJtX2NydGNf ZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7 Cit2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19jaGVja19mbHVzaChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1f Y3J0YyAqY3J0Yyk7Cit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRj LCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwpOworaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAq cGF0aCwKKwkJCXVuc2lnbmVkIGludCBwYXRoX2xlbik7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0NS VENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU4NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+ CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVn bWFwLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRw X2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRfRU4JMHgw NDAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOCTB4MDQ0CisjZGVm aW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09EX01PVVRfRU4JCTB4MDQ4CisjZGVmaW5lIERJU1Bf UkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRfRU4JMHgwNGMKKyNkZWZpbmUgRElTUF9SRUdfQ09O RklHX0RJU1BfVUZPRV9NT1VUX0VOCTB4MDUwCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQ X0NPTE9SMF9TRUxfSU4JMHgwODQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1Ix X1NFTF9JTgkweDA4OAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTgkJMHgwYWMK KyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTgkweDBjOAorI2RlZmlu ZSBESVNQX1JFR19DT05GSUdfTU1TWVNfQ0dfQ09OMAkJMHgxMDAKKworI2RlZmluZSBESVNQX1JF R19NVVRFWF9FTihuKQkoMHgyMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVY X1JTVChuKQkoMHgyOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX01PRChu KQkoMHgyYyArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX1NPRihuKQkoMHgz MCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZMMAkJQklUKDExKQor I2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkwxCQlCSVQoMTIpCisjZGVmaW5lIE1VVEVYX01PRF9E SVNQX1JETUEwCQlCSVQoMTMpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUExCQlCSVQoMTQp CisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEyCQlCSVQoMTUpCisjZGVmaW5lIE1VVEVYX01P RF9ESVNQX1dETUEwCQlCSVQoMTYpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUExCQlCSVQo MTcpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMAkJQklUKDE4KQorI2RlZmluZSBNVVRF WF9NT0RfRElTUF9DT0xPUjEJCUJJVCgxOSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQUFMCQlC SVQoMjApCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0dBTU1BCQlCSVQoMjEpCisjZGVmaW5lIE1V VEVYX01PRF9ESVNQX1VGT0UJCUJJVCgyMikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMAkJ QklUKDIzKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00xCQlCSVQoMjQpCisjZGVmaW5lIE1V VEVYX01PRF9ESVNQX09ECQlCSVQoMjUpCisKKyNkZWZpbmUgTVVURVhfU09GX1NJTkdMRV9NT0RF CQkwCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kwCQkJMQorI2RlZmluZSBNVVRFWF9TT0ZfRFNJMQkJ CTIKKyNkZWZpbmUgTVVURVhfU09GX0RQSTAJCQkzCisKKyNkZWZpbmUgT1ZMMF9NT1VUX0VOX0NP TE9SMAkJMHgxCisjZGVmaW5lIE9EX01PVVRfRU5fUkRNQTAJCTB4MQorI2RlZmluZSBVRk9FX01P VVRfRU5fRFNJMAkJMHgxCisjZGVmaW5lIENPTE9SMF9TRUxfSU5fT1ZMMAkJMHgxCisjZGVmaW5l IE9WTDFfTU9VVF9FTl9DT0xPUjEJCTB4MQorI2RlZmluZSBHQU1NQV9NT1VUX0VOX1JETUExCQkw eDEKKyNkZWZpbmUgUkRNQTFfTU9VVF9EUEkwCQkJMHgyCisjZGVmaW5lIERQSTBfU0VMX0lOX1JE TUExCQkweDEKKyNkZWZpbmUgQ09MT1IxX1NFTF9JTl9PVkwxCQkweDEKKworc3RydWN0IG10a19k aXNwX211dGV4IHsKKwlpbnQgaWQ7CisJYm9vbCBjbGFpbWVkOworfTsKKworc3RydWN0IG10a19k ZHAgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVjdCBjbGsJCQkqY2xrOworCXZvaWQg X19pb21lbQkJCSpyZWdzOworCXN0cnVjdCBtdGtfZGlzcF9tdXRleAkJbXV0ZXhbMTBdOworfTsK Kworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtdXRleF9tb2RbRERQX0NPTVBPTkVOVF9JRF9N QVhdID0geworCVtERFBfQ09NUE9ORU5UX0FBTF0gPSBNVVRFWF9NT0RfRElTUF9BQUwsCisJW0RE UF9DT01QT05FTlRfQ09MT1IwXSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMCwKKwlbRERQX0NPTVBP TkVOVF9DT0xPUjFdID0gTVVURVhfTU9EX0RJU1BfQ09MT1IxLAorCVtERFBfQ09NUE9ORU5UX0dB TU1BXSA9IE1VVEVYX01PRF9ESVNQX0dBTU1BLAorCVtERFBfQ09NUE9ORU5UX09EXSA9IE1VVEVY X01PRF9ESVNQX09ELAorCVtERFBfQ09NUE9ORU5UX09WTDBdID0gTVVURVhfTU9EX0RJU1BfT1ZM MCwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXSA9IE1VVEVYX01PRF9ESVNQX09WTDEsCisJW0REUF9D T01QT05FTlRfUFdNMF0gPSBNVVRFWF9NT0RfRElTUF9QV00wLAorCVtERFBfQ09NUE9ORU5UX1BX TTFdID0gTVVURVhfTU9EX0RJU1BfUFdNMSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0gPSBNVVRF WF9NT0RfRElTUF9SRE1BMCwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0gPSBNVVRFWF9NT0RfRElT UF9SRE1BMSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMiwK KwlbRERQX0NPTVBPTkVOVF9VRk9FXSA9IE1VVEVYX01PRF9ESVNQX1VGT0UsCisJW0REUF9DT01Q T05FTlRfV0RNQTBdID0gTVVURVhfTU9EX0RJU1BfV0RNQTAsCisJW0REUF9DT01QT05FTlRfV0RN QTFdID0gTVVURVhfTU9EX0RJU1BfV0RNQTEsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG10 a19kZHBfbW91dF9lbihlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgIGVudW0gbXRr X2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAgIHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNp Z25lZCBpbnQgdmFsdWU7CisKKwlpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0 ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJ U1BfT1ZMMF9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDBfTU9VVF9FTl9DT0xPUjA7CisJfSBlbHNl IGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PRCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRN QTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VUX0VOOworCQl2YWx1 ZSA9IE9EX01PVVRfRU5fUkRNQTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9V Rk9FICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EU0kwKSB7CisJCSphZGRyID0gRElTUF9SRUdf Q09ORklHX0RJU1BfVUZPRV9NT1VUX0VOOworCQl2YWx1ZSA9IFVGT0VfTU9VVF9FTl9EU0kwOwor CX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMSAmJiBuZXh0ID09IEREUF9DT01Q T05FTlRfQ09MT1IxKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VU X0VOOworCQl2YWx1ZSA9IE9WTDFfTU9VVF9FTl9DT0xPUjE7CisJfSBlbHNlIGlmIChjdXIgPT0g RERQX0NPTVBPTkVOVF9HQU1NQSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRNQTEpIHsKKwkJ KmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1NQV9NT1VUX0VOOworCQl2YWx1ZSA9IEdB TU1BX01PVVRfRU5fUkRNQTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9SRE1B MSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NP TkZJR19ESVNQX1JETUExX01PVVRfRU47CisJCXZhbHVlID0gUkRNQTFfTU9VVF9EUEkwOworCX0g ZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1 bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxfaW4oZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJ CSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAgdW5zaWduZWQgaW50ICphZGRy KQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9P VkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JF R19DT05GSUdfRElTUF9DT0xPUjBfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMF9TRUxfSU5fT1ZM MDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQ X0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU47 CisJCXZhbHVlID0gRFBJMF9TRUxfSU5fUkRNQTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NP TVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIg PSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMV9T RUxfSU5fT1ZMMTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IDA7CisJfQorCisJcmV0dXJuIHZhbHVl OworfQorCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZp Z19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51 bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJl ZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2 YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1 ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOworCX0KKworCXZh bHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJ CXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0 ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQorCit2b2lkIG10a19k ZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJ ICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lk IG5leHQpCit7CisJdW5zaWduZWQgaW50IGFkZHIsIHZhbHVlLCByZWc7CisKKwl2YWx1ZSA9IG10 a19kZHBfbW91dF9lbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0g cmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVs YXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3Nl bF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVs YXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcs IGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10 a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sK KwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaWQg Pj0gMTApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChkZHAtPm11dGV4W2lkXS5j bGFpbWVkKQorCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCisJZGRwLT5tdXRleFtpZF0uY2xh aW1lZCA9IHRydWU7CisKKwlyZXR1cm4gJmRkcC0+bXV0ZXhbaWRdOworfQorCit2b2lkIG10a19k aXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBt dGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkg ICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAh PSBtdXRleCk7CisKKwltdXRleC0+Y2xhaW1lZCA9IGZhbHNlOworfQorCitpbnQgbXRrX2Rpc3Bf bXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBt dGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkg ICBtdXRleFttdXRleC0+aWRdKTsKKwlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGRkcC0+Y2xr KTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211 dGV4ICptdXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4 LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9hZGRfY29t cChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJICAgICBlbnVtIG10a19kZHBfY29t cF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBz dHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50 IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlz d2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJCXJlZyA9IE1VVEVYX1NP Rl9EU0kwOworCQlicmVhazsKKwljYXNlIEREUF9DT01QT05FTlRfRFNJMToKKwkJcmVnID0gTVVU RVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQlyZWcg PSBNVVRFWF9TT0ZfRFBJMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnID0gcmVhZGxfcmVs YXhlZChkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJlZyB8 PSBtdXRleF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1Bf UkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlbF9yZWxh eGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworfQor Cit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq bXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpCit7CisJc3RydWN0IG10a19kZHAg KmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4 W211dGV4LT5pZF0pOworCXVuc2lnbmVkIGludCByZWc7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4 W211dGV4LT5pZF0gIT0gbXV0ZXgpOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgRERQX0NPTVBP TkVOVF9EU0kwOgorCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kxOgorCWNhc2UgRERQX0NPTVBPTkVO VF9EUEkwOgorCQl3cml0ZWxfcmVsYXhlZChNVVRFWF9TT0ZfU0lOR0xFX01PREUsCisJCQkgICAg ICAgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01V VEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVnICY9IH5tdXRleF9tb2RbaWRdOworCQl3cml0ZWxf cmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsK KwkJYnJlYWs7CisJfQorfQorCit2b2lkIG10a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRr X2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJf b2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwor CVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwoMSwg ZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRr X2Rpc3BfbXV0ZXhfZGlzYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0 cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAor CQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgt PmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwoMCwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhf RU4obXV0ZXgtPmlkKSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7 CisJc3RydWN0IG10a19kZHAgKmRkcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGk7 CisKKwlkZHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRkcCksIEdGUF9LRVJORUwpOwor CWlmICghZGRwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsr KQorCQlkZHAtPm11dGV4W2ldLmlkID0gaTsKKworCWRkcC0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRl diwgTlVMTCk7CisJaWYgKElTX0VSUihkZHAtPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGRwLT5jbGspOworCX0KKwor CXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwor CWRkcC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19F UlIoZGRwLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBtYXAgbXV0ZXggcmVn aXN0ZXJzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGRwLT5yZWdzKTsKKwl9CisKKwlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBkZHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2RkcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZGRwX2RyaXZlcl9kdF9t YXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtbXV0ZXgi IH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZGRwX2RyaXZlcl9kdF9tYXRj aCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kZHBfZHJpdmVyID0gewor CS5wcm9iZQkJPSBtdGtfZGRwX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2RkcF9yZW1vdmUsCisJ LmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRkcCIsCisJCS5vd25lcgk9IFRISVNf TU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBkZHBfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9 OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10a19kZHBfZHJpdmVyKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fZGRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uOTJjMTE3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2RkcC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUg TWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRERQX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBf SAorCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCitzdHJ1Y3QgcmVnbWFwOworc3Ry dWN0IGRldmljZTsKK3N0cnVjdCBtdGtfZGlzcF9tdXRleDsKKwordm9pZCBtdGtfZGRwX2FkZF9j b21wX3RvX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCSAgICAgIGVudW0gbXRr X2RkcF9jb21wX2lkIGN1ciwKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOwor dm9pZCBtdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19y ZWdzLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkgICBlbnVtIG10a19k ZHBfY29tcF9pZCBuZXh0KTsKKworc3RydWN0IG10a19kaXNwX211dGV4ICptdGtfZGlzcF9tdXRl eF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpOworaW50IG10a19kaXNw X211dGV4X3ByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19k aXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAg IGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0 cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxl KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9yZW1v dmVfY29tcChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJCWVudW0gbXRrX2RkcF9j b21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKHN0cnVjdCBtdGtfZGlz cF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9wdXQoc3RydWN0IG10a19kaXNw X211dGV4ICptdXRleCk7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0REUF9IICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4zOTcwZmNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENv cHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3JzOgorICoJWVQgU2hlbiA8 eXQuc2hlbkBtZWRpYXRlay5jb20+CisgKglDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5j bHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51 eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGlu dXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAi bXRrX2RybV9wbGFuZS5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmlu ZSBESVNQX09EX0VOCQkJCTB4MDAwMAorI2RlZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAor I2RlZmluZSBESVNQX09EX0lOVFNUQQkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJ MHgwMDIwCisjZGVmaW5lIERJU1BfT0RfU0laRQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JF R19VRk9fU1RBUlQJCQkweDAwMDAKKworI2RlZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgw NDAwCisjZGVmaW5lIERJU1BfQ09MT1JfU1RBUlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xP Ul9XSURUSAkJCTB4MGM1MAorI2RlZmluZSBESVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisj ZGVmaW5lCU9EX1JFTEFZX01PREUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgy KQorCisjZGVmaW5lCUNPTE9SX0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9T RUwJCUJJVCgxMykKKworc3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyhzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJCSAgICAgdW5zaWduZWQgaW50IGgsIHVu c2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl3cml0ZWwodywgY29tcC0+cmVncyArIERJU1BfQ09M T1JfV0lEVEgpOworCXdyaXRlbChoLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9IRUlHSFQpOwor fQorCitzdGF0aWMgdm9pZCBtdGtfY29sb3Jfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29t cCkKK3sKKwl3cml0ZWwoQ09MT1JfQllQQVNTX0FMTCB8IENPTE9SX1NFUV9TRUwsCisJICAgICAg IGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX0NGR19NQUlOKTsKKwl3cml0ZWwoMHgxLCBjb21wLT5y ZWdzICsgRElTUF9DT0xPUl9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vZF9jb25maWco c3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgIHVuc2lnbmVk IGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBj b21wLT5yZWdzICsgRElTUF9PRF9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0 KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsKE9EX1JFTEFZX01PREUsIGNv bXAtPnJlZ3MgKyBESVNQX09EX0NGRyk7CisJd3JpdGVsKDEsIGNvbXAtPnJlZ3MgKyBESVNQX09E X0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCkKK3sKKwl3cml0ZWwoVUZPX0JZUEFTUywgY29tcC0+cmVncyArIERJU1BfUkVHX1VG T19TVEFSVCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRk cF9jb2xvciA9IHsKKwkuY29uZmlnID0gbXRrX2NvbG9yX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtf Y29sb3Jfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5j cyBkZHBfb2QgPSB7CisJLmNvbmZpZyA9IG10a19vZF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX29k X3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRw X3Vmb2UgPSB7CisJLnN0YXJ0ID0gbXRrX3Vmb2Vfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3Qg Y2hhciAqIGNvbnN0IG10a19kZHBfY29tcF9zdGVtW01US19ERFBfQ09NUF9UWVBFX01BWF0gPSB7 CisJW01US19ESVNQX09WTF0gPSAib3ZsIiwKKwlbTVRLX0RJU1BfUkRNQV0gPSAicmRtYSIsCisJ W01US19ESVNQX1dETUFdID0gIndkbWEiLAorCVtNVEtfRElTUF9DT0xPUl0gPSAiY29sb3IiLAor CVtNVEtfRElTUF9BQUxdID0gImFhbCIsCisJW01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIsCisJ W01US19ESVNQX1VGT0VdID0gInVmb2UiLAorCVtNVEtfRFNJXSA9ICJkc2kiLAorCVtNVEtfRFBJ XSA9ICJkcGkiLAorCVtNVEtfRElTUF9QV01dID0gInB3bSIsCisJW01US19ESVNQX01VVEVYXSA9 ICJtdXRleCIsCisJW01US19ESVNQX09EXSA9ICJvZCIsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9j b21wX21hdGNoIHsKKwllbnVtIG10a19kZHBfY29tcF90eXBlIHR5cGU7CisJaW50IGFsaWFzX2lk OworCWNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfbWF0Y2ggbXRrX2RkcF9tYXRjaGVzW0REUF9DT01Q T05FTlRfSURfTUFYXSA9IHsKKwlbRERQX0NPTVBPTkVOVF9BQUxdCT0geyBNVEtfRElTUF9BQUws CTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBdCT0geyBNVEtfRElTUF9DT0xPUiwJ MCwgJmRkcF9jb2xvciB9LAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0JPSB7IE1US19ESVNQX0NP TE9SLAkxLCAmZGRwX2NvbG9yIH0sCisJW0REUF9DT01QT05FTlRfRFBJMF0JPSB7IE1US19EUEks CQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCBOVUxM IH0sCisJW0REUF9DT01QT05FTlRfRFNJMV0JPSB7IE1US19EU0ksCQkxLCBOVUxMIH0sCisJW0RE UF9DT01QT05FTlRfR0FNTUFdCT0geyBNVEtfRElTUF9HQU1NQSwJMCwgTlVMTCB9LAorCVtERFBf Q09NUE9ORU5UX09EXQk9IHsgTVRLX0RJU1BfT0QsCTAsICZkZHBfb2QgfSwKKwlbRERQX0NPTVBP TkVOVF9PVkwwXQk9IHsgTVRLX0RJU1BfT1ZMLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRf T1ZMMV0JPSB7IE1US19ESVNQX09WTCwJMSwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBd CT0geyBNVEtfRElTUF9QV00sCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7 IE1US19ESVNQX1JETUEsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0JPSB7IE1U S19ESVNQX1JETUEsCTEsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0JPSB7IE1US19E SVNQX1JETUEsCTIsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJU1Bf VUZPRSwJMCwgJmRkcF91Zm9lIH0sCisJW0REUF9DT01QT05FTlRfV0RNQTBdCT0geyBNVEtfRElT UF9XRE1BLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfV0RNQTFdCT0geyBNVEtfRElTUF9X RE1BLAkxLCBOVUxMIH0sCit9OworCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5vZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKK3sK KwlpbnQgaWQgPSBvZl9hbGlhc19nZXRfaWQobm9kZSwgbXRrX2RkcF9jb21wX3N0ZW1bY29tcF90 eXBlXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZGRwX21h dGNoZXMpOyBpKyspIHsKKwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0udHlw ZSAmJgorCQkgICAgKGlkIDwgMCB8fCBpZCA9PSBtdGtfZGRwX21hdGNoZXNbaV0uYWxpYXNfaWQp KQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBtdGtfZGRw X2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwK KwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBtdGtfZGRwX2NvbXBfaWQg Y29tcF9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3Mp Cit7CisJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB0eXBlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bGFyYl9ub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxhcmJfcGRldjsKKworCWlmIChj b21wX2lkIDwgMCB8fCBjb21wX2lkID49IEREUF9DT01QT05FTlRfSURfTUFYKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWNvbXAtPmlkID0gY29tcF9pZDsKKwljb21wLT5mdW5jcyA9IGZ1bmNzID86 IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS5mdW5jczsKKworCWlmIChjb21wX2lkID09IEREUF9D T01QT05FTlRfRFBJMCB8fAorCSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfRFNJMCB8fAor CSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfUFdNMCkgeworCQljb21wLT5yZWdzID0gTlVM TDsKKwkJY29tcC0+Y2xrID0gTlVMTDsKKwkJY29tcC0+aXJxID0gMDsKKwkJcmV0dXJuIDA7CisJ fQorCisJY29tcC0+cmVncyA9IG9mX2lvbWFwKG5vZGUsIDApOworCWNvbXAtPmlycSA9IG9mX2ly cV9nZXQobm9kZSwgMCk7CisJY29tcC0+Y2xrID0gb2ZfY2xrX2dldChub2RlLCAwKTsKKwlpZiAo SVNfRVJSKGNvbXAtPmNsaykpCisJCWNvbXAtPmNsayA9IE5VTEw7CisKKwl0eXBlID0gbXRrX2Rk cF9tYXRjaGVzW2NvbXBfaWRdLnR5cGU7CisKKwkvKiBPbmx5IERNQSBjYXBhYmxlIGNvbXBvbmVu dHMgbmVlZCB0aGUgTEFSQiBwcm9wZXJ0eSAqLworCWNvbXAtPmxhcmJfZGV2ID0gTlVMTDsKKwlp ZiAodHlwZSAhPSBNVEtfRElTUF9PVkwgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9SRE1BICYm CisJICAgIHR5cGUgIT0gTVRLX0RJU1BfV0RNQSkKKwkJcmV0dXJuIDA7CisKKwlsYXJiX25vZGUg PSBvZl9wYXJzZV9waGFuZGxlKG5vZGUsICJtZWRpYXRlayxsYXJiIiwgMCk7CisJaWYgKCFsYXJi X25vZGUpIHsKKwkJZGV2X2VycihkZXYsCisJCQkiTWlzc2luZyBtZWRpYWRlayxsYXJiIHBoYW5k bGUgaW4gJXMgbm9kZVxuIiwKKwkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCWxhcmJfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobGFyYl9ub2RlKTsK KwlpZiAoIWxhcmJfcGRldikgeworCQlkZXZfd2FybihkZXYsICJXYWl0aW5nIGZvciBsYXJiIGRl dmljZSAlc1xuIiwKKwkJCSBsYXJiX25vZGUtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KGxh cmJfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKwlvZl9ub2RlX3B1dChsYXJi X25vZGUpOworCisJY29tcC0+bGFyYl9kZXYgPSAmbGFyYl9wZGV2LT5kZXY7CisKKwlyZXR1cm4g MDsKK30KKworaW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUg KnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCisJaWYgKHByaXZhdGUtPmRkcF9jb21wW2Nv bXAtPmlkXSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlk XSA9IGNvbXA7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIo c3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlz dHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXBy aXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIGIvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi42YjEzYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZGRwX2NvbXAuaApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9ERFBfQ09NUF9ICisjZGVmaW5l IE1US19EUk1fRERQX0NPTVBfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RydWN0IGRl dmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1f ZGV2aWNlOworc3RydWN0IG10a19wbGFuZV9zdGF0ZTsKKworZW51bSBtdGtfZGRwX2NvbXBfdHlw ZSB7CisJTVRLX0RJU1BfT1ZMLAorCU1US19ESVNQX1JETUEsCisJTVRLX0RJU1BfV0RNQSwKKwlN VEtfRElTUF9DT0xPUiwKKwlNVEtfRElTUF9BQUwsCisJTVRLX0RJU1BfR0FNTUEsCisJTVRLX0RJ U1BfVUZPRSwKKwlNVEtfRFNJLAorCU1US19EUEksCisJTVRLX0RJU1BfUFdNLAorCU1US19ESVNQ X01VVEVYLAorCU1US19ESVNQX09ELAorCU1US19ERFBfQ09NUF9UWVBFX01BWCwKK307CisKK2Vu dW0gbXRrX2RkcF9jb21wX2lkIHsKKwlERFBfQ09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5U X0NPTE9SMCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCisJ RERQX0NPTVBPTkVOVF9EU0kwLAorCUREUF9DT01QT05FTlRfRFNJMSwKKwlERFBfQ09NUE9ORU5U X0dBTU1BLAorCUREUF9DT01QT05FTlRfT0QsCisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9D T01QT05FTlRfT1ZMMSwKKwlERFBfQ09NUE9ORU5UX1BXTTAsCisJRERQX0NPTVBPTkVOVF9QV00x LAorCUREUF9DT01QT05FTlRfUkRNQTAsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09N UE9ORU5UX1JETUEyLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX1dETUEw LAorCUREUF9DT01QT05FTlRfV0RNQTEsCisJRERQX0NPTVBPTkVOVF9JRF9NQVgsCit9OworCitz dHJ1Y3QgbXRrX2RkcF9jb21wOworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKKwl2b2lk ICgqY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJ ICAgICAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpOworCXZvaWQgKCpz dGFydCkoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKnN0b3ApKHN0cnVjdCBt dGtfZGRwX2NvbXAgKmNvbXApOworCXZvaWQgKCplbmFibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCXZvaWQgKCpkaXNhYmxlX3Zi bGFuaykoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKmxheWVyX29uKShzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJf b2ZmKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lk ICgqbGF5ZXJfY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQg aWR4LAorCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit9OworCitzdHJ1 Y3QgbXRrX2RkcF9jb21wIHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpyZWdz OworCWludCBpcnE7CisJc3RydWN0IGRldmljZSAqbGFyYl9kZXY7CisJZW51bSBtdGtfZGRwX2Nv bXBfaWQgaWQ7CisJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9Owor CitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgsCisJ CQkJICAgICAgIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYg Y29tcC0+ZnVuY3MtPmNvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmNvbmZpZyhjb21wLCB3LCBoLCB2 cmVmcmVzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RhcnQoc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVu Y3MtPnN0YXJ0KQorCQljb21wLT5mdW5jcy0+c3RhcnQoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQorewor CWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RvcCkKKwkJY29tcC0+ZnVuY3MtPnN0 b3AoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfZW5hYmxlX3Zi bGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5lbmFibGVfdmJs YW5rKQorCQljb21wLT5mdW5jcy0+ZW5hYmxlX3ZibGFuayhjb21wLCBjcnRjKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ZGlzYWJs ZV92YmxhbmspCisJCWNvbXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFuayhjb21wKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wLAorCQkJCQkgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYg Y29tcC0+ZnVuY3MtPmxheWVyX29uKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb24oY29tcCwgaWR4 KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9vZmYoc3RydWN0 IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChj b21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKQorCQljb21wLT5mdW5jcy0+bGF5 ZXJfb2ZmKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBf bGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSAgICAgdW5zaWdu ZWQgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sK KwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZykKKwkJY29tcC0+ ZnVuY3MtPmxheWVyX2NvbmZpZyhjb21wLCBpZHgsIHN0YXRlKTsKK30KKworaW50IG10a19kZHBf Y29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJZW51bSBtdGtfZGRwX2Nv bXBfdHlwZSBjb21wX3R5cGUpOworaW50IG10a19kZHBfY29tcF9pbml0KHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZV9ub2RlICpjb21wX25vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtf ZGRwX2NvbXAgKmNvbXAsIGVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNv bnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKTsKK2ludCBtdGtfZGRwX2NvbXBf cmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29t cCk7Cit2b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0s IHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCisjZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09N UF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NDllN2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpAQCAtMCwwICsxLDU2NCBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFlUIFNIRU4gPHl0 LnNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5j bHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+ CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRj LmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21w LmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisj aW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAibWVkaWF0ZWsi CisjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRpYXRlayBTb0MgRFJNIgorI2RlZmluZSBEUklWRVJf REFURSAiMjAxNTA1MTMiCisjZGVmaW5lIERSSVZFUl9NQUpPUiAxCisjZGVmaW5lIERSSVZFUl9N SU5PUiAwCisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfc2NoZWR1bGUoc3RydWN0IG10a19kcm1f cHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7 CisJcHJpdmF0ZS0+Y29tbWl0LnN0YXRlID0gc3RhdGU7CisJc2NoZWR1bGVfd29yaygmcHJpdmF0 ZS0+Y29tbWl0LndvcmspOworfQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX3dhaXRfZm9yX2Zl bmNlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9wbGFu ZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJaW50IGk7 CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBp KQorCQltdGtfZmJfd2FpdChwbGFuZS0+c3RhdGUtPmZiKTsKK30KKworc3RhdGljIHZvaWQgbXRr X2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJt ID0gcHJpdmF0ZS0+ZHJtOworCisJbXRrX2F0b21pY193YWl0X2Zvcl9mZW5jZXMoc3RhdGUpOwor CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7 CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJ ZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlk cm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKGRybSwgc3RhdGUpOworCWRybV9hdG9t aWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfc3RhdGVf ZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd29yayhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNv bnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IG10a19kcm1fcHJpdmF0ZSwgY29tbWl0Lndvcmsp OworCisJbXRrX2F0b21pY19jb21wbGV0ZShwcml2YXRlLCBwcml2YXRlLT5jb21taXQuc3RhdGUp OworfQorCitzdGF0aWMgaW50IG10a19hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpk cm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9v bCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZf cHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9w bGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xv Y2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlmbHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQu d29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9zd2FwX3N0YXRlKGRybSwgc3RhdGUpOworCisJ aWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3NjaGVkdWxlKHByaXZhdGUsIHN0YXRlKTsKKwllbHNl CisJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgc3RhdGUpOworCisJbXV0ZXhfdW5sb2Nr KCZwcml2YXRlLT5jb21taXQubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9 IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNr ID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBtdGtfYXRvbWlj X2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCBtdGtfZGRw X21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAs CisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5U X1JETUEwLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQ X0NPTVBPTkVOVF9QV00wLAorfTsKKworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lk IG10a19kZHBfZXh0W10gPSB7CisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRf Q09MT1IxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlE RFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fa21zX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldDsKKworCWlmICghaW9tbXVfcHJlc2VudCgm cGxhdGZvcm1fYnVzX3R5cGUpKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCXBkZXYgPSBv Zl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZhdGUtPm11dGV4X25vZGUpOworCWlmICghcGRldikg eworCQlkZXZfZXJyKGRybS0+ZGV2LCAiV2FpdGluZyBmb3IgZGlzcC1tdXRleCBkZXZpY2UgJXNc biIsCisJCQlwcml2YXRlLT5tdXRleF9ub2RlLT5mdWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChw cml2YXRlLT5tdXRleF9ub2RlKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCXByaXZh dGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7CisKKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0p OworCisJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDsKKwlkcm0tPm1vZGVfY29uZmln Lm1pbl9oZWlnaHQgPSA2NDsKKworCS8qCisJICogc2V0IG1heCB3aWR0aCBhbmQgaGVpZ2h0IGFz IGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4KKwkgKiB0aGlzIHZhbHVlIHdvdWxkIGJlIHVzZWQg dG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0aW9uCisJICogYXQgZHJtX21vZGVfYWRk ZmIoKS4KKwkgKi8KKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDQwOTY7CisJZHJtLT5t b2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5NjsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0g Jm10a19kcm1fbW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwo ZHJtLT5kZXYsIGRybSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX2NsZWFudXA7CisK KwkvKgorCSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBmaXhlZCBkYXRhIHN0cmVhbXMsIGVh Y2ggb3B0aW9uYWwsCisJICogYW5kIGVhY2ggc3RhdGljYWxseSBhc3NpZ25lZCB0byBhIGNydGM6 CisJICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJ MCAuLi4KKwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9tYWlu LCBBUlJBWV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9j b21wb25lbnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4g UkRNQTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2Rk cF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBl cnJfY29tcG9uZW50X3VuYmluZDsKKworCS8qIFVzZSBPVkwgZGV2aWNlIGZvciBhbGwgRE1BIG1l bW9yeSBhbGxvY2F0aW9ucyAqLworCW5wID0gcHJpdmF0ZS0+Y29tcF9ub2RlW210a19kZHBfbWFp blswXV0gPzoKKwkgICAgIHByaXZhdGUtPmNvbXBfbm9kZVttdGtfZGRwX2V4dFswXV07CisJcGRl diA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApOworCWlmICghcGRldikgeworCQlyZXQgPSAt RU5PREVWOworCQlkZXZfZXJyKGRybS0+ZGV2LCAiTmVlZCBhdCBsZWFzdCBvbmUgT1ZMIGRldmlj ZVxuIik7CisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisJfQorCisJcHJpdmF0ZS0+ZG1h X2RldiA9ICZwZGV2LT5kZXY7CisKKwkvKgorCSAqIFdlIGRvbid0IHVzZSB0aGUgZHJtX2lycV9p bnN0YWxsKCkgaGVscGVycyBwcm92aWRlZCBieSB0aGUgRFJNCisJICogY29yZSwgc28gd2UgbmVl ZCB0byBzZXQgdGhpcyBtYW51YWxseSBpbiBvcmRlciB0byBhbGxvdyB0aGUKKwkgKiBEUk1fSU9D VExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisJICovCisJZHJtLT5pcnFfZW5h YmxlZCA9IHRydWU7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgTUFYX0NSVEMpOworCWlm IChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCisJZHJtX2ttc19oZWxw ZXJfcG9sbF9pbml0KGRybSk7CisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwlyZXR1 cm4gMDsKKworZXJyX2NvbXBvbmVudF91bmJpbmQ6CisJY29tcG9uZW50X3VuYmluZF9hbGwoZHJt LT5kZXYsIGRybSk7CitlcnJfY29uZmlnX2NsZWFudXA6CisJZHJtX21vZGVfY29uZmlnX2NsZWFu dXAoZHJtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fa21zX2Rl aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9rbXNfaGVscGVyX3BvbGxfZmlu aShkcm0pOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7CisJY29tcG9uZW50X3VuYmluZF9h bGwoZHJtLT5kZXYsIGRybSk7CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKK30KKwor c3RhdGljIGludCBtdGtfZHJtX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCW10 a19kcm1fa21zX2RlaW5pdChkcm0pOworCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXRr X2RybV9nZW1fdm1fb3BzID0geworCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLAorCS5jbG9zZSA9 IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyBtdGtfZHJtX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBk cm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRy bV9pb2N0bCwKKwkubW1hcCA9IG10a19kcm1fZ2VtX21tYXAsCisJLnBvbGwgPSBkcm1fcG9sbCwK KwkucmVhZCA9IGRybV9yZWFkLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3Rs ID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJp dmVyIG10a19kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNF VCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUgfAorCQkJICAgRFJJVkVSX0FUT01JQywKKwku dW5sb2FkID0gbXRrX2RybV91bmxvYWQsCisKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3Zi bGFua19jb3VudCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5r LAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuaywKKworCS5n ZW1fZnJlZV9vYmplY3QgPSBtdGtfZHJtX2dlbV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9 ICZtdGtfZHJtX2dlbV92bV9vcHMsCisJLmR1bWJfY3JlYXRlID0gbXRrX2RybV9nZW1fZHVtYl9j cmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldCwK KwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisKKwkucHJpbWVfaGFuZGxl X3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCisJLnByaW1lX2ZkX3RvX2hhbmRs ZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAorCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJt X2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2lt cG9ydCwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IG10a19nZW1fcHJpbWVfZ2V0X3NnX3Rh YmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gbXRrX2dlbV9wcmltZV9pbXBvcnRf c2dfdGFibGUsCisJLmdlbV9wcmltZV9tbWFwID0gbXRrX2RybV9nZW1fbW1hcF9idWYsCisJLmZv cHMgPSAmbXRrX2RybV9mb3BzLAorCisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkuZGVzYyA9IERS SVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1ham9yID0gRFJJVkVSX01BSk9S LAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwKK307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9vZihz dHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGRldi0+b2Zfbm9kZSA9 PSBkYXRhOworfQorCitzdGF0aWMgaW50IG10a19kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJaW50IHJldDsKKworCWRybSA9IGRybV9k ZXZfYWxsb2MoJm10a19kcm1fZHJpdmVyLCBkZXYpOworCWlmICghZHJtKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWRybV9kZXZfc2V0X3VuaXF1ZShkcm0sIGRldl9uYW1lKGRldikpOworCisJcmV0 ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9m cmVlOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXZhdGU7CisJcHJpdmF0ZS0+ZHJtID0gZHJt OworCisJcmV0ID0gbXRrX2RybV9rbXNfaW5pdChkcm0pOworCWlmIChyZXQgPCAwKQorCQlnb3Rv IGVycl91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lzdGVyOgorCWRybV9k ZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX2ZyZWU6CisJZHJtX2Rldl91bnJlZihkcm0pOworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fdW5iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZk YXRhKGRldik7CisKKwlkcm1fcHV0X2Rldihwcml2YXRlLT5kcm0pOworCXByaXZhdGUtPmRybSA9 IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgbXRr X2RybV9vcHMgPSB7CisJLmJpbmQJCT0gbXRrX2RybV9iaW5kLAorCS51bmJpbmQJCT0gbXRrX2Ry bV91bmJpbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZGRw X2NvbXBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlz cC1vdmwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PVkwgfSwKKwl7IC5jb21wYXRpYmxl ID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQ X1JETUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXdkbWEiLCAg LmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1dETUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlh dGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX0NPTE9SIH0s CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1hYWwiLCAgIC5kYXRhID0g KHZvaWQgKilNVEtfRElTUF9BQUx9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTcz LWRpc3AtZ2FtbWEiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfR0FNTUEsIH0sCisJeyAuY29t cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC11Zm9lIiwgIC5kYXRhID0gKHZvaWQgKilN VEtfRElTUF9VRk9FIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHNpIiwg ICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFNJIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRp YXRlayxtdDgxNzMtZHBpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFBJIH0sCisJeyAu Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIsIC5kYXRhID0gKHZvaWQg KilNVEtfRElTUF9NVVRFWCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRp c3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUFdNIH0sCisJeyAuY29tcGF0aWJs ZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vZCIsICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElT UF9PRCB9LAorCXsgfQorfTsKKworc3RhdGljIGludCBtdGtfZHJtX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK KwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlOworCXN0cnVjdCByZXNvdXJjZSAqbWVt OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgY29tcG9uZW50X21hdGNoICpt YXRjaCA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXByaXZhdGUgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKnByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZhdGUpCisJ CXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOwor CUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0LndvcmssIG10a19hdG9taWNfd29yayk7CisKKwlt ZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXBy aXZhdGUtPmNvbmZpZ19yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKKwlp ZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKSkgeworCQlyZXQgPSBQVFJfRVJSKHByaXZh dGUtPmNvbmZpZ19yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtbXN5 cy1jb25maWcgcmVzb3VyY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBESVNQIGZ1bmN0aW9uIGJsb2NrcyAqLworCWZvcl9l YWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLT5wYXJlbnQsIG5vZGUpIHsKKwkJY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CisJCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29t cF90eXBlOworCQlpbnQgY29tcF9pZDsKKworCQlvZl9pZCA9IG9mX21hdGNoX25vZGUobXRrX2Rk cF9jb21wX2R0X2lkcywgbm9kZSk7CisJCWlmICghb2ZfaWQpCisJCQljb250aW51ZTsKKworCQlp ZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKKwkJCWRldl9kYmcoZGV2LCAiU2tp cHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVzXG4iLAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJ CQljb250aW51ZTsKKwkJfQorCisJCWNvbXBfdHlwZSA9IChlbnVtIG10a19kZHBfY29tcF90eXBl KW9mX2lkLT5kYXRhOworCisJCWlmIChjb21wX3R5cGUgPT0gTVRLX0RJU1BfTVVURVgpIHsKKwkJ CXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9ub2RlX2dldChub2RlKTsKKwkJCWNvbnRpbnVlOwor CQl9CisKKwkJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQobm9kZSwgY29tcF90eXBlKTsK KwkJaWYgKGNvbXBfaWQgPCAwKSB7CisJCQlkZXZfd2FybihkZXYsICJTa2lwcGluZyB1bmtub3du IGNvbXBvbmVudCAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOwor CQl9CisKKwkJcHJpdmF0ZS0+Y29tcF9ub2RlW2NvbXBfaWRdID0gb2Zfbm9kZV9nZXQobm9kZSk7 CisKKwkJLyoKKwkJICogQ3VycmVudGx5IG9ubHkgdGhlIE9WTCwgUkRNQSwgRFNJLCBhbmQgRFBJ IGJsb2NrcyBoYXZlCisJCSAqIHNlcGFyYXRlIGNvbXBvbmVudCBwbGF0Zm9ybSBkcml2ZXJzIGFu ZCBpbml0aWFsaXplIHRoZWlyIG93bgorCQkgKiBERFAgY29tcG9uZW50IHN0cnVjdHVyZS4gVGhl IG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4KKwkJICovCisJCWlmIChjb21wX3R5cGUgPT0g TVRLX0RJU1BfT1ZMIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RJU1BfUkRNQSB8fAorCQkg ICAgY29tcF90eXBlID09IE1US19EU0kgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRFBJKSB7 CisJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1hdGNoIGZvciAlc1xuIiwKKwkJ CQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCAmbWF0Y2gs IGNvbXBhcmVfb2YsIG5vZGUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG10a19kZHBfY29tcCAq Y29tcDsKKworCQkJY29tcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY29tcCksIEdGUF9L RVJORUwpOworCQkJaWYgKCFjb21wKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIGVy cl9ub2RlOworCQkJfQorCisJCQlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIG5vZGUsIGNv bXAsIGNvbXBfaWQsIE5VTEwpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycl9ub2RlOworCisJ CQlwcml2YXRlLT5kZHBfY29tcFtjb21wX2lkXSA9IGNvbXA7CisJCX0KKwl9CisKKwlpZiAoIXBy aXZhdGUtPm11dGV4X25vZGUpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCBkaXNw LW11dGV4IG5vZGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9ub2RlOworCX0K KworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBwcml2YXRlKTsKKworCXJldCA9IGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goZGV2 LCAmbXRrX2RybV9vcHMsIG1hdGNoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wbTsKKworCXJl dHVybiAwOworCitlcnJfcG06CisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CitlcnJfbm9kZToK KwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRERQ X0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+Y29tcF9ub2Rl W2ldKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kcm1fcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp dmF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOworCisJY29tcG9uZW50 X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm10a19kcm1fb3BzKTsKKwlwbV9ydW50aW1lX2Rpc2Fi bGUoJnBkZXYtPmRldik7CisJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJZm9y IChpID0gMDsgaSA8IEREUF9DT01QT05FTlRfSURfTUFYOyBpKyspCisJCW9mX25vZGVfcHV0KHBy aXZhdGUtPmNvbXBfbm9kZVtpXSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19Q TV9TTEVFUAorc3RhdGljIGludCBtdGtfZHJtX3N5c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKworCWRybV9r bXNfaGVscGVyX3BvbGxfZGlzYWJsZShkcm0pOworCisJcHJpdmF0ZS0+c3VzcGVuZF9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX3N1c3BlbmQoZHJtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPnN1 c3BlbmRfc3RhdGUpKSB7CisJCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRybSk7CisJCXJl dHVybiBQVFJfRVJSKHByaXZhdGUtPnN1c3BlbmRfc3RhdGUpOworCX0KKworCURSTV9ERUJVR19E UklWRVIoIm10a19kcm1fc3lzX3N1c3BlbmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG10a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10 a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisKKwlkcm1fYXRvbWljX2hlbHBlcl9yZXN1 bWUoZHJtLCBwcml2YXRlLT5zdXNwZW5kX3N0YXRlKTsKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Vu YWJsZShkcm0pOworCisJRFJNX0RFQlVHX0RSSVZFUigibXRrX2RybV9zeXNfcmVzdW1lXG4iKTsK KwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXRrX2Ry bV9wbV9vcHMsIG10a19kcm1fc3lzX3N1c3BlbmQsCisJCQkgbXRrX2RybV9zeXNfcmVzdW1lKTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2RybV9vZl9pZHNbXSA9IHsK Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1tbXN5cyIsIH0sCisJeyB9Cit9Owor CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciA9 IHsKKwkucHJvYmUJPSBtdGtfZHJtX3Byb2JlLAorCS5yZW1vdmUJPSBtdGtfZHJtX3JlbW92ZSwK KwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1kcm0iLAorCQkub2ZfbWF0Y2hfdGFi bGUgPSBtdGtfZHJtX29mX2lkcywKKwkJLnBtICAgICA9ICZtdGtfZHJtX3BtX29wcywKKwl9LAor fTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZl cnNbXSA9IHsKKwkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCisJJm10a19kaXNwX292bF9kcml2 ZXIsCisJJm10a19kaXNwX3JkbWFfZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRr X2RybV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKG10a19kcm1fZHJpdmVycyk7IGkrKykgeworCQlyZXQgPSBwbGF0Zm9ybV9k cml2ZXJfcmVnaXN0ZXIobXRrX2RybV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJ CXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkgICAgICAg bXRrX2RybV9kcml2ZXJzW2ldLT5kcml2ZXIubmFtZSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9 CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCXBsYXRmb3Jt X2RyaXZlcl91bnJlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXRrX2RybV9leGl0KHZvaWQpCit7CisJaW50IGk7CisK Kwlmb3IgKGkgPSBBUlJBWV9TSVpFKG10a19kcm1fZHJpdmVycykgLSAxOyBpID49IDA7IGktLSkK KwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2RybV9kcml2ZXJzW2ldKTsKK30KKwor bW9kdWxlX2luaXQobXRrX2RybV9pbml0KTsKK21vZHVsZV9leGl0KG10a19kcm1fZXhpdCk7CisK K01PRFVMRV9BVVRIT1IoIllUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPiIpOworTU9EVUxF X0RFU0NSSVBUSU9OKCJNZWRpYXRlayBTb0MgRFJNIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjYwMDU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKQEAgLTAsMCArMSw1NiBAQAorLyoK KyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9EUlZf SAorI2RlZmluZSBNVEtfRFJNX0RSVl9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1 ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBNQVhfQ1JUQwkyCisjZGVmaW5lIE1B WF9DT05ORUNUT1IJMgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9ub2RlOworc3Ry dWN0IGRybV9jcnRjOworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3QgZHJtX2ZiX2hlbHBlcjsK K3N0cnVjdCBkcm1fcHJvcGVydHk7CitzdHJ1Y3QgcmVnbWFwOworCitzdHJ1Y3QgbXRrX2RybV9w cml2YXRlIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCXN0cnVjdCBkZXZpY2UgKmRtYV9k ZXY7CisKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGNbTUFYX0NSVENdOworCXVuc2lnbmVkIGludCBu dW1fcGlwZXM7CisKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm11dGV4X25vZGU7CisJc3RydWN0IGRl dmljZSAqbXV0ZXhfZGV2OworCXZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3M7CisJc3RydWN0IGRl dmljZV9ub2RlICpjb21wX25vZGVbRERQX0NPTVBPTkVOVF9JRF9NQVhdOworCXN0cnVjdCBtdGtf ZGRwX2NvbXAgKmRkcF9jb21wW0REUF9DT01QT05FTlRfSURfTUFYXTsKKworCXN0cnVjdCB7CisJ CXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKKwkJc3RydWN0IHdvcmtfc3RydWN0IHdv cms7CisJCXN0cnVjdCBtdXRleCBsb2NrOworCX0gY29tbWl0OworCisJc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN1c3BlbmRfc3RhdGU7Cit9OworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg bXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUg PGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1 ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisvKgorICogbXRr IHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBAZmI6IGRybSBmcmFtZWJ1 ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2VtIG9iamVjdHMuCisgKi8KK3N0 cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyCWJhc2U7CisJLyogRm9y IG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8KKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19mYih4KSBjb250YWluZXJfb2Yo eCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRr X2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBt dGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJcmV0dXJuIG10a19mYi0+Z2Vt X29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAor CQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRr X2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmls ZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k cm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgbXRr X2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRybV9mcmFtZWJ1ZmZlcl9jbGVh bnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG10a19mYi0+ Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0geworCS5jcmVhdGVfaGFuZGxl ID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95ID0gbXRrX2RybV9mYl9kZXN0 cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVmZmVy X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJY29uc3Qgc3RydWN0IGRybV9tb2Rl X2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0 cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251 bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlO VkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtfZmIpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcm1faGVscGVy X21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+YmFzZSwgbW9kZSk7CisKKwltdGtfZmItPmdl bV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZtdGtfZmIt PmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFp bGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJcbiIpOworCQlrZnJlZShtdGtfZmIpOworCQly ZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtfZmI7Cit9CisKKy8qCisgKiBX YWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGluIGZiJ3MgZ2VtIG9iamVjdCdzIHJlc2VydmF0 aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCwg ZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIp Cit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IHJlc2VydmF0aW9uX29i amVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlmICghZmIpCisJCXJldHVybiAwOworCisJZ2Vt ID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlpZiAoIWdlbSB8fCAhZ2VtLT5kbWFfYnVmIHx8 ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVybiAwOworCisJcmVzdiA9IGdlbS0+ZG1hX2J1 Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2FpdF90aW1lb3V0X3JjdShyZXN2 LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCS8qIE1BWF9T Q0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCAq LworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9 CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJ CQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpCit7CisJc3RydWN0 IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKKwl1bnNp Z25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQgPSBjbWQt PmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWludCByZXQ7CisKKwlpZiAoZHJt X2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUs IGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQp OworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5waXhlbF9mb3JtYXQsIDApOwor CXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3aWR0aCAqIGJwcDsKKwlz aXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNpemUgPCBzaXplKSB7CisJCXJl dCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJbXRrX2ZiID0gbXRrX2Ry bV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlmIChJU19FUlIobXRrX2ZiKSkg eworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJ cmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgorCWRybV9nZW1fb2JqZWN0X3Vu cmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAorI2RlZmluZSBNVEtfRFJNX0ZC X0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19mYl93YWl0KHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmls ZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpOworCisj ZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dl bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzNiZmEKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwpAQCAtMCww ICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGlu dXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtf ZHJtX2dlbS5oIgorCitzdGF0aWMgc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9nZW1f aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJdW5zaWduZWQgbG9uZyBzaXplKQor eworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW1fb2JqOworCWludCByZXQ7CisKKwlz aXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKworCW10a19nZW1fb2JqID0ga3phbGxv YyhzaXplb2YoKm10a19nZW1fb2JqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdGtfZ2VtX29iaikK KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0 KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1f RVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGdlbSBvYmplY3RcbiIpOworCQlrZnJlZShtdGtf Z2VtX29iaik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG10a19nZW1f b2JqOworfQorCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9jcmVhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc2l6ZV90IHNpemUsIGJvb2wgYWxsb2Nfa21h cCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqOworCWludCByZXQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIHNp emUpOworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfQ0FTVChtdGtfZ2VtKTsK KworCW9iaiA9ICZtdGtfZ2VtLT5iYXNlOworCisJaW5pdF9kbWFfYXR0cnMoJm10a19nZW0tPmRt YV9hdHRycyk7CisJZG1hX3NldF9hdHRyKERNQV9BVFRSX1dSSVRFX0NPTUJJTkUsICZtdGtfZ2Vt LT5kbWFfYXR0cnMpOworCisJaWYgKCFhbGxvY19rbWFwKQorCQlkbWFfc2V0X2F0dHIoRE1BX0FU VFJfTk9fS0VSTkVMX01BUFBJTkcsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJbXRrX2dlbS0+ Y29va2llID0gZG1hX2FsbG9jX2F0dHJzKHByaXYtPmRtYV9kZXYsIG9iai0+c2l6ZSwKKwkJCQkJ ICAmbXRrX2dlbS0+ZG1hX2FkZHIsIEdGUF9LRVJORUwsCisJCQkJCSAgJm10a19nZW0tPmRtYV9h dHRycyk7CisJaWYgKCFtdGtfZ2VtLT5jb29raWUpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g YWxsb2NhdGUgJXp4IGJ5dGUgZG1hIGJ1ZmZlciIsIG9iai0+c2l6ZSk7CisJCXJldCA9IC1FTk9N RU07CisJCWdvdG8gZXJyX2dlbV9mcmVlOworCX0KKworCWlmIChhbGxvY19rbWFwKQorCQltdGtf Z2VtLT5rdmFkZHIgPSBtdGtfZ2VtLT5jb29raWU7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJjb29r aWUgPSAlcCBkbWFfYWRkciA9ICVwYWQgc2l6ZSA9ICV6dVxuIiwKKwkJCSBtdGtfZ2VtLT5jb29r aWUsICZtdGtfZ2VtLT5kbWFfYWRkciwKKwkJCSBzaXplKTsKKworCXJldHVybiBtdGtfZ2VtOwor CitlcnJfZ2VtX2ZyZWU6CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworCWtmcmVlKG10 a19nZW0pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3ZvaWQgbXRrX2RybV9nZW1fZnJl ZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1f Z2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisJc3RydWN0IG10a19kcm1f cHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChtdGtfZ2VtLT5z ZykKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dlbS0+c2cpOworCWVsc2UKKwkJ ZG1hX2ZyZWVfYXR0cnMocHJpdi0+ZG1hX2Rldiwgb2JqLT5zaXplLCBtdGtfZ2VtLT5jb29raWUs CisJCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJ LyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8KKwlkcm1fZ2VtX29iamVj dF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKworaW50IG10a19kcm1fZ2Vt X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlz dHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisKKwlhcmdzLT5waXRj aCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+c2l6 ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2Vt X2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQor CQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICogYWxsb2NhdGUgYSBpZCBvZiBp ZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBoYXMg dGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxlX2Ny ZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlpZiAocmV0 KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBh bGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZl cmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9oYW5k bGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsKKwly ZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90 IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBm aWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g bG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0g ZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsK KworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9iai0+dm1hX25vZGUpOwor CURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNldCk7CisKK291dDoKKwlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCisKK3sKKwlpbnQg cmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0b19tdGtfZ2VtX29iaihv YmopOworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBvYmotPmRldi0+ZGV2X3ByaXZh dGU7CisKKwkvKgorCSAqIGRtYV9hbGxvY19hdHRycygpIGFsbG9jYXRlZCBhIHN0cnVjdCBwYWdl IHRhYmxlIGZvciBtdGtfZ2VtLCBzbyBjbGVhcgorCSAqIFZNX1BGTk1BUCBmbGFnIHRoYXQgd2Fz IHNldCBieSBkcm1fZ2VtX21tYXBfb2JqKCkvZHJtX2dlbV9tbWFwKCkuCisJICovCisJdm1hLT52 bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+dm1fcGdvZmYgPSAwOworCisJcmV0ID0gZG1h X21tYXBfYXR0cnMocHJpdi0+ZG1hX2Rldiwgdm1hLCBtdGtfZ2VtLT5jb29raWUsCisJCQkgICAg IG10a19nZW0tPmRtYV9hZGRyLCBvYmotPnNpemUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlm IChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKworCXJldHVybiByZXQ7Cit9CisKK2lu dCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1h cF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChvYmosIHZtYSk7Cit9CisKK2ludCBtdGtf ZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJcmV0ID0g ZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9i aiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9t bWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgc2dfdGFibGUgZm9yIHRoaXMg R0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhlIHRhYmxlJ3MgY29udGVudHMsIGFuZCB0aGUg c2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQgYnkKKyAqICAgICAgIHRoZSBjYWxsZXIuCisg KiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBvciBh biBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9n ZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10a19k cm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisJc3RydWN0IG10a19k cm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc2dfdGFi bGUgKnNndDsKKwlpbnQgcmV0OworCisJc2d0ID0ga3phbGxvYyhzaXplb2YoKnNndCksIEdGUF9L RVJORUwpOworCWlmICghc2d0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJldCA9 IGRtYV9nZXRfc2d0YWJsZV9hdHRycyhwcml2LT5kbWFfZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tp ZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwKKwkJCQkgICAgJm10a19n ZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxv Y2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOworCQlyZXR1cm4gRVJSX1BUUihy ZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRr X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZykKK3sK KwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisJc3RydWN0IHNj YXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOworCWRtYV9hZGRyX3QgZXhwZWN0ZWQ7CisK KwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsK KworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIobXRrX2dl bSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwlmb3JfZWFjaF9z ZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJaWYgKHNnX2RtYV9hZGRyZXNzKHMpICE9 IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3RhYmxlIGlzIG5vdCBjb250aWd1b3VzIik7 CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfZ2VtX2ZyZWU7CisJCX0KKwkJZXhwZWN0 ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9sZW4ocyk7CisJfQorCisJbXRrX2dlbS0+ ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwltdGtfZ2VtLT5zZyA9IHNnOwor CisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJfZ2VtX2ZyZWU6CisJa2ZyZWUobXRrX2dl bSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyYTU2MgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCkBA IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj aWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBfTVRLX0RSTV9HRU1fSF8KKworI2luY2x1 ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsgZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUuCisg KgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0gYSBuZXcgaGFuZGxlIHRvIHRoaXMgZ2Vt IG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoKS4K KyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2FsbG9jX2F0dHJzKCksIGtlZXAg aXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFkZHI6IGtlcm5lbCB2aXJ0dWFsIGFkZHJl c3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjogZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZl ci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdlbSBidWZmZXIuCisgKgorICog UC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2ZlcnJlZCB0byB1c2VyIGFzIGttc19iby5o YW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVyIHRocm91Z2gga21zX2JvLmhh bmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29iaiB7CisJc3RydWN0IGRybV9nZW1fb2Jq ZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9pZAkJCSprdmFkZHI7CisJZG1hX2FkZHJf dAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlkbWFfYXR0cnM7CisJc3RydWN0IHNnX3Rh YmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19nZW1fb2JqKHgpCWNvbnRhaW5lcl9vZih4 LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQorCit2b2lkIG10a19kcm1fZ2VtX2ZyZWVf b2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKTsKK3N0cnVjdCBtdGtfZHJtX2dlbV9v YmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6 ZSwKKwkJCQkJICAgYm9vbCBhbGxvY19rbWFwKTsKK2ludCBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0 ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOworaW50IG10a19kcm1fZ2Vt X2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUsCisJCQkJdWludDY0X3QgKm9mZnNldCk7 CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2VtX21tYXBfYnVmKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLAorCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3N0cnVjdCBzZ190 YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmopOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJs ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq YXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fcGxhbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5jODk4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fcGxhbmUuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx NSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5jb20+Cisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxw ZXIuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRw X2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIu aCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIK Kworc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwK KwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfUkdCNTY1LAorfTsKKworc3RhdGlj IHZvaWQgbXRrX3BsYW5lX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLCBi b29sIGVuYWJsZSwKKwkJCSAgICAgZG1hX2FkZHJfdCBhZGRyLCBzdHJ1Y3QgZHJtX3JlY3QgKmRl c3QpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX3BsYW5lLT5iYXNlOworCXN0 cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5z dGF0ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoLCBmb3JtYXQ7CisJaW50IHgsIHk7CisKKwlpZiAo V0FSTl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFibGUgJiYgIXBsYW5lLT5zdGF0ZS0+ZmIpKSkK KwkJcmV0dXJuOworCisJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpIHsKKwkJcGl0Y2ggPSBwbGFuZS0+ c3RhdGUtPmZiLT5waXRjaGVzWzBdOworCQlmb3JtYXQgPSBwbGFuZS0+c3RhdGUtPmZiLT5waXhl bF9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGl0Y2ggPSAwOworCQlmb3JtYXQgPSBEUk1fRk9STUFU X1JHQkE4ODg4OworCX0KKworCXggPSBwbGFuZS0+c3RhdGUtPmNydGNfeDsKKwl5ID0gcGxhbmUt PnN0YXRlLT5jcnRjX3k7CisKKwlpZiAoeCA8IDApIHsKKwkJYWRkciAtPSB4ICogNDsKKwkJeCA9 IDA7CisJfQorCisJaWYgKHkgPCAwKSB7CisJCWFkZHIgLT0geSAqIHBpdGNoOworCQl5ID0gMDsK Kwl9CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBlbmFibGU7CisJc3RhdGUtPnBlbmRpbmcu cGl0Y2ggPSBwaXRjaDsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQgPSBmb3JtYXQ7CisJc3RhdGUt PnBlbmRpbmcuYWRkciA9IGFkZHI7CisJc3RhdGUtPnBlbmRpbmcueCA9IHg7CisJc3RhdGUtPnBl bmRpbmcueSA9IHk7CisJc3RhdGUtPnBlbmRpbmcud2lkdGggPSBkZXN0LT54MiAtIGRlc3QtPngx OworCXN0YXRlLT5wZW5kaW5nLmhlaWdodCA9IGRlc3QtPnkyIC0gZGVzdC0+eTE7CisJd21iKCk7 IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBhcmUgc2V0IGJlZm9yZSB1cGRhdGUg Ki8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19w bGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5l X3N0YXRlICpzdGF0ZTsKKworCWlmIChwbGFuZS0+c3RhdGUpIHsKKwkJaWYgKHBsYW5lLT5zdGF0 ZS0+ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2UocGxhbmUtPnN0YXRlLT5mYik7 CisKKwkJc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJbWVtc2V0 KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBlbHNlIHsKKwkJc3RhdGUgPSBremFsbG9j KHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzdGF0ZSkKKwkJCXJldHVybjsK KwkJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNlOworCX0KKworCXN0YXRlLT5iYXNlLnBsYW5l ID0gcGxhbmU7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gRFJNX0ZPUk1BVF9SR0I1NjU7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICptdGtfcGxhbmVfZHVwbGljYXRlX3N0 YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUg Km9sZF9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXN0cnVjdCBt dGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsKKworCV9fZHJtX2F0 b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAmc3RhdGUtPmJhc2UpOwor CisJV0FSTl9PTihzdGF0ZS0+YmFzZS5wbGFuZSAhPSBwbGFuZSk7CisKKwlzdGF0ZS0+cGVuZGlu ZyA9IG9sZF9zdGF0ZS0+cGVuZGluZzsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7Cit9CisKK3N0 YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHBsYW5lLCBzdGF0ZSk7CisJa2ZyZWUodG9f bXRrX3BsYW5lX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Bs YW5lX2Z1bmNzIG10a19wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21p Y19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxw ZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAorCS5yZXNl dCA9IG10a19wbGFuZV9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IG10a19wbGFu ZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gbXRrX2RybV9wbGFu ZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBtdGtfcGxhbmVfYXRvbWljX2NoZWNr KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq c3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wgdmlzaWJsZTsKKwlzdHJ1Y3Qg ZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmNydGNfeCwKKwkJLnkxID0gc3RhdGUt PmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmNydGNfeCArIHN0YXRlLT5jcnRjX3csCisJCS55MiA9 IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IHNy YyA9IHsKKwkJLyogMTYuMTYgZml4ZWQgcG9pbnQgKi8KKwkJLngxID0gc3RhdGUtPnNyY194LAor CQkueTEgPSBzdGF0ZS0+c3JjX3ksCisJCS54MiA9IHN0YXRlLT5zcmNfeCArIHN0YXRlLT5zcmNf dywKKwkJLnkyID0gc3RhdGUtPnNyY195ICsgc3RhdGUtPnNyY19oLAorCX07CisJc3RydWN0IGRy bV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWZiKQorCQlyZXR1cm4gMDsKKworCWlmICgh bXRrX2ZiX2dldF9nZW1fb2JqKGZiKSkgeworCQlEUk1fREVCVUdfS01TKCJidWZmZXIgaXMgbnVs bFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghc3RhdGUtPmNydGMpCisJCXJl dHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUt PnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkKKwkJcmV0dXJu IFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwljbGlwLngyID0gY3J0Y19zdGF0ZS0+bW9kZS5oZGlz cGxheTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+bW9kZS52ZGlzcGxheTsKKworCXJldHVybiBk cm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgc3RhdGUtPmNydGMsIGZiLAorCQkJ CQkgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAgICBEUk1fUExBTkVfSEVMUEVSX05P X1NDQUxJTkcsCisJCQkJCSAgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJCQkg ICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0 b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0 ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJ c3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAq bXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9 IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194LAorCQkueTEgPSBzdGF0ZS0+YmFzZS5jcnRj X3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNfeCArIHN0YXRlLT5iYXNlLmNydGNfdywKKwkJ LnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3RhdGUtPmJhc2UuY3J0Y19oLAorCX07CisJc3Ry dWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWNydGMpCisJCXJldHVybjsKKwor CWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlw LnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUudmRpc3BsYXk7CisJZHJtX3JlY3Rf aW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwlnZW0gPSBtdGtfZmJfZ2V0X2dlbV9vYmooc3Rh dGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19tdGtfZ2VtX29iaihnZW0pOworCW10a19wbGFu ZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtfZ2VtLT5kbWFfYWRkciwgJmRlc3QpOworfQor CitzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJ c3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUt PnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZhbHNlOworCXdtYigpOyAvKiBN YWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBpcyBzZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0 YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f cGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19j aGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ssCisJLmF0b21pY191cGRhdGUgPSBtdGtfcGxh bmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBtdGtfcGxhbmVfYXRvbWljX2Rp c2FibGUsCit9OworCitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3Nz aWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQg enBvcykKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRl diwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVfY3J0Y3MsCisJCQkJICAgICAgICZtdGtfcGxh bmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoZm9ybWF0cyksIHR5cGUs IE5VTEwpOworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBw bGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJm10 a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxwZXJfZnVuY3MpOworCW10a19wbGFuZS0+aWR4 ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhN2IzZQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgK QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu CisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX01US19EUk1f UExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExBTkVfSF8KKworI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBtdGtfZHJtX3BsYW5l IHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVuc2lnbmVkIGludAkJCWlkeDsKK307CisK K3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7CisJYm9vbAkJCQljb25maWc7CisJYm9v bAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJdW5zaWduZWQgaW50CQkJcGl0Y2g7 CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVuc2lnbmVkIGludAkJCXg7CisJdW5zaWduZWQg aW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQloZWlnaHQ7 CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfc3RhdGUgeworCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRl CXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHJtX3BsYW5lICp0b19t dGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v ZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5l IHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9fbXRrX3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc3RhdGUsIHN0cnVj dCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQorCitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAg dW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAor CQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRpZgotLSAKMi43LjAKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=