From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Subject: [PATCH 2/2] drm/imx: Add NWL MIPI DSI host controller support Date: Thu, 7 Mar 2019 11:30:53 +0100 Message-ID: <7c181a69ee64fa3dcc2f08d1e60f7f03c1dacb59.1551954425.git.agx@sigxcpu.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from honk.sigxcpu.org (honk.sigxcpu.org [24.134.29.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3E42B6E286 for ; Thu, 7 Mar 2019 10:31:07 +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: Philipp Zabel , David Airlie , Daniel Vetter , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , dri-devel@lists.freedesktop.org, Robert Chiras List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIE5XTCBNSVBJIERTSSBIb3N0IGNvbnRy b2xsZXIgZm91bmQgb24KaS5NWDggU29Dcy4KCkl0IGFkZHMgc3VwcG9ydCBmb3IgdGhlIGkuTVg4 TVEgYnV0IHRoZSBzYW1lIElQIGNhbiBiZSBmb3VuZCBvbgppLk1YOFFYUC4KCkl0IGhhcyBiZWVu IHRlc3RlZCBvbiB0aGUgTGlicmVtIDUgZGV2a2l0IHVzaW5nIERDU1MuCgpDby1hdXRob3JlZC1i eTogUm9iZXJ0IENoaXJhcyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPgpTaWduZWQtb2ZmLWJ5OiBH dWlkbyBHw7xudGhlciA8YWd4QHNpZ3hjcHUub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9LY29u ZmlnICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgIHwgICAxICsK IGRyaXZlcnMvZ3B1L2RybS9ud2wvS2NvbmZpZyAgIHwgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS9u d2wvTWFrZWZpbGUgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9ud2wvbndsLWRydi5jIHwgNTk0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL253bC9ud2wtZHJ2 LmggfCAgNjggKysrCiBkcml2ZXJzL2dwdS9kcm0vbndsL253bC1kc2kuYyB8IDc1MiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbndsL253bC1kc2ku aCB8IDEwNSArKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxNTM2IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbndsL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbndsL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL253bC9ud2wtZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbndsL253bC1kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9u d2wvbndsLWRzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL253bC9ud2wt ZHNpLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1 L2RybS9LY29uZmlnCmluZGV4IGJkOTQzYTcxNzU2Yy4uMGM5ZWUzZWY1NWM2IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpA QCAtMzAzLDYgKzMwMyw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3N0aS9LY29uZmlnIgog CiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJz L2dwdS9kcm0vbndsL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3YzZC9LY29u ZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyIKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRl eCBmMGMxZjg3MzFhMjcuLjE2OWRkODA2Mjk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtOTYsNiArOTYsNyBA QCBvYmotJChDT05GSUdfRFJNX1NUSSkgKz0gc3RpLwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9 IGlteC8KIG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLwogb2JqLSQoQ09O RklHX0RSTV9NRVNPTikJKz0gbWVzb24vCitvYmotJChDT05GSUdfRFJNX0lNWF9OV0xfRFNJKSAr PSBud2wvCiBvYmoteQkJCSs9IGkyYy8KIG9iai15CQkJKz0gcGFuZWwvCiBvYmoteQkJCSs9IGJy aWRnZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ud2wvS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9ud2wvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjlhNmQyNzVjODExOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ud2wv S2NvbmZpZwpAQCAtMCwwICsxLDEyIEBACitjb25maWcgRFJNX0lNWF9OV0xfRFNJCisJdHJpc3Rh dGUgIlN1cHBvcnQgZm9yIE5vcnRod2VzdCBMb2dpYyBNSVBJIERTSSBIb3N0IGNvbnRyb2xsZXIi CisJZGVwZW5kcyBvbiBEUk0gJiYgKEFSQ0hfTVhDIHx8IEFSQ0hfTVVMVElQTEFURk9STSB8fCBD T01QSUxFX1RFU1QpCisJZGVwZW5kcyBvbiBDT01NT05fQ0xLCisJZGVwZW5kcyBvbiBNRkRfU1lT Q09OCisJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBEUk1fUEFORUwKKwlzZWxlY3QgR0VORVJJQ19Q SFkKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIE5vcnRod2VzdCBMb2dpYyBNSVBJIERTSSBI b3N0IGNvbnRyb2xsZXIgYXMKKwkgIGZvdW5kIG9uIE5YUCdzIGkuTVg4IFByb2Nlc3NvcnMuCisK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ud2wvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vbndsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u OWZhNjM0ODNkYTViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL253bC9NYWtl ZmlsZQpAQCAtMCwwICsxLDIgQEAKK2lteC1ud2wtb2JqcyA6PSBud2wtZHJ2Lm8gbndsLWRzaS5v CitvYmotJChDT05GSUdfRFJNX0lNWF9OV0xfRFNJKSArPSBpbXgtbndsLm8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9ud2wvbndsLWRydi5jIGIvZHJpdmVycy9ncHUvZHJtL253bC9ud2wt ZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kMWYwZWI2ZmRi YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbndsL253bC1kcnYuYwpAQCAt MCwwICsxLDU5NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKgor ICogaS5NWDggTldMIE1JUEkgRFNJIGhvc3QgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAy MDE3IE5YUAorICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMKKyAqLworCisjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5o PgorI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29u c3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lz Y29uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHku aD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+ CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNpbmNsdWRlICJud2wtZHJ2LmgiCisj aW5jbHVkZSAibndsLWRzaS5oIgorCisjZGVmaW5lIERSVl9OQU1FICJpbXgtbndsLWRzaSIKKwor LyogOE1RIFNSQyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1JDX01JUElQSFlfUkNS CTB4MjgKKyNkZWZpbmUgUkVTRVRfQllURV9OCUJJVCgxKQorI2RlZmluZSBSRVNFVF9OCQlCSVQo MikKKyNkZWZpbmUgRFBJX1JFU0VUX04JQklUKDMpCisjZGVmaW5lIEVTQ19SRVNFVF9OCUJJVCg0 KQorI2RlZmluZSBQQ0xLX1JFU0VUX04JQklUKDUpCisKKyNkZWZpbmUgSU9NVVhDX0dQUjEzCTB4 MzQKKyNkZWZpbmUgSU1YOE1RX0dQUjEzX01JUElfTVVYX1NFTCBCSVQoMikKKworLyogUG9zc2li bGUgY2xvY2tzICovCisjZGVmaW5lIENMS19QSVhFTAkicGl4ZWwiCisjZGVmaW5lIENMS19DT1JF CSJjb3JlIgorI2RlZmluZSBDTEtfQllQQVNTCSJieXBhc3MiCisKK2VudW0gaW14X2V4dF9yZWdz IHsKKwlJTVhfUkVHX0NTUiA9IEJJVCgxKSwKKwlJTVhfUkVHX1NSQyA9IEJJVCgyKSwKKwlJTVhf UkVHX0dQUiA9IEJJVCgzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZp ZyBud2xfZHNpX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gMTYsCisJLnZhbF9iaXRz ID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorCS5tYXhfcmVnaXN0ZXIgPSBJUlFfTUFTSzIsCisJ Lm5hbWUgPSBEUlZfTkFNRSwKK307CisKK3N0cnVjdCBpbXhfbndsX3BsYXRmb3JtX2RhdGEgewor CWludCAoKnBvd2Vyb24pKHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpKTsKKwlpbnQgKCpwb3dlcm9m Zikoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpOworCXUzMiBleHRfcmVnczsgLyogcmVxdWlyZWQg ZXh0ZXJuYWwgcmVnaXN0ZXJzICovCisJc3RydWN0IGlteF9ud2xfY2xrX2NvbmZpZyBjbGtfY29u ZmlnW05XTF9NQVhfUExBVEZPUk1fQ0xPQ0tTXTsKK307CisKKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgaW14X253bF9kc2kgKmVuY29kZXJfdG9fZHNpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVjdCBpbXhfbndsX2RzaSwg ZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlteF9ud2xfZHNpICpjb25uZWN0 b3JfdG9fZHNpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb24pCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihjb24sIHN0cnVjdCBpbXhfbndsX2RzaSwgY29ubmVjdG9yKTsKK30KKworc3RhdGljIHZv aWQgaW14X253bF9kc2lfc2V0X2Nsb2NrcyhzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSwgYm9vbCBl bmFibGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJY29uc3QgY2hhciAq aWQ7CisJc3RydWN0IGNsayAqY2xrOworCXVuc2lnbmVkIGxvbmcgbmV3X3JhdGUsIGN1cl9yYXRl OworCWJvb2wgZW5hYmxlZDsKKwlzaXplX3QgaTsKKwlpbnQgcmV0OworCisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiJXNhYmxpbmcgcGxhdGZvcm0gY2xvY2tzIiwKKwkJCSAgICAgZW5hYmxl ID8gImVuIiA6ICJkaXMiKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc2ktPnBkYXRh LT5jbGtfY29uZmlnKTsgaSsrKSB7CisJCWlmICghZHNpLT5jbGtfY29uZmlnW2ldLnByZXNlbnQp CisJCQljb250aW51ZTsKKwkJaWQgPSBkc2ktPmNsa19jb25maWdbaV0uaWQ7CisJCWNsayA9IGRz aS0+Y2xrX2NvbmZpZ1tpXS5jbGs7CisJCW5ld19yYXRlID0gZHNpLT5jbGtfY29uZmlnW2ldLnJh dGU7CisJCWN1cl9yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJCWVuYWJsZWQgPSBkc2ktPmNs a19jb25maWdbaV0uZW5hYmxlZDsKKworCQkvKiBCWVBBU1MgY2xrIG11c3QgaGF2ZSB0aGUgc2Ft ZSByYXRlIGFzIFBIWV9SRUYgY2xrICovCisJCWlmICghc3RyY21wKGlkLCBDTEtfQllQQVNTKSkK KwkJCW5ld19yYXRlID0gY2xrX2dldF9yYXRlKGRzaS0+cGh5X3JlZl9jbGspOworCisJCWlmIChl bmFibGUpIHsKKwkJCWlmIChlbmFibGVkICYmIG5ld19yYXRlICE9IGN1cl9yYXRlKQorCQkJCWNs a19kaXNhYmxlX3VucHJlcGFyZShjbGspOworCQkJZWxzZSBpZiAoZW5hYmxlZCAmJiBuZXdfcmF0 ZSA9PSBjdXJfcmF0ZSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChuZXdfcmF0ZSA+IDApCisJCQkJ Y2xrX3NldF9yYXRlKGNsaywgbmV3X3JhdGUpOworCQkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KGNsayk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIGVuYWJsZSBjbG9jayAlcyIsCisJCQkJCSAgICAgIGlkKTsKKwkJCX0KKwkJCWRzaS0+Y2xr X2NvbmZpZ1tpXS5lbmFibGVkID0gdHJ1ZTsKKwkJCWN1cl9yYXRlID0gY2xrX2dldF9yYXRlKGNs ayk7CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsCisJCQkJIkVuYWJsZWQgJXMgY2xrIChy YXRlOiByZXE9JWx1IGFjdD0lbHUpXG4iLAorCQkJCWlkLCBuZXdfcmF0ZSwgY3VyX3JhdGUpOwor CQl9IGVsc2UgaWYgKGVuYWJsZWQpIHsKKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGspOwor CQkJZHNpLT5jbGtfY29uZmlnW2ldLmVuYWJsZWQgPSBmYWxzZTsKKwkJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkRpc2FibGVkICVzIGNsa1xuIiwgaWQpOworCQl9CisJfQorfQorCitzdGF0 aWMgdm9pZCBpbXhfbndsX2RzaV9lbmFibGUoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJaW50IHJldDsKKworCWlteF9ud2xfZHNp X3NldF9jbG9ja3MoZHNpLCB0cnVlKTsKKworCXJldCA9IGRzaS0+cGRhdGEtPnBvd2Vyb24oZHNp KTsKKwlpZiAocmV0IDwgMCkKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcG93ZXIg b24gRFNJICglZClcbiIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9ud2xfZHNpX2Rpc2Fi bGUoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNp LT5kZXY7CisKKwlpZiAoZHNpLT5kcG1zX21vZGUgIT0gRFJNX01PREVfRFBNU19PTikKKwkJcmV0 dXJuOworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZGlzYWJsZSIpOworCWRzaS0+cGRh dGEtPnBvd2Vyb2ZmKGRzaSk7CisJaW14X253bF9kc2lfc2V0X2Nsb2Nrcyhkc2ksIGZhbHNlKTsK K30KKworc3RhdGljIHZvaWQgaW14X253bF9zZXRfaW5wdXRfc291cmNlKHN0cnVjdCBpbXhfbnds X2RzaSAqZHNpLCBib29sIGRjc3MpCit7CisJdTMyIG11eF92YWw7CisKKwltdXhfdmFsID0gZGNz cyA/IElNWDhNUV9HUFIxM19NSVBJX01VWF9TRUwgOiAwOworCURSTV9ERVZfSU5GTyhkc2ktPmRl diwgIlVzaW5nICVzIGFzIGlucHV0IHNvdXJjZVxuIiwKKwkJICAgICAobXV4X3ZhbCkgPyAiRENT UyIgOiAiTENESUYiKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5tdXhfc2VsLAorCQkJICAg SU9NVVhDX0dQUjEzLAorCQkJICAgSU1YOE1RX0dQUjEzX01JUElfTVVYX1NFTCwKKwkJCSAgIG11 eF92YWwpOworfQorCitzdGF0aWMgdm9pZCBpbXhfbndsX2RzaV9lbmNvZGVyX2VuYWJsZShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGlteF9ud2xfZHNpICpkc2kgPSBl bmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCWlmIChkc2ktPmRwbXNfbW9kZSA9PSBEUk1fTU9E RV9EUE1TX09OKQorCQlyZXR1cm47CisKKwkvKiBVc2UgRENTUywgZm9yIExDRElGIHdlJ2xsIGFj dCBhcyBhIGJyaWRnZSAodGJkKSAqLworCWlteF9ud2xfc2V0X2lucHV0X3NvdXJjZShkc2ksIHRy dWUpOworCisJcG1fcnVudGltZV9nZXRfc3luYyhkc2ktPmRldik7CisJaW14X253bF9kc2lfZW5h YmxlKGRzaSk7CisJbndsX2RzaV9lbmFibGUoZHNpKTsKKwlkc2ktPmRwbXNfbW9kZSA9IERSTV9N T0RFX0RQTVNfT047Cit9CisKK3N0YXRpYyB2b2lkIGlteF9ud2xfZHNpX2VuY29kZXJfZGlzYWJs ZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGlteF9ud2xfZHNpICpk c2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCWlmIChkc2ktPmRwbXNfbW9kZSAhPSBE Uk1fTU9ERV9EUE1TX09OKQorCQlyZXR1cm47CisKKwlud2xfZHNpX2Rpc2FibGUoZHNpKTsKKwlp bXhfbndsX2RzaV9kaXNhYmxlKGRzaSk7CisJcG1fcnVudGltZV9wdXRfc3luYyhkc2ktPmRldik7 CisJZHNpLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKK30KKworc3RhdGljIGludCBp bXhfbndsX2RzaV9lbmNvZGVyX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIsCisJCQkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkJc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJc3RydWN0IGlteF9ud2xfZHNp ICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBk c2ktPmRldjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZjcnRjX3N0YXRlLT5h ZGp1c3RlZF9tb2RlOworCXVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBuZXdfY2ZnOworCXVuc2ln bmVkIGxvbmcgcGh5X3JlZl9yYXRlOworCWludCByZXQ7CisKKwlyZXQgPSBud2xfZHNpX2dldF9k cGh5X3BhcmFtcyhkc2ksIG1vZGUsICZuZXdfY2ZnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJu IHJldDsKKworCS8qCisJICogSWYgaHMgY2xvY2sgaXMgdW5jaGFuZ2VkLCB3ZSdyZSBhbGwgZ29v ZCAtIGFsbCBwYXJhbWV0ZXJzIGFyZQorCSAqIGRlcml2ZWQgZnJvbSBpdCBhdG0uCisJICovCisJ aWYgKG5ld19jZmcubWlwaV9kcGh5LmhzX2Nsa19yYXRlID09IGRzaS0+cGh5X2NmZy5taXBpX2Rw aHkuaHNfY2xrX3JhdGUpCisJCXJldHVybiAwOworCisJcGh5X3JlZl9yYXRlID0gY2xrX2dldF9y YXRlKGRzaS0+cGh5X3JlZl9jbGspOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlBIWSBh dCByZWYgcmF0ZTogJWx1XG4iLCBwaHlfcmVmX3JhdGUpOworCWlmIChyZXQgPCAwKSB7CisJCURS TV9ERVZfRVJST1IoZHNpLT5kZXYsCisJCQkgICAgICAiQ2Fubm90IHNldHVwIFBIWSBmb3IgbW9k ZTogJXV4JXUgQCVkIEh6XG4iLAorCQkJICAgICAgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNw bGF5LCBtb2RlLT5jbG9jayk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJQSFkgcmVmIGNs azogJWx1LCBiaXQgY2xrOiAlbHVcbiIsCisJCQkgICAgICBwaHlfcmVmX3JhdGUsIG5ld19jZmcu bWlwaV9kcGh5LmhzX2Nsa19yYXRlKTsKKwl9IGVsc2UgeworCQkvKiBTYXZlIHRoZSBuZXcgZGVz aXJlZCBwaHkgY29uZmlnICovCisJCW1lbWNweSgmZHNpLT5waHlfY2ZnLCAmbmV3X2NmZywgc2l6 ZW9mKG5ld19jZmcpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaW14X253 bF9kc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJ CSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkJIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICphZGp1c3RlZCkKK3sKKwlzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSA9IGVuY29kZXJf dG9fZHNpKGVuY29kZXIpOworCisJZHJtX2Rpc3BsYXlfbW9kZV90b192aWRlb21vZGUoYWRqdXN0 ZWQsICZkc2ktPnZtKTsKKwlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKGFkanVzdGVkKTsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MKK2lteF9u d2xfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5lbmFibGUgPSBpbXhfbndsX2RzaV9l bmNvZGVyX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGlteF9ud2xfZHNpX2VuY29kZXJfZGlzYWJsZSwK KwkuYXRvbWljX2NoZWNrID0gaW14X253bF9kc2lfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCisJLm1v ZGVfc2V0ID0gaW14X253bF9kc2lfZW5jb2Rlcl9tb2RlX3NldCwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgaW14X253bF9kc2lfZW5jb2Rlcl9mdW5jcyA9IHsK KwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitzdGF0aWMgaW50IGlteF9u d2xfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKK3sKKwlzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVj dG9yKTsKKworCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitz dGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGlteF9ud2xfZHNpX2Nvbm5l Y3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGlteF9ud2xfZHNpX2Nvbm5lY3Rv cl9nZXRfbW9kZXMsCit9OworCitzdGF0aWMgdm9pZCBpbXhfbndsX2RzaV9kcm1fY29ubmVjdG9y X2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29ubmVj dG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVj dG9yKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGlteF9u d2xfZHNpX2F0b21pY19jb25uZWN0b3JfZnVuY3MgPSB7CisJLmZpbGxfbW9kZXMgPSBkcm1faGVs cGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSBpbXhfbndsX2Rz aV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBp bnQgaW14X253bF9taXBpX2RzaV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJ CSAgICAgc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyID0gJmRzaS0+ZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y ID0gJmRzaS0+Y29ubmVjdG9yOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCWlu dCByZXQ7CisKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIlczogbGluZTogJWQiLCBfX2Z1 bmNfXywgX19MSU5FX18pOworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZHJtX29mX2ZpbmRf cG9zc2libGVfY3J0Y3MoZHJtLAorCQkJCQkJCSAgICAgZGV2LT5vZl9ub2RlKTsKKwlpZiAoZW5j b2Rlci0+cG9zc2libGVfY3J0Y3MgPT0gMCkgeworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJObyBDUlTEjHMgZm91bmQgeWV0XG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQor CisJZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmZHNpLT5lbmNvZGVyLAorCQkJICAgICAgICZpbXhf bndsX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChk cm0sICZkc2ktPmVuY29kZXIsICZpbXhfbndsX2RzaV9lbmNvZGVyX2Z1bmNzLAorCQkJICAgICAg IERSTV9NT0RFX0VOQ09ERVJfRFNJLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwKKwkJCQkgJmlteF9ud2xfZHNp X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRy bSwgJmRzaS0+Y29ubmVjdG9yLAorCQkJCSAmaW14X253bF9kc2lfYXRvbWljX2Nvbm5lY3Rvcl9m dW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldCA9IGRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBl bmNvZGVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiJXM6IGxpbmU6ICVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpbXhfbndsX2RzaV9wYXJzZV9kdChzdHJ1Y3QgaW14X253bF9kc2kg KmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZHNpLT5kZXYtPm9mX25vZGU7CisJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkc2ktPmRl dik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGNsayAqY2xrOworCWNvbnN0IGNo YXIgKmNsa19pZDsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJaW50IGksIHJldDsKKworCWRzaS0+ cGh5ID0gZGV2bV9waHlfZ2V0KGRzaS0+ZGV2LCAiZHBoeSIpOworCWlmIChJU19FUlIoZHNpLT5w aHkpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5waHkpOworCQlkZXZfZXJyKGRzaS0+ZGV2LCAi Q291bGQgbm90IGdldCBQSFkgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkv KiBQbGF0Zm9ybSBkZXBlbmRlbnQgY2xvY2tzICovCisJbWVtY3B5KGRzaS0+Y2xrX2NvbmZpZywg ZHNpLT5wZGF0YS0+Y2xrX2NvbmZpZywKKwkgICAgICAgc2l6ZW9mKGRzaS0+cGRhdGEtPmNsa19j b25maWcpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzaS0+cGRhdGEtPmNsa19j b25maWcpOyBpKyspIHsKKwkJaWYgKCFkc2ktPmNsa19jb25maWdbaV0ucHJlc2VudCkKKwkJCWNv bnRpbnVlOworCisJCWNsa19pZCA9IGRzaS0+Y2xrX2NvbmZpZ1tpXS5pZDsKKwkJY2xrID0gZGV2 bV9jbGtfZ2V0KGRzaS0+ZGV2LCBjbGtfaWQpOworCQlpZiAoSVNfRVJSKGNsaykpIHsKKwkJCXJl dCA9IFBUUl9FUlIoY2xrKTsKKwkJCWRldl9lcnIoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0ICVz IGNsb2NrICglZClcbiIsCisJCQkJY2xrX2lkLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQor CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIlNldHVwIGNsayAlcyAocmF0ZTogJWx1 KVxuIiwKKwkJCQkgICAgIGNsa19pZCwgY2xrX2dldF9yYXRlKGNsaykpOworCQlkc2ktPmNsa19j b25maWdbaV0uY2xrID0gY2xrOworCX0KKworCS8qIERTSSBjbG9ja3MgKi8KKwljbGsgPSBkZXZt X2Nsa19nZXQoZHNpLT5kZXYsICJwaHlfcmVmIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXJl dCA9IFBUUl9FUlIoY2xrKTsKKwkJZGV2X2Vycihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcGh5 X3JlZiBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWRzaS0+cGh5X3Jl Zl9jbGsgPSBjbGs7CisKKwljbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJyeF9lc2MiKTsK KwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihjbGspOworCQlkZXZfZXJyKGRz aS0+ZGV2LCAiRmFpbGVkIHRvIGdldCByeF9lc2MgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKwlkc2ktPnJ4X2VzY19jbGsgPSBjbGs7CisKKwljbGsgPSBkZXZtX2Nsa19n ZXQoZHNpLT5kZXYsICJ0eF9lc2MiKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJcmV0ID0gUFRS X0VSUihjbGspOworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCB0eF9lc2MgY2xv Y2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlkc2ktPnR4X2VzY19jbGsgPSBj bGs7CisKKwkvKiBMb29rIGZvciByZXF1aXJlZCByZWdtYXBzICovCisJZHNpLT5jc3IgPSBzeXNj b25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAiY3NyIik7CisJaWYgKElTX0VSUihkc2kt PmNzcikgJiYgZHNpLT5wZGF0YS0+ZXh0X3JlZ3MgJiBJTVhfUkVHX0NTUikgeworCQlyZXQgPSBQ VFJfRVJSKGRzaS0+Y3NyKTsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBn ZXQgQ1NSIHJlZ21hcCAoJWQpLlxuIiwKKwkJCSAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCWRzaS0+cmVzZXQgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAic3Jj Iik7CisJaWYgKElTX0VSUihkc2ktPnJlc2V0KSAmJiAoZHNpLT5wZGF0YS0+ZXh0X3JlZ3MgJiBJ TVhfUkVHX1NSQykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnJlc2V0KTsKKwkJRFJNX0RFVl9F UlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgU1JDIHJlZ21hcCAoJWQpLlxuIiwKKwkJCSAg ICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWRzaS0+bXV4X3NlbCA9IHN5c2Nvbl9yZWdt YXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJtdXgtc2VsIik7CisJaWYgKElTX0VSUihkc2ktPm11 eF9zZWwpICYmIChkc2ktPnBkYXRhLT5leHRfcmVncyAmIElNWF9SRUdfR1BSKSkgeworCQlyZXQg PSBQVFJfRVJSKGRzaS0+bXV4X3NlbCk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWls ZWQgdG8gZ2V0IEdQUiByZWdtYXAgKCVkKS5cbiIsCisJCQkgICAgICByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7CisJcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkc2ktPmRldiwgcmVzKTsK KwlpZiAoSVNfRVJSKHJlZ3MpKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQg dG8gbWFwIE5XTCBEU0kgcmVnaXN0ZXJzLlxuIik7CisJCXJldHVybiBQVFJfRVJSKHJlZ3MpOwor CX0KKworCWRzaS0+cmVncyA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkc2ktPmRldiwgcmVncywK KwkJCQkJICAmbndsX2RzaV9yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVncykp IHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgTldMIERTSSBy ZWdtYXAuXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5yZWdzKTsKKwl9CisKKwlkc2ktPmly cSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGRzaS0+aXJxIDwgMCkgeworCQlE Uk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBkZXZpY2UgSVJRLlxuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlteDht cV9kc2lfcG93ZXJvbihzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSkKK3sKKwkvKiBvdGhlcndpc2Ug dGhlIGRpc3BsYXkgc3RheXMgYmxhbmsgKi8KKwl1c2xlZXBfcmFuZ2UoMjAwLCAzMDApOworCisJ cmVnbWFwX3VwZGF0ZV9iaXRzKGRzaS0+cmVzZXQsIFNSQ19NSVBJUEhZX1JDUiwKKwkJCSAgIFBD TEtfUkVTRVRfTiwgUENMS19SRVNFVF9OKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5yZXNl dCwgU1JDX01JUElQSFlfUkNSLAorCQkJICAgRVNDX1JFU0VUX04sIEVTQ19SRVNFVF9OKTsKKwly ZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5yZXNldCwgU1JDX01JUElQSFlfUkNSLAorCQkJICAgUkVT RVRfQllURV9OLCBSRVNFVF9CWVRFX04pOworCXJlZ21hcF91cGRhdGVfYml0cyhkc2ktPnJlc2V0 LCBTUkNfTUlQSVBIWV9SQ1IsCisJCQkgICBEUElfUkVTRVRfTiwgRFBJX1JFU0VUX04pOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW14OG1xX2RzaV9wb3dlcm9mZihzdHJ1Y3QgaW14 X253bF9kc2kgKmRzaSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5yZXNldCwgU1JDX01J UElQSFlfUkNSLAorCQkJICAgUENMS19SRVNFVF9OLCAwKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMo ZHNpLT5yZXNldCwgU1JDX01JUElQSFlfUkNSLAorCQkJICAgRVNDX1JFU0VUX04sIDApOworCXJl Z21hcF91cGRhdGVfYml0cyhkc2ktPnJlc2V0LCBTUkNfTUlQSVBIWV9SQ1IsCisJCQkgICBSRVNF VF9CWVRFX04sIDApOworCXJlZ21hcF91cGRhdGVfYml0cyhkc2ktPnJlc2V0LCBTUkNfTUlQSVBI WV9SQ1IsCisJCQkgICBEUElfUkVTRVRfTiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHN0cnVjdCBpbXhfbndsX3BsYXRmb3JtX2RhdGEgaW14OG1xX2RldiA9IHsKKwkucG93ZXJvbiA9 ICZpbXg4bXFfZHNpX3Bvd2Vyb24sCisJLnBvd2Vyb2ZmID0gJmlteDhtcV9kc2lfcG93ZXJvZmYs CisJLmNsa19jb25maWcgPSB7CisJCXsgLmlkID0gQ0xLX0NPUkUsICAgLnByZXNlbnQgPSB0cnVl IH0sCisJCXsgLmlkID0gQ0xLX1BJWEVMLCAgLnByZXNlbnQgPSBmYWxzZSB9LAorCQl7IC5pZCA9 IENMS19CWVBBU1MsIC5wcmVzZW50ID0gZmFsc2UgfSwKKwl9LAorCS5leHRfcmVncyA9IElNWF9S RUdfU1JDIHwgSU1YX1JFR19HUFIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBpbXhfbndsX2RzaV9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxpbXg4 bXEtbndsLWRzaSIsIC5kYXRhID0gJmlteDhtcV9kZXYsIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9 Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW14X253bF9kc2lfZHRfaWRzKTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSBpbXhfbndsX3F1aXJrc19tYXRj aFtdID0geworCXsgLnNvY19pZCA9ICJpLk1YOE1RIiwgLnJldmlzaW9uID0gIjIuMCIsCisJICAu ZGF0YSA9ICh2b2lkICopRTExNDE4X0hTX01PREVfUVVJUksgfSwKKwl7IC8qIHNlbnRpbmVsLiAq LyB9LAorfTsKKworc3RhdGljIGludCBpbXhfbndsX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRl diwJc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2Zf aWQgPQorCQlvZl9tYXRjaF9kZXZpY2UoaW14X253bF9kc2lfZHRfaWRzLCBkZXYpOworCWNvbnN0 IHN0cnVjdCBpbXhfbndsX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gb2ZfaWQtPmRhdGE7CisJY29u c3Qgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlICphdHRyOworCXN0cnVjdCBpbXhfbndsX2Rz aSAqZHNpOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRz aSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRzaS0+ ZGV2ID0gZGV2OworCWRzaS0+cGRhdGEgPSBwZGF0YTsKKwlkc2ktPmRwbXNfbW9kZSA9IERSTV9N T0RFX0RQTVNfT0ZGOworCisJcmV0ID0gaW14X253bF9kc2lfcGFyc2VfZHQoZHNpKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGRzaS0+ aXJxLCBud2xfZHNpX2lycV9oYW5kbGVyLCAwLAorCQkJICAgICAgIGRldl9uYW1lKGRldiksIGRz aSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVx dWVzdCBJUlE6ICVkICglZClcbiIsCisJCQkgICAgICBkc2ktPmlycSwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXQgPSBpbXhfbndsX21pcGlfZHNpX3JlZ2lzdGVyKGRybSwgZHNpKTsK KwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIE1J UEkgaG9zdDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NsZWFudXA7CisJfQorCisJZHNpLT5k c2lfaG9zdC5vcHMgPSAmbndsX2RzaV9ob3N0X29wczsKKwlkc2ktPmRzaV9ob3N0LmRldiA9IGRl djsKKwlyZXQgPSBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKworCWlm IChyZXQpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTUlQSSBo b3N0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY2xlYW51cDsKKwl9CisKKwlhdHRyID0gc29j X2RldmljZV9tYXRjaChpbXhfbndsX3F1aXJrc19tYXRjaCk7CisJaWYgKGF0dHIpCisJCWRzaS0+ cXVpcmtzID0gKHVpbnRwdHJfdClhdHRyLT5kYXRhOworCisJaWYgKCFkc2ktPnBhbmVsKSB7CisJ CXJldCA9IC1FUFJPQkVfREVGRVI7CisJCWdvdG8gZXJyX21pcGlfZHNpX2hvc3Q7CisJfQorCisJ ZGV2X3NldF9kcnZkYXRhKGRldiwgZHNpKTsKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCXJl dHVybiAwOworCitlcnJfbWlwaV9kc2lfaG9zdDoKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIo JmRzaS0+ZHNpX2hvc3QpOworZXJyX2NsZWFudXA6CisJZGV2bV9mcmVlX2lycShkZXYsIGRzaS0+ aXJxLCBkc2kpOworCWRzaS0+Y29ubmVjdG9yLmZ1bmNzLT5kZXN0cm95KCZkc2ktPmNvbm5lY3Rv cik7CisJZHNpLT5lbmNvZGVyLmZ1bmNzLT5kZXN0cm95KCZkc2ktPmVuY29kZXIpOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9ud2xfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICB2b2lkICpkYXRhKQor eworCXN0cnVjdCBpbXhfbndsX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlp ZiAoZHNpLT5kcG1zX21vZGUgPT0gRFJNX01PREVfRFBNU19PTikKKwkJaW14X253bF9kc2lfZW5j b2Rlcl9kaXNhYmxlKCZkc2ktPmVuY29kZXIpOworCisJaWYgKGRzaS0+ZW5jb2Rlci5kZXYpCisJ CWRybV9lbmNvZGVyX2NsZWFudXAoJmRzaS0+ZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgY29tcG9uZW50X29wcyBpbXhfbndsX2RzaV9jb21wb25lbnRfb3BzID0geworCS5iaW5k CT0gaW14X253bF9kc2lfYmluZCwKKwkudW5iaW5kCT0gaW14X253bF9kc2lfdW5iaW5kLAorfTsK Kworc3RhdGljIGludCBpbXhfbndsX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZpbXhfbndsX2RzaV9j b21wb25lbnRfb3BzKTsKK30KKworc3RhdGljIGludCBpbXhfbndsX2RzaV9yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZp bXhfbndsX2RzaV9jb21wb25lbnRfb3BzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgaW14X253bF9kc2lfZHJpdmVyID0geworCS5wcm9iZQkJPSBpbXhf bndsX2RzaV9wcm9iZSwKKwkucmVtb3ZlCQk9IGlteF9ud2xfZHNpX3JlbW92ZSwKKwkuZHJpdmVy CQk9IHsKKwkJLm9mX21hdGNoX3RhYmxlID0gaW14X253bF9kc2lfZHRfaWRzLAorCQkubmFtZQk9 IERSVl9OQU1FLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlteF9ud2xfZHNp X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIk5YUCBTZW1pY29uZHVjdG9yIik7CitNT0RVTEVf QVVUSE9SKCJQdXJpc20gU1BDIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImkuTVg4IE5vcnRod2Vz dCBMb2dpYyBNSVBJLURTSSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsgLyogR1BM djIgb3IgbGF0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ud2wvbndsLWRydi5o IGIvZHJpdmVycy9ncHUvZHJtL253bC9ud2wtZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi45ZjAzNDdkNGNhZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbndsL253bC1kcnYuaApAQCAtMCwwICsxLDY4IEBACisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiBpLk1YOCBOV0wgTUlQSSBEU0kgaG9zdCBkcml2 ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg UHVyaXNtIFNQQworICovCisKKyNpZm5kZWYgX19OV0xfRFJWX0hfXworI2RlZmluZSBfX05XTF9E UlZfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9t aXBpX2RzaS5oPgorCitzdHJ1Y3QgaW14X253bF9wbGF0Zm9ybV9kYXRhOworCisvKiBpbXggbnds IHF1aXJrcyAqLworI2RlZmluZSBFMTE0MThfSFNfTU9ERV9RVUlSSyBCSVQoMCkKKyNkZWZpbmUg VVNFX0UxMTQxOF9IU19NT0RFX1FVSVJLKHgpICgoeCkgJiBFMTE0MThfSFNfTU9ERV9RVUlSSykK KworI2RlZmluZSBOV0xfTUFYX1BMQVRGT1JNX0NMT0NLUyAzCitzdHJ1Y3QgaW14X253bF9jbGtf Y29uZmlnIHsKKwljb25zdCBjaGFyICppZDsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJYm9vbCBwcmVz ZW50OworCWJvb2wgZW5hYmxlZDsKKwl1MzIgcmF0ZTsKK307CisKK3N0cnVjdCBpbXhfbndsX2Rz aSB7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3Ig Y29ubmVjdG9yOworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0OworCXN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJ dW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBoeV9jZmc7CisJdW5zaWduZWQgaW50IHF1aXJrczsK KworCXN0cnVjdCByZWdtYXAgKnJlZ3M7CisJaW50IGlycTsKKworCS8qIEV4dGVybmFsIHJlZ2lz dGVycyAqLworCXN0cnVjdCByZWdtYXAgKmNzcjsKKwlzdHJ1Y3QgcmVnbWFwICptdXhfc2VsOwor CXN0cnVjdCByZWdtYXAgKnJlc2V0OworCisJLyogUGxhdGZvcm0gZGVwZW5kZW50IGNsb2NrcyAq LworCXN0cnVjdCBpbXhfbndsX2Nsa19jb25maWcgY2xrX2NvbmZpZ1szXTsKKwkvKiBEU0kgY2xv Y2tzICovCisJc3RydWN0IGNsayAqcGh5X3JlZl9jbGs7CisJc3RydWN0IGNsayAqcnhfZXNjX2Ns azsKKwlzdHJ1Y3QgY2xrICp0eF9lc2NfY2xrOworCisJLyogZHNpIGxhbmVzICovCisJdTMyIGxh bmVzOworCWVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1hdDsKKwlzdHJ1Y3QgdmlkZW9t b2RlIHZtOworCXVuc2lnbmVkIGxvbmcgZHNpX21vZGVfZmxhZ3M7CisKKwlpbnQgZHBtc19tb2Rl OworCisJc3RydWN0IG1pcGlfZHNpX3RyYW5zZmVyICp4ZmVyOworCisJY29uc3Qgc3RydWN0IGlt eF9ud2xfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Cit9OworCisjZW5kaWYgLyogX19OV0xfRFJWX0hf XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL253bC9ud2wtZHNpLmMgYi9kcml2ZXJz L2dwdS9kcm0vbndsL253bC1kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmQ2ZDMzMjM5Y2IwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9u d2wvbndsLWRzaS5jCkBAIC0wLDAgKzEsNzUyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCsKKy8qCisgKiBOV0wgRFNJIGhvc3QgZHJpdmVyCisgKgorICogQ29weXJpZ2h0 IChDKSAyMDE3IE5YUAorICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMKKyAqLworCisj aW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2lu Y2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5o PgorCisjaW5jbHVkZSAibndsLWRydi5oIgorI2luY2x1ZGUgIm53bC1kc2kuaCIKKworI2RlZmlu ZSBNSVBJX0ZJRk9fVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDUwMCkKKworLyogUEtUIHJlZyBi aXQgbWFuaXB1bGF0aW9uICovCisjZGVmaW5lIFJFR19NQVNLKGUsIHMpICgoKDEgPDwgKChlKSAt IChzKSArIDEpKSAtIDEpIDw8IChzKSkKKyNkZWZpbmUgUkVHX1BVVCh4LCBlLCBzKSAoKCh4KSA8 PCAocykpICYgUkVHX01BU0soZSwgcykpCisjZGVmaW5lIFJFR19HRVQoeCwgZSwgcykgKCgoeCkg JiBSRUdfTUFTSyhlLCBzKSkgPj4gKHMpKQorCisvKgorICogUEtUX0NPTlRST0wgZm9ybWF0Ogor ICogWzE1OiAwXSAtIHdvcmQgY291bnQKKyAqIFsxNzoxNl0gLSB2aXJ0dWFsIGNoYW5uZWwKKyAq IFsyMzoxOF0gLSBkYXRhIHR5cGUKKyAqIFsyNF0gICAgLSBMUCBvciBIUyBzZWxlY3QgKDAgLSBM UCwgMSAtIEhTKQorICogWzI1XSAgICAtIHBlcmZvcm0gQlRBIGFmdGVyIHBhY2tldCBpcyBzZW50 CisgKiBbMjZdICAgIC0gcGVyZm9ybSBCVEEgb25seSwgbm8gcGFja2V0IHR4CisgKi8KKyNkZWZp bmUgV0MoeCkJCVJFR19QVVQoKHgpLCAxNSwgIDApCisjZGVmaW5lIFRYX1ZDKHgpCVJFR19QVVQo KHgpLCAxNywgMTYpCisjZGVmaW5lIFRYX0RUKHgpCVJFR19QVVQoKHgpLCAyMywgMTgpCisjZGVm aW5lIEhTX1NFTCh4KQlSRUdfUFVUKCh4KSwgMjQsIDI0KQorI2RlZmluZSBCVEFfVFgoeCkJUkVH X1BVVCgoeCksIDI1LCAyNSkKKyNkZWZpbmUgQlRBX05PX1RYKHgpCVJFR19QVVQoKHgpLCAyNiwg MjYpCisKKy8qCisgKiBSWF9QS1RfSEVBREVSIGZvcm1hdDoKKyAqIFsxNTogMF0gLSB3b3JkIGNv dW50CisgKiBbMjE6MTZdIC0gZGF0YSB0eXBlCisgKiBbMjM6MjJdIC0gdmlydHVhbCBjaGFubmVs CisgKi8KKyNkZWZpbmUgUlhfRFQoeCkJUkVHX0dFVCgoeCksIDIxLCAxNikKKyNkZWZpbmUgUlhf VkMoeCkJUkVHX0dFVCgoeCksIDIzLCAyMikKKworLyoKKyAqIERTSSBWaWRlbyBtb2RlCisgKi8K KyNkZWZpbmUgVklERU9fTU9ERV9CVVJTVF9NT0RFX1dJVEhfU1lOQ19QVUxTRVMgICAgICAwCisj ZGVmaW5lIFZJREVPX01PREVfTk9OX0JVUlNUX01PREVfV0lUSF9TWU5DX0VWRU5UUyAgQklUKDAp CisjZGVmaW5lIFZJREVPX01PREVfQlVSU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgQklU KDEpCisKKy8qCisgKiBEUEkgY29sb3IgY29kaW5nCisgKi8KKyNkZWZpbmUJRFBJXzE2X0JJVF81 NjVfUEFDS0VEICAwCisjZGVmaW5lCURQSV8xNl9CSVRfNTY1X0FMSUdORUQgMQorI2RlZmluZQlE UElfMTZfQklUXzU2NV9TSElGVEVEIDIKKyNkZWZpbmUJRFBJXzE4X0JJVF9QQUNLRUQgICAgICAz CisjZGVmaW5lCURQSV8xOF9CSVRfQUxJR05FRCAgICAgNAorI2RlZmluZQlEUElfMjRfQklUCSAg ICAgICA1CisKKy8qCisgKiBEUEkgUGl4ZWwgZm9ybWF0CisgKi8KKyNkZWZpbmUgUElYRUxfRk9S TUFUXzE2ICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBJWEVMX0ZPUk1BVF8xOCAgICAgICAg ICAgICAgICAgQklUKDApCisjZGVmaW5lIFBJWEVMX0ZPUk1BVF8xOEwgICAgICAgICAgICAgICAg QklUKDEpCisjZGVmaW5lIFBJWEVMX0ZPUk1BVF8yNCAgICAgICAgICAgICAgICAgKEJJVCgwKSB8 IEJJVCgxKSkKKworZW51bSB0cmFuc2Zlcl9kaXJlY3Rpb24geworCURTSV9QQUNLRVRfU0VORCwK KwlEU0lfUEFDS0VUX1JFQ0VJVkUKK307CisKK3N0cnVjdCBtaXBpX2RzaV90cmFuc2ZlciB7CisJ Y29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnOworCXN0cnVjdCBtaXBpX2RzaV9wYWNrZXQg cGFja2V0OworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRlZDsKKworCWludCBzdGF0dXM7ICAg IC8qIHN0YXR1cyBvZiB0cmFuc21pc3Npb24gKi8KKwllbnVtIHRyYW5zZmVyX2RpcmVjdGlvbiBk aXJlY3Rpb247CisJYm9vbCBuZWVkX2J0YTsKKwl1OCBjbWQ7CisJdTE2IHJ4X3dvcmRfY291bnQ7 CisJc2l6ZV90IHR4X2xlbjsgLyogYnl0ZXMgc2VudCAqLworCXNpemVfdCByeF9sZW47IC8qIGJ5 dGVzIHJlY2VpdmVkICovCit9OworCitzdGF0aWMgaW5saW5lIGludCBud2xfZHNpX3dyaXRlKHN0 cnVjdCBpbXhfbndsX2RzaSAqZHNpLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJCXUzMiB2YWwpCit7 CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF93cml0ZShkc2ktPnJlZ3MsIHJlZywgdmFsKTsK KwlpZiAocmV0IDwgMCkKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byB3cml0 ZSBOV0wgRFNJIHJlZyAweCV4OiAlZCIsCisJCQkgICAgICByZWcsIHJldCk7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGlubGluZSB1MzIgbndsX2RzaV9yZWFkKHN0cnVjdCBpbXhfbndsX2Rz aSAqZHNpLCB1MzIgcmVnKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJldDsKKworCXJl dCA9IHJlZ21hcF9yZWFkKGRzaS0+cmVncywgcmVnLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJ RFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byByZWFkIE5XTCBEU0kgcmVnIDB4JXg6 ICVkIiwKKwkJCSAgICAgIHJlZywgcmV0KTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB1 MzIgbndsX2RzaV9nZXRfZHBpX3BpeGVsX2Zvcm1hdChlbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1h dCBmb3JtYXQpCit7CisKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JH QjU2NToKKwkJcmV0dXJuIFBJWEVMX0ZPUk1BVF8xNjsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2 NjY6CisJCXJldHVybiBQSVhFTF9GT1JNQVRfMThMOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2 Nl9QQUNLRUQ6CisJCXJldHVybiBQSVhFTF9GT1JNQVRfMTg7CisJY2FzZSBNSVBJX0RTSV9GTVRf UkdCODg4OgorCQlyZXR1cm4gUElYRUxfRk9STUFUXzI0OworCWRlZmF1bHQ6CisJCXJldHVybiAt RUlOVkFMOworCX0KK30KKworaW50IG53bF9kc2lfZ2V0X2RwaHlfcGFyYW1zKHN0cnVjdCBpbXhf bndsX2RzaSAqZHNpLAorCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkg ICB1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgKnBoeV9vcHRzKQoreworCXVuc2lnbmVkIGxvbmcg cmF0ZTsKKworCWlmIChkc2ktPmxhbmVzIDwgMSB8fCBkc2ktPmxhbmVzID4gNCkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwkvKgorCSAqIFNvIGZhciB0aGUgRFBIWSBzcGVjIG1pbmltYWwgdGltaW5n cyB3b3JrIGZvciBib3RoIG1peGVsCisJICogZHBoeSBhbmQgbndsIGRzaSBob3N0CisJICovCisJ cGh5X21pcGlfZHBoeV9nZXRfZGVmYXVsdF9jb25maWcoCisJCW1vZGUtPmNydGNfY2xvY2sgKiAx MDAwLAorCQltaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KSwKKwkJZHNp LT5sYW5lcywgJnBoeV9vcHRzLT5taXBpX2RwaHkpOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoZHNp LT50eF9lc2NfY2xrKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkxQIGNsayBp cyBAJWx1IEh6XG4iLCByYXRlKTsKKwlwaHlfb3B0cy0+bWlwaV9kcGh5LmxwX2Nsa19yYXRlID0g cmF0ZTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobndsX2RzaV9nZXRfZHBo eV9wYXJhbXMpOworCisjZGVmaW5lIFBTRUNfUEVSX1NFQwkxMDAwMDAwMDAwMDAwTEwKKy8qCisg KiBwczJiYyAtIFBpY29zZWNvbmRzIHRvIGJ5dGUgY2xvY2sgY3ljbGVzCisgKi8KK3N0YXRpYyB1 bnNpZ25lZCBpbnQgcHMyYmMoc3RydWN0IGlteF9ud2xfZHNpICpkc2ksIHVuc2lnbmVkIGxvbmcg bG9uZyBwcykKK3sKKwlpbnQgYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2kt PmZvcm1hdCk7CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQKHBzICogZHNpLT52bS5waXhlbGNsb2Nr ICogYnBwLAorCQkJICAgIGRzaS0+bGFuZXMgKiA4ICogUFNFQ19QRVJfU0VDKTsKK30KKworLyoq CisgKiB1aTJiYyAtIFVJIHRpbWUgcGVyaW9kcyB0byBieXRlIGNsb2NrIGN5Y2xlcworICovCitz dGF0aWMgdW5zaWduZWQgaW50IHVpMmJjKHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpLCB1bnNpZ25l ZCBsb25nIGxvbmcgdWkpCit7CisJaW50IGJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19i cHAoZHNpLT5mb3JtYXQpOworCisJcmV0dXJuIERJVl9ST1VORF9VUCh1aSAqIGRzaS0+bGFuZXMs CisJCQkgICAgZHNpLT52bS5waXhlbGNsb2NrICogYnBwKTsKK30KKworI2RlZmluZSBVU0VDX1BF Ul9TRUMJMTAwMDAwMEwKKy8qCisgKiB1czJiYyAtIG1pY3JvIHNlY29uZHMgdG8gbHAgY2xvY2sg Y3ljbGVzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXMybHAodW5zaWduZWQgaW50IGxwX2Ns a19yYXRlLCB1bnNpZ25lZCBsb25nIHVzKQoreworCXJldHVybiBESVZfUk9VTkRfVVAodXMgKiBs cF9jbGtfcmF0ZSwgVVNFQ19QRVJfU0VDKTsKK30KKworc3RhdGljIGludCBud2xfZHNpX2NvbmZp Z19ob3N0KHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpKQoreworCXUzMiBjeWNsZXM7CisJc3RydWN0 IHBoeV9jb25maWd1cmVfb3B0c19taXBpX2RwaHkgKmNmZyA9ICZkc2ktPnBoeV9jZmcubWlwaV9k cGh5OworCisJaWYgKGRzaS0+bGFuZXMgPCAxIHx8IGRzaS0+bGFuZXMgPiA0KQorCQlyZXR1cm4g LUVJTlZBTDsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiRFNJIExhbmVzICVk IiwgZHNpLT5sYW5lcyk7CisJbndsX2RzaV93cml0ZShkc2ksIENGR19OVU1fTEFORVMsIGRzaS0+ bGFuZXMgLSAxKTsKKworCWlmIChkc2ktPmRzaV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lfQ0xPQ0tf Tk9OX0NPTlRJTlVPVVMpIHsKKwkJbndsX2RzaV93cml0ZShkc2ksIENGR19OT05DT05USU5VT1VT X0NMSywgMHgwMSk7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBDRkdfQVVUT0lOU0VSVF9FT1RQLCAw eDAxKTsKKwl9IGVsc2UgeworCQlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX05PTkNPTlRJTlVPVVNf Q0xLLCAweDAwKTsKKwkJbndsX2RzaV93cml0ZShkc2ksIENGR19BVVRPSU5TRVJUX0VPVFAsIDB4 MDApOworCX0KKworCS8qIHZhbHVlcyBpbiBieXRlIGNsb2NrIGN5Y2xlcyAqLworCWN5Y2xlcyA9 IHVpMmJjKGRzaSwgY2ZnLT5jbGtfcHJlKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRl diwgImNmZ190X3ByZTogMHgleCIsIGN5Y2xlcyk7CisJbndsX2RzaV93cml0ZShkc2ksIENGR19U X1BSRSwgY3ljbGVzKTsKKwljeWNsZXMgPSBwczJiYyhkc2ksIGNmZy0+bHB4ICsgY2ZnLT5jbGtf cHJlcGFyZSArIGNmZy0+Y2xrX3plcm8pOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2 LCAiY2ZnX3R4X2dhcCAocHJlKTogMHgleCIsIGN5Y2xlcyk7CisJY3ljbGVzICs9IHVpMmJjKGRz aSwgY2ZnLT5jbGtfcHJlKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190 eF9nYXA6IDB4JXgiLCBjeWNsZXMpOworCW53bF9kc2lfd3JpdGUoZHNpLCBDRkdfVF9QT1NULCBj eWNsZXMpOworCWN5Y2xlcyA9IHBzMmJjKGRzaSwgY2ZnLT5oc19leGl0KTsKKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190eF9nYXA6IDB4JXgiLCBjeWNsZXMpOworCW53bF9k c2lfd3JpdGUoZHNpLCBDRkdfVFhfR0FQLCBjeWNsZXMpOworCisJbndsX2RzaV93cml0ZShkc2ks IENGR19FWFRSQV9DTURTX0FGVEVSX0VPVFAsIDB4MDEpOworCW53bF9kc2lfd3JpdGUoZHNpLCBD RkdfSFRYX1RPX0NPVU5ULCAweDAwKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX0xSWF9IX1RP X0NPVU5ULCAweDAwKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZHX0JUQV9IX1RPX0NPVU5ULCAw eDAwKTsKKwkvKiBJbiBMUCBjbG9jayBjeWNsZXMgKi8KKwljeWNsZXMgPSB1czJscChjZmctPmxw X2Nsa19yYXRlLCBjZmctPndha2V1cCk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYs ICJjZmdfdHdha2V1cDogMHgleCIsIGN5Y2xlcyk7CisJbndsX2RzaV93cml0ZShkc2ksIENGR19U V0FLRVVQLCBjeWNsZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9j b25maWdfZHBpKHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpKQoreworCXN0cnVjdCB2aWRlb21vZGUg KnZtID0gJmRzaS0+dm07CisJdTMyIGNvbG9yX2Zvcm1hdCwgbW9kZTsKKwlib29sIGJ1cnN0X21v ZGU7CisKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhmcm9udF9wb3JjaCA9ICVk Iiwgdm0tPmhmcm9udF9wb3JjaCk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJo YmFja19wb3JjaCA9ICVkIiwgdm0tPmhiYWNrX3BvcmNoKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZF Uihkc2ktPmRldiwgImhzeW5jX2xlbiA9ICVkIiwgdm0tPmhzeW5jX2xlbik7CisJRFJNX0RFVl9E RUJVR19EUklWRVIoZHNpLT5kZXYsICJoYWN0aXZlID0gJWQiLCB2bS0+aGFjdGl2ZSk7CisJRFJN X0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJ2ZnJvbnRfcG9yY2ggPSAlZCIsIHZtLT52ZnJv bnRfcG9yY2gpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAidmJhY2tfcG9yY2gg PSAlZCIsIHZtLT52YmFja19wb3JjaCk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYs ICJ2c3luY19sZW4gPSAlZCIsIHZtLT52c3luY19sZW4pOworCURSTV9ERVZfREVCVUdfRFJJVkVS KGRzaS0+ZGV2LCAidmFjdGl2ZSA9ICVkIiwgdm0tPnZhY3RpdmUpOworCURSTV9ERVZfREVCVUdf RFJJVkVSKGRzaS0+ZGV2LCAiY2xvY2sgPSAlbHUga0h6IiwKKwkJCSAgICAgdm0tPnBpeGVsY2xv Y2sgLyAxMDAwKTsKKworCWNvbG9yX2Zvcm1hdCA9IG53bF9kc2lfZ2V0X2RwaV9waXhlbF9mb3Jt YXQoZHNpLT5mb3JtYXQpOworCWlmIChjb2xvcl9mb3JtYXQgPCAwKSB7CisJCURSTV9ERVZfRVJS T1IoZHNpLT5kZXYsICJJbnZhbGlkIGNvbG9yIGZvcm1hdCAweCV4IiwKKwkJCSAgICAgIGRzaS0+ Zm9ybWF0KTsKKwkJcmV0dXJuIGNvbG9yX2Zvcm1hdDsKKwl9CisKKwlud2xfZHNpX3dyaXRlKGRz aSwgSU5URVJGQUNFX0NPTE9SX0NPRElORywgRFBJXzI0X0JJVCk7CisJbndsX2RzaV93cml0ZShk c2ksIFBJWEVMX0ZPUk1BVCwgY29sb3JfZm9ybWF0KTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgVlNZ TkNfUE9MQVJJVFksCisJCSAgICAgICEhKHZtLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfVlNZTkNf SElHSCkpOworCW53bF9kc2lfd3JpdGUoZHNpLCBIU1lOQ19QT0xBUklUWSwKKwkJICAgICAgISEo dm0tPmZsYWdzICYgRElTUExBWV9GTEFHU19IU1lOQ19ISUdIKSk7CisKKwlidXJzdF9tb2RlID0g KGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKSAmJgorCQkh KGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpOwor CisJaWYgKGJ1cnN0X21vZGUpIHsKKwkJbndsX2RzaV93cml0ZShkc2ksIFZJREVPX01PREUsIFZJ REVPX01PREVfQlVSU1RfTU9ERSk7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBQSVhFTF9GSUZPX1NF TkRfTEVWRUwsIDI1Nik7CisJfSBlbHNlIHsKKwkJbW9kZSA9ICgoZHNpLT5kc2lfbW9kZV9mbGFn cyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkgPworCQkJVklERU9fTU9ERV9CVVJT VF9NT0RFX1dJVEhfU1lOQ19QVUxTRVMgOgorCQkJVklERU9fTU9ERV9OT05fQlVSU1RfTU9ERV9X SVRIX1NZTkNfRVZFTlRTKTsKKwkJbndsX2RzaV93cml0ZShkc2ksIFZJREVPX01PREUsIG1vZGUp OworCQlud2xfZHNpX3dyaXRlKGRzaSwgUElYRUxfRklGT19TRU5EX0xFVkVMLCB2bS0+aGFjdGl2 ZSk7CisJfQorCisJbndsX2RzaV93cml0ZShkc2ksIEhGUCwgdm0tPmhmcm9udF9wb3JjaCk7CisJ bndsX2RzaV93cml0ZShkc2ksIEhCUCwgdm0tPmhiYWNrX3BvcmNoKTsKKwlud2xfZHNpX3dyaXRl KGRzaSwgSFNBLCB2bS0+aHN5bmNfbGVuKTsKKworCW53bF9kc2lfd3JpdGUoZHNpLCBFTkFCTEVf TVVMVF9QS1RTLCAweDApOworCW53bF9kc2lfd3JpdGUoZHNpLCBCTExQX01PREUsIDB4MSk7CisJ bndsX2RzaV93cml0ZShkc2ksIEVOQUJMRV9NVUxUX1BLVFMsIDB4MCk7CisJbndsX2RzaV93cml0 ZShkc2ksIFVTRV9OVUxMX1BLVF9CTExQLCAweDApOworCW53bF9kc2lfd3JpdGUoZHNpLCBWQywg MHgwKTsKKworCW53bF9kc2lfd3JpdGUoZHNpLCBQSVhFTF9QQVlMT0FEX1NJWkUsIHZtLT5oYWN0 aXZlKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgVkFDVElWRSwgdm0tPnZhY3RpdmUgLSAxKTsKKwlu d2xfZHNpX3dyaXRlKGRzaSwgVkJQLCB2bS0+dmJhY2tfcG9yY2gpOworCW53bF9kc2lfd3JpdGUo ZHNpLCBWRlAsIHZtLT52ZnJvbnRfcG9yY2gpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgbndsX2RzaV9lbmFibGVfdHhfY2xvY2soc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJaW50IHJldDsKKworCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShkc2ktPnR4X2VzY19jbGspOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9E RVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSB0eF9lc2MgY2xrOiAlZFxuIiwgcmV0KTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGVk IHR4X2VzYyBjbGsgQCVsdSBIelxuIiwKKwkJCSAgICAgY2xrX2dldF9yYXRlKGRzaS0+dHhfZXNj X2NsaykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG53bF9kc2lfZW5hYmxlX3J4X2Ns b2NrKHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRz aS0+ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5yeF9l c2NfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0 byBlbmFibGUgcnhfZXNjIGNsazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRW5hYmxlZCByeF9lc2MgY2xrIEAlbHUgSHpcbiIs CisJCQkgICAgIGNsa19nZXRfcmF0ZShkc2ktPnJ4X2VzY19jbGspKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgbndsX2RzaV9pbml0X2ludGVycnVwdHMoc3RydWN0IGlteF9ud2xfZHNp ICpkc2kpCit7CisJdTMyIGlycV9lbmFibGU7CisKKwlud2xfZHNpX3dyaXRlKGRzaSwgSVJRX01B U0ssIDB4ZmZmZmZmZmYpOworCW53bF9kc2lfd3JpdGUoZHNpLCBJUlFfTUFTSzIsIDB4Nyk7CisK KwlpcnFfZW5hYmxlID0gfih1MzIpKFRYX1BLVF9ET05FX01BU0sgfCBSWF9QS1RfSERSX1JDVkRf TUFTSyB8CisJCQkgICAgVFhfRklGT19PVkZMV19NQVNLIHwgSFNfVFhfVElNRU9VVF9NQVNLKTsK KworCW53bF9kc2lfd3JpdGUoZHNpLCBJUlFfTUFTSywgaXJxX2VuYWJsZSk7Cit9CisKK3N0YXRp YyBpbnQgbndsX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hvc3Qs CisJCQkgICAgICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBp bXhfbndsX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGRzaV9ob3N0LAorCQkJCQkJc3RydWN0IGlt eF9ud2xfZHNpLAorCQkJCQkJZHNpX2hvc3QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ ZGV2OworCisJRFJNX0RFVl9JTkZPKGRldiwgImxhbmVzPSV1LCBmb3JtYXQ9MHgleCBmbGFncz0w eCVseFxuIiwKKwkJICAgICBkZXZpY2UtPmxhbmVzLCBkZXZpY2UtPmZvcm1hdCwgZGV2aWNlLT5t b2RlX2ZsYWdzKTsKKworCWlmIChkZXZpY2UtPmxhbmVzIDwgMSB8fCBkZXZpY2UtPmxhbmVzID4g NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKKwlk c2ktPmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0OworCWRzaS0+ZHNpX21vZGVfZmxhZ3MgPSBkZXZp Y2UtPm1vZGVfZmxhZ3M7CisJZHNpLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKGRldmljZS0+ ZGV2Lm9mX25vZGUpOworCWlmIChkc2ktPnBhbmVsKQorCQlyZXR1cm4gZHJtX3BhbmVsX2F0dGFj aChkc2ktPnBhbmVsLCAmZHNpLT5jb25uZWN0b3IpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisK K3N0YXRpYyBpbnQgbndsX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNp X2hvc3QsCisJCQkgICAgICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0 cnVjdCBpbXhfbndsX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGRzaV9ob3N0LAorCQkJCQkJc3Ry dWN0IGlteF9ud2xfZHNpLAorCQkJCQkJZHNpX2hvc3QpOworCWRybV9wYW5lbF9kZXRhY2goZHNp LT5wYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIG53bF9kc2lfcmVhZF9wYWNr ZXQoc3RydWN0IGlteF9ud2xfZHNpICpkc2ksIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gZHNpLT5kZXY7CisJc3RydWN0IG1pcGlfZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNp LT54ZmVyOworCXU4ICpwYXlsb2FkID0geGZlci0+bXNnLT5yeF9idWY7CisJdTMyIHZhbDsKKwl1 MTYgd29yZF9jb3VudDsKKwl1OCBjaGFubmVsOworCXU4IGRhdGFfdHlwZTsKKworCXhmZXItPnN0 YXR1cyA9IDA7CisKKwlpZiAoeGZlci0+cnhfd29yZF9jb3VudCA9PSAwKSB7CisJCWlmICghKHN0 YXR1cyAmIFJYX1BLVF9IRFJfUkNWRCkpCisJCQlyZXR1cm4gZmFsc2U7CisJCS8qIEdldCB0aGUg UlggaGVhZGVyIGFuZCBwYXJzZSBpdCAqLworCQl2YWwgPSBud2xfZHNpX3JlYWQoZHNpLCBSWF9Q S1RfSEVBREVSKTsKKwkJd29yZF9jb3VudCA9IFdDKHZhbCk7CisJCWNoYW5uZWwJPSBSWF9WQyh2 YWwpOworCQlkYXRhX3R5cGUgPSBSWF9EVCh2YWwpOworCisJCWlmIChjaGFubmVsICE9IHhmZXIt Pm1zZy0+Y2hhbm5lbCkgeworCQkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkJIlslMDJYXSBDaGFu bmVsIG1pc21hdGNoICgldSAhPSAldSlcbiIsCisJCQkJIHhmZXItPmNtZCwgY2hhbm5lbCwgeGZl ci0+bXNnLT5jaGFubmVsKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJc3dpdGNoIChkYXRh X3R5cGUpIHsKKwkJY2FzZSBNSVBJX0RTSV9SWF9HRU5FUklDX1NIT1JUX1JFQURfUkVTUE9OU0Vf MkJZVEU6CisJCQkvKiBGYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBNSVBJX0RTSV9SWF9EQ1NfU0hP UlRfUkVBRF9SRVNQT05TRV8yQllURToKKwkJCWlmICh4ZmVyLT5tc2ctPnJ4X2xlbiA+IDEpIHsK KwkJCQkvKiByZWFkIHNlY29uZCBieXRlICovCisJCQkJcGF5bG9hZFsxXSA9IHdvcmRfY291bnQg Pj4gODsKKwkJCQkrK3hmZXItPnJ4X2xlbjsKKwkJCX0KKwkJCS8qIEZhbGwgdGhyb3VnaCAqLwor CQljYXNlIE1JUElfRFNJX1JYX0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQT05TRV8xQllURToKKwkJ CS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNlIE1JUElfRFNJX1JYX0RDU19TSE9SVF9SRUFEX1JF U1BPTlNFXzFCWVRFOgorCQkJaWYgKHhmZXItPm1zZy0+cnhfbGVuID4gMCkgeworCQkJCS8qIHJl YWQgZmlyc3QgYnl0ZSAqLworCQkJCXBheWxvYWRbMF0gPSB3b3JkX2NvdW50ICYgMHhmZjsKKwkJ CQkrK3hmZXItPnJ4X2xlbjsKKwkJCX0KKwkJCXhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsK KwkJCXJldHVybiB0cnVlOworCQljYXNlIE1JUElfRFNJX1JYX0FDS05PV0xFREdFX0FORF9FUlJP Ul9SRVBPUlQ6CisJCQl3b3JkX2NvdW50ICY9IDB4ZmY7CisJCQlEUk1fREVWX0VSUk9SKGRldiwK KwkJCQkiWyUwMlhdIERTSSBlcnJvciByZXBvcnQ6IDB4JTAyeFxuIiwKKwkJCQl4ZmVyLT5jbWQs IHdvcmRfY291bnQpOworCQkJeGZlci0+c3RhdHVzID0gLUVQUk9UTzsKKwkJCXJldHVybiB0cnVl OworCisJCX0KKworCQlpZiAod29yZF9jb3VudCA+IHhmZXItPm1zZy0+cnhfbGVuKSB7CisJCQlE Uk1fREVWX0VSUk9SKGRldiwKKwkJCQkiWyUwMlhdIFJlY2VpdmUgYnVmZmVyIHRvbyBzbWFsbDog JWx1ICg8ICV1KVxuIiwKKwkJCQkgeGZlci0+Y21kLAorCQkJCSB4ZmVyLT5tc2ctPnJ4X2xlbiwK KwkJCQkgd29yZF9jb3VudCk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXhmZXItPnJ4X3dv cmRfY291bnQgPSB3b3JkX2NvdW50OworCX0gZWxzZSB7CisJCS8qIFNldCB3b3JkX2NvdW50IGZy b20gcHJldmlvdXMgaGVhZGVyIHJlYWQgKi8KKwkJd29yZF9jb3VudCA9IHhmZXItPnJ4X3dvcmRf Y291bnQ7CisJfQorCisJLyogSWYgUlggcGF5bG9hZCBpcyBub3QgeWV0IHJlY2VpdmVkLCB3YWl0 IGZvciBpdCAqLworCWlmICghKHN0YXR1cyAmIFJYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRCkpCisJ CXJldHVybiBmYWxzZTsKKworCS8qIFJlYWQgdGhlIFJYIHBheWxvYWQgKi8KKwl3aGlsZSAod29y ZF9jb3VudCA+PSA0KSB7CisJCXZhbCA9IG53bF9kc2lfcmVhZChkc2ksIFJYX1BBWUxPQUQpOwor CQlwYXlsb2FkWzBdID0gKHZhbCA+PiAgMCkgJiAweGZmOworCQlwYXlsb2FkWzFdID0gKHZhbCA+ PiAgOCkgJiAweGZmOworCQlwYXlsb2FkWzJdID0gKHZhbCA+PiAxNikgJiAweGZmOworCQlwYXls b2FkWzNdID0gKHZhbCA+PiAyNCkgJiAweGZmOworCQlwYXlsb2FkICs9IDQ7CisJCXhmZXItPnJ4 X2xlbiArPSA0OworCQl3b3JkX2NvdW50IC09IDQ7CisJfQorCisJaWYgKHdvcmRfY291bnQgPiAw KSB7CisJCXZhbCA9IG53bF9kc2lfcmVhZChkc2ksIFJYX1BBWUxPQUQpOworCQlzd2l0Y2ggKHdv cmRfY291bnQpIHsKKwkJY2FzZSAzOgorCQkJcGF5bG9hZFsyXSA9ICh2YWwgPj4gMTYpICYgMHhm ZjsKKwkJCSsreGZlci0+cnhfbGVuOworCQkJLyogRmFsbCB0aHJvdWdoICovCisJCWNhc2UgMjoK KwkJCXBheWxvYWRbMV0gPSAodmFsID4+ICA4KSAmIDB4ZmY7CisJCQkrK3hmZXItPnJ4X2xlbjsK KwkJCS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNlIDE6CisJCQlwYXlsb2FkWzBdID0gKHZhbCA+ PiAgMCkgJiAweGZmOworCQkJKyt4ZmVyLT5yeF9sZW47CisJCQlicmVhazsKKwkJfQorCX0KKwor CXhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgdm9pZCBud2xfZHNpX2ZpbmlzaF90cmFuc21pc3Npb24oc3RydWN0IGlteF9ud2xfZHNpICpk c2ksIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IG1pcGlfZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNp LT54ZmVyOworCWJvb2wgZW5kX3BhY2tldCA9IGZhbHNlOworCisJaWYgKCF4ZmVyKQorCQlyZXR1 cm47CisKKwlpZiAoc3RhdHVzICYgVFhfRklGT19PVkZMVykgeworCQlEUk1fREVWX0VSUk9SX1JB VEVMSU1JVEVEKGRzaS0+ZGV2LCAidHggZmlmbyBvdmVyZmxvdyIpOworCQlyZXR1cm47CisJfQor CisJaWYgKHN0YXR1cyAmIEhTX1RYX1RJTUVPVVQpIHsKKwkJRFJNX0RFVl9FUlJPUl9SQVRFTElN SVRFRChkc2ktPmRldiwgIkhTIHR4IHRpbWVvdXQiKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh4 ZmVyLT5kaXJlY3Rpb24gPT0gRFNJX1BBQ0tFVF9TRU5EICYmIHN0YXR1cyAmIFRYX1BLVF9ET05F KSB7CisJCXhmZXItPnN0YXR1cyA9IHhmZXItPnR4X2xlbjsKKwkJZW5kX3BhY2tldCA9IHRydWU7 CisJfSBlbHNlIGlmIChzdGF0dXMgJiBEUEhZX0RJUkVDVElPTiAmJgorCQkgICAoKHN0YXR1cyAm IChSWF9QS1RfSERSX1JDVkQgfCBSWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQpKSkpIHsKKwkJZW5k X3BhY2tldCA9IG53bF9kc2lfcmVhZF9wYWNrZXQoZHNpLCBzdGF0dXMpOworCX0KKworCWlmIChl bmRfcGFja2V0KQorCQljb21wbGV0ZSgmeGZlci0+Y29tcGxldGVkKTsKK30KKworc3RhdGljIHZv aWQgbndsX2RzaV9iZWdpbl90cmFuc21pc3Npb24oc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCit7 CisJc3RydWN0IG1pcGlfZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNpLT54ZmVyOworCXN0cnVjdCBt aXBpX2RzaV9wYWNrZXQgKnBrdCA9ICZ4ZmVyLT5wYWNrZXQ7CisJY29uc3QgdTggKnBheWxvYWQ7 CisJc2l6ZV90IGxlbmd0aDsKKwl1MTYgd29yZF9jb3VudDsKKwl1OCBoc19tb2RlOworCXUzMiB2 YWw7CisJdTMyIGhzX3dvcmthcm91bmQgPSAwOworCisJLyogU2VuZCB0aGUgcGF5bG9hZCwgaWYg YW55ICovCisJbGVuZ3RoID0gcGt0LT5wYXlsb2FkX2xlbmd0aDsKKwlwYXlsb2FkID0gcGt0LT5w YXlsb2FkOworCisJd2hpbGUgKGxlbmd0aCA+PSA0KSB7CisJCXZhbCA9IGdldF91bmFsaWduZWRf bGUzMihwYXlsb2FkKTsKKwkJaHNfd29ya2Fyb3VuZCB8PSAhKHZhbCAmIDB4RkZGRjAwKTsKKwkJ bndsX2RzaV93cml0ZShkc2ksIFRYX1BBWUxPQUQsIHZhbCk7CisJCXBheWxvYWQgKz0gNDsKKwkJ bGVuZ3RoIC09IDQ7CisJfQorCS8qIFNlbmQgdGhlIHJlc3Qgb2YgdGhlIHBheWxvYWQgKi8KKwl2 YWwgPSAwOworCXN3aXRjaCAobGVuZ3RoKSB7CisJY2FzZSAzOgorCQl2YWwgfD0gcGF5bG9hZFsy XSA8PCAxNjsKKwkJLyogRmFsbCB0aHJvdWdoICovCisJY2FzZSAyOgorCQl2YWwgfD0gcGF5bG9h ZFsxXSA8PCA4OworCQloc193b3JrYXJvdW5kIHw9ICEodmFsICYgMHhGRkZGMDApOworCQkvKiBG YWxsIHRocm91Z2ggKi8KKwljYXNlIDE6CisJCXZhbCB8PSBwYXlsb2FkWzBdOworCQlud2xfZHNp X3dyaXRlKGRzaSwgVFhfUEFZTE9BRCwgdmFsKTsKKwkJYnJlYWs7CisJfQorCXhmZXItPnR4X2xl biA9IHBrdC0+cGF5bG9hZF9sZW5ndGg7CisKKwkvKgorCSAqIFNlbmQgdGhlIGhlYWRlcgorCSAq IGhlYWRlclswXSA9IFZpcnR1YWwgQ2hhbm5lbCArIERhdGEgVHlwZQorCSAqIGhlYWRlclsxXSA9 IFdvcmQgQ291bnQgTFNCIChMUCkgb3IgZmlyc3QgcGFyYW0gKFNQKQorCSAqIGhlYWRlclsyXSA9 IFdvcmQgQ291bnQgTVNCIChMUCkgb3Igc2Vjb25kIHBhcmFtIChTUCkKKwkgKi8KKwl3b3JkX2Nv dW50ID0gcGt0LT5oZWFkZXJbMV0gfCAocGt0LT5oZWFkZXJbMl0gPDwgOCk7CisJaWYgKChoc193 b3JrYXJvdW5kICYmIFVTRV9FMTE0MThfSFNfTU9ERV9RVUlSSyhkc2ktPnF1aXJrcykpKSB7CisJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LAorCQkJCSAgICAgIlVzaW5nIGhzIG1vZGUg d29ya2Fyb3VuZCBmb3IgY21kIDB4JXgiLAorCQkJCSAgICAgeGZlci0+Y21kKTsKKwkJaHNfbW9k ZSA9IDE7CisJfSBlbHNlIHsKKwkJaHNfbW9kZSA9ICh4ZmVyLT5tc2ctPmZsYWdzICYgTUlQSV9E U0lfTVNHX1VTRV9MUE0pID8gMCA6IDE7CisJfQorCXZhbCA9IFdDKHdvcmRfY291bnQpIHwKKwkJ VFhfVkMoeGZlci0+bXNnLT5jaGFubmVsKSB8CisJCVRYX0RUKHhmZXItPm1zZy0+dHlwZSkgfAor CQlIU19TRUwoaHNfbW9kZSkgfAorCQlCVEFfVFgoeGZlci0+bmVlZF9idGEpOworCW53bF9kc2lf d3JpdGUoZHNpLCBQS1RfQ09OVFJPTCwgdmFsKTsKKworCS8qIFNlbmQgcGFja2V0IGNvbW1hbmQg Ki8KKwlud2xfZHNpX3dyaXRlKGRzaSwgU0VORF9QQUNLRVQsIDB4MSk7Cit9CisKK3N0YXRpYyBz c2l6ZV90IG53bF9kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hv c3QsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJc3RydWN0 IGlteF9ud2xfZHNpICpkc2kgPSBjb250YWluZXJfb2YoZHNpX2hvc3QsCisJCQkJCSAgICAgICBz dHJ1Y3QgaW14X253bF9kc2ksCisJCQkJCSAgICAgICBkc2lfaG9zdCk7CisJc3RydWN0IG1pcGlf ZHNpX3RyYW5zZmVyIHhmZXI7CisJc3NpemVfdCByZXQgPSAwOworCisJLyogQ3JlYXRlIHBhY2tl dCB0byBiZSBzZW50ICovCisJZHNpLT54ZmVyID0gJnhmZXI7CisJcmV0ID0gbWlwaV9kc2lfY3Jl YXRlX3BhY2tldCgmeGZlci5wYWNrZXQsIG1zZyk7CisJaWYgKHJldCA8IDApIHsKKwkJZHNpLT54 ZmVyID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoKG1zZy0+dHlwZSAmIE1JUElf RFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzBfUEFSQU0gfHwKKwkgICAgbXNnLT50eXBlICYgTUlQ SV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMV9QQVJBTSB8fAorCSAgICBtc2ctPnR5cGUgJiBN SVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVTVF8yX1BBUkFNIHx8CisJICAgIG1zZy0+dHlwZSAm IE1JUElfRFNJX0RDU19SRUFEKSAmJgorCSAgICBtc2ctPnJ4X2xlbiA+IDAgJiYKKwkgICAgbXNn LT5yeF9idWYgIT0gTlVMTCkKKwkJeGZlci5kaXJlY3Rpb24gPSBEU0lfUEFDS0VUX1JFQ0VJVkU7 CisJZWxzZQorCQl4ZmVyLmRpcmVjdGlvbiA9IERTSV9QQUNLRVRfU0VORDsKKworCXhmZXIubmVl ZF9idGEgPSAoeGZlci5kaXJlY3Rpb24gPT0gRFNJX1BBQ0tFVF9SRUNFSVZFKTsKKwl4ZmVyLm5l ZWRfYnRhIHw9IChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1JFUV9BQ0spPzE6MDsKKwl4ZmVy Lm1zZyA9IG1zZzsKKwl4ZmVyLnN0YXR1cyA9IC1FVElNRURPVVQ7CisJeGZlci5yeF93b3JkX2Nv dW50ID0gMDsKKwl4ZmVyLnJ4X2xlbiA9IDA7CisJeGZlci5jbWQgPSAweDAwOworCWlmIChtc2ct PnR4X2xlbiA+IDApCisJCXhmZXIuY21kID0gKCh1OCAqKShtc2ctPnR4X2J1ZikpWzBdOworCWlu aXRfY29tcGxldGlvbigmeGZlci5jb21wbGV0ZWQpOworCisJbndsX2RzaV9lbmFibGVfcnhfY2xv Y2soZHNpKTsKKworCS8qIEluaXRpYXRlIHRoZSBEU0kgcGFja2V0IHRyYW5zbWlzaW9uICovCisJ bndsX2RzaV9iZWdpbl90cmFuc21pc3Npb24oZHNpKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxl dGlvbl90aW1lb3V0KCZ4ZmVyLmNvbXBsZXRlZCwgTUlQSV9GSUZPX1RJTUVPVVQpKSB7CisJCURS TV9ERVZfRVJST1IoZHNpX2hvc3QtPmRldiwKKwkJCSAgICAgICJbJTAyWF0gRFNJIHRyYW5zZmVy IHRpbWVkIG91dFxuIiwgeGZlci5jbWQpOworCQlyZXQgPSAtRVRJTUVET1VUOworCX0gZWxzZSB7 CisJCXJldCA9IHhmZXIuc3RhdHVzOworCX0KKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2kt PnJ4X2VzY19jbGspOworCisJcmV0dXJuIHJldDsKK30KKworY29uc3Qgc3RydWN0IG1pcGlfZHNp X2hvc3Rfb3BzIG53bF9kc2lfaG9zdF9vcHMgPSB7CisJLmF0dGFjaCA9IG53bF9kc2lfaG9zdF9h dHRhY2gsCisJLmRldGFjaCA9IG53bF9kc2lfaG9zdF9kZXRhY2gsCisJLnRyYW5zZmVyID0gbnds X2RzaV9ob3N0X3RyYW5zZmVyLAorfTsKKworCitpcnFyZXR1cm5fdCBud2xfZHNpX2lycV9oYW5k bGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJdTMyIGlycV9zdGF0dXM7CisJc3RydWN0IGlt eF9ud2xfZHNpICpkc2kgPSBkYXRhOworCisJaXJxX3N0YXR1cyA9IG53bF9kc2lfcmVhZChkc2ks IElSUV9TVEFUVVMpOworCisJaWYgKGlycV9zdGF0dXMgJiBUWF9QS1RfRE9ORSB8fAorCSAgICBp cnFfc3RhdHVzICYgUlhfUEtUX0hEUl9SQ1ZEIHx8CisJICAgIGlycV9zdGF0dXMgJiBSWF9QS1Rf UEFZTE9BRF9EQVRBX1JDVkQpCisJCW53bF9kc2lfZmluaXNoX3RyYW5zbWlzc2lvbihkc2ksIGly cV9zdGF0dXMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorRVhQT1JUX1NZTUJPTF9HUEwo bndsX2RzaV9pcnFfaGFuZGxlcik7CisKK2ludCBud2xfZHNpX2VuYWJsZShzdHJ1Y3QgaW14X253 bF9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKwl1bmlvbiBw aHlfY29uZmlndXJlX29wdHMgKnBoeV9jZmcgPSAmZHNpLT5waHlfY2ZnOworCWludCByZXQ7CisK KwlpZiAoIWRzaS0+bGFuZXMpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJOZWVkIERTSSBsYW5l czogJWRcbiIsIGRzaS0+bGFuZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBw aHlfaW5pdChkc2ktPnBoeSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYs ICJGYWlsZWQgdG8gaW5pdCBEU0kgcGh5OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXQgPSBwaHlfY29uZmlndXJlKGRzaS0+cGh5LCBwaHlfY2ZnKTsKKwlpZiAocmV0IDwg MCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgRFNJIHBoeTog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbndsX2RzaV9lbmFibGVf dHhfY2xvY2soZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZh aWxlZCB0byBlbmFibGUgdHggY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCXJldCA9IG53bF9kc2lfY29uZmlnX2hvc3QoZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlE Uk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgdXAgRFNJOiAlZCIsIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJcmV0ID0gbndsX2RzaV9jb25maWdfZHBpKGRzaSk7CisJaWYgKHJl dCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IHVwIERQSTogJWQi LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHBoeV9wb3dlcl9vbihkc2ktPnBo eSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcG93 ZXIgb24gRFBIWSAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW53bF9kc2lf aW5pdF9pbnRlcnJ1cHRzKGRzaSk7CisKKwlyZXQgPSBkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBh bmVsKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldHVw IHBhbmVsXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlud2xfZHNpX3dyaXRlKGRzaSwgQ0ZH X05PTkNPTlRJTlVPVVNfQ0xLLAorCQkgICAgICAhIShkc2ktPmRzaV9tb2RlX2ZsYWdzICYgTUlQ SV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMpKTsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgIkVuYWJsaW5nIHRoZSBwYW5lbFxuIik7CisJcmV0ID0gZHJtX3BhbmVsX2VuYWJsZShkc2kt PnBhbmVsKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGVu YWJsZSBwYW5lbFxuIik7CisJCWRybV9wYW5lbF91bnByZXBhcmUoZHNpLT5wYW5lbCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChud2xfZHNp X2VuYWJsZSk7CisKK2ludCBud2xfZHNpX2Rpc2FibGUoc3RydWN0IGlteF9ud2xfZHNpICpkc2kp Cit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisKKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHNpLT50eF9lc2NfY2xrKTsKKwlkZXZtX2ZyZWVfaXJxKGRldiwgZHNpLT5pcnEsIGRz aSk7CisKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKKwlwaHlfZXhpdChkc2ktPnBoeSk7CisK KwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG53bF9kc2lfZGlzYWJsZSk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbndsL253bC1kc2kuaCBiL2RyaXZlcnMvZ3B1L2RybS9u d2wvbndsLWRzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmJi OWFjMWZjOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL253bC9ud2wtZHNp LmgKQEAgLTAsMCArMSwxMDUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w KworLyoKKyAqIGkuTVg4IE5XTCBNSVBJIERTSSBob3N0IGRyaXZlcgorICoKKyAqIENvcHlyaWdo dCAoQykgMjAxNyBOWFAKKyAqIENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20gU1BDCisgKi8KKyNp Zm5kZWYgX19OV0xfRFNJX0hfXworI2RlZmluZSBfX05XTF9EU0lfSF9fCisKKyNpbmNsdWRlIDxk cm0vZHJtX21pcGlfZHNpLmg+CisKKy8qIERTSSBIT1NUIHJlZ2lzdGVycyAqLworI2RlZmluZSBD RkdfTlVNX0xBTkVTCQkJMHgwCisjZGVmaW5lIENGR19OT05DT05USU5VT1VTX0NMSwkJMHg0Cisj ZGVmaW5lIENGR19UX1BSRQkJCTB4OAorI2RlZmluZSBDRkdfVF9QT1NUCQkJMHhjCisjZGVmaW5l IENGR19UWF9HQVAJCQkweDEwCisjZGVmaW5lIENGR19BVVRPSU5TRVJUX0VPVFAJCTB4MTQKKyNk ZWZpbmUgQ0ZHX0VYVFJBX0NNRFNfQUZURVJfRU9UUAkweDE4CisjZGVmaW5lIENGR19IVFhfVE9f Q09VTlQJCTB4MWMKKyNkZWZpbmUgQ0ZHX0xSWF9IX1RPX0NPVU5UCQkweDIwCisjZGVmaW5lIENG R19CVEFfSF9UT19DT1VOVAkJMHgyNAorI2RlZmluZSBDRkdfVFdBS0VVUAkJCTB4MjgKKyNkZWZp bmUgQ0ZHX1NUQVRVU19PVVQJCQkweDJjCisjZGVmaW5lIFJYX0VSUk9SX1NUQVRVUwkJCTB4MzAK KworLyogRFNJIERQSSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUElYRUxfUEFZTE9BRF9TSVpFCQkw eDIwMAorI2RlZmluZSBQSVhFTF9GSUZPX1NFTkRfTEVWRUwJCTB4MjA0CisjZGVmaW5lIElOVEVS RkFDRV9DT0xPUl9DT0RJTkcJCTB4MjA4CisjZGVmaW5lIFBJWEVMX0ZPUk1BVAkJCTB4MjBjCisj ZGVmaW5lIFZTWU5DX1BPTEFSSVRZCQkJMHgyMTAKKyNkZWZpbmUgSFNZTkNfUE9MQVJJVFkJCQkw eDIxNAorI2RlZmluZSBWSURFT19NT0RFCQkJMHgyMTgKKyNkZWZpbmUgSEZQCQkJCTB4MjFjCisj ZGVmaW5lIEhCUAkJCQkweDIyMAorI2RlZmluZSBIU0EJCQkJMHgyMjQKKyNkZWZpbmUgRU5BQkxF X01VTFRfUEtUUwkJMHgyMjgKKyNkZWZpbmUgVkJQCQkJCTB4MjJjCisjZGVmaW5lIFZGUAkJCQkw eDIzMAorI2RlZmluZSBCTExQX01PREUJCQkweDIzNAorI2RlZmluZSBVU0VfTlVMTF9QS1RfQkxM UAkJMHgyMzgKKyNkZWZpbmUgVkFDVElWRQkJCQkweDIzYworI2RlZmluZSBWQwkJCQkweDI0MAor CisvKiBEU0kgQVBCIFBLVCBjb250cm9sICovCisjZGVmaW5lIFRYX1BBWUxPQUQJCQkweDI4MAor I2RlZmluZSBQS1RfQ09OVFJPTAkJCTB4Mjg0CisjZGVmaW5lIFNFTkRfUEFDS0VUCQkJMHgyODgK KyNkZWZpbmUgUEtUX1NUQVRVUwkJCTB4MjhjCisjZGVmaW5lIFBLVF9GSUZPX1dSX0xFVkVMCQkw eDI5MAorI2RlZmluZSBQS1RfRklGT19SRF9MRVZFTAkJMHgyOTQKKyNkZWZpbmUgUlhfUEFZTE9B RAkJCTB4Mjk4CisjZGVmaW5lIFJYX1BLVF9IRUFERVIJCQkweDI5YworCisvKiBEU0kgSVJRIGhh bmRsaW5nICovCisjZGVmaW5lIElSUV9TVEFUVVMJCQkweDJhMAorI2RlZmluZSBTTV9OT1RfSURM RQkJCUJJVCgwKQorI2RlZmluZSBUWF9QS1RfRE9ORQkJCUJJVCgxKQorI2RlZmluZSBEUEhZX0RJ UkVDVElPTgkJCUJJVCgyKQorI2RlZmluZSBUWF9GSUZPX09WRkxXCQkJQklUKDMpCisjZGVmaW5l IFRYX0ZJRk9fVURGTFcJCQlCSVQoNCkKKyNkZWZpbmUgUlhfRklGT19PVkZMVwkJCUJJVCg1KQor I2RlZmluZSBSWF9GSUZPX1VERkxXCQkJQklUKDYpCisjZGVmaW5lIFJYX1BLVF9IRFJfUkNWRAkJ CUJJVCg3KQorI2RlZmluZSBSWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQJQklUKDgpCisjZGVmaW5l IEJUQV9USU1FT1VUCQkJQklUKDI5KQorI2RlZmluZSBMUF9SWF9USU1FT1VUCQkJQklUKDMwKQor I2RlZmluZSBIU19UWF9USU1FT1VUCQkJQklUKDMxKQorCisjZGVmaW5lIElSUV9TVEFUVVMyCQkJ MHgyYTQKKyNkZWZpbmUgU0lOR0xFX0JJVF9FQ0NfRVJSCQlCSVQoMCkKKyNkZWZpbmUgTVVMVElf QklUX0VDQ19FUlIJCUJJVCgxKQorI2RlZmluZSBDUkNfRVJSCQkJCUJJVCgyKQorCisjZGVmaW5l IElSUV9NQVNLCQkJMHgyYTgKKyNkZWZpbmUgU01fTk9UX0lETEVfTUFTSwkJQklUKDApCisjZGVm aW5lIFRYX1BLVF9ET05FX01BU0sJCUJJVCgxKQorI2RlZmluZSBEUEhZX0RJUkVDVElPTl9NQVNL CQlCSVQoMikKKyNkZWZpbmUgVFhfRklGT19PVkZMV19NQVNLCQlCSVQoMykKKyNkZWZpbmUgVFhf RklGT19VREZMV19NQVNLCQlCSVQoNCkKKyNkZWZpbmUgUlhfRklGT19PVkZMV19NQVNLCQlCSVQo NSkKKyNkZWZpbmUgUlhfRklGT19VREZMV19NQVNLCQlCSVQoNikKKyNkZWZpbmUgUlhfUEtUX0hE Ul9SQ1ZEX01BU0sJCUJJVCg3KQorI2RlZmluZSBSWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkRfTUFT SwlCSVQoOCkKKyNkZWZpbmUgQlRBX1RJTUVPVVRfTUFTSwkJQklUKDI5KQorI2RlZmluZSBMUF9S WF9USU1FT1VUX01BU0sJCUJJVCgzMCkKKyNkZWZpbmUgSFNfVFhfVElNRU9VVF9NQVNLCQlCSVQo MzEpCisKKyNkZWZpbmUgSVJRX01BU0syCQkJMHgyYWMKKyNkZWZpbmUgU0lOR0xFX0JJVF9FQ0Nf RVJSX01BU0sJCUJJVCgwKQorI2RlZmluZSBNVUxUSV9CSVRfRUNDX0VSUl9NQVNLCQlCSVQoMSkK KyNkZWZpbmUgQ1JDX0VSUl9NQVNLCQkJQklUKDIpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbWlw aV9kc2lfaG9zdF9vcHMgbndsX2RzaV9ob3N0X29wczsKKworaXJxcmV0dXJuX3QgbndsX2RzaV9p cnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKTsKK2ludCBud2xfZHNpX2VuYWJsZShzdHJ1 Y3QgaW14X253bF9kc2kgKmRzaSk7CitpbnQgbndsX2RzaV9kaXNhYmxlKHN0cnVjdCBpbXhfbnds X2RzaSAqZHNpKTsKK2ludCBud2xfZHNpX2dldF9kcGh5X3BhcmFtcyhzdHJ1Y3QgaW14X253bF9k c2kgKmRzaSwKKwkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICB1 bmlvbiBwaHlfY29uZmlndXJlX29wdHMgKnBoeV9vcHRzKTsKKworI2VuZGlmIC8qIF9fTldMX0RT SV9IX18gKi8KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbA==