From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH 10/10] drm/msm/dsi: Add PHY/PLL for 8x96 Date: Sat, 7 Jan 2017 18:40:42 +0530 Message-ID: <1483794642-2184-11-git-send-email-architt@codeaurora.org> References: <1483794642-2184-1-git-send-email-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1483794642-2184-1-git-send-email-architt@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: robdclark@gmail.com Cc: linux-arm-msm@vger.kernel.org, Stephen Boyd , dri-devel@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org RXh0ZW5kIHRoZSBEU0kgUEhZL1BMTCBkcml2ZXJzIHRvIHN1cHBvcnQgdGhlIERTSSAxNG5tIFBI WS9QTEwKZm91bmQgb24gOHg5Ni4KClRoZXNlIGFyZSBwaWNrZWQgdXAgZnJvbSB0aGUgZG93bnN0 cmVhbSBkcml2ZXIuIFRoZSBQSFkgcGFydCBpcyBzaW1pbGFyCnRvIHRoZSBvdGhlciBEU0kgUEhZ cy4gVGhlIFBMTCBkcml2ZXIgcmVxdWlyZXMgc29tZSB0cmlja2VyeSBzbyB0aGF0Cm9uZSBEU0kg UExMIGNhbiBkcml2ZSBib3RoIHRoZSBEU0lzIChpLmUsIGR1YWwgRFNJIG1vZGUpLgoKSW4gdGhl IGNhc2Ugb2YgZHVhbCBEU0kgbW9kZS4gT25lIERTSSBpbnN0YW5jZSBiZWNvbWVzIHRoZSBjbG9j ayBtYXN0ZXIsCmFuZCBvdGhlciB0aGUgY2xvY2sgc2xhdmUuIFRoZSBtYXN0ZXIgUExMJ3Mgb3V0 cHV0IChCeXRlIGFuZCBQaXhlbCBjbG9jaykKaXMgZmVkIHRvIGJvdGggdGhlIERTSSBob3N0cy9Q SFlzLgoKV2hlbiB0aGUgRFNJcyBhcmUgY29uZmlndXJlZCBpbiBkdWFsIERTSSBtb2RlLCB0aGUg UEhZIGRyaXZlciBjb21tdW5pY2F0ZXMKdG8gdGhlIFBMTCBkcml2ZXIgdXNpbmcgbXNtX2RzaV9w bGxfc2V0X3VzZWNhc2UoKSB3aGljaCBpbnN0YW5jZSBpcyB0aGUKbWFzdGVyIGFuZCB3aGljaCBv bmUgaXMgdGhlIHNsYXZlLiBXaGVuIHNldHRpbmcgcmF0ZSwgdGhlIG1hc3RlciBQTEwgYWxzbwpj b25maWd1cmVzIHNvbWUgb2YgdGhlIHNsYXZlIFBMTC9QSFkgcmVnaXN0ZXJzIHdoaWNoIG5lZWQg dG8gYmUgaWRlbnRpY2FsCnRvIHRoZSBtYXN0ZXIncyBmb3IgY29ycmVjdCBkdWFsIERTSSBiZWhh dmlvdXIuCgpUaGVyZSBhcmUgMiBQTEwgcG9zdCBkaXZpZGVycyB0aGF0IHNob3VsZCBoYXZlIGlk ZWFsbHkgYmVlbiBtb2RlbGxlZCBhcwpnZW5lcmljIGNsa19kaXZpZGVyIGNsb2NrcywgYnV0IHJl cXVpcmUgc29tZSBjdXN0b21pemF0aW9uIGZvciBkdWFsIERTSS4KSW4gcGFydGljdWxhciwgd2hl biB0aGUgbWFzdGVyIFBMTCdzIHBvc3QtZGl2aWVycyBhcmUgc2V0LCB0aGUgc2xhdmUgUExMJ3MK cG9zdC1kaXZpZGVycyBuZWVkIHRvIGJlIHNldCB0b28uIFRoZSBjbGtfb3BzIGZvciB0aGVzZSB1 c2UgY2xrX2RpdmlkZXIncwpoZWxwZXIgb3BzIGFuZCBmbGFncyBpbnRlcm5hbGx5IHRvIHByZXZl bnQgcmVkdW5kYW50IGNvZGUuCgpDYzogU3RlcGhlbiBCb3lkIDxzYm95ZEBjb2RlYXVyb3JhLm9y Zz4KU2lnbmVkLW9mZi1ieTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcgICAgICAgICAgICAgICAgfCAgICA3ICsK IGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgIDIgKwogZHJp dmVycy9ncHUvZHJtL21zbS9kc2kvZHNpLmggICAgICAgICAgICAgIHwgICAgOCArCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS9waHkvZHNpX3BoeS5jICAgICAgfCAgICAyICsKIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5LmggICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJt L21zbS9kc2kvcGh5L2RzaV9waHlfMTRubS5jIHwgIDE2OCArKysrKwogZHJpdmVycy9ncHUvZHJt L21zbS9kc2kvcGxsL2RzaV9wbGwuYyAgICAgIHwgICAxMiArCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS9wbGwvZHNpX3BsbC5oICAgICAgfCAgIDExICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNp L3BsbC9kc2lfcGxsXzE0bm0uYyB8IDEwNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog OSBmaWxlcyBjaGFuZ2VkLCAxMjc5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9waHkvZHNpX3BoeV8xNG5tLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9wbGwvZHNpX3BsbF8xNG5tLmMKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL0tj b25maWcKaW5kZXggZDk2YjJiNi4uNTBiMGM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZwpAQCAtNzEsMyAr NzEsMTAgQEAgY29uZmlnIERSTV9NU01fRFNJXzI4Tk1fODk2MF9QSFkKIAloZWxwCiAJICBDaG9v c2UgdGhpcyBvcHRpb24gaWYgdGhlIDI4bm0gRFNJIFBIWSA4OTYwIHZhcmlhbnQgaXMgdXNlZCBv biB0aGUKIAkgIHBsYXRmb3JtLgorCitjb25maWcgRFJNX01TTV9EU0lfMTROTV9QSFkKKwlib29s ICJFbmFibGUgRFNJIDE0Tk0gUEhZIGRyaXZlciBpbiBNU00gRFJNICh1c2VkIGluIE1TTTg5OTYp IgorCWRlcGVuZHMgb24gRFJNX01TTV9EU0kKKwlkZWZhdWx0IHkKKwloZWxwCisJICBDaG9vc2Ug dGhpcyBvcHRpb24gaWYgRFNJIFBIWSBvbiA4OTk2IGlzIHVzZWQgb24gdGhlIHBsYXRmb3JtLgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vTWFrZWZpbGUKaW5kZXggOTBmNjZjNC4uZTdjMGYwNiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxl CkBAIC03NCwxMSArNzQsMTMgQEAgbXNtLSQoQ09ORklHX0RSTV9NU01fRFNJKSArPSBkc2kvZHNp Lm8gXAogbXNtLSQoQ09ORklHX0RSTV9NU01fRFNJXzI4Tk1fUEhZKSArPSBkc2kvcGh5L2RzaV9w aHlfMjhubS5vCiBtc20tJChDT05GSUdfRFJNX01TTV9EU0lfMjBOTV9QSFkpICs9IGRzaS9waHkv ZHNpX3BoeV8yMG5tLm8KIG1zbS0kKENPTkZJR19EUk1fTVNNX0RTSV8yOE5NXzg5NjBfUEhZKSAr PSBkc2kvcGh5L2RzaV9waHlfMjhubV84OTYwLm8KK29iai0kKENPTkZJR19EUk1fTVNNX0RTSV8x NE5NX1BIWSkgKz0gZHNpL3BoeS9kc2lfcGh5XzE0bm0ubwogCiBpZmVxICgkKENPTkZJR19EUk1f TVNNX0RTSV9QTEwpLHkpCiBtc20teSArPSBkc2kvcGxsL2RzaV9wbGwubwogbXNtLSQoQ09ORklH X0RSTV9NU01fRFNJXzI4Tk1fUEhZKSArPSBkc2kvcGxsL2RzaV9wbGxfMjhubS5vCiBtc20tJChD T05GSUdfRFJNX01TTV9EU0lfMjhOTV84OTYwX1BIWSkgKz0gZHNpL3BsbC9kc2lfcGxsXzI4bm1f ODk2MC5vCitvYmotJChDT05GSUdfRFJNX01TTV9EU0lfMTROTV9QSFkpICs9IGRzaS9wbGwvZHNp X3BsbF8xNG5tLm8KIGVuZGlmCiAKIG9iai0kKENPTkZJR19EUk1fTVNNKQkrPSBtc20ubwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpLmggYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS9kc2kuaAppbmRleCA5NDY1OTk2Li4zMjM2OTk3IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS9kc2kuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2ku aApAQCAtMzUsNiArMzUsNyBAQCBlbnVtIG1zbV9kc2lfcGh5X3R5cGUgewogCU1TTV9EU0lfUEhZ XzI4Tk1fTFAsCiAJTVNNX0RTSV9QSFlfMjBOTSwKIAlNU01fRFNJX1BIWV8yOE5NXzg5NjAsCisJ TVNNX0RTSV9QSFlfMTROTSwKIAlNU01fRFNJX1BIWV9NQVgKIH07CiAKQEAgLTExNyw2ICsxMTgs OCBAQCBpbnQgbXNtX2RzaV9wbGxfZ2V0X2Nsa19wcm92aWRlcihzdHJ1Y3QgbXNtX2RzaV9wbGwg KnBsbCwKIAlzdHJ1Y3QgY2xrICoqYnl0ZV9jbGtfcHJvdmlkZXIsIHN0cnVjdCBjbGsgKipwaXhl bF9jbGtfcHJvdmlkZXIpOwogdm9pZCBtc21fZHNpX3BsbF9zYXZlX3N0YXRlKHN0cnVjdCBtc21f ZHNpX3BsbCAqcGxsKTsKIGludCBtc21fZHNpX3BsbF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBtc21f ZHNpX3BsbCAqcGxsKTsKK2ludCBtc21fZHNpX3BsbF9zZXRfdXNlY2FzZShzdHJ1Y3QgbXNtX2Rz aV9wbGwgKnBsbCwKKwkJCSAgICBlbnVtIG1zbV9kc2lfcGh5X3VzZWNhc2UgdWMpOwogI2Vsc2UK IHN0YXRpYyBpbmxpbmUgc3RydWN0IG1zbV9kc2lfcGxsICptc21fZHNpX3BsbF9pbml0KHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkgZW51bSBtc21fZHNpX3BoeV90eXBlIHR5cGUs IGludCBpZCkgewpAQCAtMTM3LDYgKzE0MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBtc21fZHNp X3BsbF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBtc21fZHNpX3BsbCAqcGxsKQogewogCXJldHVybiAw OwogfQorc3RhdGljIGlubGluZSBpbnQgbXNtX2RzaV9wbGxfc2V0X3VzZWNhc2Uoc3RydWN0IG1z bV9kc2lfcGxsICpwbGwsCisJCQkJCSAgZW51bSBtc21fZHNpX3BoeV91c2VjYXNlIHVjKQorewor CXJldHVybiAtRU5PREVWOworfQogI2VuZGlmCiAKIC8qIGRzaSBob3N0ICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9waHkvZHNpX3BoeS5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kc2kvcGh5L2RzaV9waHkuYwppbmRleCAxMTkxOWJjLi40MTBkZDNjNSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGh5L2RzaV9waHkuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS9waHkvZHNpX3BoeS5jCkBAIC0zOTEsNiArMzkxLDggQEAgc3RhdGljIHZv aWQgZHNpX3BoeV9kaXNhYmxlX3Jlc291cmNlKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQogCXsg LmNvbXBhdGlibGUgPSAicWNvbSxkc2ktcGh5LTI4bm0tODk2MCIsCiAJICAuZGF0YSA9ICZkc2lf cGh5XzI4bm1fODk2MF9jZmdzIH0sCiAjZW5kaWYKKwl7IC5jb21wYXRpYmxlID0gInFjb20sZHNp LXBoeS0xNG5tIiwKKwkgIC5kYXRhID0gJmRzaV9waHlfMTRubV9jZmdzIH0sCiAJe30KIH07CiAK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5LmggYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS9waHkvZHNpX3BoeS5oCmluZGV4IGZlZWU4NzAuLjE3MzNmNjYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5LmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGh5L2RzaV9waHkuaApAQCAtNDcsNiArNDcsNyBAQCBz dHJ1Y3QgbXNtX2RzaV9waHlfY2ZnIHsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXNtX2RzaV9waHlf Y2ZnIGRzaV9waHlfMjhubV9scF9jZmdzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBtc21fZHNpX3Bo eV9jZmcgZHNpX3BoeV8yMG5tX2NmZ3M7CiBleHRlcm4gY29uc3Qgc3RydWN0IG1zbV9kc2lfcGh5 X2NmZyBkc2lfcGh5XzI4bm1fODk2MF9jZmdzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBtc21fZHNp X3BoeV9jZmcgZHNpX3BoeV8xNG5tX2NmZ3M7CiAKIHN0cnVjdCBtc21fZHNpX2RwaHlfdGltaW5n IHsKIAl1MzIgY2xrX3ByZTsKQEAgLTc3LDYgKzc4LDcgQEAgc3RydWN0IG1zbV9kc2lfcGh5IHsK IAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXZvaWQgX19pb21lbSAqYmFzZTsKIAl2 b2lkIF9faW9tZW0gKnJlZ19iYXNlOworCXZvaWQgX19pb21lbSAqbGFuZV9iYXNlOwogCWludCBp ZDsKIAogCXN0cnVjdCBjbGsgKmFoYl9jbGs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS9waHkvZHNpX3BoeV8xNG5tLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9waHkv ZHNpX3BoeV8xNG5tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxM2Iz ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5 XzE0bm0uYwpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor CisjaW5jbHVkZSAiZHNpX3BoeS5oIgorI2luY2x1ZGUgImRzaS54bWwuaCIKKworI2RlZmluZSBQ SFlfMTROTV9DS0xOX0lEWAk0CisKK3N0YXRpYyB2b2lkIGRzaV8xNG5tX2RwaHlfc2V0X3RpbWlu ZyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwKKwkJc3RydWN0IG1zbV9kc2lfZHBoeV90aW1pbmcg KnRpbWluZywgaW50IGxhbmVfaWR4KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IHBoeS0+bGFu ZV9iYXNlOworCWJvb2wgY2xrX2xuID0gKGxhbmVfaWR4ID09IFBIWV8xNE5NX0NLTE5fSURYKTsK Kwl1MzIgemVybyA9IGNsa19sbiA/IHRpbWluZy0+Y2xrX3plcm8gOiB0aW1pbmctPmhzX3plcm87 CisJdTMyIHByZXBhcmUgPSBjbGtfbG4gPyB0aW1pbmctPmNsa19wcmVwYXJlIDogdGltaW5nLT5o c19wcmVwYXJlOworCXUzMiB0cmFpbCA9IGNsa19sbiA/IHRpbWluZy0+Y2xrX3RyYWlsIDogdGlt aW5nLT5oc190cmFpbDsKKwl1MzIgcnFzdCA9IGNsa19sbiA/IHRpbWluZy0+aHNfcnFzdF9ja2xu IDogdGltaW5nLT5oc19ycXN0OworCXUzMiBwcmVwX2RseSA9IGNsa19sbiA/IHRpbWluZy0+aHNf cHJlcF9kbHlfY2tsbiA6IHRpbWluZy0+aHNfcHJlcF9kbHk7CisJdTMyIGhhbGZieXRlX2VuID0g Y2xrX2xuID8gdGltaW5nLT5oc19oYWxmYnl0ZV9lbl9ja2xuIDoKKwkJCQkgICB0aW1pbmctPmhz X2hhbGZieXRlX2VuOworCisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9M Tl9USU1JTkdfQ1RSTF80KGxhbmVfaWR4KSwKKwkJICAgICAgRFNJXzE0bm1fUEhZX0xOX1RJTUlO R19DVFJMXzRfSFNfRVhJVCh0aW1pbmctPmhzX2V4aXQpKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2Ug KyBSRUdfRFNJXzE0bm1fUEhZX0xOX1RJTUlOR19DVFJMXzUobGFuZV9pZHgpLAorCQkgICAgICBE U0lfMTRubV9QSFlfTE5fVElNSU5HX0NUUkxfNV9IU19aRVJPKHplcm8pKTsKKwlkc2lfcGh5X3dy aXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0xOX1RJTUlOR19DVFJMXzYobGFuZV9pZHgpLAor CQkgICAgICBEU0lfMTRubV9QSFlfTE5fVElNSU5HX0NUUkxfNl9IU19QUkVQQVJFKHByZXBhcmUp KTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0xOX1RJTUlOR19DVFJM XzcobGFuZV9pZHgpLAorCQkgICAgICBEU0lfMTRubV9QSFlfTE5fVElNSU5HX0NUUkxfN19IU19U UkFJTCh0cmFpbCkpOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfTE5f VElNSU5HX0NUUkxfOChsYW5lX2lkeCksCisJCSAgICAgIERTSV8xNG5tX1BIWV9MTl9USU1JTkdf Q1RSTF84X0hTX1JRU1QocnFzdCkpOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRu bV9QSFlfTE5fQ0ZHMChsYW5lX2lkeCksCisJCSAgICAgIERTSV8xNG5tX1BIWV9MTl9DRkcwX1BS RVBBUkVfRExZKHByZXBfZGx5KSk7CisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5t X1BIWV9MTl9DRkcxKGxhbmVfaWR4KSwKKwkJICAgICAgaGFsZmJ5dGVfZW4gPyBEU0lfMTRubV9Q SFlfTE5fQ0ZHMV9IQUxGQllURUNMS19FTiA6IDApOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJF R19EU0lfMTRubV9QSFlfTE5fVElNSU5HX0NUUkxfOShsYW5lX2lkeCksCisJCSAgICAgIERTSV8x NG5tX1BIWV9MTl9USU1JTkdfQ1RSTF85X1RBX0dPKHRpbWluZy0+dGFfZ28pIHwKKwkJICAgICAg RFNJXzE0bm1fUEhZX0xOX1RJTUlOR19DVFJMXzlfVEFfU1VSRSh0aW1pbmctPnRhX3N1cmUpKTsK Kwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0xOX1RJTUlOR19DVFJMXzEw KGxhbmVfaWR4KSwKKwkJICAgICAgRFNJXzE0bm1fUEhZX0xOX1RJTUlOR19DVFJMXzEwX1RBX0dF VCh0aW1pbmctPnRhX2dldCkpOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9Q SFlfTE5fVElNSU5HX0NUUkxfMTEobGFuZV9pZHgpLAorCQkgICAgICBEU0lfMTRubV9QSFlfTE5f VElNSU5HX0NUUkxfMTFfVFJJRzNfQ01EKDB4YTApKTsKK30KKworc3RhdGljIGludCBkc2lfMTRu bV9waHlfZW5hYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LCBpbnQgc3JjX3BsbF9pZCwKKwkJ CSAgICAgICBzdHJ1Y3QgbXNtX2RzaV9waHlfY2xrX3JlcXVlc3QgKmNsa19yZXEpCit7CisJc3Ry dWN0IG1zbV9kc2lfZHBoeV90aW1pbmcgKnRpbWluZyA9ICZwaHktPnRpbWluZzsKKwl1MzIgZGF0 YTsKKwlpbnQgaTsKKwlpbnQgcmV0OworCXZvaWQgX19pb21lbSAqYmFzZSA9IHBoeS0+YmFzZTsK Kwl2b2lkIF9faW9tZW0gKmxhbmVfYmFzZSA9IHBoeS0+bGFuZV9iYXNlOworCisJaWYgKG1zbV9k c2lfZHBoeV90aW1pbmdfY2FsY192Mih0aW1pbmcsIGNsa19yZXEpKSB7CisJCWRldl9lcnIoJnBo eS0+cGRldi0+ZGV2LAorCQkJIiVzOiBELVBIWSB0aW1pbmcgY2FsY3VsYXRpb24gZmFpbGVkXG4i LCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRhdGEgPSAweDFjOworCWlm IChwaHktPnVzZWNhc2UgIT0gTVNNX0RTSV9QSFlfU1RBTkRBTE9ORSkKKwkJZGF0YSB8PSBEU0lf MTRubV9QSFlfQ01OX0xET19DTlRSTF9WUkVHX0NUUkwoMzIpOworCWRzaV9waHlfd3JpdGUoYmFz ZSArIFJFR19EU0lfMTRubV9QSFlfQ01OX0xET19DTlRSTCwgZGF0YSk7CisKKwlkc2lfcGh5X3dy aXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0NNTl9HTEJMX1RFU1RfQ1RSTCwgMHgxKTsKKwor CS8qIDQgZGF0YSBsYW5lcyArIDEgY2xrIGxhbmUgY29uZmlndXJhdGlvbiAqLworCWZvciAoaSA9 IDA7IGkgPCA1OyBpKyspIHsKKwkJZHNpX3BoeV93cml0ZShsYW5lX2Jhc2UgKyBSRUdfRFNJXzE0 bm1fUEhZX0xOX1ZSRUdfQ05UUkwoaSksCisJCQkgICAgICAweDFkKTsKKworCQlkc2lfcGh5X3dy aXRlKGxhbmVfYmFzZSArCisJCQkgICAgICBSRUdfRFNJXzE0bm1fUEhZX0xOX1NUUkVOR1RIX0NU UkxfMChpKSwgMHhmZik7CisJCWRzaV9waHlfd3JpdGUobGFuZV9iYXNlICsKKwkJCSAgICAgIFJF R19EU0lfMTRubV9QSFlfTE5fU1RSRU5HVEhfQ1RSTF8xKGkpLAorCQkJICAgICAgKGkgPT0gUEhZ XzE0Tk1fQ0tMTl9JRFgpID8gMHgwMCA6IDB4MDYpOworCisJCWRzaV9waHlfd3JpdGUobGFuZV9i YXNlICsgUkVHX0RTSV8xNG5tX1BIWV9MTl9DRkczKGkpLAorCQkJICAgICAgKGkgPT0gUEhZXzE0 Tk1fQ0tMTl9JRFgpID8gMHg4ZiA6IDB4MGYpOworCQlkc2lfcGh5X3dyaXRlKGxhbmVfYmFzZSAr IFJFR19EU0lfMTRubV9QSFlfTE5fQ0ZHMihpKSwgMHgxMCk7CisJCWRzaV9waHlfd3JpdGUobGFu ZV9iYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9MTl9URVNUX0RBVEFQQVRIKGkpLAorCQkJICAgICAg MCk7CisJCWRzaV9waHlfd3JpdGUobGFuZV9iYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9MTl9URVNU X1NUUihpKSwKKwkJCSAgICAgIDB4ODgpOworCisJCWRzaV8xNG5tX2RwaHlfc2V0X3RpbWluZyhw aHksIHRpbWluZywgaSk7CisJfQorCisJLyogTWFrZSBzdXJlIFBMTCBpcyBub3Qgc3RhcnQgKi8K Kwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0NNTl9QTExfQ05UUkwsIDB4 MDApOworCisJd21iKCk7IC8qIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHdyaXR0ZW4gYmVmb3Jl IHJlc2V0IGFuZCBlbmFibGUgKi8KKworCS8qIHJlc2V0IGRpZ2l0YWwgYmxvY2sgKi8KKwlkc2lf cGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0NNTl9DVFJMXzEsIDB4ODApOworCXdt YigpOyAvKiBlbnN1cmUgcmVzZXQgaXMgYXNzZXJ0ZWQgKi8KKwl1ZGVsYXkoMTAwKTsKKwlkc2lf cGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0NNTl9DVFJMXzEsIDB4MDApOworCisJ bXNtX2RzaV9waHlfc2V0X3NyY19wbGwocGh5LCBzcmNfcGxsX2lkLAorCQkJCVJFR19EU0lfMTRu bV9QSFlfQ01OX0dMQkxfVEVTVF9DVFJMLAorCQkJCURTSV8xNG5tX1BIWV9DTU5fR0xCTF9URVNU X0NUUkxfQklUQ0xLX0hTX1NFTCk7CisKKwlyZXQgPSBtc21fZHNpX3BsbF9zZXRfdXNlY2FzZShw aHktPnBsbCwgcGh5LT51c2VjYXNlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBoeS0+cGRl di0+ZGV2LCAiJXM6IHNldCBwbGwgdXNlY2FzZSBmYWlsZWQsICVkXG4iLAorCQkJX19mdW5jX18s IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUmVtb3ZlIHBvd2VyIGRvd24gZnJvbSBQ TEwgYW5kIGFsbCBsYW5lcyAqLworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9Q SFlfQ01OX0NUUkxfMCwgMHhmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHNp XzE0bm1fcGh5X2Rpc2FibGUoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCit7CisJZHNpX3BoeV93 cml0ZShwaHktPmJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0NNTl9HTEJMX1RFU1RfQ1RSTCwgMCk7 CisJZHNpX3BoeV93cml0ZShwaHktPmJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0NNTl9DVFJMXzAs IDApOworCisJLyogZW5zdXJlIHRoYXQgdGhlIHBoeSBpcyBjb21wbGV0ZWx5IGRpc2FibGVkICov CisJd21iKCk7Cit9CisKK3N0YXRpYyBpbnQgZHNpXzE0bm1fcGh5X2luaXQoc3RydWN0IG1zbV9k c2lfcGh5ICpwaHkpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBoeS0+cGRl djsKKworCXBoeS0+bGFuZV9iYXNlID0gbXNtX2lvcmVtYXAocGRldiwgImRzaV9waHlfbGFuZSIs CisJCQkJIkRTSV9QSFlfTEFORSIpOworCWlmIChJU19FUlIocGh5LT5sYW5lX2Jhc2UpKSB7CisJ CWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBmYWlsZWQgdG8gbWFwIHBoeSBsYW5lIGJhc2VcbiIs CisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQor Citjb25zdCBzdHJ1Y3QgbXNtX2RzaV9waHlfY2ZnIGRzaV9waHlfMTRubV9jZmdzID0geworCS50 eXBlID0gTVNNX0RTSV9QSFlfMTROTSwKKwkuc3JjX3BsbF90cnV0aHRhYmxlID0geyB7ZmFsc2Us IGZhbHNlfSwge3RydWUsIGZhbHNlfSB9LAorCS5yZWdfY2ZnID0geworCQkubnVtID0gMSwKKwkJ LnJlZ3MgPSB7CisJCQl7InZjY2EiLCAxNzAwMCwgMzJ9LAorCQl9LAorCX0sCisJLm9wcyA9IHsK KwkJLmVuYWJsZSA9IGRzaV8xNG5tX3BoeV9lbmFibGUsCisJCS5kaXNhYmxlID0gZHNpXzE0bm1f cGh5X2Rpc2FibGUsCisJCS5pbml0ID0gZHNpXzE0bm1fcGh5X2luaXQsCisJfSwKKwkuaW9fc3Rh cnQgPSB7IDB4OTk0NDAwLCAweDk5NjQwMCB9LAorCS5udW1fZHNpX3BoeSA9IDIsCit9OwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGxsL2RzaV9wbGwuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsLmMKaW5kZXggNWNkNDM4Zi4uYmMyODlmNSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGxsL2RzaV9wbGwuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS9wbGwvZHNpX3BsbC5jCkBAIC0xNDAsNiArMTQwLDE1IEBAIGlu dCBtc21fZHNpX3BsbF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBtc21fZHNpX3BsbCAqcGxsKQogCXJl dHVybiAwOwogfQogCitpbnQgbXNtX2RzaV9wbGxfc2V0X3VzZWNhc2Uoc3RydWN0IG1zbV9kc2lf cGxsICpwbGwsCisJCQkgICAgZW51bSBtc21fZHNpX3BoeV91c2VjYXNlIHVjKQoreworCWlmIChw bGwtPnNldF91c2VjYXNlKQorCQlyZXR1cm4gcGxsLT5zZXRfdXNlY2FzZShwbGwsIHVjKTsKKwor CXJldHVybiAwOworfQorCiBzdHJ1Y3QgbXNtX2RzaV9wbGwgKm1zbV9kc2lfcGxsX2luaXQoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCWVudW0gbXNtX2RzaV9waHlfdHlwZSB0eXBl LCBpbnQgaWQpCiB7CkBAIC0xNTQsNiArMTYzLDkgQEAgc3RydWN0IG1zbV9kc2lfcGxsICptc21f ZHNpX3BsbF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJY2FzZSBNU01fRFNJ X1BIWV8yOE5NXzg5NjA6CiAJCXBsbCA9IG1zbV9kc2lfcGxsXzI4bm1fODk2MF9pbml0KHBkZXYs IGlkKTsKIAkJYnJlYWs7CisJY2FzZSBNU01fRFNJX1BIWV8xNE5NOgorCQlwbGwgPSBtc21fZHNp X3BsbF8xNG5tX2luaXQocGRldiwgaWQpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlwbGwgPSBF UlJfUFRSKC1FTlhJTyk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kc2kvcGxsL2RzaV9wbGwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxs LmgKaW5kZXggMmNmMTY2NC4uZjYzZTdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kc2kvcGxsL2RzaV9wbGwuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9wbGwvZHNp X3BsbC5oCkBAIC00MSw2ICs0MSw4IEBAIHN0cnVjdCBtc21fZHNpX3BsbCB7CiAJdm9pZCAoKmRl c3Ryb3kpKHN0cnVjdCBtc21fZHNpX3BsbCAqcGxsKTsKIAl2b2lkICgqc2F2ZV9zdGF0ZSkoc3Ry dWN0IG1zbV9kc2lfcGxsICpwbGwpOwogCWludCAoKnJlc3RvcmVfc3RhdGUpKHN0cnVjdCBtc21f ZHNpX3BsbCAqcGxsKTsKKwlpbnQgKCpzZXRfdXNlY2FzZSkoc3RydWN0IG1zbV9kc2lfcGxsICpw bGwsCisJCQkgICBlbnVtIG1zbV9kc2lfcGh5X3VzZWNhc2UgdWMpOwogfTsKIAogI2RlZmluZSBo d19jbGtfdG9fcGxsKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXNtX2RzaV9wbGwsIGNsa19o dykKQEAgLTEwNCw1ICsxMDYsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbXNtX2RzaV9wbGwg Km1zbV9kc2lfcGxsXzI4bm1fODk2MF9pbml0KAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdf RFJNX01TTV9EU0lfMTROTV9QSFkKK3N0cnVjdCBtc21fZHNpX3BsbCAqbXNtX2RzaV9wbGxfMTRu bV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpZCk7CisjZWxzZQorc3Rh dGljIGlubGluZSBzdHJ1Y3QgbXNtX2RzaV9wbGwgKgorbXNtX2RzaV9wbGxfMTRubV9pbml0KHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpZCkKK3sKKwlyZXR1cm4gRVJSX1BUUigt RU5PREVWKTsKK30KKyNlbmRpZgogI2VuZGlmIC8qIF9fRFNJX1BMTF9IX18gKi8KIApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGxsL2RzaV9wbGxfMTRubS5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2kvcGxsL2RzaV9wbGxfMTRubS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmU4YjE4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS9wbGwvZHNpX3BsbF8xNG5tLmMKQEAgLTAsMCArMSwxMDY3IEBACisvKgorICog Q29weXJpZ2h0IChjKSAyMDE2LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24g MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRl IDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKworI2luY2x1ZGUgImRzaV9wbGwuaCIKKyNpbmNsdWRl ICJkc2kueG1sLmgiCisKKy8qCisgKiBEU0kgUExMIDE0bm0gLSBjbG9jayBkaWFncmFtIChlZzog RFNJMCk6CisgKgorICogICAgICAgICBkc2kwbjFfcG9zdGRpdl9jbGsKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAg ICAgICAgICArLS0tLSsgIHwgICstLS0tKworICogIGRzaTB2Y29fY2xrIC0tLXwgbjEgfC0tby0t fCAvOCB8LS0gZHNpMHBsbGJ5dGUKKyAqICAgICAgICAgICAgICAgICArLS0tLSsgIHwgICstLS0t KworICogICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgZHNpMG4xX3Bvc3RkaXZi eTJfY2xrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgKy0tLS0rICB8CisgKiAgICAg ICAgICAgICAgICAgICAgICAgICBvLS0tfCAvMiB8LS1vLS18XAorICogICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICstLS0tKyAgICAgfCBcICAgKy0tLS0rCisgKiAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICB8ICB8LS18IG4yIHwtLSBkc2kwcGxsCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICBvLS0tLS0tLS0tLS0tLS18IC8gICArLS0tLSsKKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwvCisgKi8KKworI2RlZmluZSBQT0xMX01B WF9SRUFEUwkJCTE1CisjZGVmaW5lIFBPTExfVElNRU9VVF9VUwkJCTEwMDAKKworI2RlZmluZSBO VU1fUFJPVklERURfQ0xLUwkJMgorCisjZGVmaW5lIFZDT19SRUZfQ0xLX1JBVEUJCTE5MjAwMDAw CisjZGVmaW5lIFZDT19NSU5fUkFURQkJCTEzMDAwMDAwMDBVTAorI2RlZmluZSBWQ09fTUFYX1JB VEUJCQkyNjAwMDAwMDAwVUwKKworI2RlZmluZSBEU0lfQllURV9QTExfQ0xLCQkwCisjZGVmaW5l IERTSV9QSVhFTF9QTExfQ0xLCQkxCisKKyNkZWZpbmUgRFNJX1BMTF9ERUZBVUxUX1ZDT19QT1NU RElWCTEKKworc3RydWN0IGRzaV9wbGxfaW5wdXQgeworCXUzMiBmcmVmOwkvKiByZWZlcmVuY2Ug Y2xrICovCisJdTMyIGZkYXRhOwkvKiBiaXQgY2xvY2sgcmF0ZSAqLworCXUzMiBkc2ljbGtfc2Vs OyAvKiBNdXggY29uZmlndXJhdGlvbiAoc2VlIGRpYWdyYW0pICovCisJdTMyIHNzY19lbjsJLyog U1NDIGVuYWJsZS9kaXNhYmxlICovCisJdTMyIGxkb19lbjsKKworCS8qIGZpeGVkIHBhcmFtcyAq LworCXUzMiByZWZjbGtfZGJsZXJfZW47CisJdTMyIHZjb19tZWFzdXJlX3RpbWU7CisJdTMyIGt2 Y29fbWVhc3VyZV90aW1lOworCXUzMiBiYW5kZ2FwX3RpbWVyOworCXUzMiBwbGxfd2FrZXVwX3Rp bWVyOworCXUzMiBwbGxsb2NrX2NudDsKKwl1MzIgcGxsbG9ja19ybmc7CisJdTMyIHNzY19jZW50 ZXI7CisJdTMyIHNzY19hZGpfcGVyaW9kOworCXUzMiBzc2Nfc3ByZWFkOworCXUzMiBzc2NfZnJl cTsKKwl1MzIgcGxsX2llX3RyaW07CisJdTMyIHBsbF9pcF90cmltOworCXUzMiBwbGxfaXB0YXRf dHJpbTsKKwl1MzIgcGxsX2NwY3NldF9jdXI7CisJdTMyIHBsbF9jcG1zZXRfY3VyOworCisJdTMy IHBsbF9pY3Btc2V0OworCXUzMiBwbGxfaWNwY3NldDsKKworCXUzMiBwbGxfaWNwbXNldF9wOwor CXUzMiBwbGxfaWNwbXNldF9tOworCisJdTMyIHBsbF9pY3Bjc2V0X3A7CisJdTMyIHBsbF9pY3Bj c2V0X207CisKKwl1MzIgcGxsX2xwZl9yZXMxOworCXUzMiBwbGxfbHBmX2NhcDE7CisJdTMyIHBs bF9scGZfY2FwMjsKKwl1MzIgcGxsX2MzY3RybDsKKwl1MzIgcGxsX3IzY3RybDsKK307CisKK3N0 cnVjdCBkc2lfcGxsX291dHB1dCB7CisJdTMyIHBsbF90eGNsa19lbjsKKwl1MzIgZGVjX3N0YXJ0 OworCXUzMiBkaXZfZnJhY19zdGFydDsKKwl1MzIgc3NjX3BlcmlvZDsKKwl1MzIgc3NjX3N0ZXBf c2l6ZTsKKwl1MzIgcGxsbG9ja19jbXA7CisJdTMyIHBsbF92Y29fZGl2X3JlZjsKKwl1MzIgcGxs X3Zjb19jb3VudDsKKwl1MzIgcGxsX2t2Y29fZGl2X3JlZjsKKwl1MzIgcGxsX2t2Y29fY291bnQ7 CisJdTMyIHBsbF9taXNjMTsKKwl1MzIgcGxsX2xwZjJfcG9zdGRpdjsKKwl1MzIgcGxsX3Jlc2V0 c21fY250cmw7CisJdTMyIHBsbF9yZXNldHNtX2NudHJsMjsKKwl1MzIgcGxsX3Jlc2V0c21fY250 cmw1OworCXUzMiBwbGxfa3Zjb19jb2RlOworCisJdTMyIGNtbl9jbGtfY2ZnMDsKKwl1MzIgY21u X2Nsa19jZmcxOworCXUzMiBjbW5fbGRvX2NudHJsOworCisJdTMyIHBsbF9wb3N0ZGl2OworCXUz MiBmY3ZvOworfTsKKworc3RydWN0IHBsbF8xNG5tX2NhY2hlZF9zdGF0ZSB7CisJdW5zaWduZWQg bG9uZyB2Y29fcmF0ZTsKKwl1OCBuMnBvc3RkaXY7CisJdTggbjFwb3N0ZGl2OworfTsKKworc3Ry dWN0IGRzaV9wbGxfMTRubSB7CisJc3RydWN0IG1zbV9kc2lfcGxsIGJhc2U7CisKKwlpbnQgaWQ7 CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXZvaWQgX19pb21lbSAqcGh5X2Nt bl9tbWlvOworCXZvaWQgX19pb21lbSAqbW1pbzsKKworCWludCB2Y29fZGVsYXk7CisKKwlzdHJ1 Y3QgZHNpX3BsbF9pbnB1dCBpbjsKKwlzdHJ1Y3QgZHNpX3BsbF9vdXRwdXQgb3V0OworCisJc3Bp bmxvY2tfdCBwb3N0ZGl2X2xvY2s7CisKKwlzNjQgdmNvX2N1cnJlbnRfcmF0ZTsKKwlzNjQgdmNv X3JlZl9jbGtfcmF0ZTsKKworCS8qIHByaXZhdGUgY2xvY2tzOiAqLworCXN0cnVjdCBjbGsgKmNs a3NbTlVNX0RTSV9DTE9DS1NfTUFYXTsKKwl1MzIgbnVtX2Nsa3M7CisKKwkvKiBjbG9jay1wcm92 aWRlcjogKi8KKwlzdHJ1Y3QgY2xrICpwcm92aWRlZF9jbGtzW05VTV9QUk9WSURFRF9DTEtTXTsK KwlzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKKworCXN0cnVjdCBwbGxfMTRubV9j YWNoZWRfc3RhdGUgY2FjaGVkX3N0YXRlOworCisJZW51bSBtc21fZHNpX3BoeV91c2VjYXNlIHVj OworCXN0cnVjdCBkc2lfcGxsXzE0bm0gKnNsYXZlOworfTsKKworI2RlZmluZSB0b19wbGxfMTRu bSh4KQljb250YWluZXJfb2YoeCwgc3RydWN0IGRzaV9wbGxfMTRubSwgYmFzZSkKKworLyoKKyAq IFByaXZhdGUgc3RydWN0IGZvciBOMS9OMiBwb3N0LWRpdmlkZXIgY2xvY2tzLiBUaGVzZSBjbG9j a3MgYXJlIHNpbWlsYXIgdG8KKyAqIHRoZSBnZW5lcmljIGNsa19kaXZpZGVyIGNsYXNzIG9mIGNs b2Nrcy4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IGl0CisgKiBhbHNvIHNldHMgdGhlIHNs YXZlIERTSSBQTEwncyBwb3N0LWRpdmlkZXJzIGlmIGluIER1YWwgRFNJIG1vZGUKKyAqLworc3Ry dWN0IGRzaV9wbGxfMTRubV9wb3N0ZGl2IHsKKwlzdHJ1Y3QgY2xrX2h3IGh3OworCisJLyogZGl2 aWRlciBwYXJhbXMgKi8KKwl1OCBzaGlmdDsKKwl1OCB3aWR0aDsKKwl1OCBmbGFnczsgLyogc2Ft ZSBmbGFncyBhcyB1c2VkIGJ5IGNsa19kaXZpZGVyIHN0cnVjdCAqLworCisJc3RydWN0IGRzaV9w bGxfMTRubSAqcGxsOworfTsKKworI2RlZmluZSB0b19wbGxfMTRubV9wb3N0ZGl2KF9odykgY29u dGFpbmVyX29mKF9odywgc3RydWN0IGRzaV9wbGxfMTRubV9wb3N0ZGl2LCBodykKKworLyoKKyAq IEdsb2JhbCBsaXN0IG9mIHByaXZhdGUgRFNJIFBMTCBzdHJ1Y3QgcG9pbnRlcnMuIFdlIG5lZWQg dGhpcyBmb3IgRHVhbCBEU0kKKyAqIG1vZGUsIHdoZXJlIHRoZSBtYXN0ZXIgUExMJ3MgY2xrX29w cyBuZWVkcyBhY2Nlc3MgdGhlIHNsYXZlJ3MgcHJpdmF0ZSBkYXRhCisgKi8KK3N0YXRpYyBzdHJ1 Y3QgZHNpX3BsbF8xNG5tICpwbGxfMTRubV9saXN0W0RTSV9NQVhdOworCitzdGF0aWMgYm9vbCBw bGxfMTRubV9wb2xsX2Zvcl9yZWFkeShzdHJ1Y3QgZHNpX3BsbF8xNG5tICpwbGxfMTRubSwKKwkJ CQkgICAgdTMyIG5iX3RyaWVzLCB1MzIgdGltZW91dF91cykKK3sKKwlib29sIHBsbF9sb2NrZWQg PSBmYWxzZTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwbGxfMTRubS0+bW1pbzsKKwl1MzIgdHJp ZXMsIHZhbDsKKworCXRyaWVzID0gbmJfdHJpZXM7CisJd2hpbGUgKHRyaWVzLS0pIHsKKwkJdmFs ID0gcGxsX3JlYWQoYmFzZSArCisJCQkgICAgICAgUkVHX0RTSV8xNG5tX1BIWV9QTExfUkVTRVRf U01fUkVBRFlfU1RBVFVTKTsKKwkJcGxsX2xvY2tlZCA9ICEhKHZhbCAmIEJJVCg1KSk7CisKKwkJ aWYgKHBsbF9sb2NrZWQpCisJCQlicmVhazsKKworCQl1ZGVsYXkodGltZW91dF91cyk7CisJfQor CisJaWYgKCFwbGxfbG9ja2VkKSB7CisJCXRyaWVzID0gbmJfdHJpZXM7CisJCXdoaWxlICh0cmll cy0tKSB7CisJCQl2YWwgPSBwbGxfcmVhZChiYXNlICsKKwkJCQlSRUdfRFNJXzE0bm1fUEhZX1BM TF9SRVNFVF9TTV9SRUFEWV9TVEFUVVMpOworCQkJcGxsX2xvY2tlZCA9ICEhKHZhbCAmIEJJVCgw KSk7CisKKwkJCWlmIChwbGxfbG9ja2VkKQorCQkJCWJyZWFrOworCisJCQl1ZGVsYXkodGltZW91 dF91cyk7CisJCX0KKwl9CisKKwlEQkcoIkRTSSBQTEwgaXMgJXNsb2NrZWQiLCBwbGxfbG9ja2Vk ID8gIiIgOiAiKm5vdCogIik7CisKKwlyZXR1cm4gcGxsX2xvY2tlZDsKK30KKworc3RhdGljIHZv aWQgZHNpX3BsbF8xNG5tX2lucHV0X2luaXQoc3RydWN0IGRzaV9wbGxfMTRubSAqcGxsKQorewor CXBsbC0+aW4uZnJlZiA9IHBsbC0+dmNvX3JlZl9jbGtfcmF0ZTsKKwlwbGwtPmluLmZkYXRhID0g MDsKKwlwbGwtPmluLmRzaWNsa19zZWwgPSAxOwkvKiBVc2UgdGhlIC8yIHBhdGggaW4gTXV4ICov CisJcGxsLT5pbi5sZG9fZW4gPSAwOwkvKiBkaXNhYmxlZCBmb3Igbm93ICovCisKKwkvKiBmaXhl ZCBpbnB1dCAqLworCXBsbC0+aW4ucmVmY2xrX2RibGVyX2VuID0gMDsKKwlwbGwtPmluLnZjb19t ZWFzdXJlX3RpbWUgPSA1OworCXBsbC0+aW4ua3Zjb19tZWFzdXJlX3RpbWUgPSA1OworCXBsbC0+ aW4uYmFuZGdhcF90aW1lciA9IDQ7CisJcGxsLT5pbi5wbGxfd2FrZXVwX3RpbWVyID0gNTsKKwlw bGwtPmluLnBsbGxvY2tfY250ID0gMTsKKwlwbGwtPmluLnBsbGxvY2tfcm5nID0gMDsKKworCS8q CisJICogU1NDIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gV2UgbWlnaHQgbmVlZCBEVCBwcm9wcyBm b3IgY29uZmlndXJpbmcKKwkgKiBzb21lIFNTQyBwYXJhbXMgbGlrZSBQUE0gYW5kIGNlbnRlci9k b3duIHNwcmVhZCBldGMuCisJICovCisJcGxsLT5pbi5zc2NfZW4gPSAxOworCXBsbC0+aW4uc3Nj X2NlbnRlciA9IDA7CQkvKiBkb3duIHNwcmVhZCBieSBkZWZhdWx0ICovCisJcGxsLT5pbi5zc2Nf c3ByZWFkID0gNTsJCS8qIFBQTSAvIDEwMDAgKi8KKwlwbGwtPmluLnNzY19mcmVxID0gMzE1MDA7 CS8qIGRlZmF1bHQgcmVjb21tZW5kZWQgKi8KKwlwbGwtPmluLnNzY19hZGpfcGVyaW9kID0gMzc7 CisKKwlwbGwtPmluLnBsbF9pZV90cmltID0gNDsKKwlwbGwtPmluLnBsbF9pcF90cmltID0gNDsK KwlwbGwtPmluLnBsbF9jcGNzZXRfY3VyID0gMTsKKwlwbGwtPmluLnBsbF9jcG1zZXRfY3VyID0g MTsKKwlwbGwtPmluLnBsbF9pY3Btc2V0ID0gNDsKKwlwbGwtPmluLnBsbF9pY3Bjc2V0ID0gNDsK KwlwbGwtPmluLnBsbF9pY3Btc2V0X3AgPSAwOworCXBsbC0+aW4ucGxsX2ljcG1zZXRfbSA9IDA7 CisJcGxsLT5pbi5wbGxfaWNwY3NldF9wID0gMDsKKwlwbGwtPmluLnBsbF9pY3Bjc2V0X20gPSAw OworCXBsbC0+aW4ucGxsX2xwZl9yZXMxID0gMzsKKwlwbGwtPmluLnBsbF9scGZfY2FwMSA9IDEx OworCXBsbC0+aW4ucGxsX2xwZl9jYXAyID0gMTsKKwlwbGwtPmluLnBsbF9pcHRhdF90cmltID0g NzsKKwlwbGwtPmluLnBsbF9jM2N0cmwgPSAyOworCXBsbC0+aW4ucGxsX3IzY3RybCA9IDE7Cit9 CisKKyNkZWZpbmUgQ0VJTCh4LCB5KQkJKCgoeCkgKyAoKHkpIC0gMSkpIC8gKHkpKQorCitzdGF0 aWMgdm9pZCBwbGxfMTRubV9zc2NfY2FsYyhzdHJ1Y3QgZHNpX3BsbF8xNG5tICpwbGwpCit7CisJ dTMyIHBlcmlvZCwgc3NjX3BlcmlvZDsKKwl1MzIgcmVmLCByZW07CisJczY0IHN0ZXBfc2l6ZTsK KworCURCRygidmNvPSVsbGQgcmVmPSVsbGQiLCBwbGwtPnZjb19jdXJyZW50X3JhdGUsIHBsbC0+ dmNvX3JlZl9jbGtfcmF0ZSk7CisKKwlzc2NfcGVyaW9kID0gcGxsLT5pbi5zc2NfZnJlcSAvIDUw MDsKKwlwZXJpb2QgPSAodW5zaWduZWQgbG9uZylwbGwtPnZjb19yZWZfY2xrX3JhdGUgLyAxMDAw OworCXNzY19wZXJpb2QgID0gQ0VJTChwZXJpb2QsIHNzY19wZXJpb2QpOworCXNzY19wZXJpb2Qg LT0gMTsKKwlwbGwtPm91dC5zc2NfcGVyaW9kID0gc3NjX3BlcmlvZDsKKworCURCRygic3NjIGZy ZXE9JWQgc3ByZWFkPSVkIHBlcmlvZD0lZCIsIHBsbC0+aW4uc3NjX2ZyZXEsCisJICAgIHBsbC0+ aW4uc3NjX3NwcmVhZCwgcGxsLT5vdXQuc3NjX3BlcmlvZCk7CisKKwlzdGVwX3NpemUgPSAodTMy KXBsbC0+dmNvX2N1cnJlbnRfcmF0ZTsKKwlyZWYgPSBwbGwtPnZjb19yZWZfY2xrX3JhdGU7CisJ cmVmIC89IDEwMDA7CisJc3RlcF9zaXplID0gZGl2X3M2NChzdGVwX3NpemUsIHJlZik7CisJc3Rl cF9zaXplIDw8PSAyMDsKKwlzdGVwX3NpemUgPSBkaXZfczY0KHN0ZXBfc2l6ZSwgMTAwMCk7CisJ c3RlcF9zaXplICo9IHBsbC0+aW4uc3NjX3NwcmVhZDsKKwlzdGVwX3NpemUgPSBkaXZfczY0KHN0 ZXBfc2l6ZSwgMTAwMCk7CisJc3RlcF9zaXplICo9IChwbGwtPmluLnNzY19hZGpfcGVyaW9kICsg MSk7CisKKwlyZW0gPSAwOworCXN0ZXBfc2l6ZSA9IGRpdl9zNjRfcmVtKHN0ZXBfc2l6ZSwgc3Nj X3BlcmlvZCArIDEsICZyZW0pOworCWlmIChyZW0pCisJCXN0ZXBfc2l6ZSsrOworCisJREJHKCJz dGVwX3NpemU9JWxsZCIsIHN0ZXBfc2l6ZSk7CisKKwlzdGVwX3NpemUgJj0gMHgwZmZmZjsJLyog dGFrZSBsb3dlciAxNiBiaXRzICovCisKKwlwbGwtPm91dC5zc2Nfc3RlcF9zaXplID0gc3RlcF9z aXplOworfQorCitzdGF0aWMgdm9pZCBwbGxfMTRubV9kZWNfZnJhY19jYWxjKHN0cnVjdCBkc2lf cGxsXzE0bm0gKnBsbCkKK3sKKwlzdHJ1Y3QgZHNpX3BsbF9pbnB1dCAqcGluID0gJnBsbC0+aW47 CisJc3RydWN0IGRzaV9wbGxfb3V0cHV0ICpwb3V0ID0gJnBsbC0+b3V0OworCXM2NCBtdWx0aXBs aWVyID0gQklUKDIwKTsKKwlzNjQgZGVjX3N0YXJ0X211bHRpcGxlLCBkZWNfc3RhcnQsIHBsbF9j b21wX3ZhbDsKKwlzMzIgZHVyYXRpb24sIGRpdl9mcmFjX3N0YXJ0OworCXM2NCB2Y29fY2xrX3Jh dGUgPSBwbGwtPnZjb19jdXJyZW50X3JhdGU7CisJczY0IGZyZWYgPSBwbGwtPnZjb19yZWZfY2xr X3JhdGU7CisKKwlEQkcoInZjb19jbGtfcmF0ZT0lbGxkIHJlZl9jbGtfcmF0ZT0lbGxkIiwgdmNv X2Nsa19yYXRlLCBmcmVmKTsKKworCWRlY19zdGFydF9tdWx0aXBsZSA9IGRpdl9zNjQodmNvX2Ns a19yYXRlICogbXVsdGlwbGllciwgZnJlZik7CisJZGl2X3M2NF9yZW0oZGVjX3N0YXJ0X211bHRp cGxlLCBtdWx0aXBsaWVyLCAmZGl2X2ZyYWNfc3RhcnQpOworCisJZGVjX3N0YXJ0ID0gZGl2X3M2 NChkZWNfc3RhcnRfbXVsdGlwbGUsIG11bHRpcGxpZXIpOworCisJcG91dC0+ZGVjX3N0YXJ0ID0g KHUzMilkZWNfc3RhcnQ7CisJcG91dC0+ZGl2X2ZyYWNfc3RhcnQgPSBkaXZfZnJhY19zdGFydDsK KworCWlmIChwaW4tPnBsbGxvY2tfY250ID09IDApCisJCWR1cmF0aW9uID0gMTAyNDsKKwllbHNl IGlmIChwaW4tPnBsbGxvY2tfY250ID09IDEpCisJCWR1cmF0aW9uID0gMjU2OworCWVsc2UgaWYg KHBpbi0+cGxsbG9ja19jbnQgPT0gMikKKwkJZHVyYXRpb24gPSAxMjg7CisJZWxzZQorCQlkdXJh dGlvbiA9IDMyOworCisJcGxsX2NvbXBfdmFsID0gZHVyYXRpb24gKiBkZWNfc3RhcnRfbXVsdGlw bGU7CisJcGxsX2NvbXBfdmFsID0gZGl2X3M2NChwbGxfY29tcF92YWwsIG11bHRpcGxpZXIpOwor CWRvX2RpdihwbGxfY29tcF92YWwsIDEwKTsKKworCXBvdXQtPnBsbGxvY2tfY21wID0gKHUzMilw bGxfY29tcF92YWw7CisKKwlwb3V0LT5wbGxfdHhjbGtfZW4gPSAxOworCXBvdXQtPmNtbl9sZG9f Y250cmwgPSAweDNjOworfQorCitzdGF0aWMgdTMyIHBsbF8xNG5tX2t2Y29fc2xvcCh1MzIgdnJh dGUpCit7CisJdTMyIHNsb3AgPSAwOworCisJaWYgKHZyYXRlID4gVkNPX01JTl9SQVRFICYmIHZy YXRlIDw9IDE4MDAwMDAwMDBVTCkKKwkJc2xvcCA9ICA2MDA7CisJZWxzZSBpZiAodnJhdGUgPiAx ODAwMDAwMDAwVUwgJiYgdnJhdGUgPCAyMzAwMDAwMDAwVUwpCisJCXNsb3AgPSA0MDA7CisJZWxz ZSBpZiAodnJhdGUgPiAyMzAwMDAwMDAwVUwgJiYgdnJhdGUgPCBWQ09fTUFYX1JBVEUpCisJCXNs b3AgPSAyODA7CisKKwlyZXR1cm4gc2xvcDsKK30KKworc3RhdGljIHZvaWQgcGxsXzE0bm1fY2Fs Y192Y29fY291bnQoc3RydWN0IGRzaV9wbGxfMTRubSAqcGxsKQoreworCXN0cnVjdCBkc2lfcGxs X2lucHV0ICpwaW4gPSAmcGxsLT5pbjsKKwlzdHJ1Y3QgZHNpX3BsbF9vdXRwdXQgKnBvdXQgPSAm cGxsLT5vdXQ7CisJczY0IHZjb19jbGtfcmF0ZSA9IHBsbC0+dmNvX2N1cnJlbnRfcmF0ZTsKKwlz NjQgZnJlZiA9IHBsbC0+dmNvX3JlZl9jbGtfcmF0ZTsKKwlzNjQgZGF0YTsKKwl1MzIgY250Owor CisJZGF0YSA9IGZyZWYgKiBwaW4tPnZjb19tZWFzdXJlX3RpbWU7CisJZG9fZGl2KGRhdGEsIDEw MDAwMDApOworCWRhdGEgJj0gMHgwM2ZmOwkvKiAxMCBiaXRzICovCisJZGF0YSAtPSAyOworCXBv dXQtPnBsbF92Y29fZGl2X3JlZiA9IGRhdGE7CisKKwlkYXRhID0gKHVuc2lnbmVkIGxvbmcpdmNv X2Nsa19yYXRlIC8gMTAwMDAwMDsJLyogdW5pdCBpcyBNaHogKi8KKwlkYXRhICo9IHBpbi0+dmNv X21lYXN1cmVfdGltZTsKKwlkb19kaXYoZGF0YSwgMTApOworCXBvdXQtPnBsbF92Y29fY291bnQg PSBkYXRhOworCisJZGF0YSA9IGZyZWYgKiBwaW4tPmt2Y29fbWVhc3VyZV90aW1lOworCWRvX2Rp dihkYXRhLCAxMDAwMDAwKTsKKwlkYXRhICY9IDB4MDNmZjsJLyogMTAgYml0cyAqLworCWRhdGEg LT0gMTsKKwlwb3V0LT5wbGxfa3Zjb19kaXZfcmVmID0gZGF0YTsKKworCWNudCA9IHBsbF8xNG5t X2t2Y29fc2xvcCh2Y29fY2xrX3JhdGUpOworCWNudCAqPSAyOworCWRvX2RpdihjbnQsIDEwMCk7 CisJY250ICo9IHBpbi0+a3Zjb19tZWFzdXJlX3RpbWU7CisJcG91dC0+cGxsX2t2Y29fY291bnQg PSBjbnQ7CisKKwlwb3V0LT5wbGxfbWlzYzEgPSAxNjsKKwlwb3V0LT5wbGxfcmVzZXRzbV9jbnRy bCA9IDQ4OworCXBvdXQtPnBsbF9yZXNldHNtX2NudHJsMiA9IHBpbi0+YmFuZGdhcF90aW1lciA8 PCAzOworCXBvdXQtPnBsbF9yZXNldHNtX2NudHJsNSA9IHBpbi0+cGxsX3dha2V1cF90aW1lcjsK Kwlwb3V0LT5wbGxfa3Zjb19jb2RlID0gMDsKK30KKworc3RhdGljIHZvaWQgcGxsX2RiX2NvbW1p dF9zc2Moc3RydWN0IGRzaV9wbGxfMTRubSAqcGxsKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9 IHBsbC0+bW1pbzsKKwlzdHJ1Y3QgZHNpX3BsbF9pbnB1dCAqcGluID0gJnBsbC0+aW47CisJc3Ry dWN0IGRzaV9wbGxfb3V0cHV0ICpwb3V0ID0gJnBsbC0+b3V0OworCXU4IGRhdGE7CisKKwlkYXRh ID0gcGluLT5zc2NfYWRqX3BlcmlvZDsKKwlkYXRhICY9IDB4MGZmOworCXBsbF93cml0ZShiYXNl ICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfU1NDX0FESl9QRVIxLCBkYXRhKTsKKwlkYXRhID0gKHBp bi0+c3NjX2Fkal9wZXJpb2QgPj4gOCk7CisJZGF0YSAmPSAweDAzOworCXBsbF93cml0ZShiYXNl ICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfU1NDX0FESl9QRVIyLCBkYXRhKTsKKworCWRhdGEgPSBw b3V0LT5zc2NfcGVyaW9kOworCWRhdGEgJj0gMHgwZmY7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdf RFNJXzE0bm1fUEhZX1BMTF9TU0NfUEVSMSwgZGF0YSk7CisJZGF0YSA9IChwb3V0LT5zc2NfcGVy aW9kID4+IDgpOworCWRhdGEgJj0gMHgwZmY7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0 bm1fUEhZX1BMTF9TU0NfUEVSMiwgZGF0YSk7CisKKwlkYXRhID0gcG91dC0+c3NjX3N0ZXBfc2l6 ZTsKKwlkYXRhICY9IDB4MGZmOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9Q TExfU1NDX1NURVBfU0laRTEsIGRhdGEpOworCWRhdGEgPSAocG91dC0+c3NjX3N0ZXBfc2l6ZSA+ PiA4KTsKKwlkYXRhICY9IDB4MGZmOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BI WV9QTExfU1NDX1NURVBfU0laRTIsIGRhdGEpOworCisJZGF0YSA9IChwaW4tPnNzY19jZW50ZXIg JiAweDAxKTsKKwlkYXRhIDw8PSAxOworCWRhdGEgfD0gMHgwMTsgLyogZW5hYmxlICovCisJcGxs X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX1BMTF9TU0NfRU5fQ0VOVEVSLCBkYXRhKTsK KworCXdtYigpOwkvKiBtYWtlIHN1cmUgcmVnaXN0ZXIgY29tbWl0dGVkICovCit9CisKK3N0YXRp YyB2b2lkIHBsbF9kYl9jb21taXRfY29tbW9uKHN0cnVjdCBkc2lfcGxsXzE0bm0gKnBsbCwKKwkJ CQkgc3RydWN0IGRzaV9wbGxfaW5wdXQgKnBpbiwKKwkJCQkgc3RydWN0IGRzaV9wbGxfb3V0cHV0 ICpwb3V0KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IHBsbC0+bW1pbzsKKwl1OCBkYXRhOwor CisJLyogY29uZmdpdXJlIHRoZSBub24gZnJlcXVlbmN5IGRlcGVuZGVudCBwbGwgcmVnaXN0ZXJz ICovCisJZGF0YSA9IDA7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX1BMTF9T WVNDTEtfRU5fUkVTRVQsIGRhdGEpOworCisJZGF0YSA9IHBvdXQtPnBsbF90eGNsa19lbjsKKwlw bGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX1RYQ0xLX0VOLCBkYXRhKTsKKwor CWRhdGEgPSBwb3V0LT5wbGxfcmVzZXRzbV9jbnRybDsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19E U0lfMTRubV9QSFlfUExMX1JFU0VUU01fQ05UUkwsIGRhdGEpOworCWRhdGEgPSBwb3V0LT5wbGxf cmVzZXRzbV9jbnRybDI7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX1BMTF9S RVNFVFNNX0NOVFJMMiwgZGF0YSk7CisJZGF0YSA9IHBvdXQtPnBsbF9yZXNldHNtX2NudHJsNTsK KwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX1JFU0VUU01fQ05UUkw1LCBk YXRhKTsKKworCWRhdGEgPSBwb3V0LT5wbGxfdmNvX2Rpdl9yZWYgJiAweGZmOworCXBsbF93cml0 ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfVkNPX0RJVl9SRUYxLCBkYXRhKTsKKwlkYXRh ID0gKHBvdXQtPnBsbF92Y29fZGl2X3JlZiA+PiA4KSAmIDB4MzsKKwlwbGxfd3JpdGUoYmFzZSAr IFJFR19EU0lfMTRubV9QSFlfUExMX1ZDT19ESVZfUkVGMiwgZGF0YSk7CisKKwlkYXRhID0gcG91 dC0+cGxsX2t2Y29fZGl2X3JlZiAmIDB4ZmY7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0 bm1fUEhZX1BMTF9LVkNPX0RJVl9SRUYxLCBkYXRhKTsKKwlkYXRhID0gKHBvdXQtPnBsbF9rdmNv X2Rpdl9yZWYgPj4gOCkgJiAweDM7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZ X1BMTF9LVkNPX0RJVl9SRUYyLCBkYXRhKTsKKworCWRhdGEgPSBwb3V0LT5wbGxfbWlzYzE7CisJ cGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX1BMTF9QTExfTUlTQzEsIGRhdGEpOwor CisJZGF0YSA9IHBpbi0+cGxsX2llX3RyaW07CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0 bm1fUEhZX1BMTF9JRV9UUklNLCBkYXRhKTsKKworCWRhdGEgPSBwaW4tPnBsbF9pcF90cmltOwor CXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfSVBfVFJJTSwgZGF0YSk7CisK KwlkYXRhID0gcGluLT5wbGxfY3Btc2V0X2N1ciA8PCAzIHwgcGluLT5wbGxfY3Bjc2V0X2N1cjsK KwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX0NQX1NFVF9DVVIsIGRhdGEp OworCisJZGF0YSA9IHBpbi0+cGxsX2ljcGNzZXRfcCA8PCAzIHwgcGluLT5wbGxfaWNwY3NldF9t OworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfUExMX0lDUENTRVQsIGRh dGEpOworCisJZGF0YSA9IHBpbi0+cGxsX2ljcG1zZXRfcCA8PCAzIHwgcGluLT5wbGxfaWNwY3Nl dF9tOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfUExMX0lDUE1TRVQs IGRhdGEpOworCisJZGF0YSA9IHBpbi0+cGxsX2ljcG1zZXQgPDwgMyB8IHBpbi0+cGxsX2ljcGNz ZXQ7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX1BMTF9QTExfSUNQX1NFVCwg ZGF0YSk7CisKKwlkYXRhID0gcGluLT5wbGxfbHBmX2NhcDIgPDwgNCB8IHBpbi0+cGxsX2xwZl9j YXAxOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfUExMX0xQRjEsIGRh dGEpOworCisJZGF0YSA9IHBpbi0+cGxsX2lwdGF0X3RyaW07CisJcGxsX3dyaXRlKGJhc2UgKyBS RUdfRFNJXzE0bm1fUEhZX1BMTF9JUFRBVF9UUklNLCBkYXRhKTsKKworCWRhdGEgPSBwaW4tPnBs bF9jM2N0cmwgfCBwaW4tPnBsbF9yM2N0cmwgPDwgNDsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19E U0lfMTRubV9QSFlfUExMX1BMTF9DUkNUUkwsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBwbGxf MTRubV9zb2Z0d2FyZV9yZXNldChzdHJ1Y3QgZHNpX3BsbF8xNG5tICpwbGxfMTRubSkKK3sKKwl2 b2lkIF9faW9tZW0gKmNtbl9iYXNlID0gcGxsXzE0bm0tPnBoeV9jbW5fbW1pbzsKKworCS8qIGRl IGFzc2VydCBwbGwgc3RhcnQgYW5kIGFwcGx5IHBsbCBzdyByZXNldCAqLworCisJLyogc3RvcCBw bGwgKi8KKwlwbGxfd3JpdGUoY21uX2Jhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0NNTl9QTExfQ05U UkwsIDApOworCisJLyogcGxsIHN3IHJlc2V0ICovCisJcGxsX3dyaXRlX3VkZWxheShjbW5fYmFz ZSArIFJFR19EU0lfMTRubV9QSFlfQ01OX0NUUkxfMSwgMHgyMCwgMTApOworCXdtYigpOwkvKiBt YWtlIHN1cmUgcmVnaXN0ZXIgY29tbWl0dGVkICovCisKKwlwbGxfd3JpdGUoY21uX2Jhc2UgKyBS RUdfRFNJXzE0bm1fUEhZX0NNTl9DVFJMXzEsIDApOworCXdtYigpOwkvKiBtYWtlIHN1cmUgcmVn aXN0ZXIgY29tbWl0dGVkICovCit9CisKK3N0YXRpYyB2b2lkIHBsbF9kYl9jb21taXRfMTRubShz dHJ1Y3QgZHNpX3BsbF8xNG5tICpwbGwsCisJCQkgICAgICAgc3RydWN0IGRzaV9wbGxfaW5wdXQg KnBpbiwKKwkJCSAgICAgICBzdHJ1Y3QgZHNpX3BsbF9vdXRwdXQgKnBvdXQpCit7CisJdm9pZCBf X2lvbWVtICpiYXNlID0gcGxsLT5tbWlvOworCXZvaWQgX19pb21lbSAqY21uX2Jhc2UgPSBwbGwt PnBoeV9jbW5fbW1pbzsKKwl1OCBkYXRhOworCisJREJHKCJEU0klZCBQTEwiLCBwbGwtPmlkKTsK KworCWRhdGEgPSBwb3V0LT5jbW5fbGRvX2NudHJsOworCXBsbF93cml0ZShjbW5fYmFzZSArIFJF R19EU0lfMTRubV9QSFlfQ01OX0xET19DTlRSTCwgZGF0YSk7CisKKwlwbGxfZGJfY29tbWl0X2Nv bW1vbihwbGwsIHBpbiwgcG91dCk7CisKKwlwbGxfMTRubV9zb2Z0d2FyZV9yZXNldChwbGwpOwor CisJZGF0YSA9IHBpbi0+ZHNpY2xrX3NlbDsgLyogc2V0IGRzaWNsa19zZWwgPSAxICAqLworCXBs bF93cml0ZShjbW5fYmFzZSArIFJFR19EU0lfMTRubV9QSFlfQ01OX0NMS19DRkcxLCBkYXRhKTsK KworCWRhdGEgPSAweGZmOyAvKiBkYXRhLCBjbGssIHBsbCBub3JtYWwgb3BlcmF0aW9uICovCisJ cGxsX3dyaXRlKGNtbl9iYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9DTU5fQ1RSTF8wLCBkYXRhKTsK KworCS8qIGNvbmZpZ3VyZSB0aGUgZnJlcXVlbmN5IGRlcGVuZGVudCBwbGwgcmVnaXN0ZXJzICov CisJZGF0YSA9IHBvdXQtPmRlY19zdGFydDsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRu bV9QSFlfUExMX0RFQ19TVEFSVCwgZGF0YSk7CisKKwlkYXRhID0gcG91dC0+ZGl2X2ZyYWNfc3Rh cnQgJiAweGZmOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfRElWX0ZS QUNfU1RBUlQxLCBkYXRhKTsKKwlkYXRhID0gKHBvdXQtPmRpdl9mcmFjX3N0YXJ0ID4+IDgpICYg MHhmZjsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX0RJVl9GUkFDX1NU QVJUMiwgZGF0YSk7CisJZGF0YSA9IChwb3V0LT5kaXZfZnJhY19zdGFydCA+PiAxNikgJiAweGY7 CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX1BMTF9ESVZfRlJBQ19TVEFSVDMs IGRhdGEpOworCisJZGF0YSA9IHBvdXQtPnBsbGxvY2tfY21wICYgMHhmZjsKKwlwbGxfd3JpdGUo YmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX1BMTExPQ0tfQ01QMSwgZGF0YSk7CisKKwlkYXRh ID0gKHBvdXQtPnBsbGxvY2tfY21wID4+IDgpICYgMHhmZjsKKwlwbGxfd3JpdGUoYmFzZSArIFJF R19EU0lfMTRubV9QSFlfUExMX1BMTExPQ0tfQ01QMiwgZGF0YSk7CisKKwlkYXRhID0gKHBvdXQt PnBsbGxvY2tfY21wID4+IDE2KSAmIDB4MzsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRu bV9QSFlfUExMX1BMTExPQ0tfQ01QMywgZGF0YSk7CisKKwlkYXRhID0gcGluLT5wbGxsb2NrX2Nu dCA8PCAxIHwgcGluLT5wbGxsb2NrX3JuZyA8PCAzOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RT SV8xNG5tX1BIWV9QTExfUExMTE9DS19DTVBfRU4sIGRhdGEpOworCisJZGF0YSA9IHBvdXQtPnBs bF92Y29fY291bnQgJiAweGZmOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9Q TExfVkNPX0NPVU5UMSwgZGF0YSk7CisJZGF0YSA9IChwb3V0LT5wbGxfdmNvX2NvdW50ID4+IDgp ICYgMHhmZjsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX1ZDT19DT1VO VDIsIGRhdGEpOworCisJZGF0YSA9IHBvdXQtPnBsbF9rdmNvX2NvdW50ICYgMHhmZjsKKwlwbGxf d3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX0tWQ09fQ09VTlQxLCBkYXRhKTsKKwlk YXRhID0gKHBvdXQtPnBsbF9rdmNvX2NvdW50ID4+IDgpICYgMHgzOworCXBsbF93cml0ZShiYXNl ICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfS1ZDT19DT1VOVDIsIGRhdGEpOworCisJZGF0YSA9IChw b3V0LT5wbGxfcG9zdGRpdiAtIDEpIDw8IDQgfCBwaW4tPnBsbF9scGZfcmVzMTsKKwlwbGxfd3Jp dGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX1BMTF9MUEYyX1BPU1RESVYsIGRhdGEpOwor CisJaWYgKHBpbi0+c3NjX2VuKQorCQlwbGxfZGJfY29tbWl0X3NzYyhwbGwpOworCisJd21iKCk7 CS8qIG1ha2Ugc3VyZSByZWdpc3RlciBjb21taXR0ZWQgKi8KK30KKworLyoKKyAqIFZDTyBjbG9j ayBDYWxsYmFja3MKKyAqLworc3RhdGljIGludCBkc2lfcGxsXzE0bm1fdmNvX3NldF9yYXRlKHN0 cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgICB1bnNpZ25lZCBs b25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtc21fZHNpX3BsbCAqcGxsID0gaHdfY2xrX3Rv X3BsbChodyk7CisJc3RydWN0IGRzaV9wbGxfMTRubSAqcGxsXzE0bm0gPSB0b19wbGxfMTRubShw bGwpOworCXN0cnVjdCBkc2lfcGxsX2lucHV0ICpwaW4gPSAmcGxsXzE0bm0tPmluOworCXN0cnVj dCBkc2lfcGxsX291dHB1dCAqcG91dCA9ICZwbGxfMTRubS0+b3V0OworCisJREJHKCJEU0kgUExM JWQgcmF0ZT0lbHUsIHBhcmVudCdzPSVsdSIsIHBsbF8xNG5tLT5pZCwgcmF0ZSwKKwkgICAgcGFy ZW50X3JhdGUpOworCisJcGxsXzE0bm0tPnZjb19jdXJyZW50X3JhdGUgPSByYXRlOworCXBsbF8x NG5tLT52Y29fcmVmX2Nsa19yYXRlID0gVkNPX1JFRl9DTEtfUkFURTsKKworCWRzaV9wbGxfMTRu bV9pbnB1dF9pbml0KHBsbF8xNG5tKTsKKworCS8qCisJICogVGhpcyBjb25maWd1cmVzIHRoZSBw b3N0IGRpdmlkZXIgaW50ZXJuYWwgdG8gdGhlIFZDTy4gSXQncworCSAqIGZpeGVkIHRvIGRpdmlk ZSBieSAxIGZvciBub3cuCisJICoKKwkgKiB0eF9iYW5kID0gcGxsX3Bvc3RkaXYuCisJICogMDog ZGl2aWRlZCBieSAxCisJICogMTogZGl2aWRlZCBieSAyCisJICogMjogZGl2aWRlZCBieSA0CisJ ICogMzogZGl2aWRlZCBieSA4CisJICovCisJcG91dC0+cGxsX3Bvc3RkaXYgPSBEU0lfUExMX0RF RkFVTFRfVkNPX1BPU1RESVY7CisKKwlwbGxfMTRubV9kZWNfZnJhY19jYWxjKHBsbF8xNG5tKTsK KworCWlmIChwaW4tPnNzY19lbikKKwkJcGxsXzE0bm1fc3NjX2NhbGMocGxsXzE0bm0pOworCisJ cGxsXzE0bm1fY2FsY192Y29fY291bnQocGxsXzE0bm0pOworCisJLyogY29tbWl0IHRoZSBzbGF2 ZSBEU0kgUExMIHJlZ2lzdGVycyBpZiB3ZSdyZSBtYXN0ZXIuIE5vdGUgdGhhdCB3ZQorCSAqIGRv bid0IGxvY2sgdGhlIHNsYXZlIFBMTC4gV2UganVzdCBlbnN1cmUgdGhhdCB0aGUgUExML1BIWSBy ZWdpc3RlcnMKKwkgKiBvZiB0aGUgbWFzdGVyIGFuZCBzbGF2ZSBhcmUgaWRlbnRpY2FsCisJICov CisJaWYgKHBsbF8xNG5tLT51YyA9PSBNU01fRFNJX1BIWV9NQVNURVIpIHsKKwkJc3RydWN0IGRz aV9wbGxfMTRubSAqcGxsXzE0bm1fc2xhdmUgPSBwbGxfMTRubS0+c2xhdmU7CisKKwkJcGxsX2Ri X2NvbW1pdF8xNG5tKHBsbF8xNG5tX3NsYXZlLCBwaW4sIHBvdXQpOworCX0KKworCXBsbF9kYl9j b21taXRfMTRubShwbGxfMTRubSwgcGluLCBwb3V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgdW5zaWduZWQgbG9uZyBkc2lfcGxsXzE0bm1fdmNvX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtf aHcgKmh3LAorCQkJCQkJICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBt c21fZHNpX3BsbCAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7CisJc3RydWN0IGRzaV9wbGxfMTRu bSAqcGxsXzE0bm0gPSB0b19wbGxfMTRubShwbGwpOworCXZvaWQgX19pb21lbSAqYmFzZSA9IHBs bF8xNG5tLT5tbWlvOworCXU2NCB2Y29fcmF0ZSwgbXVsdGlwbGllciA9IEJJVCgyMCk7CisJczMy IGRpdl9mcmFjX3N0YXJ0OworCXUzMiBkZWNfc3RhcnQ7CisJdTY0IHJlZl9jbGsgPSBwYXJlbnRf cmF0ZTsKKworCWRlY19zdGFydCA9IHBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX1BM TF9ERUNfU1RBUlQpOworCWRlY19zdGFydCAmPSAweDBmZjsKKworCURCRygiZGVjX3N0YXJ0ID0g JXgiLCBkZWNfc3RhcnQpOworCisJZGl2X2ZyYWNfc3RhcnQgPSAocGxsX3JlYWQoYmFzZSArIFJF R19EU0lfMTRubV9QSFlfUExMX0RJVl9GUkFDX1NUQVJUMykgJiAweGYpIDw8IDE2OworCWRpdl9m cmFjX3N0YXJ0IHw9IChwbGxfcmVhZChiYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9QTExfRElWX0ZS QUNfU1RBUlQyKSAmIDB4ZmYpIDw8IDg7CisJZGl2X2ZyYWNfc3RhcnQgfD0gcGxsX3JlYWQoYmFz ZSArIFJFR19EU0lfMTRubV9QSFlfUExMX0RJVl9GUkFDX1NUQVJUMSkgJiAweGZmOworCisJREJH KCJkaXZfZnJhY19zdGFydCA9ICV4IiwgZGl2X2ZyYWNfc3RhcnQpOworCisJdmNvX3JhdGUgPSBy ZWZfY2xrICogZGVjX3N0YXJ0OworCisJdmNvX3JhdGUgKz0gKChyZWZfY2xrICogZGl2X2ZyYWNf c3RhcnQpIC8gbXVsdGlwbGllcik7CisKKwkvKgorCSAqIFJlY2FsY3VsYXRpbmcgdGhlIHJhdGUg ZnJvbSBkZWNfc3RhcnQgYW5kIGZyYWNfc3RhcnQgZG9lc24ndCBlbmQgdXAKKwkgKiB0aGUgcmF0 ZSB3ZSBvcmlnaW5hbGx5IHNldC4gQ29udmVydCB0aGUgZnJlcSB0byBLSHosIHJvdW5kIGl0IHVw IGFuZAorCSAqIGNvbnZlcnQgaXQgYmFjayB0byBNSHouCisJICovCisJdmNvX3JhdGUgPSBESVZf Uk9VTkRfVVAodmNvX3JhdGUsIDEwMDApICogMTAwMDsKKworCURCRygicmV0dXJuaW5nIHZjbyBy YXRlID0gJWx1IiwgKHVuc2lnbmVkIGxvbmcpdmNvX3JhdGUpOworCisJcmV0dXJuICh1bnNpZ25l ZCBsb25nKXZjb19yYXRlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgY2xrX29w c19kc2lfcGxsXzE0bm1fdmNvID0geworCS5yb3VuZF9yYXRlID0gbXNtX2RzaV9wbGxfaGVscGVy X2Nsa19yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IGRzaV9wbGxfMTRubV92Y29fc2V0X3JhdGUs CisJLnJlY2FsY19yYXRlID0gZHNpX3BsbF8xNG5tX3Zjb19yZWNhbGNfcmF0ZSwKKwkucHJlcGFy ZSA9IG1zbV9kc2lfcGxsX2hlbHBlcl9jbGtfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0gbXNtX2Rz aV9wbGxfaGVscGVyX2Nsa191bnByZXBhcmUsCit9OworCisvKgorICogTjEgYW5kIE4yIHBvc3Qt ZGl2aWRlciBjbG9jayBjYWxsYmFja3MKKyAqLworI2RlZmluZSBkaXZfbWFzayh3aWR0aCkJKCgx IDw8ICh3aWR0aCkpIC0gMSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRzaV9wbGxfMTRubV9wb3N0 ZGl2X3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkJICAgICAgdW5zaWduZWQg bG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgZHNpX3BsbF8xNG5tX3Bvc3RkaXYgKnBvc3Rk aXYgPSB0b19wbGxfMTRubV9wb3N0ZGl2KGh3KTsKKwlzdHJ1Y3QgZHNpX3BsbF8xNG5tICpwbGxf MTRubSA9IHBvc3RkaXYtPnBsbDsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwbGxfMTRubS0+cGh5 X2Ntbl9tbWlvOworCXU4IHNoaWZ0ID0gcG9zdGRpdi0+c2hpZnQ7CisJdTggd2lkdGggPSBwb3N0 ZGl2LT53aWR0aDsKKwl1MzIgdmFsOworCisJREJHKCJEU0klZCBQTEwgcGFyZW50IHJhdGU9JWx1 IiwgcGxsXzE0bm0tPmlkLCBwYXJlbnRfcmF0ZSk7CisKKwl2YWwgPSBwbGxfcmVhZChiYXNlICsg UkVHX0RTSV8xNG5tX1BIWV9DTU5fQ0xLX0NGRzApID4+IHNoaWZ0OworCXZhbCAmPSBkaXZfbWFz ayh3aWR0aCk7CisKKwlyZXR1cm4gZGl2aWRlcl9yZWNhbGNfcmF0ZShodywgcGFyZW50X3JhdGUs IHZhbCwgTlVMTCwKKwkJCQkgICBwb3N0ZGl2LT5mbGFncyk7Cit9CisKK3N0YXRpYyBsb25nIGRz aV9wbGxfMTRubV9wb3N0ZGl2X3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCSAg ICB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICpwcmF0ZSkKK3sK KwlzdHJ1Y3QgZHNpX3BsbF8xNG5tX3Bvc3RkaXYgKnBvc3RkaXYgPSB0b19wbGxfMTRubV9wb3N0 ZGl2KGh3KTsKKwlzdHJ1Y3QgZHNpX3BsbF8xNG5tICpwbGxfMTRubSA9IHBvc3RkaXYtPnBsbDsK KworCURCRygiRFNJJWQgUExMIHBhcmVudCByYXRlPSVsdSIsIHBsbF8xNG5tLT5pZCwgcmF0ZSk7 CisKKwlyZXR1cm4gZGl2aWRlcl9yb3VuZF9yYXRlKGh3LCByYXRlLCBwcmF0ZSwgTlVMTCwKKwkJ CQkgIHBvc3RkaXYtPndpZHRoLAorCQkJCSAgcG9zdGRpdi0+ZmxhZ3MpOworfQorCitzdGF0aWMg aW50IGRzaV9wbGxfMTRubV9wb3N0ZGl2X3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNp Z25lZCBsb25nIHJhdGUsCisJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1 Y3QgZHNpX3BsbF8xNG5tX3Bvc3RkaXYgKnBvc3RkaXYgPSB0b19wbGxfMTRubV9wb3N0ZGl2KGh3 KTsKKwlzdHJ1Y3QgZHNpX3BsbF8xNG5tICpwbGxfMTRubSA9IHBvc3RkaXYtPnBsbDsKKwl2b2lk IF9faW9tZW0gKmJhc2UgPSBwbGxfMTRubS0+cGh5X2Ntbl9tbWlvOworCXNwaW5sb2NrX3QgKmxv Y2sgPSAmcGxsXzE0bm0tPnBvc3RkaXZfbG9jazsKKwl1OCBzaGlmdCA9IHBvc3RkaXYtPnNoaWZ0 OworCXU4IHdpZHRoID0gcG9zdGRpdi0+d2lkdGg7CisJdW5zaWduZWQgaW50IHZhbHVlOworCXVu c2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXUzMiB2YWw7CisKKwlEQkcoIkRTSSVkIFBMTCBwYXJl bnQgcmF0ZT0lbHUgcGFyZW50IHJhdGUgJWx1IiwgcGxsXzE0bm0tPmlkLCByYXRlLAorCSAgICBw YXJlbnRfcmF0ZSk7CisKKwl2YWx1ZSA9IGRpdmlkZXJfZ2V0X3ZhbChyYXRlLCBwYXJlbnRfcmF0 ZSwgTlVMTCwgcG9zdGRpdi0+d2lkdGgsCisJCQkJcG9zdGRpdi0+ZmxhZ3MpOworCisJc3Bpbl9s b2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOworCisJdmFsID0gcGxsX3JlYWQoYmFzZSArIFJFR19E U0lfMTRubV9QSFlfQ01OX0NMS19DRkcwKTsKKwl2YWwgJj0gfihkaXZfbWFzayh3aWR0aCkgPDwg c2hpZnQpOworCisJdmFsIHw9IHZhbHVlIDw8IHNoaWZ0OworCXBsbF93cml0ZShiYXNlICsgUkVH X0RTSV8xNG5tX1BIWV9DTU5fQ0xLX0NGRzAsIHZhbCk7CisKKwkvKiBJZiB3ZSdyZSBtYXN0ZXIg aW4gZHVhbCBEU0kgbW9kZSwgdGhlbiB0aGUgc2xhdmUgUExMJ3MgcG9zdC1kaXZpZGVycworCSAq IGZvbGxvdyB0aGUgbWFzdGVyJ3MgcG9zdCBkaXZpZGVycworCSAqLworCWlmIChwbGxfMTRubS0+ dWMgPT0gTVNNX0RTSV9QSFlfTUFTVEVSKSB7CisJCXN0cnVjdCBkc2lfcGxsXzE0bm0gKnBsbF8x NG5tX3NsYXZlID0gcGxsXzE0bm0tPnNsYXZlOworCQl2b2lkIF9faW9tZW0gKnNsYXZlX2Jhc2Ug PSBwbGxfMTRubV9zbGF2ZS0+cGh5X2Ntbl9tbWlvOworCisJCXBsbF93cml0ZShzbGF2ZV9iYXNl ICsgUkVHX0RTSV8xNG5tX1BIWV9DTU5fQ0xLX0NGRzAsIHZhbCk7CisJfQorCisJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBjbGtfb3BzIGNsa19vcHNfZHNpX3BsbF8xNG5tX3Bvc3RkaXYgPSB7CisJLnJl Y2FsY19yYXRlID0gZHNpX3BsbF8xNG5tX3Bvc3RkaXZfcmVjYWxjX3JhdGUsCisJLnJvdW5kX3Jh dGUgPSBkc2lfcGxsXzE0bm1fcG9zdGRpdl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IGRzaV9w bGxfMTRubV9wb3N0ZGl2X3NldF9yYXRlLAorfTsKKworLyoKKyAqIFBMTCBDYWxsYmFja3MKKyAq LworCitzdGF0aWMgaW50IGRzaV9wbGxfMTRubV9lbmFibGVfc2VxKHN0cnVjdCBtc21fZHNpX3Bs bCAqcGxsKQoreworCXN0cnVjdCBkc2lfcGxsXzE0bm0gKnBsbF8xNG5tID0gdG9fcGxsXzE0bm0o cGxsKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwbGxfMTRubS0+bW1pbzsKKwl2b2lkIF9faW9t ZW0gKmNtbl9iYXNlID0gcGxsXzE0bm0tPnBoeV9jbW5fbW1pbzsKKwlib29sIGxvY2tlZDsKKwor CURCRygiIik7CisKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX1ZSRUZf Q0ZHMSwgMHgxMCk7CisJcGxsX3dyaXRlKGNtbl9iYXNlICsgUkVHX0RTSV8xNG5tX1BIWV9DTU5f UExMX0NOVFJMLCAxKTsKKworCWxvY2tlZCA9IHBsbF8xNG5tX3BvbGxfZm9yX3JlYWR5KHBsbF8x NG5tLCBQT0xMX01BWF9SRUFEUywKKwkJCQkJIFBPTExfVElNRU9VVF9VUyk7CisKKwlpZiAodW5s aWtlbHkoIWxvY2tlZCkpCisJCWRldl9lcnIoJnBsbF8xNG5tLT5wZGV2LT5kZXYsICJEU0kgUExM IGxvY2sgZmFpbGVkXG4iKTsKKwllbHNlCisJCURCRygiRFNJIFBMTCBsb2NrIHN1Y2Nlc3MiKTsK KworCXJldHVybiBsb2NrZWQgPyAwIDogLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgZHNpX3Bs bF8xNG5tX2Rpc2FibGVfc2VxKHN0cnVjdCBtc21fZHNpX3BsbCAqcGxsKQoreworCXN0cnVjdCBk c2lfcGxsXzE0bm0gKnBsbF8xNG5tID0gdG9fcGxsXzE0bm0ocGxsKTsKKwl2b2lkIF9faW9tZW0g KmNtbl9iYXNlID0gcGxsXzE0bm0tPnBoeV9jbW5fbW1pbzsKKworCURCRygiIik7CisKKwlwbGxf d3JpdGUoY21uX2Jhc2UgKyBSRUdfRFNJXzE0bm1fUEhZX0NNTl9QTExfQ05UUkwsIDApOworfQor CitzdGF0aWMgdm9pZCBkc2lfcGxsXzE0bm1fc2F2ZV9zdGF0ZShzdHJ1Y3QgbXNtX2RzaV9wbGwg KnBsbCkKK3sKKwlzdHJ1Y3QgZHNpX3BsbF8xNG5tICpwbGxfMTRubSA9IHRvX3BsbF8xNG5tKHBs bCk7CisJc3RydWN0IHBsbF8xNG5tX2NhY2hlZF9zdGF0ZSAqY2FjaGVkX3N0YXRlID0gJnBsbF8x NG5tLT5jYWNoZWRfc3RhdGU7CisJdm9pZCBfX2lvbWVtICpjbW5fYmFzZSA9IHBsbF8xNG5tLT5w aHlfY21uX21taW87CisJdTMyIGRhdGE7CisKKwlkYXRhID0gcGxsX3JlYWQoY21uX2Jhc2UgKyBS RUdfRFNJXzE0bm1fUEhZX0NNTl9DTEtfQ0ZHMCk7CisKKwljYWNoZWRfc3RhdGUtPm4xcG9zdGRp diA9IGRhdGEgJiAweGY7CisJY2FjaGVkX3N0YXRlLT5uMnBvc3RkaXYgPSAoZGF0YSA+PiA0KSAm IDB4ZjsKKworCURCRygiRFNJJWQgUExMIHNhdmUgc3RhdGUgJXggJXgiLCBwbGxfMTRubS0+aWQs CisJICAgIGNhY2hlZF9zdGF0ZS0+bjFwb3N0ZGl2LCBjYWNoZWRfc3RhdGUtPm4ycG9zdGRpdik7 CisKKwljYWNoZWRfc3RhdGUtPnZjb19yYXRlID0gY2xrX2h3X2dldF9yYXRlKCZwbGwtPmNsa19o dyk7Cit9CisKK3N0YXRpYyBpbnQgZHNpX3BsbF8xNG5tX3Jlc3RvcmVfc3RhdGUoc3RydWN0IG1z bV9kc2lfcGxsICpwbGwpCit7CisJc3RydWN0IGRzaV9wbGxfMTRubSAqcGxsXzE0bm0gPSB0b19w bGxfMTRubShwbGwpOworCXN0cnVjdCBwbGxfMTRubV9jYWNoZWRfc3RhdGUgKmNhY2hlZF9zdGF0 ZSA9ICZwbGxfMTRubS0+Y2FjaGVkX3N0YXRlOworCXZvaWQgX19pb21lbSAqY21uX2Jhc2UgPSBw bGxfMTRubS0+cGh5X2Ntbl9tbWlvOworCXUzMiBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBk c2lfcGxsXzE0bm1fdmNvX3NldF9yYXRlKCZwbGwtPmNsa19odywKKwkJCQkJY2FjaGVkX3N0YXRl LT52Y29fcmF0ZSwgMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwbGxfMTRubS0+cGRldi0+ ZGV2LAorCQkJInJlc3RvcmUgdmNvIHJhdGUgZmFpbGVkLiByZXQ9JWRcbiIsIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJZGF0YSA9IGNhY2hlZF9zdGF0ZS0+bjFwb3N0ZGl2IHwgKGNhY2hl ZF9zdGF0ZS0+bjJwb3N0ZGl2IDw8IDQpOworCisJREJHKCJEU0klZCBQTEwgcmVzdG9yZSBzdGF0 ZSAleCAleCIsIHBsbF8xNG5tLT5pZCwKKwkgICAgY2FjaGVkX3N0YXRlLT5uMXBvc3RkaXYsIGNh Y2hlZF9zdGF0ZS0+bjJwb3N0ZGl2KTsKKworCXBsbF93cml0ZShjbW5fYmFzZSArIFJFR19EU0lf MTRubV9QSFlfQ01OX0NMS19DRkcwLCBkYXRhKTsKKworCS8qIGFsc28gcmVzdG9yZSBwb3N0LWRp dmlkZXJzIGZvciBzbGF2ZSBEU0kgUExMICovCisJaWYgKHBsbF8xNG5tLT51YyA9PSBNU01fRFNJ X1BIWV9NQVNURVIpIHsKKwkJc3RydWN0IGRzaV9wbGxfMTRubSAqcGxsXzE0bm1fc2xhdmUgPSBw bGxfMTRubS0+c2xhdmU7CisJCXZvaWQgX19pb21lbSAqc2xhdmVfYmFzZSA9IHBsbF8xNG5tX3Ns YXZlLT5waHlfY21uX21taW87CisKKwkJcGxsX3dyaXRlKHNsYXZlX2Jhc2UgKyBSRUdfRFNJXzE0 bm1fUEhZX0NNTl9DTEtfQ0ZHMCwgZGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgZHNpX3BsbF8xNG5tX3NldF91c2VjYXNlKHN0cnVjdCBtc21fZHNpX3BsbCAqcGxsLAor CQkJCSAgICBlbnVtIG1zbV9kc2lfcGh5X3VzZWNhc2UgdWMpCit7CisJc3RydWN0IGRzaV9wbGxf MTRubSAqcGxsXzE0bm0gPSB0b19wbGxfMTRubShwbGwpOworCXZvaWQgX19pb21lbSAqYmFzZSA9 IHBsbF8xNG5tLT5tbWlvOworCXUzMiBjbGtidWZscl9lbiwgYmFuZGdhcCA9IDA7CisKKwlzd2l0 Y2ggKHVjKSB7CisJY2FzZSBNU01fRFNJX1BIWV9TVEFOREFMT05FOgorCQljbGtidWZscl9lbiA9 IDB4MTsKKwkJYnJlYWs7CisJY2FzZSBNU01fRFNJX1BIWV9NQVNURVI6CisJCWNsa2J1ZmxyX2Vu ID0gMHgzOworCQlwbGxfMTRubS0+c2xhdmUgPSBwbGxfMTRubV9saXN0WyhwbGxfMTRubS0+aWQg KyAxKSAlIERTSV9NQVhdOworCQlicmVhazsKKwljYXNlIE1TTV9EU0lfUEhZX1NMQVZFOgorCQlj bGtidWZscl9lbiA9IDB4MDsKKwkJYmFuZGdhcCA9IDB4MzsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzE0bm1f UEhZX1BMTF9DTEtCVUZMUl9FTiwgY2xrYnVmbHJfZW4pOworCWlmIChiYW5kZ2FwKQorCQlwbGxf d3JpdGUoYmFzZSArIFJFR19EU0lfMTRubV9QSFlfUExMX1BMTF9CQU5ER0FQLCBiYW5kZ2FwKTsK KworCXBsbF8xNG5tLT51YyA9IHVjOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHNp X3BsbF8xNG5tX2dldF9wcm92aWRlcihzdHJ1Y3QgbXNtX2RzaV9wbGwgKnBsbCwKKwkJCQkgICAg IHN0cnVjdCBjbGsgKipieXRlX2Nsa19wcm92aWRlciwKKwkJCQkgICAgIHN0cnVjdCBjbGsgKipw aXhlbF9jbGtfcHJvdmlkZXIpCit7CisJc3RydWN0IGRzaV9wbGxfMTRubSAqcGxsXzE0bm0gPSB0 b19wbGxfMTRubShwbGwpOworCisJaWYgKGJ5dGVfY2xrX3Byb3ZpZGVyKQorCQkqYnl0ZV9jbGtf cHJvdmlkZXIgPSBwbGxfMTRubS0+cHJvdmlkZWRfY2xrc1tEU0lfQllURV9QTExfQ0xLXTsKKwlp ZiAocGl4ZWxfY2xrX3Byb3ZpZGVyKQorCQkqcGl4ZWxfY2xrX3Byb3ZpZGVyID0KKwkJCQlwbGxf MTRubS0+cHJvdmlkZWRfY2xrc1tEU0lfUElYRUxfUExMX0NMS107CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIGRzaV9wbGxfMTRubV9kZXN0cm95KHN0cnVjdCBtc21fZHNpX3BsbCAqcGxs KQoreworCXN0cnVjdCBkc2lfcGxsXzE0bm0gKnBsbF8xNG5tID0gdG9fcGxsXzE0bm0ocGxsKTsK KworCW1zbV9kc2lfcGxsX2hlbHBlcl91bnJlZ2lzdGVyX2Nsa3MocGxsXzE0bm0tPnBkZXYsCisJ CQkJCSAgIHBsbF8xNG5tLT5jbGtzLAorCQkJCQkgICBwbGxfMTRubS0+bnVtX2Nsa3MpOworfQor CitzdGF0aWMgc3RydWN0IGNsayAqcGxsXzE0bm1fcG9zdGRpdl9yZWdpc3RlcihzdHJ1Y3QgZHNp X3BsbF8xNG5tICpwbGxfMTRubSwKKwkJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkg ICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxh Z3MsCisJCQkJCSAgICAgdTggc2hpZnQpCit7CisJc3RydWN0IGRzaV9wbGxfMTRubV9wb3N0ZGl2 ICpwbGxfcG9zdGRpdjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGxsXzE0bm0tPnBkZXYtPmRl djsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBwb3N0ZGl2X2luaXQgPSB7CisJCS5wYXJlbnRfbmFt ZXMgPSAoY29uc3QgY2hhciAqW10pIHsgcGFyZW50X25hbWUgfSwKKwkJLm51bV9wYXJlbnRzID0g MSwKKwkJLm5hbWUgPSBuYW1lLAorCQkuZmxhZ3MgPSBmbGFncywKKwkJLm9wcyA9ICZjbGtfb3Bz X2RzaV9wbGxfMTRubV9wb3N0ZGl2LAorCX07CisKKwlwbGxfcG9zdGRpdiA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqcGxsX3Bvc3RkaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBsbF9wb3N0 ZGl2KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXBsbF9wb3N0ZGl2LT5wbGwgPSBw bGxfMTRubTsKKwlwbGxfcG9zdGRpdi0+c2hpZnQgPSBzaGlmdDsKKwkvKiBib3RoIE4xIGFuZCBO MiBwb3N0ZGl2aWRlcnMgYXJlIDQgYml0cyB3aWRlICovCisJcGxsX3Bvc3RkaXYtPndpZHRoID0g NDsKKwkvKiByYW5nZSBvZiBlYWNoIGRpdmlkZXIgaXMgZnJvbSAxIHRvIDE1ICovCisJcGxsX3Bv c3RkaXYtPmZsYWdzID0gQ0xLX0RJVklERVJfT05FX0JBU0VEOworCXBsbF9wb3N0ZGl2LT5ody5p bml0ID0gJnBvc3RkaXZfaW5pdDsKKworCXJldHVybiBjbGtfcmVnaXN0ZXIoZGV2LCAmcGxsX3Bv c3RkaXYtPmh3KTsKK30KKworc3RhdGljIGludCBwbGxfMTRubV9yZWdpc3RlcihzdHJ1Y3QgZHNp X3BsbF8xNG5tICpwbGxfMTRubSkKK3sKKwljaGFyIGNsa19uYW1lWzMyXSwgcGFyZW50MVszMl0s IHZjb19uYW1lWzMyXTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSB2Y29faW5pdCA9IHsKKwkJLnBh cmVudF9uYW1lcyA9IChjb25zdCBjaGFyICpbXSl7ICJ4byIgfSwKKwkJLm51bV9wYXJlbnRzID0g MSwKKwkJLm5hbWUgPSB2Y29fbmFtZSwKKwkJLmZsYWdzID0gQ0xLX0lHTk9SRV9VTlVTRUQsCisJ CS5vcHMgPSAmY2xrX29wc19kc2lfcGxsXzE0bm1fdmNvLAorCX07CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJnBsbF8xNG5tLT5wZGV2LT5kZXY7CisJc3RydWN0IGNsayAqKmNsa3MgPSBwbGxfMTRu bS0+Y2xrczsKKwlzdHJ1Y3QgY2xrICoqcHJvdmlkZWRfY2xrcyA9IHBsbF8xNG5tLT5wcm92aWRl ZF9jbGtzOworCWludCBudW0gPSAwOworCWludCByZXQ7CisKKwlEQkcoIkRTSSVkIiwgcGxsXzE0 bm0tPmlkKTsKKworCXNucHJpbnRmKHZjb19uYW1lLCAzMiwgImRzaSVkdmNvX2NsayIsIHBsbF8x NG5tLT5pZCk7CisJcGxsXzE0bm0tPmJhc2UuY2xrX2h3LmluaXQgPSAmdmNvX2luaXQ7CisJY2xr c1tudW0rK10gPSBjbGtfcmVnaXN0ZXIoZGV2LCAmcGxsXzE0bm0tPmJhc2UuY2xrX2h3KTsKKwor CXNucHJpbnRmKGNsa19uYW1lLCAzMiwgImRzaSVkbjFfcG9zdGRpdl9jbGsiLCBwbGxfMTRubS0+ aWQpOworCXNucHJpbnRmKHBhcmVudDEsIDMyLCAiZHNpJWR2Y29fY2xrIiwgcGxsXzE0bm0tPmlk KTsKKworCS8qIE4xIHBvc3RkaXYsIGJpdHMgMC0zIGluIFJFR19EU0lfMTRubV9QSFlfQ01OX0NM S19DRkcwICovCisJY2xrc1tudW0rK10gPSBwbGxfMTRubV9wb3N0ZGl2X3JlZ2lzdGVyKHBsbF8x NG5tLCBjbGtfbmFtZSwgcGFyZW50MSwKKwkJCQkJCUNMS19TRVRfUkFURV9QQVJFTlQsIDApOwor CisJc25wcmludGYoY2xrX25hbWUsIDMyLCAiZHNpJWRwbGxieXRlIiwgcGxsXzE0bm0tPmlkKTsK KwlzbnByaW50ZihwYXJlbnQxLCAzMiwgImRzaSVkbjFfcG9zdGRpdl9jbGsiLCBwbGxfMTRubS0+ aWQpOworCisJLyogRFNJIEJ5dGUgY2xvY2sgPSBWQ09fQ0xLIC8gTjEgLyA4ICovCisJY2xrc1tu dW0rK10gPSBwcm92aWRlZF9jbGtzW0RTSV9CWVRFX1BMTF9DTEtdID0KKwkJCWNsa19yZWdpc3Rl cl9maXhlZF9mYWN0b3IoZGV2LCBjbGtfbmFtZSwKKwkJCQkJCSAgcGFyZW50MSwgQ0xLX1NFVF9S QVRFX1BBUkVOVCwKKwkJCQkJCSAgMSwgOCk7CisKKwlzbnByaW50ZihjbGtfbmFtZSwgMzIsICJk c2klZG4xX3Bvc3RkaXZieTJfY2xrIiwgcGxsXzE0bm0tPmlkKTsKKwlzbnByaW50ZihwYXJlbnQx LCAzMiwgImRzaSVkbjFfcG9zdGRpdl9jbGsiLCBwbGxfMTRubS0+aWQpOworCisJLyoKKwkgKiBT a2lwIHRoZSBtdXggZm9yIG5vdywgZm9yY2UgRFNJQ0xLX1NFTCB0byAxLCBBZGQgYSAvMiBkaXZp ZGVyCisJICogb24gdGhlIHdheS4gRG9uJ3QgbGV0IGl0IHNldCBwYXJlbnQuCisJICovCisJY2xr c1tudW0rK10gPSBjbGtfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKGRldiwgY2xrX25hbWUsCisJCQkJ cGFyZW50MSwgMCwgMSwgMik7CisKKwlzbnByaW50ZihjbGtfbmFtZSwgMzIsICJkc2klZHBsbCIs IHBsbF8xNG5tLT5pZCk7CisJc25wcmludGYocGFyZW50MSwgMzIsICJkc2klZG4xX3Bvc3RkaXZi eTJfY2xrIiwgcGxsXzE0bm0tPmlkKTsKKworCS8qIERTSSBwaXhlbCBjbG9jayA9IFZDT19DTEsg LyBOMSAvIDIgLyBOMgorCSAqIFRoaXMgaXMgdGhlIG91dHB1dCBvZiBOMiBwb3N0LWRpdmlkZXIs IGJpdHMgNC03IGluCisJICogUkVHX0RTSV8xNG5tX1BIWV9DTU5fQ0xLX0NGRzAuIERvbid0IGxl dCBpdCBzZXQgcGFyZW50LgorCSAqLworCWNsa3NbbnVtKytdID0gcHJvdmlkZWRfY2xrc1tEU0lf UElYRUxfUExMX0NMS10gPQorCQkJCXBsbF8xNG5tX3Bvc3RkaXZfcmVnaXN0ZXIocGxsXzE0bm0s IGNsa19uYW1lLAorCQkJCQkJCSAgcGFyZW50MSwgMCwgNCk7CisKKwlwbGxfMTRubS0+bnVtX2Ns a3MgPSBudW07CisKKwlwbGxfMTRubS0+Y2xrX2RhdGEuY2xrX251bSA9IE5VTV9QUk9WSURFRF9D TEtTOworCXBsbF8xNG5tLT5jbGtfZGF0YS5jbGtzID0gcHJvdmlkZWRfY2xrczsKKworCXJldCA9 IG9mX2Nsa19hZGRfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0 LAorCQkJCSAgJnBsbF8xNG5tLT5jbGtfZGF0YSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byByZWdpc3RlciBjbGsgcHJvdmlkZXI6ICVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXNtX2RzaV9wbGwgKm1zbV9k c2lfcGxsXzE0bm1faW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaWQpCit7 CisJc3RydWN0IGRzaV9wbGxfMTRubSAqcGxsXzE0bm07CisJc3RydWN0IG1zbV9kc2lfcGxsICpw bGw7CisJaW50IHJldDsKKworCWlmICghcGRldikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7 CisKKwlwbGxfMTRubSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBsbF8xNG5t KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbGxfMTRubSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisKKwlEQkcoIlBMTCVkIiwgaWQpOworCisJcGxsXzE0bm0tPnBkZXYgPSBwZGV2OworCXBs bF8xNG5tLT5pZCA9IGlkOworCXBsbF8xNG5tX2xpc3RbaWRdID0gcGxsXzE0bm07CisKKwlwbGxf MTRubS0+cGh5X2Ntbl9tbWlvID0gbXNtX2lvcmVtYXAocGRldiwgImRzaV9waHkiLCAiRFNJX1BI WSIpOworCWlmIChJU19FUlJfT1JfTlVMTChwbGxfMTRubS0+cGh5X2Ntbl9tbWlvKSkgeworCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIENNTiBQSFkgYmFzZVxuIik7CisJCXJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCXBsbF8xNG5tLT5tbWlvID0gbXNtX2lvcmVt YXAocGRldiwgImRzaV9wbGwiLCAiRFNJX1BMTCIpOworCWlmIChJU19FUlJfT1JfTlVMTChwbGxf MTRubS0+bW1pbykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBQTEwg YmFzZVxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCXNwaW5fbG9ja19p bml0KCZwbGxfMTRubS0+cG9zdGRpdl9sb2NrKTsKKworCXBsbCA9ICZwbGxfMTRubS0+YmFzZTsK KwlwbGwtPm1pbl9yYXRlID0gVkNPX01JTl9SQVRFOworCXBsbC0+bWF4X3JhdGUgPSBWQ09fTUFY X1JBVEU7CisJcGxsLT5nZXRfcHJvdmlkZXIgPSBkc2lfcGxsXzE0bm1fZ2V0X3Byb3ZpZGVyOwor CXBsbC0+ZGVzdHJveSA9IGRzaV9wbGxfMTRubV9kZXN0cm95OworCXBsbC0+ZGlzYWJsZV9zZXEg PSBkc2lfcGxsXzE0bm1fZGlzYWJsZV9zZXE7CisJcGxsLT5zYXZlX3N0YXRlID0gZHNpX3BsbF8x NG5tX3NhdmVfc3RhdGU7CisJcGxsLT5yZXN0b3JlX3N0YXRlID0gZHNpX3BsbF8xNG5tX3Jlc3Rv cmVfc3RhdGU7CisJcGxsLT5zZXRfdXNlY2FzZSA9IGRzaV9wbGxfMTRubV9zZXRfdXNlY2FzZTsK KworCXBsbF8xNG5tLT52Y29fZGVsYXkgPSAxOworCisJcGxsLT5lbl9zZXFfY250ID0gMTsKKwlw bGwtPmVuYWJsZV9zZXFzWzBdID0gZHNpX3BsbF8xNG5tX2VuYWJsZV9zZXE7CisKKwlyZXQgPSBw bGxfMTRubV9yZWdpc3RlcihwbGxfMTRubSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2 LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgUExMOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIEVS Ul9QVFIocmV0KTsKKwl9CisKKwlyZXR1cm4gcGxsOworfQotLSAKVGhlIFF1YWxjb21tIElubm92 YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwK aG9zdGVkIGJ5IFRoZSBMaW51eCBGb3VuZGF0aW9uCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK