From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jyri Sarha Subject: [PATCH RFC 8/9] drm/omap: add TI DSS6 driver Date: Fri, 16 Feb 2018 13:25:09 +0200 Message-ID: <74c5e058bcef1bb7b986cdc2ecc59caaf35d6e3d.1518780268.git.jsarha@ti.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lelnx193.ext.ti.com (lelnx193.ext.ti.com [198.47.27.77]) by gabe.freedesktop.org (Postfix) with ESMTPS id 655A96E61E for ; Fri, 16 Feb 2018 11:25:29 +0000 (UTC) In-Reply-To: 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, tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com Cc: Jyri Sarha List-Id: dri-devel@lists.freedesktop.org RnJvbTogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KCkFkZCBzdXBwb3J0 IGZvciBEU1M2IElQIG9uIFRJIEsyRyBTb0MuCgpEU1M2IGlzIGFuIGV2b2x1dGlvbiBvZiB0aGUg T01BUCBEU1MgKERTUzIpLiBPTUFQIERTUyBoYXMgYmVlbiBxdWl0ZQpzaW1pbGFyIGZyb20gT01B UDIgdG8gT01BUDUgKGluY2x1ZGluZyBEUkE3IGFuZCBBTTUgd2hpY2ggaGF2ZSBiYXNpY2FsbHkK dGhlIHNhbWUgSVAgYXMgT01BUDUpLCBidXQgaW4gRFNTNiBsb3RzIG9mIHRoaW5ncyBoYXZlIGJl ZW4KcmVzdHJ1Y3R1cmVkLgoKRFNTNiBjYW4gc3RpbGwgYmUgY29uc2lkZXJlZCBhcyBiZWluZyB0 aGUgc2FtZSBmYW1pbHkgYXMgRFNTMiwgYXMgdGhlCmZlYXR1cmVzIG9mZmVyZWQgYXJlIG1vc3Rs eSB0aGUgc2FtZSwgYW5kIHRoZSBtb2RlbCBob3cgdGhpbmdzIGhhcHBlbgphbmQgd29yayBhcmUg dGhlIHNhbWUuIFdoYXQncyBjaGFuZ2VkIGFyZSB0aGUgcmVnaXN0ZXJzIGFuZCBob3cgdGhlCmZ1 bmN0aW9uYWxpdGllcyBpbiB0aGUgSVAgYXJlIGRpdmlkZWQuCgpUaHVzIHRoZXJlIHdhcyBub3Qg bXVjaCBwb2ludCBpbiB0cnlpbmcgdG8gc2hhcmUgdGhlIGxvdyBsZXZlbCBwYXJ0cyBvZgp0aGUg ZHJpdmVyLCBhbmQgaW5zdGVhZCBhIG5ldyBkcml2ZXIgd2FzIHdyaXR0ZW4gZnJvbSBzY3JhdGNo LgoKVGhpcyBwYXRjaCBhZGRzIGEgbmV3IERTUyBkcml2ZXIgZm9yIERTUzYuIFRoZSBEU1MyJ3Mg cGFuZWwgYW5kIGVuY29kZXIKZHJpdmVycyBhbmQgYWxzbyBvbWFwZHJtIGRyaXZlciBjYW4gYmUg dXNlZCB3aXRoIERTUzYuCgpTaWduZWQtb2ZmLWJ5OiBUb21pIFZhbGtlaW5lbiA8dG9taS52YWxr ZWluZW5AdGkuY29tPgpTaWduZWQtb2ZmLWJ5OiBKeXJpIFNhcmhhIDxqc2FyaGFAdGkuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9LY29uZmlnICB8ICAgIDggKwogZHJpdmVy cy9ncHUvZHJtL29tYXBkcm0vZHNzL01ha2VmaWxlIHwgICAgMyArCiBkcml2ZXJzL2dwdS9kcm0v b21hcGRybS9kc3MvZGlzcGM2LmMgfCAxNDM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9kaXNwYzYuaCB8ICAxMDkgKysrCiBk cml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvZHBpNi5jICAgfCAgMjgzICsrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9kc3M2LmMgICB8ICAzNDYgKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9vbWFwZHJtL2Rzcy9kc3M2LmggICB8ICAgNTQgKysKIDcgZmlsZXMgY2hhbmdlZCwg MjI0MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL29t YXBkcm0vZHNzL2Rpc3BjNi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL29t YXBkcm0vZHNzL2Rpc3BjNi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL29t YXBkcm0vZHNzL2RwaTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9vbWFw ZHJtL2Rzcy9kc3M2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vb21hcGRy bS9kc3MvZHNzNi5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL0tj b25maWcgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvS2NvbmZpZwppbmRleCBmMjRlYmY3 Li44MmZhZWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvS2NvbmZp ZworKysgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvS2NvbmZpZwpAQCAtMTMyLDMgKzEz MiwxMSBAQCBjb25maWcgT01BUDJfRFNTX1NMRUVQX0FGVEVSX1ZFTkNfUkVTRVQKIAkgIGRpc2Fi bGUgdGhlIHNsZWVwIGlmIGl0IGRvZXNuJ3QgY2F1c2UgcHJvYmxlbXMgb24geW91ciBwbGF0Zm9y bS4KIAogZW5kaWYKKworY29uZmlnIFRJX0RTUzYKKwl0cmlzdGF0ZSAiVEkgRFNTNiBzdXBwb3J0 IgorCXNlbGVjdCBPTUFQX0RTU19CQVNFCisJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCisJc2Vs ZWN0IE9NQVAyX0RTU19JTklUCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFRleGFzIElu c3RydW1lbnRzIERTUzYgSVAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9k c3MvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvTWFrZWZpbGUKaW5kZXgg NTk1MGMzZi4uYzY2OWIyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNz L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9NYWtlZmlsZQpAQCAt MTgsMyArMTgsNiBAQCBvbWFwZHNzLSQoQ09ORklHX09NQVA0X0RTU19IRE1JKSArPSBoZG1pNC5v IGhkbWk0X2NvcmUubwogb21hcGRzcy0kKENPTkZJR19PTUFQNF9EU1NfSERNSV9DRUMpICs9IGhk bWk0X2NlYy5vCiBvbWFwZHNzLSQoQ09ORklHX09NQVA1X0RTU19IRE1JKSArPSBoZG1pNS5vIGhk bWk1X2NvcmUubwogY2NmbGFncy0kKENPTkZJR19PTUFQMl9EU1NfREVCVUcpICs9IC1EREVCVUcK Kworb2JqLSQoQ09ORklHX1RJX0RTUzYpICs9IG9tYXBkc3M2Lm8KK29tYXBkc3M2LXkgOj0gZHNz Ni5vIGRpc3BjNi5vIGRwaTYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0v ZHNzL2Rpc3BjNi5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL2Rpc3BjNi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZTRkZTUKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvZGlzcGM2LmMKQEAgLTAsMCArMSwxNDM4IEBA CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAo QykgMjAxNi0yMDE4IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cu dGkuY29tLworICogQXV0aG9yOiBUb21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29t PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25l bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5o PgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4K KworI2luY2x1ZGUgIm9tYXBkc3MuaCIKKyNpbmNsdWRlICJkc3M2LmgiCisjaW5jbHVkZSAiZGlz cGM2LmgiCisKKyNkZWZpbmUgUkVHX0dFVChkaXNwYywgaWR4LCBzdGFydCwgZW5kKQlcCisJRkxE X0dFVChkaXNwYzZfcmVhZChkaXNwYywgaWR4KSwgc3RhcnQsIGVuZCkKKworI2RlZmluZSBSRUdf RkxEX01PRChkaXNwYywgaWR4LCB2YWwsIHN0YXJ0LCBlbmQpIFwKKwlkaXNwYzZfd3JpdGUoZGlz cGMsIGlkeCwgRkxEX01PRChkaXNwYzZfcmVhZChkaXNwYywgaWR4KSwgdmFsLCBzdGFydCwgZW5k KSkKKworI2RlZmluZSBWSURfUkVHX0dFVChkaXNwYywgcGxhbmUsIGlkeCwgc3RhcnQsIGVuZCkg XAorCUZMRF9HRVQoZGlzcGM2X3ZpZF9yZWFkKGRpc3BjLCBwbGFuZSwgaWR4KSwgc3RhcnQsIGVu ZCkKKworI2RlZmluZSBWSURfUkVHX0ZMRF9NT0QoZGlzcGMsIHBsYW5lLCBpZHgsIHZhbCwgc3Rh cnQsIGVuZCkgXAorCWRpc3BjNl92aWRfd3JpdGUoZGlzcGMsIHBsYW5lLCBpZHgsIEZMRF9NT0Qo ZGlzcGM2X3ZpZF9yZWFkKGRpc3BjLCBwbGFuZSwgaWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKKwor CisjZGVmaW5lIFZQX1JFR19HRVQoZGlzcGMsIHZwLCBpZHgsIHN0YXJ0LCBlbmQpIFwKKwlGTERf R0VUKGRpc3BjNl92cF9yZWFkKGRpc3BjLCB2cCwgaWR4KSwgc3RhcnQsIGVuZCkKKworI2RlZmlu ZSBWUF9SRUdfRkxEX01PRChkaXNwYywgdnAsIGlkeCwgdmFsLCBzdGFydCwgZW5kKQlcCisJZGlz cGM2X3ZwX3dyaXRlKGRpc3BjLCB2cCwgaWR4LCBGTERfTU9EKGRpc3BjNl92cF9yZWFkKGRpc3Bj LCB2cCwgaWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKKworc3RydWN0IGRpc3BjX2ZlYXR1cmVzIHsK KwkvKiBYWFggc2hvdWxkIHRoZXNlIGNvbWUgZnJvbSB0aGUgLmR0cz8gTWluIHBjbGsgaXMgbm90 IGZlYXR1cmUgb2YgRFNTIElQICovCisJdW5zaWduZWQgbG9uZyBtaW5fcGNsazsKKwl1bnNpZ25l ZCBsb25nIG1heF9wY2xrOworfTsKKworLyogTm90ZTogOU1IeiBpcyBhIHNwZWNpYWwgYWxsb3dl ZCBjYXNlLCBhbmQgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IGluIHRoZSBjb2RlICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRpc3BjX2ZlYXR1cmVzIGsyZ19kaXNwY19mZWF0cyA9IHsKKwkubWluX3Bj bGsgPSA0Mzc1MDAwMCwKKwkubWF4X3BjbGsgPSAxNTAwMDAwMDAsCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBkaXNwYzZfb2ZfbWF0Y2hbXTsKKworc3RydWN0IGRpc3Bj X2RldmljZSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXN0cnVjdCBkc3M2 X2RldmljZSAqZHNzNjsKKworCXZvaWQgX19pb21lbSAqYmFzZV9jb21tb247CisJdm9pZCBfX2lv bWVtICpiYXNlX3ZpZDE7CisJdm9pZCBfX2lvbWVtICpiYXNlX292cjE7CisJdm9pZCBfX2lvbWVt ICpiYXNlX3ZwMTsKKworCWludCBpcnE7CisJaXJxX2hhbmRsZXJfdCB1c2VyX2hhbmRsZXI7CisJ dm9pZCAqdXNlcl9kYXRhOworCisJY29uc3Qgc3RydWN0IGRpc3BjX2ZlYXR1cmVzICpmZWF0Owor CisJc3RydWN0IGNsayAqZmNsazsKKwlzdHJ1Y3QgY2xrICp2cF9jbGs7CisKKwlib29sIGlzX2Vu YWJsZWQ7CisKKwlib29sIGN0eF92YWxpZDsKKwl1MzIgY3R4X3ZpZDFbMHg0MDBdOworCisJdTMy IGdhbW1hX3RhYmxlWzI1Nl07Cit9OworCitzdGF0aWMgdm9pZCBkaXNwYzZfd3JpdGUoc3RydWN0 IGRpc3BjX2RldmljZSAqZGlzcGMsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJaW93cml0ZTMyKHZh bCwgZGlzcGMtPmJhc2VfY29tbW9uICsgcmVnKTsKK30KKworc3RhdGljIHUzMiBkaXNwYzZfcmVh ZChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgdTE2IHJlZykKK3sKKwlyZXR1cm4gaW9yZWFk MzIoZGlzcGMtPmJhc2VfY29tbW9uICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGM2X3Zp ZF93cml0ZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCSAgICAgZW51bSBvbWFwX3Bs YW5lX2lkIHBsYW5lLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9 IGRpc3BjLT5iYXNlX3ZpZDE7CisKKwlpb3dyaXRlMzIodmFsLCBiYXNlICsgcmVnKTsKK30KKwor c3RhdGljIHUzMiBkaXNwYzZfdmlkX3JlYWQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJ CQkgICBlbnVtIG9tYXBfcGxhbmVfaWQgcGxhbmUsIHUxNiByZWcpCit7CisJdm9pZCBfX2lvbWVt ICpiYXNlID0gZGlzcGMtPmJhc2VfdmlkMTsKKworCXJldHVybiBpb3JlYWQzMihiYXNlICsgcmVn KTsKK30KKworc3RhdGljIHZvaWQgZGlzcGM2X292cl93cml0ZShzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywKKwkJCSAgICAgZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCwgdTE2IHJlZywgdTMy IHZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBkaXNwYy0+YmFzZV9vdnIxOworCisJaW93 cml0ZTMyKHZhbCwgYmFzZSArIHJlZyk7Cit9CisjaWYgMAkvKiBub3QgdXNlZCBhdCB0aGUgbW9t ZW50ICovCitzdGF0aWMgdTMyIGRpc3BjNl9vdnJfcmVhZChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpk aXNwYywKKwkJCSAgIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsIHUxNiByZWcpCit7CisJdm9p ZCBfX2lvbWVtICpiYXNlID0gZGlzcGMtPmJhc2Vfb3ZyMTsKKworCXJldHVybiBpb3JlYWQzMihi YXNlICsgcmVnKTsKK30KKyNlbmRpZgorc3RhdGljIHZvaWQgZGlzcGM2X3ZwX3dyaXRlKHN0cnVj dCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJICAgIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWws IHUxNiByZWcsIHUzMiB2YWwpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZGlzcGMtPmJhc2Vf dnAxOworCisJaW93cml0ZTMyKHZhbCwgYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB1MzIgZGlz cGM2X3ZwX3JlYWQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkgIGVudW0gb21hcF9j aGFubmVsIGNoYW5uZWwsIHUxNiByZWcpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZGlzcGMt PmJhc2VfdnAxOworCisJcmV0dXJuIGlvcmVhZDMyKGJhc2UgKyByZWcpOworfQorCitpbnQgZGlz cGM2X3J1bnRpbWVfZ2V0KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQoreworCWludCByOwor CisJZGV2X2RiZygmZGlzcGMtPnBkZXYtPmRldiwgImRpc3BjX3J1bnRpbWVfZ2V0XG4iKTsKKwor CXIgPSBwbV9ydW50aW1lX2dldF9zeW5jKCZkaXNwYy0+cGRldi0+ZGV2KTsKKwlXQVJOX09OKHIg PCAwKTsKKwlyZXR1cm4gciA8IDAgPyByIDogMDsKK30KKwordm9pZCBkaXNwYzZfcnVudGltZV9w dXQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpCit7CisJaW50IHI7CisKKwlkZXZfZGJnKCZk aXNwYy0+cGRldi0+ZGV2LCAiZGlzcGNfcnVudGltZV9wdXRcbiIpOworCisJciA9IHBtX3J1bnRp bWVfcHV0X3N5bmMoJmRpc3BjLT5wZGV2LT5kZXYpOworCVdBUk5fT04ociA8IDApOworfQorCitz dGF0aWMgdm9pZCBkaXNwYzZfc2F2ZV9jb250ZXh0KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3Bj KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlzcGMtPmN0eF92 aWQxKTsgKytpKQorCQlkaXNwYy0+Y3R4X3ZpZDFbaV0gPSBkaXNwYzZfdmlkX3JlYWQoZGlzcGMs IDAsIGkpOworCisJZGlzcGMtPmN0eF92YWxpZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGRp c3BjNl9yZXN0b3JlX2NvbnRleHQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpCit7CisJaW50 IGk7CisKKwlpZiAoIWRpc3BjLT5jdHhfdmFsaWQpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGRpc3BjLT5jdHhfdmlkMSk7ICsraSkKKwkJZGlzcGM2X3ZpZF93cml0 ZShkaXNwYywgMCwgaSwgZGlzcGMtPmN0eF92aWQxW2ldKTsKK30KKworc3RhdGljIGlycXJldHVy bl90IGRpc3BjNl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRp c3BjX2RldmljZSAqZGlzcGMgPSBhcmc7CisJdTMyIHN0YXQ7CisKKwlpZiAoIWRpc3BjLT5pc19l bmFibGVkKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzdGF0ID0gZGlzcGM2X3JlYWQoZGlzcGMs IERJU1BDX0lSUVNUQVRVUyk7CisKKwlpZiAoc3RhdCA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7 CisKKwlkaXNwYzZfd3JpdGUoZGlzcGMsIERJU1BDX0lSUVNUQVRVUywgc3RhdCk7CisKKwlyZXR1 cm4gZGlzcGMtPnVzZXJfaGFuZGxlcihpcnEsIGRpc3BjLT51c2VyX2RhdGEpOworfQorCitzdGF0 aWMgaW50IGRpc3BjNl9yZXF1ZXN0X2lycShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJ CSAgICAgIGlycV9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqZGV2X2lkKQoreworCWludCByOwor CisJaWYgKGRpc3BjLT51c2VyX2hhbmRsZXIgIT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKwor CWRpc3BjLT51c2VyX2hhbmRsZXIgPSBoYW5kbGVyOworCWRpc3BjLT51c2VyX2RhdGEgPSBkZXZf aWQ7CisKKwkvKiBlbnN1cmUgdGhlIGRpc3BjNl9pcnFfaGFuZGxlciBzZWVzIHRoZSB2YWx1ZXMg YWJvdmUgKi8KKwlzbXBfd21iKCk7CisKKwlyID0gZGV2bV9yZXF1ZXN0X2lycSgmZGlzcGMtPnBk ZXYtPmRldiwgZGlzcGMtPmlycSwgZGlzcGM2X2lycV9oYW5kbGVyLAorCQkJICAgICBJUlFGX1NI QVJFRCwgIkRJU1BDIiwgZGlzcGMpOworCWlmIChyKSB7CisJCWRpc3BjLT51c2VyX2hhbmRsZXIg PSBOVUxMOworCQlkaXNwYy0+dXNlcl9kYXRhID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcjsKK30K Kworc3RhdGljIHZvaWQgZGlzcGM2X2ZyZWVfaXJxKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3Bj LCB2b2lkICpkZXZfaWQpCit7CisJZGlzcGM2X3dyaXRlKGRpc3BjLCBESVNQQ19JUlFFTkFCTEVf Q0xSLCAweGZmZmZmZmZmKTsKKworCWRldm1fZnJlZV9pcnEoJmRpc3BjLT5wZGV2LT5kZXYsIGRp c3BjLT5pcnEsICZkaXNwYyk7CisKKwlkaXNwYy0+dXNlcl9oYW5kbGVyID0gTlVMTDsKKwlkaXNw Yy0+dXNlcl9kYXRhID0gTlVMTDsKK30KKwordTY0IGRpc3BjNl92cF9pcnFfZnJvbV9yYXcodTMy IHN0YXQpCit7CisJdWludCBjaGFubmVsID0gMDsKKwl1NjQgdnBfc3RhdCA9IDA7CisKKwlpZiAo c3RhdCAmIEJJVCgwKSkKKwkJdnBfc3RhdCB8PSBEU1NfSVJRX01HUl9GUkFNRV9ET05FKGNoYW5u ZWwpOworCWlmIChzdGF0ICYgQklUKDEpKQorCQl2cF9zdGF0IHw9IERTU19JUlFfTUdSX1ZTWU5D X0VWRU4oY2hhbm5lbCk7CisJaWYgKHN0YXQgJiBCSVQoMikpCisJCXZwX3N0YXQgfD0gRFNTX0lS UV9NR1JfVlNZTkNfT0REKGNoYW5uZWwpOworCWlmIChzdGF0ICYgQklUKDQpKQorCQl2cF9zdGF0 IHw9IERTU19JUlFfTUdSX1NZTkNfTE9TVChjaGFubmVsKTsKKworCXJldHVybiB2cF9zdGF0Owor fQorCitzdGF0aWMgdTMyIGRpc3BjNl92cF9pcnFfdG9fcmF3KHU2NCB2cHN0YXQpCit7CisJdWlu dCBjaGFubmVsID0gMDsKKwl1MzIgc3RhdCA9IDA7CisKKwlpZiAodnBzdGF0ICYgRFNTX0lSUV9N R1JfRlJBTUVfRE9ORShjaGFubmVsKSkKKwkJc3RhdCB8PSBCSVQoMCk7CisJaWYgKHZwc3RhdCAm IERTU19JUlFfTUdSX1ZTWU5DX0VWRU4oY2hhbm5lbCkpCisJCXN0YXQgfD0gQklUKDEpOworCWlm ICh2cHN0YXQgJiBEU1NfSVJRX01HUl9WU1lOQ19PREQoY2hhbm5lbCkpCisJCXN0YXQgfD0gQklU KDIpOworCWlmICh2cHN0YXQgJiBEU1NfSVJRX01HUl9TWU5DX0xPU1QoY2hhbm5lbCkpCisJCXN0 YXQgfD0gQklUKDQpOworCisJcmV0dXJuIHN0YXQ7Cit9CisKK3N0YXRpYyB1NjQgZGlzcGM2X3Zp ZF9pcnFfZnJvbV9yYXcodTMyIHN0YXQpCit7CisJdWludCBwbGFuZSA9IDA7CisJdTY0IHZpZF9z dGF0ID0gMDsKKworCWlmIChzdGF0ICYgQklUKDApKQorCQl2aWRfc3RhdCB8PSBEU1NfSVJRX09W TF9GSUZPX1VOREVSRkxPVyhwbGFuZSk7CisKKwlyZXR1cm4gdmlkX3N0YXQ7Cit9CisKK3N0YXRp YyB1MzIgZGlzcGM2X3ZpZF9pcnFfdG9fcmF3KHU2NCB2aWRzdGF0KQoreworCXVpbnQgcGxhbmUg PSAwOworCXUzMiBzdGF0ID0gMDsKKworCWlmICh2aWRzdGF0ICYgRFNTX0lSUV9PVkxfRklGT19V TkRFUkZMT1cocGxhbmUpKQorCQlzdGF0IHw9IEJJVCgwKTsKKworCXJldHVybiBzdGF0OworfQor CisKK3N0YXRpYyB1NjQgZGlzcGM2X3ZwX3JlYWRfaXJxc3RhdHVzKHN0cnVjdCBkaXNwY19kZXZp Y2UgKmRpc3BjLAorCQkJCSAgICBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKQoreworCXUzMiBz dGF0ID0gZGlzcGM2X3ZwX3JlYWQoZGlzcGMsIGNoYW5uZWwsIERJU1BDX1ZQX0lSUVNUQVRVUyk7 CisKKwlyZXR1cm4gZGlzcGM2X3ZwX2lycV9mcm9tX3JhdyhzdGF0KTsKK30KKworc3RhdGljIHZv aWQgZGlzcGM2X3ZwX3dyaXRlX2lycXN0YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywK KwkJCQkgICAgICBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLAorCQkJCSAgICAgIHU2NCB2cHN0 YXQpCit7CisJdTMyIHN0YXQgPSBkaXNwYzZfdnBfaXJxX3RvX3Jhdyh2cHN0YXQpOworCisJZGlz cGM2X3ZwX3dyaXRlKGRpc3BjLCBjaGFubmVsLCBESVNQQ19WUF9JUlFTVEFUVVMsIHN0YXQpOwor fQorCitzdGF0aWMgdTY0IGRpc3BjNl92aWRfcmVhZF9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2Rl dmljZSAqZGlzcGMsCisJCQkJICAgICBlbnVtIG9tYXBfcGxhbmVfaWQgcGxhbmUpCit7CisJdTMy IHN0YXQgPSBkaXNwYzZfdmlkX3JlYWQoZGlzcGMsIHBsYW5lLCBESVNQQ19WSURfSVJRU1RBVFVT KTsKKworCXJldHVybiBkaXNwYzZfdmlkX2lycV9mcm9tX3JhdyhzdGF0KTsKK30KKworc3RhdGlj IHZvaWQgZGlzcGM2X3ZpZF93cml0ZV9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlz cGMsCisJCQkJICAgICAgIGVudW0gb21hcF9wbGFuZV9pZCBwbGFuZSwKKwkJCQkgICAgICAgdTY0 IHZpZHN0YXQpCit7CisJdTMyIHN0YXQgPSBkaXNwYzZfdmlkX2lycV90b19yYXcodmlkc3RhdCk7 CisKKwlkaXNwYzZfdmlkX3dyaXRlKGRpc3BjLCBwbGFuZSwgRElTUENfVklEX0lSUVNUQVRVUywg c3RhdCk7Cit9CisKKworc3RhdGljIHU2NCBkaXNwYzZfdnBfcmVhZF9pcnFlbmFibGUoc3RydWN0 IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJICAgIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwp Cit7CisJdTMyIHN0YXQgPSBkaXNwYzZfdnBfcmVhZChkaXNwYywgY2hhbm5lbCwgRElTUENfVlBf SVJRRU5BQkxFKTsKKworCXJldHVybiBkaXNwYzZfdnBfaXJxX2Zyb21fcmF3KHN0YXQpOworfQor CitzdGF0aWMgdm9pZCBkaXNwYzZfdnBfd3JpdGVfaXJxZW5hYmxlKHN0cnVjdCBkaXNwY19kZXZp Y2UgKmRpc3BjLAorCQkJCSAgICAgIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsCisJCQkJICAg ICAgdTY0IHZwc3RhdCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjNl92cF9pcnFfdG9fcmF3KHZwc3Rh dCk7CisKKwlkaXNwYzZfdnBfd3JpdGUoZGlzcGMsIGNoYW5uZWwsIERJU1BDX1ZQX0lSUUVOQUJM RSwgc3RhdCk7Cit9CisKK3N0YXRpYyB1NjQgZGlzcGM2X3ZpZF9yZWFkX2lycWVuYWJsZShzdHJ1 Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkgICAgIGVudW0gb21hcF9wbGFuZV9pZCBwbGFu ZSkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjNl92aWRfcmVhZChkaXNwYywgcGxhbmUsIERJU1BDX1ZJ RF9JUlFFTkFCTEUpOworCisJcmV0dXJuIGRpc3BjNl92aWRfaXJxX2Zyb21fcmF3KHN0YXQpOwor fQorCitzdGF0aWMgdm9pZCBkaXNwYzZfdmlkX3dyaXRlX2lycWVuYWJsZShzdHJ1Y3QgZGlzcGNf ZGV2aWNlICpkaXNwYywKKwkJCQkgICAgICAgZW51bSBvbWFwX3BsYW5lX2lkIHBsYW5lLAorCQkJ CSAgICAgICB1NjQgdmlkc3RhdCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjNl92aWRfaXJxX3RvX3Jh dyh2aWRzdGF0KTsKKworCWRpc3BjNl92aWRfd3JpdGUoZGlzcGMsIHBsYW5lLCBESVNQQ19WSURf SVJRRU5BQkxFLCBzdGF0KTsKK30KKworCitzdGF0aWMgdm9pZCBkaXNwYzZfY2xlYXJfaXJxc3Rh dHVzKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1NjQgbWFzaykKK3sKKwlkaXNwYzZfdnBf d3JpdGVfaXJxc3RhdHVzKGRpc3BjLCAwLCBtYXNrKTsKKwlkaXNwYzZfdmlkX3dyaXRlX2lycXN0 YXR1cyhkaXNwYywgMCwgbWFzayk7Cit9CisKK3N0YXRpYyB1NjQgZGlzcGM2X3JlYWRfYW5kX2Ns ZWFyX2lycXN0YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwl1NjQgc3RhdCA9 IDA7CisKKwlzdGF0IHw9IGRpc3BjNl92cF9yZWFkX2lycXN0YXR1cyhkaXNwYywgMCk7CisJc3Rh dCB8PSBkaXNwYzZfdmlkX3JlYWRfaXJxc3RhdHVzKGRpc3BjLCAwKTsKKworCWRpc3BjNl9jbGVh cl9pcnFzdGF0dXMoZGlzcGMsIHN0YXQpOworCisJcmV0dXJuIHN0YXQ7Cit9CisKK3N0YXRpYyB1 NjQgZGlzcGM2X3JlYWRfaXJxZW5hYmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQorewor CXU2NCBzdGF0ID0gMDsKKworCXN0YXQgfD0gZGlzcGM2X3ZwX3JlYWRfaXJxZW5hYmxlKGRpc3Bj LCAwKTsKKwlzdGF0IHw9IGRpc3BjNl92aWRfcmVhZF9pcnFlbmFibGUoZGlzcGMsIDApOworCisJ cmV0dXJuIHN0YXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjNl93cml0ZV9pcnFlbmFibGUoc3Ry dWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHU2NCBtYXNrKQoreworCXU2NCBvbGRfbWFzayA9IGRp c3BjNl9yZWFkX2lycWVuYWJsZShkaXNwYyk7CisKKwkvKiBjbGVhciB0aGUgaXJxc3RhdHVzIGZv ciBuZXdseSBlbmFibGVkIGlycXMgKi8KKwlkaXNwYzZfY2xlYXJfaXJxc3RhdHVzKGRpc3BjLCAo bWFzayBeIG9sZF9tYXNrKSAmIG1hc2spOworCisJZGlzcGM2X3ZwX3dyaXRlX2lycWVuYWJsZShk aXNwYywgMCwgbWFzayk7CisJZGlzcGM2X3ZpZF93cml0ZV9pcnFlbmFibGUoZGlzcGMsIDAsIG1h c2spOworCisJZGlzcGM2X3dyaXRlKGRpc3BjLCBESVNQQ19JUlFFTkFCTEVfU0VULCAoMSA8PCAw KSB8ICgxIDw8IDcpKTsKKworCS8qIGZsdXNoIHBvc3RlZCB3cml0ZSAqLworCWRpc3BjNl9yZWFk X2lycWVuYWJsZShkaXNwYyk7Cit9CisKKworc3RhdGljIGJvb2wgZGlzcGM2X21ncl9nb19idXN5 KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJICAgICAgIGVudW0gb21hcF9jaGFubmVs IGNoYW5uZWwpCit7CisJcmV0dXJuIFZQX1JFR19HRVQoZGlzcGMsIGNoYW5uZWwsIERJU1BDX1ZQ X0NPTlRST0wsIDUsIDUpOworfQorCitzdGF0aWMgdm9pZCBkaXNwYzZfbWdyX2dvKHN0cnVjdCBk aXNwY19kZXZpY2UgKmRpc3BjLAorCQkJICBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKQorewor CVZQX1JFR19GTERfTU9EKGRpc3BjLCBjaGFubmVsLCBESVNQQ19WUF9DT05UUk9MLCAxLCA1LCA1 KTsKK30KKworc3RhdGljIHZvaWQgZGlzcGM2X21ncl9lbmFibGUoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMsCisJCQkgICAgICBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLCBib29sIGVuYWJs ZSkKK3sKKwlWUF9SRUdfRkxEX01PRChkaXNwYywgY2hhbm5lbCwgRElTUENfVlBfQ09OVFJPTCwg ISFlbmFibGUsIDAsIDApOworfQorCitzdGF0aWMgYm9vbCBkaXNwYzZfbWdyX2lzX2VuYWJsZWQo c3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJICBlbnVtIG9tYXBfY2hhbm5lbCBjaGFu bmVsKQoreworCXJldHVybiBWUF9SRUdfR0VUKGRpc3BjLCBjaGFubmVsLCBESVNQQ19WUF9DT05U Uk9MLCAwLCAwKTsKK30KKworc3RhdGljIHUxNiBjOF90b19jMTIodTggYzgpCit7CisJdTE2IGMx MjsKKworCWMxMiA9IGM4IDw8IDQ7CisKKwkvKiBSZXBsaWNhdGlvbiBsb2dpYzogQ29weSBjOCA0 IE1TQiB0byA0IExTQiBmb3IgZnVsbCBzY2FsZSBjMTIgKi8KKwljMTIgPSBjOCA+PiA0OworCisJ cmV0dXJuIGMxMjsKK30KKworc3RhdGljIHU2NCBhcmdiODg4OF90b19hcmdiMTIxMjEyMTIodTMy IGFyZ2I4ODg4KQoreworCXU4IGEsIHIsIGcsIGI7CisJdTY0IHY7CisKKwlhID0gKGFyZ2I4ODg4 ID4+IDI0KSAmIDB4ZmY7CisJciA9IChhcmdiODg4OCA+PiAxNikgJiAweGZmOworCWcgPSAoYXJn Yjg4ODggPj4gOCkgJiAweGZmOworCWIgPSAoYXJnYjg4ODggPj4gMCkgJiAweGZmOworCisJdiA9 ICgodTY0KWM4X3RvX2MxMihhKSA8PCAzNikgfCAoKHU2NCljOF90b19jMTIocikgPDwgMjQpIHwK KwkgICAgKCh1NjQpYzhfdG9fYzEyKGcpIDw8IDEyKSB8ICh1NjQpYzhfdG9fYzEyKGIpOworCisJ cmV0dXJuIHY7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjNl9tZ3Jfc2V0dXAoc3RydWN0IGRpc3Bj X2RldmljZSAqZGlzcGMsCisJCQkgICAgIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsCisJCQkg ICAgIGNvbnN0IHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlcl9pbmZvICppbmZvKQoreworCXU2 NCB2OworCisJdiA9IGFyZ2I4ODg4X3RvX2FyZ2IxMjEyMTIxMihpbmZvLT5kZWZhdWx0X2NvbG9y KTsKKworCWRpc3BjNl9vdnJfd3JpdGUoZGlzcGMsIDAsIERJU1BDX09WUl9ERUZBVUxUX0NPTE9S LCB2ICYgMHhmZmZmZmZmZik7CisJZGlzcGM2X292cl93cml0ZShkaXNwYywgMCwgRElTUENfT1ZS X0RFRkFVTFRfQ09MT1IyLCAodiA+PiAzMikgJiAweGZmZmYpOworfQorCitzdGF0aWMgdm9pZCBk aXNwYzZfc2V0X251bV9kYXRhbGluZXMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJ ICAgICBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLCBpbnQgbnVtX2xpbmVzKQoreworCWludCB2 OworCisJc3dpdGNoIChudW1fbGluZXMpIHsKKwljYXNlIDEyOgorCQl2ID0gMDsgYnJlYWs7CisJ Y2FzZSAxNjoKKwkJdiA9IDE7IGJyZWFrOworCWNhc2UgMTg6CisJCXYgPSAyOyBicmVhazsKKwlj YXNlIDI0OgorCQl2ID0gMzsgYnJlYWs7CisJY2FzZSAzMDoKKwkJdiA9IDQ7IGJyZWFrOworCWNh c2UgMzY6CisJCXYgPSA1OyBicmVhazsKKwlkZWZhdWx0OgorCQlfX1dBUk4oKTsKKwkJdiA9IDM7 CisJCWJyZWFrOworCX0KKworCVZQX1JFR19GTERfTU9EKGRpc3BjLCBjaGFubmVsLCBESVNQQ19W UF9DT05UUk9MLCB2LCAxMCwgOCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjNl9tZ3Jfc2V0X2xj ZF9jb25maWcoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJICAgICAgZW51bSBvbWFw X2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHNzX2xjZF9tZ3JfY29u ZmlnICpjb25maWcpCit7CisJZGlzcGM2X3NldF9udW1fZGF0YWxpbmVzKGRpc3BjLCBjaGFubmVs LCBjb25maWctPnZpZGVvX3BvcnRfd2lkdGgpOworfQorCitzdGF0aWMgYm9vbCBkaXNwYzZfbGNk X3RpbWluZ3Nfb2soaW50IGhzdywgaW50IGhmcCwgaW50IGhicCwKKwkJCQkgIGludCB2c3csIGlu dCB2ZnAsIGludCB2YnApCit7CisJaWYgKGhzdyA8IDEgfHwgaHN3ID4gMjU2IHx8CisJICAgIGhm cCA8IDEgfHwgaGZwID4gNDA5NiB8fAorCSAgICBoYnAgPCAxIHx8IGhicCA+IDQwOTYgfHwKKwkg ICAgdnN3IDwgMSB8fCB2c3cgPiAyNTYgfHwKKwkgICAgdmZwIDwgMCB8fCB2ZnAgPiA0MDk1IHx8 CisJICAgIHZicCA8IDAgfHwgdmJwID4gNDA5NSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0 cnVlOworfQorCitib29sIGRpc3BjNl9tZ3JfdGltaW5nc19vayhzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywKKwkJCSAgIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsCisJCQkgICBjb25zdCBz dHJ1Y3QgdmlkZW9tb2RlICp2bSkKK3sKKwlpZiAodm0tPnBpeGVsY2xvY2sgPCBkaXNwYy0+ZmVh dC0+bWluX3BjbGsgJiYgdm0tPnBpeGVsY2xvY2sgIT0gOTAwMDAwMCkKKwkJcmV0dXJuIGZhbHNl OworCisJaWYgKHZtLT5waXhlbGNsb2NrID4gZGlzcGMtPmZlYXQtPm1heF9wY2xrKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlpZiAodm0tPmhhY3RpdmUgPiA0MDk2KQorCQlyZXR1cm4gZmFsc2U7CisK KwlpZiAodm0tPnZhY3RpdmUgPiA0MDk2KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBUT0RPOiBh ZGQgaW50ZXJsYWNlIHN1cHBvcnQgKi8KKwlpZiAodm0tPmZsYWdzICYgRElTUExBWV9GTEFHU19J TlRFUkxBQ0VEKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWRpc3BjNl9sY2RfdGltaW5nc19v ayh2bS0+aHN5bmNfbGVuLCB2bS0+aGZyb250X3BvcmNoLCB2bS0+aGJhY2tfcG9yY2gsCisJCQkJ ICAgdm0tPnZzeW5jX2xlbiwgdm0tPnZmcm9udF9wb3JjaCwgdm0tPnZiYWNrX3BvcmNoKSkKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjNl9t Z3Jfc2V0X3RpbWluZ3Moc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJICAgZW51bSBv bWFwX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdmlkZW9tb2RlICp2bSkK K3sKKwlib29sIGFsaWduLCBvbm9mZiwgcmYsIGllbywgaXBjLCBpaHMsIGl2czsKKworCWRpc3Bj Nl92cF93cml0ZShkaXNwYywgY2hhbm5lbCwgRElTUENfVlBfVElNSU5HX0gsCisJCQlGTERfVkFM KHZtLT5oc3luY19sZW4gLSAxLCA3LCAwKSB8CisJCQlGTERfVkFMKHZtLT5oZnJvbnRfcG9yY2gg LSAxLCAxOSwgOCkgfAorCQkJRkxEX1ZBTCh2bS0+aGJhY2tfcG9yY2ggLSAxLCAzMSwgMjApKTsK KworCWRpc3BjNl92cF93cml0ZShkaXNwYywgY2hhbm5lbCwgRElTUENfVlBfVElNSU5HX1YsCisJ CQlGTERfVkFMKHZtLT52c3luY19sZW4gLSAxLCA3LCAwKSB8CisJCQlGTERfVkFMKHZtLT52ZnJv bnRfcG9yY2gsIDE5LCA4KSB8CisJCQlGTERfVkFMKHZtLT52YmFja19wb3JjaCwgMzEsIDIwKSk7 CisKKwlpZiAodm0tPmZsYWdzICYgRElTUExBWV9GTEFHU19WU1lOQ19ISUdIKQorCQlpdnMgPSBm YWxzZTsKKwllbHNlCisJCWl2cyA9IHRydWU7CisKKwlpZiAodm0tPmZsYWdzICYgRElTUExBWV9G TEFHU19IU1lOQ19ISUdIKQorCQlpaHMgPSBmYWxzZTsKKwllbHNlCisJCWlocyA9IHRydWU7CisK KwlpZiAodm0tPmZsYWdzICYgRElTUExBWV9GTEFHU19ERV9ISUdIKQorCQlpZW8gPSBmYWxzZTsK KwllbHNlCisJCWllbyA9IHRydWU7CisKKwlpZiAodm0tPmZsYWdzICYgRElTUExBWV9GTEFHU19Q SVhEQVRBX1BPU0VER0UpCisJCWlwYyA9IGZhbHNlOworCWVsc2UKKwkJaXBjID0gdHJ1ZTsKKwor CS8qIGFsd2F5cyB1c2UgdGhlICdyZicgc2V0dGluZyAqLworCW9ub2ZmID0gdHJ1ZTsKKworCWlm ICh2bS0+ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX1NZTkNfUE9TRURHRSkKKwkJcmYgPSB0cnVlOwor CWVsc2UKKwkJcmYgPSBmYWxzZTsKKworCS8qIGFsd2F5cyB1c2UgYWxpZ25lZCBzeW5jcyAqLwor CWFsaWduID0gdHJ1ZTsKKworCWRpc3BjNl92cF93cml0ZShkaXNwYywgY2hhbm5lbCwgRElTUENf VlBfUE9MX0ZSRVEsCisJCQlGTERfVkFMKGFsaWduLCAxOCwgMTgpIHwKKwkJCUZMRF9WQUwob25v ZmYsIDE3LCAxNykgfAorCQkJRkxEX1ZBTChyZiwgMTYsIDE2KSB8CisJCQlGTERfVkFMKGllbywg MTUsIDE1KSB8CisJCQlGTERfVkFMKGlwYywgMTQsIDE0KSB8CisJCQlGTERfVkFMKGlocywgMTMs IDEzKSB8CisJCQlGTERfVkFMKGl2cywgMTIsIDEyKSk7CisKKwlkaXNwYzZfdnBfd3JpdGUoZGlz cGMsIGNoYW5uZWwsIERJU1BDX1ZQX1NJWkVfU0NSRUVOLAorCQkJRkxEX1ZBTCh2bS0+aGFjdGl2 ZSAtIDEsIDExLCAwKSB8CisJCQlGTERfVkFMKHZtLT52YWN0aXZlIC0gMSwgMjcsIDE2KSk7Cit9 CisKK2ludCBkaXNwYzZfdnBfZW5hYmxlX2NsayhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywg ZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxl KGRpc3BjLT52cF9jbGspOworfQordm9pZCBkaXNwYzZfdnBfZGlzYWJsZV9jbGsoc3RydWN0IGRp c3BjX2RldmljZSAqZGlzcGMsCisJCQkgICBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKQorewor CWNsa19kaXNhYmxlX3VucHJlcGFyZShkaXNwYy0+dnBfY2xrKTsKK30KKworaW50IGRpc3BjNl92 cF9zZXRfY2xrX3JhdGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkgICBlbnVtIG9t YXBfY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IHI7CisJdW5z aWduZWQgbG9uZyBuZXdfcmF0ZTsKKworCXIgPSBjbGtfc2V0X3JhdGUoZGlzcGMtPnZwX2Nsaywg cmF0ZSk7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmZGlzcGMtPnBkZXYtPmRldiwgIkZhaWxlZCB0 byBzZXQgdnAgY2xrIHJhdGUgdG8gJWx1XG4iLAorCQkJcmF0ZSk7CisJCXJldHVybiByOworCX0K KworCW5ld19yYXRlID0gY2xrX2dldF9yYXRlKGRpc3BjLT52cF9jbGspOworCisJaWYgKHJhdGUg IT0gbmV3X3JhdGUpCisJCWRldl93YXJuKCZkaXNwYy0+cGRldi0+ZGV2LAorCQkJICJGYWlsZWQg dG8gZ2V0IGV4YWN0IHBpeCBjbG9jayAlbHUgIT0gJWx1XG4iLAorCQkJIHJhdGUsIG5ld19yYXRl KTsKKworCWRldl9kYmcoJmRpc3BjLT5wZGV2LT5kZXYsICJOZXcgVlAgcmF0ZSAlbHUgSHogKHJl cXVlc3RlZCAlbHUgSHopXG4iLAorCQljbGtfZ2V0X3JhdGUoZGlzcGMtPnZwX2NsayksIHJhdGUp OworCisJcmV0dXJuIDA7Cit9CisKKy8qIENTQyAqLworCitzdHJ1Y3QgY29sb3JfY29udl9jb2Vm IHsKKwlpbnQgcnksIHJjYiwgcmNyOworCWludCBneSwgZ2NiLCBnY3I7CisJaW50IGJ5LCBiY2Is IGJjcjsKKwlpbnQgcm9mZnNldCwgZ29mZnNldCwgYm9mZnNldDsKKwlib29sIGZ1bGxfcmFuZ2U7 Cit9OworCitzdGF0aWMgdm9pZCBkaXNwYzZfdmlkX3dyaXRlX2NvbG9yX2NvbnZfY29lZnMoc3Ry dWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJCSAgICAgIGVudW0gb21hcF9wbGFuZV9pZCBw bGFuZSwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZfY29lZiAqY3QpCit7Cisj ZGVmaW5lIENWQUwoeCwgeSkgKEZMRF9WQUwoeCwgMjYsIDE2KSB8IEZMRF9WQUwoeSwgMTAsIDAp KQorCisJZGlzcGM2X3ZpZF93cml0ZShkaXNwYywgcGxhbmUsIERJU1BDX1ZJRF9DT05WX0NPRUYo MCksIENWQUwoY3QtPnJjciwgY3QtPnJ5KSk7CisJZGlzcGM2X3ZpZF93cml0ZShkaXNwYywgcGxh bmUsIERJU1BDX1ZJRF9DT05WX0NPRUYoMSksIENWQUwoY3QtPmd5LCAgY3QtPnJjYikpOworCWRp c3BjNl92aWRfd3JpdGUoZGlzcGMsIHBsYW5lLCBESVNQQ19WSURfQ09OVl9DT0VGKDIpLCBDVkFM KGN0LT5nY2IsIGN0LT5nY3IpKTsKKwlkaXNwYzZfdmlkX3dyaXRlKGRpc3BjLCBwbGFuZSwgRElT UENfVklEX0NPTlZfQ09FRigzKSwgQ1ZBTChjdC0+YmNyLCBjdC0+YnkpKTsKKwlkaXNwYzZfdmlk X3dyaXRlKGRpc3BjLCBwbGFuZSwgRElTUENfVklEX0NPTlZfQ09FRig0KSwgQ1ZBTCgwLCBjdC0+ YmNiKSk7CisKKwlkaXNwYzZfdmlkX3dyaXRlKGRpc3BjLCBwbGFuZSwgRElTUENfVklEX0NPTlZf Q09FRig1KSwKKwkJCSBGTERfVkFMKGN0LT5yb2Zmc2V0LCAxNSwgMykgfCBGTERfVkFMKGN0LT5n b2Zmc2V0LCAzMSwgMTkpKTsKKwlkaXNwYzZfdmlkX3dyaXRlKGRpc3BjLCBwbGFuZSwgRElTUENf VklEX0NPTlZfQ09FRig2KSwKKwkJCSBGTERfVkFMKGN0LT5ib2Zmc2V0LCAxNSwgMykpOworCisJ VklEX1JFR19GTERfTU9EKGRpc3BjLCBwbGFuZSwgRElTUENfVklEX0FUVFJJQlVURVMsIGN0LT5m dWxsX3JhbmdlLCAxMSwgMTEpOworCisjdW5kZWYgQ1ZBTAorfQorCitzdGF0aWMgdm9pZCBkaXNw YzZfdmlkX2NzY19zZXR1cChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwkvKiBZVVYg LT4gUkdCLCBJVFUtUiBCVC42MDEsIGZ1bGwgcmFuZ2UgKi8KKwljb25zdCBzdHJ1Y3QgY29sb3Jf Y29udl9jb2VmIGNvZWZzX3l1djJyZ2JfYnQ2MDFfZnVsbCA9IHsKKwkJMjU2LCAgIDAsICAzNTgs CisJCTI1NiwgLTg4LCAtMTgyLAorCQkyNTYsIDQ1MiwgICAgMCwKKwkJMCwgLTIwNDgsIC0yMDQ4 LAorCQl0cnVlLAorCX07CisKKwlkaXNwYzZfdmlkX3dyaXRlX2NvbG9yX2NvbnZfY29lZnMoZGlz cGMsIDAsICZjb2Vmc195dXYycmdiX2J0NjAxX2Z1bGwpOworfQorCitzdGF0aWMgdm9pZCBkaXNw YzZfdmlkX2NzY19lbmFibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJICBlbnVt IG9tYXBfcGxhbmVfaWQgcGxhbmUsIGJvb2wgZW5hYmxlKQoreworCVZJRF9SRUdfRkxEX01PRChk aXNwYywgcGxhbmUsIERJU1BDX1ZJRF9BVFRSSUJVVEVTLCAhIWVuYWJsZSwgOSwgOSk7Cit9CisK Ky8qIFNDQUxFUiAqLworCitzdGF0aWMgdTMyIGRpc3BjNl9jYWxjX2Zpcl9pbmModTMyIGluLCB1 MzIgb3V0KQoreworCXJldHVybiAodTMyKWRpdl91NjQoMHgyMDAwMDB1bGwgKiBpbiwgb3V0KTsK K30KKworc3RydWN0IGRpc3BjNl92aWRfZmlyX2NvZWZzIHsKKwlzMTYgYzJbMTZdOworCXMxNiBj MVsxNl07CisJdTE2IGMwWzldOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaXNwYzZfdmlk X2Zpcl9jb2VmcyBkaXNwYzZfZmlyX2NvZWZzX251bGwgPSB7CisJLmMyID0gewkwIH0sCisJLmMx ID0geyAwIH0sCisJLmMwID0geyA1MTIsIDUxMiwgNTEyLCA1MTIsIDUxMiwgNTEyLCA1MTIsIDUx MiwgMjU2LCAgfSwKK307CisKKy8qIE09OCwgVXBzY2FsZSB4ID49IDEgKi8KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZGlzcGM2X3ZpZF9maXJfY29lZnMgZGlzcGM2X2Zpcl9jb2Vmc19tOCA9IHsKKwku YzIgPSB7CTAsIC00LCAtOCwgLTE2LCAtMjQsIC0zMiwgLTQwLCAtNDgsIDAsIDIsIDQsIDYsIDgs IDYsIDQsIDIsICB9LAorCS5jMSA9IHsgMCwgMjgsIDU2LCA5NCwgMTMyLCAxNzYsIDIyMCwgMjY2 LCAtNTYsIC02MCwgLTY0LCAtNjIsIC02MCwgLTUwLCAtNDAsIC0yMCwgIH0sCisJLmMwID0geyA1 MTIsIDUwNiwgNTAwLCA0NzgsIDQ1NiwgNDI0LCAzOTIsIDM1MiwgMzEyLCAgfSwKK307CisKKy8q IDUtdGFwLCBNPTIyLCBEb3duc2NhbGUgUmF0aW8gMi41IDwgeCA8IDMgKi8KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZGlzcGM2X3ZpZF9maXJfY29lZnMgZGlzcGM2X2Zpcl9jb2Vmc19tMjJfNXRhcCA9 IHsKKwkuYzIgPSB7IDE2LCAyMCwgMjQsIDMwLCAzNiwgNDIsIDQ4LCA1NiwgMCwgMCwgMCwgMiwg NCwgOCwgMTIsIDE0LCAgfSwKKwkuYzEgPSB7IDEzMiwgMTQwLCAxNDgsIDE1NiwgMTY0LCAxNzIs IDE4MCwgMTg2LCA2NCwgNzIsIDgwLCA4OCwgOTYsIDEwNCwgMTEyLCAxMjIsICB9LAorCS5jMCA9 IHsgMjE2LCAyMTYsIDIxNiwgMjE0LCAyMTIsIDIwOCwgMjA0LCAxOTgsIDE5MiwgIH0sCit9Owor CisvKiAzLXRhcCwgTT0yMiwgRG93bnNjYWxlIFJhdGlvIDIuNSA8IHggPCAzICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRpc3BjNl92aWRfZmlyX2NvZWZzIGRpc3BjNl9maXJfY29lZnNfbTIyXzN0 YXAgPSB7CisJLmMxID0geyAxMDAsIDExOCwgMTM2LCAxNTYsIDE3NiwgMTk2LCAyMTYsIDIzNiwg MCwgMTAsIDIwLCAzMCwgNDAsIDU0LCA2OCwgODQsICB9LAorCS5jMCA9IHsgMzEyLCAzMTAsIDMw OCwgMzAyLCAyOTYsIDI4NiwgMjc2LCAyNjYsIDI1NiwgIH0sCit9OworCitlbnVtIGRpc3BjNl92 aWRfZmlyX2NvZWZfc2V0IHsKKwlESVNQQzZfVklEX0ZJUl9DT0VGX0hPUklaLAorCURJU1BDNl9W SURfRklSX0NPRUZfSE9SSVpfVVYsCisJRElTUEM2X1ZJRF9GSVJfQ09FRl9WRVJULAorCURJU1BD Nl9WSURfRklSX0NPRUZfVkVSVF9VViwKK307CisKK3N0YXRpYyB2b2lkIGRpc3BjNl92aWRfd3Jp dGVfZmlyX2NvZWZzKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAgICAgICBlbnVt IG9tYXBfcGxhbmVfaWQgcGxhbmUsCisJCQkJICAgICAgIGVudW0gZGlzcGM2X3ZpZF9maXJfY29l Zl9zZXQgY29lZl9zZXQsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkaXNwYzZfdmlkX2Zpcl9j b2VmcyAqY29lZnMpCit7CisJc3RhdGljIGNvbnN0IHUxNiBjMF9yZWdzW10gPSB7CisJCVtESVNQ QzZfVklEX0ZJUl9DT0VGX0hPUklaXSA9IERJU1BDX1ZJRF9GSVJfQ09FRlNfSDAsCisJCVtESVNQ QzZfVklEX0ZJUl9DT0VGX0hPUklaX1VWXSA9IERJU1BDX1ZJRF9GSVJfQ09FRlNfSDBfQywKKwkJ W0RJU1BDNl9WSURfRklSX0NPRUZfVkVSVF0gPSBESVNQQ19WSURfRklSX0NPRUZTX1YwLAorCQlb RElTUEM2X1ZJRF9GSVJfQ09FRl9WRVJUX1VWXSA9IERJU1BDX1ZJRF9GSVJfQ09FRlNfVjBfQywK Kwl9OworCisJc3RhdGljIGNvbnN0IHUxNiBjMTJfcmVnc1tdID0geworCQlbRElTUEM2X1ZJRF9G SVJfQ09FRl9IT1JJWl0gPSBESVNQQ19WSURfRklSX0NPRUZTX0gxMiwKKwkJW0RJU1BDNl9WSURf RklSX0NPRUZfSE9SSVpfVVZdID0gRElTUENfVklEX0ZJUl9DT0VGU19IMTJfQywKKwkJW0RJU1BD Nl9WSURfRklSX0NPRUZfVkVSVF0gPSBESVNQQ19WSURfRklSX0NPRUZTX1YxMiwKKwkJW0RJU1BD Nl9WSURfRklSX0NPRUZfVkVSVF9VVl0gPSBESVNQQ19WSURfRklSX0NPRUZTX1YxMl9DLAorCX07 CisKKwljb25zdCB1MTYgYzBfYmFzZSA9IGMwX3JlZ3NbY29lZl9zZXRdOworCWNvbnN0IHUxNiBj MTJfYmFzZSA9IGMxMl9yZWdzW2NvZWZfc2V0XTsKKwlpbnQgcGhhc2U7CisKKwlmb3IgKHBoYXNl ID0gMDsgcGhhc2UgPD0gODsgKytwaGFzZSkgeworCQl1MTYgcmVnID0gYzBfYmFzZSArIHBoYXNl ICogNDsKKwkJdTE2IGMwID0gY29lZnMtPmMwW3BoYXNlXTsKKworCQlkaXNwYzZfdmlkX3dyaXRl KGRpc3BjLCBwbGFuZSwgcmVnLCBjMCk7CisJfQorCisJZm9yIChwaGFzZSA9IDA7IHBoYXNlIDw9 IDE1OyArK3BoYXNlKSB7CisJCXUxNiByZWcgPSBjMTJfYmFzZSArIHBoYXNlICogNDsKKwkJczE2 IGMxLCBjMjsKKwkJdTMyIGMxMjsKKworCQljMSA9IGNvZWZzLT5jMVtwaGFzZV07CisJCWMyID0g Y29lZnMtPmMyW3BoYXNlXTsKKwkJYzEyID0gRkxEX1ZBTChjMSwgMTksIDEwKSB8IEZMRF9WQUwo YzIsIDI5LCAyMCk7CisKKwkJZGlzcGM2X3ZpZF93cml0ZShkaXNwYywgcGxhbmUsIHJlZywgYzEy KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjNl92aWRfd3JpdGVfc2NhbGVfY29lZnMoc3Ry dWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJCSBlbnVtIG9tYXBfcGxhbmVfaWQgcGxhbmUp Cit7CisJZGlzcGM2X3ZpZF93cml0ZV9maXJfY29lZnMoZGlzcGMsIHBsYW5lLCBESVNQQzZfVklE X0ZJUl9DT0VGX0hPUklaLCAmZGlzcGM2X2Zpcl9jb2Vmc19udWxsKTsKKwlkaXNwYzZfdmlkX3dy aXRlX2Zpcl9jb2VmcyhkaXNwYywgcGxhbmUsIERJU1BDNl9WSURfRklSX0NPRUZfSE9SSVpfVVYs ICZkaXNwYzZfZmlyX2NvZWZzX251bGwpOworCWRpc3BjNl92aWRfd3JpdGVfZmlyX2NvZWZzKGRp c3BjLCBwbGFuZSwgRElTUEM2X1ZJRF9GSVJfQ09FRl9WRVJULCAmZGlzcGM2X2Zpcl9jb2Vmc19u dWxsKTsKKwlkaXNwYzZfdmlkX3dyaXRlX2Zpcl9jb2VmcyhkaXNwYywgcGxhbmUsIERJU1BDNl9W SURfRklSX0NPRUZfVkVSVF9VViwgJmRpc3BjNl9maXJfY29lZnNfbnVsbCk7Cit9CisKK3N0YXRp YyB2b2lkIGRpc3BjNl92aWRfc2V0X3NjYWxpbmcoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMs CisJCQkJICAgZW51bSBvbWFwX3BsYW5lX2lkIHBsYW5lLAorCQkJCSAgIHUzMiBvcmlnX3dpZHRo LCB1MzIgb3JpZ19oZWlnaHQsCisJCQkJICAgdTMyIG91dF93aWR0aCwgdTMyIG91dF9oZWlnaHQs CisJCQkJICAgdTMyIGZvdXJjYykKK3sKKwl1MzIgaW5fdywgaW5faCwgaW5fd191diwgaW5faF91 djsKKwl1MzIgZmlyX2hpbmMsIGZpcl92aW5jLCBmaXJfaGluY191diwgZmlyX3ZpbmNfdXY7CisJ Ym9vbCBzY2FsZV94LCBzY2FsZV95OworCWJvb2wgZml2ZV90YXBzID0gZmFsc2U7CQkvKiBYWFgg YWx3YXlzIDMtdGFwIGZvciBub3cgKi8KKworCWluX3cgPSBpbl93X3V2ID0gb3JpZ193aWR0aDsK Kwlpbl9oID0gaW5faF91diA9IG9yaWdfaGVpZ2h0OworCisJc3dpdGNoIChmb3VyY2MpIHsKKwlj YXNlIERSTV9GT1JNQVRfTlYxMjoKKwkJLyogVVYgaXMgc3Vic2FtcGxlZCBieSAyIGhvcml6b250 YWxseSBhbmQgdmVydGljYWxseSAqLworCQlpbl9oX3V2ID4+PSAxOworCQlpbl93X3V2ID4+PSAx OworCQlicmVhazsKKworCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCWNhc2UgRFJNX0ZPUk1BVF9V WVZZOgorCQkvKiBVViBpcyBzdWJzYW1wbGVkIGJ5IDIgaG9yaXpvbnRhbGx5ICovCisJCWluX3df dXYgPj49IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc2NhbGVf eCA9IGluX3cgIT0gb3V0X3dpZHRoIHx8IGluX3dfdXYgIT0gb3V0X3dpZHRoOworCXNjYWxlX3kg PSBpbl9oICE9IG91dF9oZWlnaHQgfHwgaW5faF91diAhPSBvdXRfaGVpZ2h0OworCisJLyogSE9S SVpPTlRBTCBSRVNJWkUgRU5BQkxFICovCisJVklEX1JFR19GTERfTU9EKGRpc3BjLCBwbGFuZSwg RElTUENfVklEX0FUVFJJQlVURVMsIHNjYWxlX3gsIDcsIDcpOworCisJLyogVkVSVElDQUwgUkVT SVpFIEVOQUJMRSAqLworCVZJRF9SRUdfRkxEX01PRChkaXNwYywgcGxhbmUsIERJU1BDX1ZJRF9B VFRSSUJVVEVTLCBzY2FsZV95LCA4LCA4KTsKKworCS8qIFNraXAgdGhlIHJlc3QgaWYgbm8gc2Nh bGluZyBpcyB1c2VkICovCisJaWYgKCFzY2FsZV94ICYmICFzY2FsZV95KQorCQlyZXR1cm47CisK KwkvKiBWRVJUSUNBTCA1LVRBUFMgICovCisJVklEX1JFR19GTERfTU9EKGRpc3BjLCBwbGFuZSwg RElTUENfVklEX0FUVFJJQlVURVMsIGZpdmVfdGFwcywgMjEsIDIxKTsKKworCS8qIEZJUiBJTkMg Ki8KKworCWZpcl9oaW5jID0gZGlzcGM2X2NhbGNfZmlyX2luYyhpbl93LCBvdXRfd2lkdGgpOwor CWZpcl92aW5jID0gZGlzcGM2X2NhbGNfZmlyX2luYyhpbl9oLCBvdXRfaGVpZ2h0KTsKKwlmaXJf aGluY191diA9IGRpc3BjNl9jYWxjX2Zpcl9pbmMoaW5fd191diwgb3V0X3dpZHRoKTsKKwlmaXJf dmluY191diA9IGRpc3BjNl9jYWxjX2Zpcl9pbmMoaW5faF91diwgb3V0X2hlaWdodCk7CisKKwlk aXNwYzZfdmlkX3dyaXRlKGRpc3BjLCBwbGFuZSwgRElTUENfVklEX0ZJUkgsIGZpcl9oaW5jKTsK KwlkaXNwYzZfdmlkX3dyaXRlKGRpc3BjLCBwbGFuZSwgRElTUENfVklEX0ZJUlYsIGZpcl92aW5j KTsKKwlkaXNwYzZfdmlkX3dyaXRlKGRpc3BjLCBwbGFuZSwgRElTUENfVklEX0ZJUkgyLCBmaXJf aGluY191dik7CisJZGlzcGM2X3ZpZF93cml0ZShkaXNwYywgcGxhbmUsIERJU1BDX1ZJRF9GSVJW MiwgZmlyX3ZpbmNfdXYpOworCisJZGlzcGM2X3ZpZF93cml0ZV9zY2FsZV9jb2VmcyhkaXNwYywg cGxhbmUpOworfQorCisvKiBPVEhFUiAqLworCitzdGF0aWMgY29uc3QgZW51bSBvbWFwX2NvbG9y X21vZGUgZGlzcGM2X3N1cHBvcnRlZF9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4 OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfUkdCWDg4ODgsCisJRFJNX0ZP Uk1BVF9SR0JBODg4OCwKKwlEUk1fRk9STUFUX1lVWVYsCisJRFJNX0ZPUk1BVF9VWVZZLAorCURS TV9GT1JNQVRfTlYxMiwKKwkwCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1MzIgZm91 cmNjOworCXU4IGRzc19jb2RlOworCXU4IGJ5dGVzcHA7Cit9IGRpc3BjNl9jb2xvcl9mb3JtYXRz W10gPSB7CisJeyBEUk1fRk9STUFUX1hSR0I4ODg4LCAweDI3LCA0LCB9LAorCXsgRFJNX0ZPUk1B VF9BUkdCODg4OCwgMHg3LCA0LCB9LAorCisJeyBEUk1fRk9STUFUX1JHQlg4ODg4LCAweDI5LCA0 LCB9LAorCXsgRFJNX0ZPUk1BVF9SR0JBODg4OCwgMHg5LCA0LCB9LAorCisJeyBEUk1fRk9STUFU X1lVWVYsIDB4M2UsIDIsIH0sCisJeyBEUk1fRk9STUFUX1VZVlksIDB4M2YsIDIsIH0sCisKKwl7 IERSTV9GT1JNQVRfTlYxMiwgMHgzZCwgMiwgfSwKK307CisKK3N0YXRpYyBib29sIGRpc3BjNl9m b3VyY2NfaXNfeXV2KHUzMiBmb3VyY2MpCit7CisJc3dpdGNoIChmb3VyY2MpIHsKKwljYXNlIERS TV9GT1JNQVRfWVVZVjoKKwljYXNlIERSTV9GT1JNQVRfVVlWWToKKwljYXNlIERSTV9GT1JNQVRf TlYxMjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30K Kworc3RhdGljIHZvaWQgZGlzcGM2X292bF9zZXRfcGl4ZWxfZm9ybWF0KHN0cnVjdCBkaXNwY19k ZXZpY2UgKmRpc3BjLAorCQkJCQllbnVtIG9tYXBfcGxhbmVfaWQgcGxhbmUsIHUzMiBmb3VyY2Mp Cit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaXNwYzZfY29sb3Jf Zm9ybWF0cyk7ICsraSkgeworCQlpZiAoZGlzcGM2X2NvbG9yX2Zvcm1hdHNbaV0uZm91cmNjID09 IGZvdXJjYykgeworCQkJVklEX1JFR19GTERfTU9EKGRpc3BjLCBwbGFuZSwgRElTUENfVklEX0FU VFJJQlVURVMsCisJCQkJCWRpc3BjNl9jb2xvcl9mb3JtYXRzW2ldLmRzc19jb2RlLAorCQkJCQk2 LCAxKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCV9fV0FSTigpOworfQorCitzdGF0aWMgaW50 IGRpc3BjNl9mb3VyY2NfdG9fYnl0ZXNwcCh1MzIgZm91cmNjKQoreworCWludCBpOworCisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlzcGM2X2NvbG9yX2Zvcm1hdHMpOyArK2kpIHsKKwkJ aWYgKGRpc3BjNl9jb2xvcl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmb3VyY2MpCisJCQlyZXR1cm4g ZGlzcGM2X2NvbG9yX2Zvcm1hdHNbaV0uYnl0ZXNwcDsKKwl9CisKKwlfX1dBUk4oKTsKKwlyZXR1 cm4gNDsKK30KKworc3RhdGljIHMzMiBwaXhpbmMoaW50IHBpeGVscywgdTggcHMpCit7CisJaWYg KHBpeGVscyA9PSAxKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChwaXhlbHMgPiAxKQorCQlyZXR1 cm4gMSArIChwaXhlbHMgLSAxKSAqIHBzOworCWVsc2UgaWYgKHBpeGVscyA8IDApCisJCXJldHVy biAxIC0gKC1waXhlbHMgKyAxKSAqIHBzOworCisJX19XQVJOKCk7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZGlzcGM2X292bF9zZXR1cChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywK KwkJCSAgICBlbnVtIG9tYXBfcGxhbmVfaWQgcGxhbmUsCisJCQkgICAgY29uc3Qgc3RydWN0IG9t YXBfb3ZlcmxheV9pbmZvICpvaSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdmlkZW9tb2RlICp2bSwg Ym9vbCBtZW1fdG9fbWVtLAorCQkJICAgIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpCit7CisJ dTMyIGZvdXJjYyA9IG9pLT5mb3VyY2M7CisJaW50IGJ5dGVzcHAgPSBkaXNwYzZfZm91cmNjX3Rv X2J5dGVzcHAoZm91cmNjKTsKKworCWRpc3BjNl9vdmxfc2V0X3BpeGVsX2Zvcm1hdChkaXNwYywg cGxhbmUsIGZvdXJjYyk7CisKKwlkaXNwYzZfdmlkX3dyaXRlKGRpc3BjLCBwbGFuZSwgRElTUENf VklEX0JBXzAsIG9pLT5wYWRkcik7CisJZGlzcGM2X3ZpZF93cml0ZShkaXNwYywgcGxhbmUsIERJ U1BDX1ZJRF9CQV8xLCBvaS0+cGFkZHIpOworCisJZGlzcGM2X3ZpZF93cml0ZShkaXNwYywgcGxh bmUsIERJU1BDX1ZJRF9CQV9VVl8wLCBvaS0+cF91dl9hZGRyKTsKKwlkaXNwYzZfdmlkX3dyaXRl KGRpc3BjLCBwbGFuZSwgRElTUENfVklEX0JBX1VWXzEsIG9pLT5wX3V2X2FkZHIpOworCisJZGlz cGM2X3ZpZF93cml0ZShkaXNwYywgcGxhbmUsIERJU1BDX1ZJRF9QSUNUVVJFX1NJWkUsCisJCQkg KG9pLT53aWR0aCAtIDEpIHwgKChvaS0+aGVpZ2h0IC0gMSkgPDwgMTYpKTsKKworCWRpc3BjNl92 aWRfd3JpdGUoZGlzcGMsIHBsYW5lLCBESVNQQ19WSURfUElYRUxfSU5DLCBwaXhpbmMoMSwgYnl0 ZXNwcCkpOworCWRpc3BjNl92aWRfd3JpdGUoZGlzcGMsIHBsYW5lLCBESVNQQ19WSURfUk9XX0lO QywKKwkJCSBwaXhpbmMoMSArIG9pLT5zY3JlZW5fd2lkdGggLSBvaS0+d2lkdGgsIGJ5dGVzcHAp KTsKKworCWRpc3BjNl92aWRfd3JpdGUoZGlzcGMsIHBsYW5lLCBESVNQQ19WSURfUE9TSVRJT04s CisJCQkgb2ktPnBvc194IHwgKG9pLT5wb3NfeSA8PCAxNikpOworCisJZGlzcGM2X3ZpZF93cml0 ZShkaXNwYywgcGxhbmUsIERJU1BDX1ZJRF9TSVpFLAorCQkJIChvaS0+b3V0X3dpZHRoIC0gMSkg fCAoKG9pLT5vdXRfaGVpZ2h0IC0gMSkgPDwgMTYpKTsKKworCWRpc3BjNl92aWRfc2V0X3NjYWxp bmcoZGlzcGMsIHBsYW5lLAorCQkJICAgICAgIG9pLT53aWR0aCwgb2ktPmhlaWdodCwgb2ktPm91 dF93aWR0aCwgb2ktPm91dF9oZWlnaHQsCisJCQkgICAgICAgZm91cmNjKTsKKworCS8qIGVuYWJs ZSBZVVYtPlJHQiBjb2xvciBjb252ZXJzaW9uICovCisJaWYgKGRpc3BjNl9mb3VyY2NfaXNfeXV2 KGZvdXJjYykpCisJCWRpc3BjNl92aWRfY3NjX2VuYWJsZShkaXNwYywgcGxhbmUsIHRydWUpOwor CWVsc2UKKwkJZGlzcGM2X3ZpZF9jc2NfZW5hYmxlKGRpc3BjLCBwbGFuZSwgZmFsc2UpOworCisJ LyogY2hhbm5lbCAqLworCVZJRF9SRUdfRkxEX01PRChkaXNwYywgcGxhbmUsIERJU1BDX1ZJRF9B VFRSSUJVVEVTLCAwLCAxNiwgMTQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlz cGM2X292bF9lbmFibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkgICAgIGVudW0g b21hcF9wbGFuZV9pZCBwbGFuZSwgYm9vbCBlbmFibGUpCit7CisJVklEX1JFR19GTERfTU9EKGRp c3BjLCBwbGFuZSwgRElTUENfVklEX0FUVFJJQlVURVMsICEhZW5hYmxlLCAwLCAwKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHUzMiBkaXNwYzZfdmlkX2dldF9maWZvX3NpemUoc3RydWN0IGRp c3BjX2RldmljZSAqZGlzcGMsCisJCQkJICAgIGVudW0gb21hcF9wbGFuZV9pZCBwbGFuZSkKK3sK Kwljb25zdCB1MzIgdW5pdF9zaXplID0gMTY7CS8qIDEyOC1iaXRzICovCisKKwlyZXR1cm4gVklE X1JFR19HRVQoZGlzcGMsIHBsYW5lLCBESVNQQ19WSURfQlVGX1NJWkVfU1RBVFVTLCAxNSwgMCkg KiB1bml0X3NpemU7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjNl92aWRfc2V0X21mbGFnX3RocmVz aG9sZChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJICAgZW51bSBvbWFwX3BsYW5l X2lkIHBsYW5lLAorCQkJCQkgICB1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlkaXNwYzZfdmlkX3dy aXRlKGRpc3BjLCBwbGFuZSwgRElTUENfVklEX01GTEFHX1RIUkVTSE9MRCwKKwkJCSBGTERfVkFM KGhpZ2gsIDMxLCAxNikgfCBGTERfVkFMKGxvdywgMTUsIDApKTsKK30KKworc3RhdGljIHZvaWQg ZGlzcGM2X21mbGFnX3NldHVwKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQoreworCWVudW0g b21hcF9wbGFuZV9pZCBwbGFuZSA9IDA7CisJY29uc3QgdTMyIHVuaXRfc2l6ZSA9IDE2OwkvKiAx MjgtYml0cyAqLworCXUzMiBzaXplID0gZGlzcGM2X3ZpZF9nZXRfZmlmb19zaXplKGRpc3BjLCBw bGFuZSk7CisJdTMyIGxvdywgaGlnaDsKKworCS8qIE1GTEFHX0NUUkwgKi8KKwlSRUdfRkxEX01P RChkaXNwYywgRElTUENfR0xPQkFMX01GTEFHX0FUVFJJQlVURSwgMSwgMSwgMCk7CisJLyogTUZM QUdfU1RBUlQgKi8KKwlSRUdfRkxEX01PRChkaXNwYywgRElTUENfR0xPQkFMX01GTEFHX0FUVFJJ QlVURSwgMCwgMiwgMik7CisKKwkvKgorCSAqIFNpbXVsYXRpb24gdGVhbSBzdWdnZXN0cyBiZWxv dyB0aGVzaG9sZHM6CisJICogSFQgPSBmaWZvc2l6ZSAqIDUgLyA4OworCSAqIExUID0gZmlmb3Np emUgKiA0IC8gODsKKwkgKi8KKworCWxvdyA9IHNpemUgKiA0IC8gOCAvIHVuaXRfc2l6ZTsKKwlo aWdoID0gc2l6ZSAqIDUgLyA4IC8gdW5pdF9zaXplOworCisJZGlzcGM2X3ZpZF9zZXRfbWZsYWdf dGhyZXNob2xkKGRpc3BjLCBwbGFuZSwgbG93LCBoaWdoKTsKK30KKworc3RhdGljIHZvaWQgZGlz cGM2X3ZwX3NldHVwKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQoreworCS8qIEVuYWJsZSB0 aGUgZ2FtbWEgU2hhZG93IGJpdC1maWVsZCAqLworCVZQX1JFR19GTERfTU9EKGRpc3BjLCAwLCBE SVNQQ19WUF9DT05GSUcsIDEsIDIsIDIpOworfQorCitzdGF0aWMgdm9pZCBkaXNwYzZfaW5pdGlh bF9jb25maWcoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpCit7CisJZGlzcGM2X3ZpZF9jc2Nf c2V0dXAoZGlzcGMpOworCWRpc3BjNl9tZmxhZ19zZXR1cChkaXNwYyk7CisJZGlzcGM2X3ZwX3Nl dHVwKGRpc3BjKTsKK30KKworc3RhdGljIGludCBkaXNwYzZfaW5pdF9mZWF0dXJlcyhzdHJ1Y3Qg ZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0g ZGlzcGMtPnBkZXY7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisKKwltYXRj aCA9IG9mX21hdGNoX25vZGUoZGlzcGM2X29mX21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJ aWYgKCFtYXRjaCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBESVNQQyB2 ZXJzaW9uXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGlzcGMtPmZlYXQgPSBtYXRj aC0+ZGF0YTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBvbWFwX2Rzc19vdXRwdXRf aWQKK2Rpc3BjNl9tZ3JfZ2V0X3N1cHBvcnRlZF9vdXRwdXRzKHN0cnVjdCBkaXNwY19kZXZpY2Ug KmRpc3BjLAorCQkJCSBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKQoreworCXJldHVybiBPTUFQ X0RTU19PVVRQVVRfRFBJOworfQorCitzdGF0aWMgY29uc3QgdTMyICpkaXNwYzZfb3ZsX2dldF9j b2xvcl9tb2RlcyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJICAgICBlbnVtIG9t YXBfcGxhbmVfaWQgcGxhbmUpCit7CisJcmV0dXJuIGRpc3BjNl9zdXBwb3J0ZWRfZm9ybWF0czsK K30KKworc3RhdGljIGludCBkaXNwYzZfZ2V0X251bV9vdmxzKHN0cnVjdCBkaXNwY19kZXZpY2Ug KmRpc3BjKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRpc3BjNl9nZXRfbnVtX21n cnMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRp YyB1MzIgZGlzcGM2X21ncl9nYW1tYV9zaXplKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAor CQkJCSBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKQoreworCXJldHVybiBBUlJBWV9TSVpFKGRp c3BjLT5nYW1tYV90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjNl9tZ3Jfd3JpdGVfZ2Ft bWFfdGFibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJCSBlbnVtIG9tYXBfY2hh bm5lbCBjaGFubmVsKQoreworCXUzMiAqdGFibGUgPSBkaXNwYy0+Z2FtbWFfdGFibGU7CisJdWlu dCBod2xlbiA9IEFSUkFZX1NJWkUoZGlzcGMtPmdhbW1hX3RhYmxlKTsKKwl1bnNpZ25lZCBpbnQg aTsKKworCWRldl9kYmcoJmRpc3BjLT5wZGV2LT5kZXYsICIlczogY2hhbm5lbCAlZFxuIiwgX19m dW5jX18sIGNoYW5uZWwpOworCisJZm9yIChpID0gMDsgaSA8IGh3bGVuOyArK2kpIHsKKwkJdTMy IHYgPSB0YWJsZVtpXTsKKworCQl2IHw9IGkgPDwgMjQ7CisKKwkJZGlzcGM2X3ZwX3dyaXRlKGRp c3BjLCBjaGFubmVsLCBESVNQQ19WUF9HQU1NQV9UQUJMRSwgdik7CisJfQorfQorCitzdGF0aWMg dm9pZCBkaXNwYzZfcmVzdG9yZV9nYW1tYV90YWJsZXMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlz cGMpCit7CisJZGV2X2RiZygmZGlzcGMtPnBkZXYtPmRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsK KworCWRpc3BjNl9tZ3Jfd3JpdGVfZ2FtbWFfdGFibGUoZGlzcGMsIDApOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9jb2xvcl9sdXQgZGlzcGM2X21ncl9nYW1tYV9kZWZhdWx0X2x1dFtd ID0geworCXsgLnJlZCA9IDAsIC5ncmVlbiA9IDAsIC5ibHVlID0gMCwgfSwKKwl7IC5yZWQgPSBV MTZfTUFYLCAuZ3JlZW4gPSBVMTZfTUFYLCAuYmx1ZSA9IFUxNl9NQVgsIH0sCit9OworCitzdGF0 aWMgdm9pZCBkaXNwYzZfbWdyX3NldF9nYW1tYShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywK KwkJCSBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLAorCQkJIGNvbnN0IHN0cnVjdCBkcm1fY29s b3JfbHV0ICpsdXQsCisJCQkgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwl1MzIgKnRhYmxlID0g ZGlzcGMtPmdhbW1hX3RhYmxlOworCXVpbnQgaHdsZW4gPSBBUlJBWV9TSVpFKGRpc3BjLT5nYW1t YV90YWJsZSk7CisJc3RhdGljIGNvbnN0IHVpbnQgaHdiaXRzID0gODsKKwl1aW50IGk7CisKKwlk ZXZfZGJnKCZkaXNwYy0+cGRldi0+ZGV2LCAiJXM6IGNoYW5uZWwgJWQsIGx1dCBsZW4gJXUsIGh3 IGxlbiAldVxuIiwKKwkJX19mdW5jX18sIGNoYW5uZWwsIGxlbmd0aCwgaHdsZW4pOworCisJaWYg KGx1dCA9PSBOVUxMIHx8IGxlbmd0aCA8IDIpIHsKKwkJbHV0ID0gZGlzcGM2X21ncl9nYW1tYV9k ZWZhdWx0X2x1dDsKKwkJbGVuZ3RoID0gQVJSQVlfU0laRShkaXNwYzZfbWdyX2dhbW1hX2RlZmF1 bHRfbHV0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgKytpKSB7CisJCXVp bnQgZmlyc3QgPSBpICogKGh3bGVuIC0gMSkgLyAobGVuZ3RoIC0gMSk7CisJCXVpbnQgbGFzdCA9 IChpICsgMSkgKiAoaHdsZW4gLSAxKSAvIChsZW5ndGggLSAxKTsKKwkJdWludCB3ID0gbGFzdCAt IGZpcnN0OworCQl1MTYgciwgZywgYjsKKwkJdWludCBqOworCisJCWlmICh3ID09IDApCisJCQlj b250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDw9IHc7IGorKykgeworCQkJciA9IChsdXRbaV0u cmVkICogKHcgLSBqKSArIGx1dFtpKzFdLnJlZCAqIGopIC8gdzsKKwkJCWcgPSAobHV0W2ldLmdy ZWVuICogKHcgLSBqKSArIGx1dFtpKzFdLmdyZWVuICogaikgLyB3OworCQkJYiA9IChsdXRbaV0u Ymx1ZSAqICh3IC0gaikgKyBsdXRbaSsxXS5ibHVlICogaikgLyB3OworCisJCQlyID4+PSAxNiAt IGh3Yml0czsKKwkJCWcgPj49IDE2IC0gaHdiaXRzOworCQkJYiA+Pj0gMTYgLSBod2JpdHM7CisK KwkJCXRhYmxlW2ZpcnN0ICsgal0gPSAociA8PCAoaHdiaXRzICogMikpIHwKKwkJCQkoZyA8PCBo d2JpdHMpIHwgYjsKKwkJfQorCX0KKworCWlmIChkaXNwYy0+aXNfZW5hYmxlZCkKKwkJZGlzcGM2 X21ncl93cml0ZV9nYW1tYV90YWJsZShkaXNwYywgY2hhbm5lbCk7Cit9CisKK3N0YXRpYyBpbnQg ZGlzcGM2X2luaXRfZ2FtbWFfdGFibGVzKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQorewor CWRpc3BjNl9tZ3Jfc2V0X2dhbW1hKGRpc3BjLCAwLCBOVUxMLCAwKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgdTMyIGRpc3BjNl9nZXRfbWVtb3J5X2JhbmR3aWR0aF9saW1pdChzdHJ1Y3Qg ZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwl1MzIgbGltaXQgPSAwOworCisJLyogT3B0aW9uYWwg bWF4aW11bSBtZW1vcnkgYmFuZHdpZHRoICovCisJb2ZfcHJvcGVydHlfcmVhZF91MzIoZGlzcGMt PnBkZXYtPmRldi5vZl9ub2RlLCAibWF4LW1lbW9yeS1iYW5kd2lkdGgiLAorCQkJICAgICAmbGlt aXQpOworCisJcmV0dXJuIGxpbWl0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZGlzcGM2X292 bF9uYW1lKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAgIGVudW0gb21hcF9wbGFu ZV9pZCBwbGFuZSkKK3sKKwlyZXR1cm4gInZpZDEiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAq ZGlzcGM2X21ncl9uYW1lKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAgIGVudW0g b21hcF9jaGFubmVsIGNoYW5uZWwpCit7CisJcmV0dXJuICJ2cDEiOworfQorCitzdGF0aWMgYm9v bCBkaXNwYzZfbWdyX2hhc19mcmFtZWRvbmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJ CQkJICAgICBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKQoreworCXJldHVybiB0cnVlOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRpc3BjX29wcyBkaXNwYzZfb3BzID0geworCS5yZWFkX2Fu ZF9jbGVhcl9pcnFzdGF0dXMgPSBkaXNwYzZfcmVhZF9hbmRfY2xlYXJfaXJxc3RhdHVzLAorCS53 cml0ZV9pcnFlbmFibGUgPSBkaXNwYzZfd3JpdGVfaXJxZW5hYmxlLAorCisJLnJlcXVlc3RfaXJx ID0gZGlzcGM2X3JlcXVlc3RfaXJxLAorCS5mcmVlX2lycSA9IGRpc3BjNl9mcmVlX2lycSwKKwor CS5ydW50aW1lX2dldCA9IGRpc3BjNl9ydW50aW1lX2dldCwKKwkucnVudGltZV9wdXQgPSBkaXNw YzZfcnVudGltZV9wdXQsCisKKwkuZ2V0X251bV9vdmxzID0gZGlzcGM2X2dldF9udW1fb3ZscywK KwkuZ2V0X251bV9tZ3JzID0gZGlzcGM2X2dldF9udW1fbWdycywKKworCS5vdmxfbmFtZSA9IGRp c3BjNl9vdmxfbmFtZSwKKwkubWdyX25hbWUgPSBkaXNwYzZfbWdyX25hbWUsCisKKwkubWdyX2hh c19mcmFtZWRvbmUgPSBkaXNwYzZfbWdyX2hhc19mcmFtZWRvbmUsCisKKwkuZ2V0X21lbW9yeV9i YW5kd2lkdGhfbGltaXQgPSBkaXNwYzZfZ2V0X21lbW9yeV9iYW5kd2lkdGhfbGltaXQsCisKKwku bWdyX2VuYWJsZSA9IGRpc3BjNl9tZ3JfZW5hYmxlLAorCS5tZ3JfaXNfZW5hYmxlZCA9IGRpc3Bj Nl9tZ3JfaXNfZW5hYmxlZCwKKwkubWdyX2dvX2J1c3kgPSBkaXNwYzZfbWdyX2dvX2J1c3ksCisJ Lm1ncl9nbyA9IGRpc3BjNl9tZ3JfZ28sCisJLm1ncl9zZXRfbGNkX2NvbmZpZyA9IGRpc3BjNl9t Z3Jfc2V0X2xjZF9jb25maWcsCisJLm1ncl9zZXRfdGltaW5ncyA9IGRpc3BjNl9tZ3Jfc2V0X3Rp bWluZ3MsCisJLm1ncl9zZXR1cCA9IGRpc3BjNl9tZ3Jfc2V0dXAsCisJLm1ncl9nZXRfc3VwcG9y dGVkX291dHB1dHMgPSBkaXNwYzZfbWdyX2dldF9zdXBwb3J0ZWRfb3V0cHV0cywKKwkubWdyX2dh bW1hX3NpemUgPSBkaXNwYzZfbWdyX2dhbW1hX3NpemUsCisJLm1ncl9zZXRfZ2FtbWEgPSBkaXNw YzZfbWdyX3NldF9nYW1tYSwKKworCS5vdmxfZW5hYmxlID0gZGlzcGM2X292bF9lbmFibGUsCisJ Lm92bF9zZXR1cCA9IGRpc3BjNl9vdmxfc2V0dXAsCisJLm92bF9nZXRfY29sb3JfbW9kZXMgPSBk aXNwYzZfb3ZsX2dldF9jb2xvcl9tb2RlcywKK307CisKK3N0YXRpYyBpbnQgZGlzcGM2X2lvbWFw X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGNvbnN0IGNoYXIgKm5hbWUs CisJCQkJIHZvaWQgX19pb21lbSAqKmJhc2UpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJ dm9pZCBfX2lvbWVtICpiOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShw ZGV2LCBJT1JFU09VUkNFX01FTSwgbmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRl di0+ZGV2LCAiY2Fubm90IGdldCBtZW0gcmVzb3VyY2UgJyVzJ1xuIiwgbmFtZSk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwg cmVzKTsKKwlpZiAoSVNfRVJSKGIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBp b3JlbWFwIHJlc291cmNlICclcydcbiIsIG5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihiKTsKKwl9 CisKKwkqYmFzZSA9IGI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNwYzZfYmlu ZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkK K3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRl dik7CisJc3RydWN0IGRzczZfZGV2aWNlICpkc3M2ID0gZHNzNl9nZXRfZGV2aWNlKG1hc3Rlcik7 CisJc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGM7CisJaW50IHIgPSAwOworCisJZGlzcGMgPSBr emFsbG9jKHNpemVvZigqZGlzcGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRpc3BjKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWRpc3BjLT5wZGV2ID0gcGRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBkaXNwYyk7CisJZGlzcGMtPmRzczYgPSBkc3M2OworCisJciA9IGRpc3BjNl9pbml0 X2ZlYXR1cmVzKGRpc3BjKTsKKwlpZiAocikKKwkJZ290byBlcnJfZnJlZTsKKworCXIgPSBkaXNw YzZfaW9tYXBfcmVzb3VyY2UocGRldiwgImNvbW1vbiIsICZkaXNwYy0+YmFzZV9jb21tb24pOwor CWlmIChyKQorCQlnb3RvIGVycl9mcmVlOworCisJciA9IGRpc3BjNl9pb21hcF9yZXNvdXJjZShw ZGV2LCAidmlkMSIsICZkaXNwYy0+YmFzZV92aWQxKTsKKwlpZiAocikKKwkJZ290byBlcnJfZnJl ZTsKKworCXIgPSBkaXNwYzZfaW9tYXBfcmVzb3VyY2UocGRldiwgIm92cjEiLCAmZGlzcGMtPmJh c2Vfb3ZyMSk7CisJaWYgKHIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlyID0gZGlzcGM2X2lvbWFw X3Jlc291cmNlKHBkZXYsICJ2cDEiLCAmZGlzcGMtPmJhc2VfdnAxKTsKKwlpZiAocikKKwkJZ290 byBlcnJfZnJlZTsKKworCWRpc3BjLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRpc3BjLT5wZGV2 LCAwKTsKKwlpZiAoZGlzcGMtPmlycSA8IDApIHsKKwkJZGV2X2VycihkZXYsICJwbGF0Zm9ybV9n ZXRfaXJxIGZhaWxlZFxuIik7CisJCXIgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlOworCX0K KworCWRpc3BjLT5mY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImZjayIpOworCWlmIChJU19FUlIo ZGlzcGMtPmZjbGspKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBmY2xrXG4iKTsK KwkJciA9IFBUUl9FUlIoZGlzcGMtPmZjbGspOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWRp c3BjLT52cF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAidnAiKTsKKwlpZiAoSVNfRVJSKGRpc3Bj LT52cF9jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCB2cCBjbGtcbiIpOwor CQlyID0gUFRSX0VSUihkaXNwYy0+dnBfY2xrKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwly ID0gZGlzcGM2X2luaXRfZ2FtbWFfdGFibGVzKGRpc3BjKTsKKwlpZiAocikKKwkJZ290byBlcnJf ZnJlZTsKKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCisJcG1fcnVudGltZV9z ZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnBkZXYtPmRldiwgMjAwKTsKKwlwbV9ydW50aW1lX3VzZV9h dXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKKworCWRzczYtPmRhdGEuZGlzcGNfb3BzID0gJmRpc3Bj Nl9vcHM7CisJZHNzNi0+ZGF0YS5kaXNwYyA9IGRpc3BjOworCisJcmV0dXJuIDA7CitlcnJfZnJl ZToKKwlrZnJlZShkaXNwYyk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjNl91 bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgIHZv aWQgKmRhdGEpCit7CisJc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKwlzdHJ1Y3QgZHNzNl9kZXZpY2UgKmRzczYgPSBkaXNwYy0+ZHNzNjsKKworCWRz czYtPmRhdGEuZGlzcGNfb3BzID0gTlVMTDsKKwlkc3M2LT5kYXRhLmRpc3BjID0gTlVMTDsKKwor CXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCisJa2ZyZWUoZGlzcGMpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgZGlzcGM2X2NvbXBvbmVudF9vcHMgPSB7CisJLmJp bmQJPSBkaXNwYzZfYmluZCwKKwkudW5iaW5kCT0gZGlzcGM2X3VuYmluZCwKK307CisKK3N0YXRp YyBpbnQgZGlzcGM2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0 dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJmRpc3BjNl9jb21wb25lbnRfb3BzKTsKK30K Kworc3RhdGljIGludCBkaXNwYzZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmZGlzcGM2X2NvbXBvbmVudF9vcHMpOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpc3BjNl9ydW50aW1lX3N1c3BlbmQoc3RydWN0 IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisKKwlkZXZfZGJnKGRldiwgInN1c3BlbmRcbiIpOworCisJZGlzcGMtPmlz X2VuYWJsZWQgPSBmYWxzZTsKKwkvKiBlbnN1cmUgdGhlIGRpc3BjNl9pcnFfaGFuZGxlciBzZWVz IHRoZSBpc19lbmFibGVkIHZhbHVlICovCisJc21wX3dtYigpOworCS8qIHdhaXQgZm9yIGN1cnJl bnQgaGFuZGxlciB0byBmaW5pc2ggYmVmb3JlIHR1cm5pbmcgdGhlIERJU1BDIG9mZiAqLworCXN5 bmNocm9uaXplX2lycShkaXNwYy0+aXJxKTsKKworCWRpc3BjNl9zYXZlX2NvbnRleHQoZGlzcGMp OworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRpc3BjLT5mY2xrKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGRpc3BjNl9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK KworCWRldl9kYmcoZGV2LCAicmVzdW1lXG4iKTsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkaXNw Yy0+ZmNsayk7CisKKwlpZiAoUkVHX0dFVChkaXNwYywgRElTUENfU1lTU1RBVFVTLCAwLCAwKSA9 PSAwKQorCQlkZXZfd2FybihkZXYsICJESVNQQyBGVU5DIFJFU0VUIG5vdCBkb25lIVxuIik7CisJ aWYgKFJFR19HRVQoZGlzcGMsIERJU1BDX1NZU1NUQVRVUywgMSwgMSkgPT0gMCkKKwkJZGV2X3dh cm4oZGV2LCAiRElTUEMgVlAgUkVTRVQgbm90IGRvbmUhXG4iKTsKKworCWRpc3BjNl9pbml0aWFs X2NvbmZpZyhkaXNwYyk7CisKKwlkaXNwYzZfcmVzdG9yZV9jb250ZXh0KGRpc3BjKTsKKworCWRp c3BjNl9yZXN0b3JlX2dhbW1hX3RhYmxlcyhkaXNwYyk7CisKKwlkaXNwYy0+aXNfZW5hYmxlZCA9 IHRydWU7CisJLyogZW5zdXJlIHRoZSBkaXNwYzZfaXJxX2hhbmRsZXIgc2VlcyB0aGUgaXNfZW5h YmxlZCB2YWx1ZSAqLworCXNtcF93bWIoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRldl9wbV9vcHMgZGlzcGNfcG1fb3BzID0geworCS5ydW50aW1lX3N1c3BlbmQg PSBkaXNwYzZfcnVudGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZSA9IGRpc3BjNl9ydW50 aW1lX3Jlc3VtZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRpc3Bj Nl9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAidGksazJnLWRpc3BjIiwgLmRhdGEg PSAmazJnX2Rpc3BjX2ZlYXRzLCB9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgZGlzcGM2X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZGlzcGM2X3Byb2JlLAorCS5y ZW1vdmUgICAgICAgICA9IGRpc3BjNl9yZW1vdmUsCisJLmRyaXZlciAgICAgICAgID0geworCQku bmFtZSAgID0gIm9tYXBfZGlzcGM2IiwKKwkJLnBtCT0gJmRpc3BjX3BtX29wcywKKwkJLm9mX21h dGNoX3RhYmxlID0gZGlzcGM2X29mX21hdGNoLAorCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRy dWUsCisJfSwKK307CisKK2ludCBfX2luaXQgZGlzcGM2X2luaXRfcGxhdGZvcm1fZHJpdmVyKHZv aWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGlzcGM2X2RyaXZlcik7 Cit9CisKK3ZvaWQgZGlzcGM2X3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIodm9pZCkKK3sKKwlwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZGlzcGM2X2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvZGlzcGM2LmggYi9kcml2ZXJzL2dwdS9kcm0vb21h cGRybS9kc3MvZGlzcGM2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI0 ZmRhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9kaXNw YzYuaApAQCAtMCwwICsxLDEwOSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJ bmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWlu ZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisjaWZuZGVmIF9fT01BUDJfRElTUEM2 X1JFR19ICisjZGVmaW5lIF9fT01BUDJfRElTUEM2X1JFR19ICisKKy8qIENPTU1PTiAqLworCisj ZGVmaW5lIERJU1BDX1JFVklTSU9OCQkJMHgwMDAKKyNkZWZpbmUgRElTUENfU1lTQ09ORklHCQkJ MHgwMDQKKyNkZWZpbmUgRElTUENfU1lTU1RBVFVTCQkJMHgwMDgKKworI2RlZmluZSBESVNQQ19J UlFfRU9JCQkJMHgwMjAKKyNkZWZpbmUgRElTUENfSVJRU1RBVFVTX1JBVwkJMHgwMjQKKyNkZWZp bmUgRElTUENfSVJRU1RBVFVTCQkJMHgwMjgKKyNkZWZpbmUgRElTUENfSVJRRU5BQkxFX1NFVAkJ MHgwMmMKKyNkZWZpbmUgRElTUENfSVJRRU5BQkxFX0NMUgkJMHgwMzAKKyNkZWZpbmUgRElTUENf SVJRV0FLRUVOCQkJMHgwMzQKKworI2RlZmluZSBESVNQQ19HTE9CQUxfTUZMQUdfQVRUUklCVVRF CTB4MDQwCisjZGVmaW5lIERJU1BDX0dMT0JBTF9CVUZGRVIJCTB4MDQ0CisjZGVmaW5lIERJU1BD X0JBMF9GTElQSU1NRURJQVRFX0VOCTB4MDQ4CisKKyNkZWZpbmUgRElTUENfREJHX0NPTlRST0wJ CTB4MDRjCisjZGVmaW5lIERJU1BDX0RCR19TVEFUVVMJCTB4MDUwCisKKyNkZWZpbmUgRElTUENf Q0xLR0FUSU5HX0RJU0FCTEUJCTB4MDU0CisKKy8qIFZJRCAqLworCisjZGVmaW5lIERJU1BDX1ZJ RF9BQ0NVSF8wCQkweDAKKyNkZWZpbmUgRElTUENfVklEX0FDQ1VIXzEJCTB4NAorI2RlZmluZSBE SVNQQ19WSURfQUNDVUgyXzAJCTB4OAorI2RlZmluZSBESVNQQ19WSURfQUNDVUgyXzEJCTB4Ywor CisjZGVmaW5lIERJU1BDX1ZJRF9BQ0NVVl8wCQkweDEwCisjZGVmaW5lIERJU1BDX1ZJRF9BQ0NV Vl8xCQkweDE0CisjZGVmaW5lIERJU1BDX1ZJRF9BQ0NVVjJfMAkJMHgxOAorI2RlZmluZSBESVNQ Q19WSURfQUNDVVYyXzEJCTB4MWMKKworI2RlZmluZSBESVNQQ19WSURfQVRUUklCVVRFUwkJMHgy MAorI2RlZmluZSBESVNQQ19WSURfQVRUUklCVVRFUzIJCTB4MjQKKworI2RlZmluZSBESVNQQ19W SURfQkFfMAkJCTB4MjgKKyNkZWZpbmUgRElTUENfVklEX0JBXzEJCQkweDJjCisjZGVmaW5lIERJ U1BDX1ZJRF9CQV9VVl8wCQkweDMwCisjZGVmaW5lIERJU1BDX1ZJRF9CQV9VVl8xCQkweDM0Cisj ZGVmaW5lIERJU1BDX1ZJRF9CVUZfU0laRV9TVEFUVVMJMHgzOAorI2RlZmluZSBESVNQQ19WSURf QlVGX1RIUkVTSE9MRAkJMHgzYworCisjZGVmaW5lIERJU1BDX1ZJRF9DT05WX0NPRUYobikJCSgw eDQwICsgKG4pICogNCkKKworI2RlZmluZSBESVNQQ19WSURfRklSSAkJCTB4NWMKKyNkZWZpbmUg RElTUENfVklEX0ZJUkgyCQkJMHg2MAorI2RlZmluZSBESVNQQ19WSURfRklSVgkJCTB4NjQKKyNk ZWZpbmUgRElTUENfVklEX0ZJUlYyCQkJMHg2OAorCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09F RlNfSDAJCTB4NmMKKyNkZWZpbmUgRElTUENfVklEX0ZJUl9DT0VGX0gwKHBoYXNlKQkoMHg2YyAr IChwaGFzZSkgKiA0KQorI2RlZmluZSBESVNQQ19WSURfRklSX0NPRUZTX0gwX0MJMHg5MAorI2Rl ZmluZSBESVNQQ19WSURfRklSX0NPRUZfSDBfQyhwaGFzZSkJKDB4OTAgKyAocGhhc2UpICogNCkK KworI2RlZmluZSBESVNQQ19WSURfRklSX0NPRUZTX0gxMgkJMHhiNAorI2RlZmluZSBESVNQQ19W SURfRklSX0NPRUZfSDEyKHBoYXNlKQkoMHhiNCArIChwaGFzZSkgKiA0KQorI2RlZmluZSBESVNQ Q19WSURfRklSX0NPRUZTX0gxMl9DCTB4ZjQKKyNkZWZpbmUgRElTUENfVklEX0ZJUl9DT0VGX0gx Ml9DKHBoYXNlKQkoMHhmNCArIChwaGFzZSkgKiA0KQorCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJf Q09FRlNfVjAJCTB4MTM0CisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRl9WMChwaGFzZSkJKDB4 MTM0ICsgKHBoYXNlKSAqIDQpCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRlNfVjBfQwkweDE1 OAorI2RlZmluZSBESVNQQ19WSURfRklSX0NPRUZfVjBfQyhwaGFzZSkJKDB4MTU4ICsgKHBoYXNl KSAqIDQpCisKKyNkZWZpbmUgRElTUENfVklEX0ZJUl9DT0VGU19WMTIJCTB4MTdjCisjZGVmaW5l IERJU1BDX1ZJRF9GSVJfQ09FRl9WMTIocGhhc2UpCSgweDE3YyArIChwaGFzZSkgKiA0KQorI2Rl ZmluZSBESVNQQ19WSURfRklSX0NPRUZTX1YxMl9DCTB4MWJjCisjZGVmaW5lIERJU1BDX1ZJRF9G SVJfQ09FRl9WMTJfQyhwaGFzZSkJKDB4MWJjICsgKHBoYXNlKSAqIDQpCisKKyNkZWZpbmUgRElT UENfVklEX0lSUUVOQUJMRQkJMHgyMDAKKyNkZWZpbmUgRElTUENfVklEX0lSUVNUQVRVUwkJMHgy MDQKKworI2RlZmluZSBESVNQQ19WSURfTUZMQUdfVEhSRVNIT0xECTB4MjA4CisjZGVmaW5lIERJ U1BDX1ZJRF9QSUNUVVJFX1NJWkUJCTB4MjBjCisjZGVmaW5lIERJU1BDX1ZJRF9QSVhFTF9JTkMJ CTB4MjEwCisjZGVmaW5lIERJU1BDX1ZJRF9QT1NJVElPTgkJMHgyMTQKKyNkZWZpbmUgRElTUENf VklEX1BSRUxPQUQJCTB4MjE4CisjZGVmaW5lIERJU1BDX1ZJRF9ST1dfSU5DCQkweDIxYworI2Rl ZmluZSBESVNQQ19WSURfU0laRQkJCTB4MjIwCisKKy8qIE9WUiAqLworCisjZGVmaW5lIERJU1BD X09WUl9ERUZBVUxUX0NPTE9SCQkweDA4CisjZGVmaW5lIERJU1BDX09WUl9ERUZBVUxUX0NPTE9S MgkweDBjCisKKy8qIFZQICovCisKKyNkZWZpbmUgRElTUENfVlBfQ09ORklHCQkJMHgwMAorI2Rl ZmluZSBESVNQQ19WUF9DT05UUk9MCQkweDA0CisjZGVmaW5lIERJU1BDX1ZQX0dBTU1BX1RBQkxF CQkweDIwCisjZGVmaW5lIERJU1BDX1ZQX0lSUUVOQUJMRQkJMHgzYworI2RlZmluZSBESVNQQ19W UF9JUlFTVEFUVVMJCTB4NDAKKyNkZWZpbmUgRElTUENfVlBfUE9MX0ZSRVEJCTB4NGMKKyNkZWZp bmUgRElTUENfVlBfU0laRV9TQ1JFRU4JCTB4NTAKKyNkZWZpbmUgRElTUENfVlBfVElNSU5HX0gJ CTB4NTQKKyNkZWZpbmUgRElTUENfVlBfVElNSU5HX1YJCTB4NTgKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvZHBpNi5jIGIvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vZHNzL2RwaTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40 NThjOGYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL2Rw aTYuYwpAQCAtMCwwICsxLDI4MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNv cnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4g PHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+ CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KKworI2luY2x1ZGUgIm9tYXBkc3MuaCIKKyNpbmNsdWRlICJkc3M2LmgiCisKK3N0cnVjdCBk cGlfZGF0YSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXN0cnVjdCBtdXRl eCBsb2NrOworCisJc3RydWN0IHZpZGVvbW9kZSB2bTsKKwlpbnQgZGF0YV9saW5lczsKKworCXN0 cnVjdCBvbWFwX2Rzc19kZXZpY2Ugb3V0cHV0OworCisJYm9vbCBwb3J0X2luaXRpYWxpemVkOwor CisJc3RydWN0IGRzczZfZGV2aWNlICpkc3M2OworfTsKKworc3RhdGljIHN0cnVjdCBkcGlfZGF0 YSAqZHBpNl9nZXRfZGF0YV9mcm9tX2Rzc2RldihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpvdXQp Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihvdXQsIHN0cnVjdCBkcGlfZGF0YSwgb3V0cHV0KTsK K30KKworc3RhdGljIHZvaWQgZHBpNl9jb25maWdfbGNkX21hbmFnZXIoc3RydWN0IGRwaV9kYXRh ICpkcGkpCit7CisJc3RydWN0IGRzc19sY2RfbWdyX2NvbmZpZyBtZ3JfY29uZmlnID0geworCQku aW9fcGFkX21vZGUgPSBEU1NfSU9fUEFEX01PREVfQllQQVNTLAorCQkuc3RhbGxtb2RlID0gZmFs c2UsCisJCS5maWZvaGFuZGNoZWNrID0gZmFsc2UsCisJCS52aWRlb19wb3J0X3dpZHRoID0gZHBp LT5kYXRhX2xpbmVzLAorCQkubGNkZW5fc2lnX3BvbGFyaXR5ID0gMCwKKwl9OworCisJZHNzX21n cl9zZXRfbGNkX2NvbmZpZygmZHBpLT5vdXRwdXQsICZtZ3JfY29uZmlnKTsKK30KKworc3RhdGlj IGludCBkcGk2X2Nvbm5lY3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqb3V0LAorCQkJc3RydWN0 IG9tYXBfZHNzX2RldmljZSAqZHN0KQoreworCXN0cnVjdCBkcGlfZGF0YSAqZHBpID0gZHBpNl9n ZXRfZGF0YV9mcm9tX2Rzc2RldihvdXQpOworCWludCByOworCisJciA9IGRzc19tZ3JfY29ubmVj dCgmZHBpLT5vdXRwdXQsIG91dCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJciA9IG9tYXBk c3Nfb3V0cHV0X3NldF9kZXZpY2Uob3V0LCBkc3QpOworCWlmIChyKSB7CisJCWRldl9lcnIoJmRw aS0+cGRldi0+ZGV2LAorCQkJImZhaWxlZCB0byBjb25uZWN0IG91dHB1dCB0byBuZXcgZGV2aWNl OiAlc1xuIiwKKwkJCWRzdC0+bmFtZSk7CisJCWRzc19tZ3JfZGlzY29ubmVjdCgmZHBpLT5vdXRw dXQsIG91dCk7CisJCXJldHVybiByOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBkcGk2X2Rpc2Nvbm5lY3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqb3V0LAorCQkJICAgIHN0 cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzdCkKK3sKKwlzdHJ1Y3QgZHBpX2RhdGEgKmRwaSA9IGRw aTZfZ2V0X2RhdGFfZnJvbV9kc3NkZXYob3V0KTsKKworCVdBUk5fT04oZHN0ICE9IG91dC0+ZHN0 KTsKKworCWlmIChkc3QgIT0gb3V0LT5kc3QpCisJCXJldHVybjsKKworCW9tYXBkc3Nfb3V0cHV0 X3Vuc2V0X2RldmljZShvdXQpOworCisJZHNzX21ncl9kaXNjb25uZWN0KCZkcGktPm91dHB1dCwg b3V0KTsKK30KKworc3RhdGljIGludCBkcGk2X2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBvbWFwX2Rz c19kZXZpY2UgKm91dCkKK3sKKwlzdHJ1Y3QgZHBpX2RhdGEgKmRwaSA9IGRwaTZfZ2V0X2RhdGFf ZnJvbV9kc3NkZXYob3V0KTsKKwllbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsID0gb3V0LT5kaXNw Y19jaGFubmVsOworCWludCByOworCisJbXV0ZXhfbG9jaygmZHBpLT5sb2NrKTsKKworCWlmICgh b3V0LT5kaXNwY19jaGFubmVsX2Nvbm5lY3RlZCkgeworCQlkZXZfZXJyKCZkcGktPnBkZXYtPmRl diwgImZhaWxlZCB0byBlbmFibGUgZGlzcGxheTogbm8gb3V0cHV0IGNoYW5uZWwgc2V0XG4iKTsK KwkJciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX25vX291dF9tZ3I7CisJfQorCisJciA9IGRpc3Bj Nl9ydW50aW1lX2dldChkcGktPmRzczYtPmRhdGEuZGlzcGMpOworCWlmIChyKQorCQlnb3RvIGVy cl9nZXRfZGlzcGM7CisKKwlyID0gZGlzcGM2X3ZwX3NldF9jbGtfcmF0ZShkcGktPmRzczYtPmRh dGEuZGlzcGMsIGNoYW5uZWwsCisJCQkJICAgZHBpLT52bS5waXhlbGNsb2NrKTsKKwlpZiAocikK KwkJZ290byBlcnJfc2V0X2NsazsKKworCXIgPSBkaXNwYzZfdnBfZW5hYmxlX2NsayhkcGktPmRz czYtPmRhdGEuZGlzcGMsIGNoYW5uZWwpOworCWlmIChyKQorCQlnb3RvIGVycl9lbmFibGVfY2xr OworCisJZHBpNl9jb25maWdfbGNkX21hbmFnZXIoZHBpKTsKKworCXIgPSBkc3NfbWdyX2VuYWJs ZSgmZHBpLT5vdXRwdXQpOworCWlmIChyKQorCQlnb3RvIGVycl9tZ3JfZW5hYmxlOworCisJZHNz Nl91bmdhdGVfZHBpX2NsaygmZHBpLT5wZGV2LT5kZXYsIG91dC0+cG9ydF9udW0pOworCisJbXV0 ZXhfdW5sb2NrKCZkcGktPmxvY2spOworCisJcmV0dXJuIDA7CisKK2Vycl9tZ3JfZW5hYmxlOgor CWRpc3BjNl92cF9kaXNhYmxlX2NsayhkcGktPmRzczYtPmRhdGEuZGlzcGMsIGNoYW5uZWwpOwor ZXJyX2VuYWJsZV9jbGs6CitlcnJfc2V0X2NsazoKKwlkaXNwYzZfcnVudGltZV9wdXQoZHBpLT5k c3M2LT5kYXRhLmRpc3BjKTsKK2Vycl9nZXRfZGlzcGM6CitlcnJfbm9fb3V0X21ncjoKKwltdXRl eF91bmxvY2soJmRwaS0+bG9jayk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIGRwaTZf ZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKm91dCkKK3sKKwlzdHJ1Y3Qg ZHBpX2RhdGEgKmRwaSA9IGRwaTZfZ2V0X2RhdGFfZnJvbV9kc3NkZXYob3V0KTsKKwllbnVtIG9t YXBfY2hhbm5lbCBjaGFubmVsID0gb3V0LT5kaXNwY19jaGFubmVsOworCisJbXV0ZXhfbG9jaygm ZHBpLT5sb2NrKTsKKworCWRzczZfZ2F0ZV9kcGlfY2xrKCZkcGktPnBkZXYtPmRldiwgb3V0LT5w b3J0X251bSk7CisKKwlkc3NfbWdyX2Rpc2FibGUoJmRwaS0+b3V0cHV0KTsKKworCWRpc3BjNl92 cF9kaXNhYmxlX2NsayhkcGktPmRzczYtPmRhdGEuZGlzcGMsIGNoYW5uZWwpOworCisJZGlzcGM2 X3J1bnRpbWVfcHV0KGRwaS0+ZHNzNi0+ZGF0YS5kaXNwYyk7CisKKwltdXRleF91bmxvY2soJmRw aS0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgZHBpNl9jaGVja190aW1pbmdzKHN0cnVjdCBvbWFw X2Rzc19kZXZpY2UgKm91dCwKKwkJCSAgICAgIHN0cnVjdCB2aWRlb21vZGUgKnZtKQoreworCXN0 cnVjdCBkcGlfZGF0YSAqZHBpID0gZHBpNl9nZXRfZGF0YV9mcm9tX2Rzc2RldihvdXQpOworCWVu dW0gb21hcF9jaGFubmVsIGNoYW5uZWwgPSBvdXQtPmRpc3BjX2NoYW5uZWw7CisKKwlpZiAoIWRp c3BjNl9tZ3JfdGltaW5nc19vayhkcGktPmRzczYtPmRhdGEuZGlzcGMsIGNoYW5uZWwsIHZtKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHBpNl9z ZXRfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpvdXQsCisJCQkgICAgIHN0cnVjdCB2 aWRlb21vZGUgKnZtKQoreworCXN0cnVjdCBkcGlfZGF0YSAqZHBpID0gZHBpNl9nZXRfZGF0YV9m cm9tX2Rzc2RldihvdXQpOworCisJbXV0ZXhfbG9jaygmZHBpLT5sb2NrKTsKKworCWRwaS0+dm0g PSAqdm07CisKKwltdXRleF91bmxvY2soJmRwaS0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGRw aTZfZ2V0X3RpbWluZ3Moc3RydWN0IG9tYXBfZHNzX2RldmljZSAqb3V0LAorCQkJICAgICBzdHJ1 Y3QgdmlkZW9tb2RlICp2bSkKK3sKKwlzdHJ1Y3QgZHBpX2RhdGEgKmRwaSA9IGRwaTZfZ2V0X2Rh dGFfZnJvbV9kc3NkZXYob3V0KTsKKworCW11dGV4X2xvY2soJmRwaS0+bG9jayk7CisKKwkqdm0g PSBkcGktPnZtOworCisJbXV0ZXhfdW5sb2NrKCZkcGktPmxvY2spOworfQorCisKK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb21hcGRzc19kcGlfb3BzIGRwaTZfb3BzID0geworCS5jb25uZWN0ID0gZHBp Nl9jb25uZWN0LAorCS5kaXNjb25uZWN0ID0gZHBpNl9kaXNjb25uZWN0LAorCisJLmVuYWJsZSA9 IGRwaTZfZGlzcGxheV9lbmFibGUsCisJLmRpc2FibGUgPSBkcGk2X2Rpc3BsYXlfZGlzYWJsZSwK KworCS5jaGVja190aW1pbmdzID0gZHBpNl9jaGVja190aW1pbmdzLAorCS5zZXRfdGltaW5ncyA9 IGRwaTZfc2V0X3RpbWluZ3MsCisJLmdldF90aW1pbmdzID0gZHBpNl9nZXRfdGltaW5ncywKK307 CisKK3N0YXRpYyB2b2lkIGRwaTZfc2V0dXBfb3V0cHV0X3BvcnQoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnQpCit7CisJc3RydWN0 IGRwaV9kYXRhICpkcGkgPSBwb3J0LT5kYXRhOworCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKm91 dCA9ICZkcGktPm91dHB1dDsKKwlpbnQgcjsKKwl1MzIgcG9ydF9udW07CisKKwlyID0gb2ZfcHJv cGVydHlfcmVhZF91MzIocG9ydCwgInJlZyIsICZwb3J0X251bSk7CisJaWYgKHIpCisJCXBvcnRf bnVtID0gMDsKKworCXN3aXRjaCAocG9ydF9udW0pIHsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkJ b3V0LT5uYW1lID0gImRwaS4wIjsKKwkJYnJlYWs7CisJfQorCisJb3V0LT5kZXYgPSAmcGRldi0+ ZGV2OworCW91dC0+aWQgPSBPTUFQX0RTU19PVVRQVVRfRFBJOworCW91dC0+b3V0cHV0X3R5cGUg PSBPTUFQX0RJU1BMQVlfVFlQRV9EUEk7CisJb3V0LT5kaXNwY19jaGFubmVsID0gT01BUF9EU1Nf Q0hBTk5FTF9MQ0Q7CisJb3V0LT5wb3J0X251bSA9IHBvcnRfbnVtOworCW91dC0+b3BzLmRwaSA9 ICZkcGk2X29wczsKKwlvdXQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlvbWFwZHNzX3JlZ2lz dGVyX291dHB1dChvdXQpOworfQorCitpbnQgZHBpNl9pbml0X3BvcnQoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwgc3RydWN0IGRldmljZV9ub2RlICpwb3J0KQoreworCXN0cnVjdCBkc3M2 X2RldmljZSAqZHNzNiA9IGRzczZfZ2V0X2RldmljZSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgZHBp X2RhdGEgKmRwaTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwOworCXUzMiBkYXRhbGluZXM7CisJ aW50IHI7CisKKwlkcGkgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkcGkpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWRwaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcCA9IG9mX2dl dF9uZXh0X2NoaWxkKHBvcnQsIE5VTEwpOworCWlmICghZXApCisJCXJldHVybiAwOworCisJciA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGVwLCAiZGF0YS1saW5lcyIsICZkYXRhbGluZXMpOworCWlm IChyKSB7CisJCWRldl9lcnIoJmRwaS0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBhcnNlIGRhdGFs aW5lc1xuIik7CisJCWdvdG8gZXJyX2RhdGFsaW5lczsKKwl9CisKKwlkcGktPmRhdGFfbGluZXMg PSBkYXRhbGluZXM7CisKKwlvZl9ub2RlX3B1dChlcCk7CisKKwlkcGktPnBkZXYgPSBwZGV2Owor CXBvcnQtPmRhdGEgPSBkcGk7CisKKwltdXRleF9pbml0KCZkcGktPmxvY2spOworCisJZHBpNl9z ZXR1cF9vdXRwdXRfcG9ydChwZGV2LCBwb3J0KTsKKworCWRwaS0+ZHNzNiA9IGRzczY7CisJZHBp LT5wb3J0X2luaXRpYWxpemVkID0gdHJ1ZTsKKworCXJldHVybiAwOworCitlcnJfZGF0YWxpbmVz OgorCW9mX25vZGVfcHV0KGVwKTsKKworCXJldHVybiByOworfQorCit2b2lkIGRwaTZfdW5pbml0 X3BvcnQoc3RydWN0IGRldmljZV9ub2RlICpwb3J0KQoreworCXN0cnVjdCBkcGlfZGF0YSAqZHBp ID0gcG9ydC0+ZGF0YTsKKworCWlmICghZHBpLT5wb3J0X2luaXRpYWxpemVkKQorCQlyZXR1cm47 CisKKwlvbWFwZHNzX3VucmVnaXN0ZXJfb3V0cHV0KCZkcGktPm91dHB1dCk7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kc3MvZHNzNi5jIGIvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vZHNzL2RzczYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x ODBmYTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL2Rz czYuYwpAQCAtMCwwICsxLDM0NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNv cnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4g PHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+Cisj aW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNp bmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4 L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8 bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgIm9tYXBkc3MuaCIKKyNpbmNsdWRlICJk c3M2LmgiCisKKyNkZWZpbmUgRFNTX1JFVklTSU9OCTB4MDAKKyNkZWZpbmUgRFNTX1NZU0NPTkZJ RwkweDEwCisjZGVmaW5lIERTU19TWVNTVEFUVVMJMHgxNAorI2RlZmluZSBEU1NfUkZCSV9DVFJM CTB4MTgKKyNkZWZpbmUgRFNTX0RQSV9DVFJMCTB4MWMKKyNkZWZpbmUgRFNTX0RFQlVHX0NGRwkw eDQwCisKKyNkZWZpbmUgUkVHX0dFVChkYXRhLCBpZHgsIHN0YXJ0LCBlbmQpIFwKKwlGTERfR0VU KGRzczZfcmVhZChkYXRhLCBpZHgpLCBzdGFydCwgZW5kKQorCisjZGVmaW5lIFJFR19GTERfTU9E KGRhdGEsIGlkeCwgdmFsLCBzdGFydCwgZW5kKSBcCisJZHNzNl93cml0ZShkYXRhLCBpZHgsIEZM RF9NT0QoZHNzNl9yZWFkKGRhdGEsIGlkeCksIHZhbCwgc3RhcnQsIGVuZCkpCisKK3N0cnVjdCBk c3NfZmVhdHVyZXMgeworCWludCBudW1fcG9ydHM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRzc19mZWF0dXJlcyBrMmdfZHNzX2ZlYXRzID0geworCS5udW1fcG9ydHMgPSAxLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHNzNl9vZl9tYXRjaFtdOworCisvKiBv bWFwZHJtIGRldmljZSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcF9k cm1fZGV2aWNlOworCitzdGF0aWMgaW50IGluaXRpYWxpemVfb21hcGRybV9kZXZpY2Uodm9pZCkK K3sKKwlvbWFwX2RybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJv bWFwZHJtIiwgMCwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihvbWFwX2RybV9kZXZpY2UpKQorCQly ZXR1cm4gUFRSX0VSUihvbWFwX2RybV9kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG9t YXBkcm0gZGV2aWNlIGVuZCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZHNzNl93cml0ZShzdHJ1 Y3QgZHNzNl9kZXZpY2UgKmRzczYsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJaW93cml0ZTMyKHZh bCwgZHNzNi0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRzczZfcmVhZChz dHJ1Y3QgZHNzNl9kZXZpY2UgKmRzczYsIHUxNiByZWcpCit7CisJcmV0dXJuIGlvcmVhZDMyKGRz czYtPmJhc2UgKyByZWcpOworfQorCit2b2lkIGRzczZfdW5nYXRlX2RwaV9jbGsoc3RydWN0IGRl dmljZSAqZGV2LCBpbnQgcG9ydCkKK3sKKwlzdHJ1Y3QgZHNzNl9kZXZpY2UgKmRzczYgPSBkc3M2 X2dldF9kZXZpY2UoZGV2KTsKKworCVJFR19GTERfTU9EKGRzczYsIERTU19EUElfQ1RSTCwgMSwg MSwgMCk7Cit9CisKK3ZvaWQgZHNzNl9nYXRlX2RwaV9jbGsoc3RydWN0IGRldmljZSAqZGV2LCBp bnQgcG9ydCkKK3sKKwlzdHJ1Y3QgZHNzNl9kZXZpY2UgKmRzczYgPSBkc3M2X2dldF9kZXZpY2Uo ZGV2KTsKKworCVJFR19GTERfTU9EKGRzczYsIERTU19EUElfQ1RSTCwgMCwgMSwgMCk7Cit9CisK K3N0YXRpYyBpbnQgZHNzNl9pbml0X2ZlYXR1cmVzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJc3RydWN0IGRzczZfZGV2aWNlICpkc3M2ID0gZHNzNl9nZXRfZGV2aWNlKCZwZGV2 LT5kZXYpOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCisJbWF0Y2ggPSBv Zl9tYXRjaF9ub2RlKGRzczZfb2ZfbWF0Y2gsIHBkZXYtPmRldi5vZl9ub2RlKTsKKwlpZiAoIW1h dGNoKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuc3VwcG9ydGVkIERTUyB2ZXJzaW9uXG4i KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZHNzNi0+ZmVhdCA9IG1hdGNoLT5kYXRhOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHNzNl9pbml0X3BvcnRzKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRzczZfZGV2aWNlICpkc3M2ID0gZHNzNl9n ZXRfZGV2aWNlKCZwZGV2LT5kZXYpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50ID0gcGRl di0+ZGV2Lm9mX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpwb3J0OworCWludCBpLCByZXQ7 CisKKwlmb3IgKGkgPSAwOyBpIDwgZHNzNi0+ZmVhdC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9y dCA9IG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKHBhcmVudCwgaSk7CisJCWlmICghcG9ydCkKKwkJ CWNvbnRpbnVlOworCisJCXJldCA9IGRwaTZfaW5pdF9wb3J0KHBkZXYsIHBvcnQpOworCQlvZl9u b2RlX3B1dChwb3J0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBkc3M2X3VuaW5pdF9wb3J0cyhzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQoreworCXN0cnVjdCBkc3M2X2RldmljZSAqZHNzNiA9IGRzczZfZ2V0X2Rldmlj ZSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCA9IHBkZXYtPmRldi5v Zl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydDsKKwlpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBkc3M2LT5mZWF0LT5udW1fcG9ydHM7IGkrKykgeworCQlwb3J0ID0gb2ZfZ3JhcGhf Z2V0X3BvcnRfYnlfaWQocGFyZW50LCBpKTsKKwkJaWYgKCFwb3J0KQorCQkJY29udGludWU7CisK KwkJZHBpNl91bmluaXRfcG9ydChwb3J0KTsKKwkJb2Zfbm9kZV9wdXQocG9ydCk7CisJfQorfQor CitzdGF0aWMgaW50IGRzczZfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBk c3M2X2RldmljZSAqZHNzNjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmRzc19tZW07CisJaW50IHI7CisK Kwlkc3M2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc3M2KSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFkc3M2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRz czYpOworCWRzczYtPnBkZXYgPSBwZGV2OworCisJciA9IGRzczZfaW5pdF9mZWF0dXJlcyhkc3M2 LT5wZGV2KTsKKwlpZiAocikKKwkJZ290byBlcnJfZmVhdHVyZXM7CisKKwlkc3NfbWVtID0gcGxh dGZvcm1fZ2V0X3Jlc291cmNlKGRzczYtPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAo IWRzc19tZW0pIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IElPUkVTT1VSQ0VfTUVN XG4iKTsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3Jlc291cmNlOworCX0KKworCWRzczYt PmJhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgZHNzX21lbS0+c3RhcnQsCisJCQkJCXJl c291cmNlX3NpemUoZHNzX21lbSkpOworCWlmICghZHNzNi0+YmFzZSkgeworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBpb3JlbWFwXG4iKTsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lv cmVtYXA7CisJfQorCisJciA9IGRzczZfaW5pdF9wb3J0cyhwZGV2KTsKKwlpZiAocikKKwkJZ290 byBlcnJfaW5pdF9wb3J0czsKKworCWRzczYtPmZjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZmNr Iik7CisJaWYgKElTX0VSUihkc3M2LT5mY2xrKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBnZXQgZmNsa1xuIik7CisJCXIgPSBQVFJfRVJSKGRzczYtPmZjbGspOworCQlnb3RvIGVycl9j bGtfZ2V0OworCX0KKworCWRldl9kYmcoJnBkZXYtPmRldiwgIkRTUyBmY2xrICVsdSBIelxuIiwg Y2xrX2dldF9yYXRlKGRzczYtPmZjbGspKTsKKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5k ZXYpOworCisJciA9IGNvbXBvbmVudF9iaW5kX2FsbCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAo cikKKwkJZ290byBlcnJfY29tcG9uZW50OworCisJciA9IGluaXRpYWxpemVfb21hcGRybV9kZXZp Y2UoKTsKKwlpZiAocikKKwkJZ290byBlcnJfb21hcGRybV9kZXZpY2U7CisKKwlvbWFwZHNzX2dh dGhlcl9jb21wb25lbnRzKGRldik7CisJb21hcGRzc19zZXRfZHNzKCZkc3M2LT5kYXRhKTsKKwor CXJldHVybiAwOworCitlcnJfb21hcGRybV9kZXZpY2U6CisJY29tcG9uZW50X3VuYmluZF9hbGwo JnBkZXYtPmRldiwgTlVMTCk7CitlcnJfY29tcG9uZW50OgorCXBtX3J1bnRpbWVfZGlzYWJsZSgm cGRldi0+ZGV2KTsKK2Vycl9jbGtfZ2V0OgorZXJyX2luaXRfcG9ydHM6CitlcnJfaW9yZW1hcDoK K2Vycl9yZXNvdXJjZToKK2Vycl9mZWF0dXJlczoKKwlrZnJlZShkc3M2KTsKKwlyZXR1cm4gcjsK K30KKworc3RhdGljIHZvaWQgZHNzNl91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwor CW9tYXBkc3Nfc2V0X2RzcyhOVUxMKTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG9t YXBfZHJtX2RldmljZSk7CisKKwljb21wb25lbnRfdW5iaW5kX2FsbCgmcGRldi0+ZGV2LCBOVUxM KTsKKworCWRzczZfdW5pbml0X3BvcnRzKHBkZXYpOworCisJcG1fcnVudGltZV9kaXNhYmxlKCZw ZGV2LT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJfb3Bz IGRzczZfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZCA9IGRzczZfYmluZCwKKwkudW5iaW5kID0g ZHNzNl91bmJpbmQsCit9OworCitzdGF0aWMgaW50IGRzczZfY29tcG9uZW50X2NvbXBhcmUoc3Ry dWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmNoaWxkID0g ZGF0YTsKKwlyZXR1cm4gZGV2ID09IGNoaWxkOworfQorCitzdGF0aWMgaW50IGRzczZfYWRkX2No aWxkX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0 IGNvbXBvbmVudF9tYXRjaCAqKm1hdGNoID0gZGF0YTsKKworCWNvbXBvbmVudF9tYXRjaF9hZGQo ZGV2LT5wYXJlbnQsIG1hdGNoLCBkc3M2X2NvbXBvbmVudF9jb21wYXJlLCBkZXYpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHNzNl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlpbnQg cjsKKworCS8qIGFkZCBhbGwgdGhlIGNoaWxkIGRldmljZXMgYXMgY29tcG9uZW50cyAqLworCWRl dmljZV9mb3JfZWFjaF9jaGlsZCgmcGRldi0+ZGV2LCAmbWF0Y2gsIGRzczZfYWRkX2NoaWxkX2Nv bXBvbmVudCk7CisKKwlpZiAoIW1hdGNoKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHN1 Ym1vZHVsZXMgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyID0gY29tcG9u ZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaCgmcGRldi0+ZGV2LCAmZHNzNl9jb21wb25lbnRfb3Bz LCBtYXRjaCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgZHNzNl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21w b25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmZHNzNl9jb21wb25lbnRfb3BzKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBkc3M2X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNl ICpkZXYpCit7CisJc3RydWN0IGRzczZfZGV2aWNlICpkc3M2ID0gZHNzNl9nZXRfZGV2aWNlKGRl dik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNzNi0+ZmNsayk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBkc3M2X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgZHNzNl9kZXZpY2UgKmRzczYgPSBkc3M2X2dldF9kZXZpY2UoZGV2KTsKKwor CisJY2xrX3ByZXBhcmVfZW5hYmxlKGRzczYtPmZjbGspOworCisJaWYgKFJFR19HRVQoZHNzNiwg RFNTX1NZU1NUQVRVUywgMCwgMCkgPT0gMCkKKwkJZGV2X3dhcm4oZGV2LCAiRFNTIEZVTkMgUkVT RVQgbm90IGRvbmUhXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRldl9wbV9vcHMgZHNzNl9wbV9vcHMgPSB7CisJLnJ1bnRpbWVfc3VzcGVuZCA9IGRzczZfcnVu dGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZSA9IGRzczZfcnVudGltZV9yZXN1bWUsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkc3M2X29mX21hdGNoW10gPSB7 CisJeyAuY29tcGF0aWJsZSA9ICJ0aSxrMmctZHNzIiwgLmRhdGEgPSAmazJnX2Rzc19mZWF0cywg fSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGRzczZfb2ZfbWF0Y2gpOwor CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkc3M2X2RyaXZlciA9IHsKKwkucHJvYmUJ CT0gZHNzNl9wcm9iZSwKKwkucmVtb3ZlCQk9IGRzczZfcmVtb3ZlLAorCS5kcml2ZXIgICAgICAg ICA9IHsKKwkJLm5hbWUgICA9ICJvbWFwX2RzczYiLAorCQkucG0JPSAmZHNzNl9wbV9vcHMsCisJ CS5vZl9tYXRjaF90YWJsZSA9IGRzczZfb2ZfbWF0Y2gsCisJCS5zdXBwcmVzc19iaW5kX2F0dHJz ID0gdHJ1ZSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9kc3NfaW5pdCh2b2lk KQoreworCWludCByOworCisJciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHNzNl9kcml2 ZXIpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSBkaXNwYzZfaW5pdF9wbGF0Zm9ybV9k cml2ZXIoKTsKKwlpZiAocikgeworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHNzNl9k cml2ZXIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg X19leGl0IG9tYXBfZHNzX2V4aXQodm9pZCkKK3sKKwlkaXNwYzZfdW5pbml0X3BsYXRmb3JtX2Ry aXZlcigpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkc3M2X2RyaXZlcik7Cit9CisK K21vZHVsZV9pbml0KG9tYXBfZHNzX2luaXQpOworbW9kdWxlX2V4aXQob21hcF9kc3NfZXhpdCk7 CisKK01PRFVMRV9BVVRIT1IoIlRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+ Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk9NQVA2IERpc3BsYXkgU3Vic3lzdGVtIik7CitNT0RV TEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRy bS9kc3MvZHNzNi5oIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL2RzczYuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTgxZDcxCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZHNzL2RzczYuaApAQCAtMCwwICsxLDU0IEBACisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoQykg MjAxNi0yMDE4IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGku Y29tLworICogQXV0aG9yOiBUb21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgor ICovCisKKyNpZm5kZWYgX19USV9EU1M2X0gKKyNkZWZpbmUgX19USV9EU1M2X0gKKworI2luY2x1 ZGUgIm9tYXBkc3MuaCIKKworc3RydWN0IGRzczZfZGV2aWNlIHsKKwlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2OworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCXN0cnVjdCBjbGsgKmZjbGs7 CisKKwljb25zdCBzdHJ1Y3QgZHNzX2ZlYXR1cmVzICpmZWF0OworCisJc3RydWN0IGRzc19kYXRh IGRhdGE7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkc3M2X2RldmljZSAqZHNzNl9nZXRf ZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRl dik7Cit9CisKKy8qIERTUzYgKi8KK3ZvaWQgZHNzNl91bmdhdGVfZHBpX2NsayhzdHJ1Y3QgZGV2 aWNlICpkZXYsIGludCBwb3J0KTsKK3ZvaWQgZHNzNl9nYXRlX2RwaV9jbGsoc3RydWN0IGRldmlj ZSAqZGV2LCBpbnQgcG9ydCk7CisKKy8qIERJU1BDNiAqLworaW50IF9faW5pdCBkaXNwYzZfaW5p dF9wbGF0Zm9ybV9kcml2ZXIodm9pZCk7Cit2b2lkIGRpc3BjNl91bmluaXRfcGxhdGZvcm1fZHJp dmVyKHZvaWQpOworCitpbnQgZGlzcGM2X3J1bnRpbWVfZ2V0KHN0cnVjdCBkaXNwY19kZXZpY2Ug KmRpc3BjKTsKK3ZvaWQgZGlzcGM2X3J1bnRpbWVfcHV0KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRp c3BjKTsKKworYm9vbCBkaXNwYzZfbWdyX3RpbWluZ3Nfb2soc3RydWN0IGRpc3BjX2RldmljZSAq ZGlzcGMsCisJCQkgICBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLAorCQkJICAgY29uc3Qgc3Ry dWN0IHZpZGVvbW9kZSAqdm0pOworCitpbnQgZGlzcGM2X3ZwX3NldF9jbGtfcmF0ZShzdHJ1Y3Qg ZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCSAgIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsIHVu c2lnbmVkIGxvbmcgcmF0ZSk7CitpbnQgZGlzcGM2X3ZwX2VuYWJsZV9jbGsoc3RydWN0IGRpc3Bj X2RldmljZSAqZGlzcGMsCisJCQkgZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCk7Cit2b2lkIGRp c3BjNl92cF9kaXNhYmxlX2NsayhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCSAgIGVu dW0gb21hcF9jaGFubmVsIGNoYW5uZWwpOworCisvKiBEUEk2ICovCitpbnQgZHBpNl9pbml0X3Bv cnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGRldmljZV9ub2RlICpwb3J0 KTsKK3ZvaWQgZHBpNl91bmluaXRfcG9ydChzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnQpOworCisj ZW5kaWYgLyogX19USV9EU1M2X0ggKi8KLS0gClRleGFzIEluc3RydW1lbnRzIEZpbmxhbmQgT3ks IFBvcmtrYWxhbmthdHUgMjIsIDAwMTgwIEhlbHNpbmtpLiBZLXR1bm51cy9CdXNpbmVzcyBJRDog MDYxNTUyMS00LiBLb3RpcGFpa2thL0RvbWljaWxlOiBIZWxzaW5raQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==