From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xinliang Liu Subject: [PATCH v4 07/11] drm/hisilicon: Add designware dsi encoder driver Date: Sat, 6 Feb 2016 11:24:54 +0800 Message-ID: <1454729098-79807-8-git-send-email-xinliang.liu@linaro.org> References: <1454729098-79807-1-git-send-email-xinliang.liu@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1454729098-79807-1-git-send-email-xinliang.liu@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, daniel@ffwll.ch, robh@kernel.org, daniel@fooishbar.org, architt@codeaurora.org, airlied@linux.ie, corbet@lwn.net, catalin.marinas@arm.com, will.deacon@arm.com, emil.l.velikov@gmail.com Cc: andy.green@linaro.org, xuyiping@hisilicon.com, guodong.xu@linaro.org, linux-doc@vger.kernel.org, w.f@huawei.com, zourongrong@huawei.com, linuxarm@huawei.com, xuwei5@hisilicon.com, bintian.wang@huawei.com, haojian.zhuang@linaro.org, benjamin.gaignard@linaro.org, puck.chen@hisilicon.com, liguozhu@hisilicon.com, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org QWRkIERlc2lnbldhcmUgTUlQSSBEU0kgSG9zdCBDb250cm9sbGVyIHYxLjAyIGVuY29kZXIgZHJp dmVyCmZvciBoaTYyMjAgU29DLgoKdjQ6IE5vbmUuCnYzOgotIFJlbmFtZSBmaWxlIG5hbWUgdG8g ZHdfZHJtX2RzaS5jCi0gTWFrZSBlbmNvZGVyIHR5cGUgYXMgRFJNX01PREVfRU5DT0RFUl9EU0ku Ci0gQSBmZXcgY2xlYW51cC4KdjI6Ci0gUmVtb3ZlIGFidHJhY3Rpb24gbGF5ZXIuCgpTaWduZWQt b2ZmLWJ5OiBYaW5saWFuZyBMaXUgPHhpbmxpYW5nLmxpdUBsaW5hcm8ub3JnPgpTaWduZWQtb2Zm LWJ5OiBYaW53ZWkgS29uZyA8a29uZy5rb25neGlud2VpQGhpc2lsaWNvbi5jb20+ClNpZ25lZC1v ZmYtYnk6IEFuZHkgR3JlZW4gPGFuZHkuZ3JlZW5AbGluYXJvLm9yZz4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vaGlzaWxpY29uL2tpcmluL0tjb25maWcgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vaGlzaWxpY29uL2tpcmluL01ha2VmaWxlICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJt L2hpc2lsaWNvbi9raXJpbi9kd19kcm1fZHNpLmMgfCA3NDMgKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmluL2R3X2RzaV9yZWcuaCB8ICA4 MyArKysKIDQgZmlsZXMgY2hhbmdlZCwgODI5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmluL2R3X2Ry bV9kc2kuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2ly aW4vZHdfZHNpX3JlZy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9r aXJpbi9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9LY29uZmlnCmlu ZGV4IDNhYzRiOGVkZWFjMS4uZGUwZDQ1NGM1YzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaGlzaWxpY29uL2tpcmluL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNv bi9raXJpbi9LY29uZmlnCkBAIC00LDYgKzQsNyBAQCBjb25maWcgRFJNX0hJU0lfS0lSSU4KIAlz ZWxlY3QgRFJNX0tNU19IRUxQRVIKIAlzZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCiAJc2VsZWN0 IERSTV9LTVNfQ01BX0hFTFBFUgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKIAloZWxwCiAJICBDaG9v c2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBoaXNpbGljb24gS2lyaW4gY2hpcHNldHMoaGk2 MjIwKS4KIAkgIElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBraXJp bi1kcm0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmluL01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9NYWtlZmlsZQppbmRleCAyYTYx YWIwMDZkZGIuLjVkY2QwZDQzMjhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2hpc2ls aWNvbi9raXJpbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmlu L01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAoga2lyaW4tZHJtLXkgOj0ga2lyaW5fZHJtX2Rydi5v IFwKLQkgICAgICAga2lyaW5fZHJtX2FkZS5vCisJICAgICAgIGtpcmluX2RybV9hZGUubyBcCisJ ICAgICAgIGR3X2RybV9kc2kubwogCiBvYmotJChDT05GSUdfRFJNX0hJU0lfS0lSSU4pICs9IGtp cmluLWRybS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmluL2R3 X2RybV9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2lyaW4vZHdfZHJtX2RzaS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2M5NDIzNTM3YjcxCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9kd19kcm1f ZHNpLmMKQEAgLTAsMCArMSw3NDMgQEAKKy8qCisgKiBEZXNpZ25XYXJlIE1JUEkgRFNJIEhvc3Qg Q29udHJvbGxlciB2MS4wMiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgTGluYXJv IExpbWl0ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBIaXNpbGljb24gTGltaXRlZC4K KyAqCisgKiBBdXRob3I6CisgKglYaW5saWFuZyBMaXUgPHoubGl1eGlubGlhbmdAaGlzaWxpY29u LmNvbT4KKyAqCVhpbmxpYW5nIExpdSA8eGlubGlhbmcubGl1QGxpbmFyby5vcmc+CisgKglYaW53 ZWkgS29uZyA8a29uZy5rb25neGlud2VpQGhpc2lsaWNvbi5jb20+CisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4 L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisKKyNpbmNsdWRlIDxk cm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXJfc2xhdmUuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKworI2luY2x1ZGUgImR3X2RzaV9y ZWcuaCIKKworI2RlZmluZSBNQVhfVFhfRVNDX0NMSwkJICAgKDEwKQorI2RlZmluZSBST1VORCh4 LCB5KSAoKHgpIC8gKHkpICsgKCh4KSAlICh5KSAqIDEwIC8gKHkpID49IDUgPyAxIDogMCkpCisj ZGVmaW5lIFBIWV9SRUZfQ0xLX1JBVEUgICAxOTIwMDAwMAorI2RlZmluZSBQSFlfUkVGX0NMS19Q RVJJT0RfUFMgKDEwMDAwMDAwMDAgLyAoUEhZX1JFRl9DTEtfUkFURSAvIDEwMDApKQorCisjZGVm aW5lIGVuY29kZXJfdG9fZHNpKGVuY29kZXIpIFwKKwljb250YWluZXJfb2YoZW5jb2Rlciwgc3Ry dWN0IGR3X2RzaSwgZW5jb2RlcikKKyNkZWZpbmUgaG9zdF90b19kc2koaG9zdCkgXAorCWNvbnRh aW5lcl9vZihob3N0LCBzdHJ1Y3QgZHdfZHNpLCBob3N0KQorCitzdHJ1Y3QgbWlwaV9waHlfcGFy YW1zIHsKKwl1MzIgY2xrX3RfbHB4OworCXUzMiBjbGtfdF9oc19wcmVwYXJlOworCXUzMiBjbGtf dF9oc196ZXJvOworCXUzMiBjbGtfdF9oc190cmlhbDsKKwl1MzIgY2xrX3Rfd2FrZXVwOworCXUz MiBkYXRhX3RfbHB4OworCXUzMiBkYXRhX3RfaHNfcHJlcGFyZTsKKwl1MzIgZGF0YV90X2hzX3pl cm87CisJdTMyIGRhdGFfdF9oc190cmlhbDsKKwl1MzIgZGF0YV90X3RhX2dvOworCXUzMiBkYXRh X3RfdGFfZ2V0OworCXUzMiBkYXRhX3Rfd2FrZXVwOworCXUzMiBoc3R4X2NrZ19zZWw7CisJdTMy IHBsbF9mYmRfZGl2NWY7CisJdTMyIHBsbF9mYmRfZGl2MWY7CisJdTMyIHBsbF9mYmRfMnA7CisJ dTMyIHBsbF9lbmJ3dDsKKwl1MzIgcGxsX2ZiZF9wOworCXUzMiBwbGxfZmJkX3M7CisJdTMyIHBs bF9wcmVfZGl2MXA7CisJdTMyIHBsbF9wcmVfcDsKKwl1MzIgcGxsX3Zjb183NTBNOworCXUzMiBw bGxfbHBmX3JzOworCXUzMiBwbGxfbHBmX2NzOworCXUzMiBjbGtscDJoc190aW1lOworCXUzMiBj bGtoczJscF90aW1lOworCXUzMiBscDJoc190aW1lOworCXUzMiBoczJscF90aW1lOworCXUzMiBj bGtfdG9fZGF0YV9kZWxheTsKKwl1MzIgZGF0YV90b19jbGtfZGVsYXk7CisJdTMyIGxhbmVfYnl0 ZV9jbGtfa0h6OworCXUzMiBjbGtfZGl2aXNpb247Cit9OworCitzdHJ1Y3QgZHNpX2h3X2N0eCB7 CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBjbGsgKmRzaV9jZmdfY2xrOworfTsKKwor c3RydWN0IGR3X2RzaSB7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgY3VyX21vZGU7CisJc3RydWN0IGRzaV9od19jdHggKmN0eDsKKwlzdHJ1 Y3QgbWlwaV9waHlfcGFyYW1zIHBoeTsKKworCXUzMiBsYW5lczsKKwllbnVtIG1pcGlfZHNpX3Bp eGVsX2Zvcm1hdCBmb3JtYXQ7CisJdW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzOworCWJvb2wgZW5h YmxlOworfTsKKworc3RydWN0IGRzaV9kYXRhIHsKKwlzdHJ1Y3QgZHdfZHNpIGRzaTsKKwlzdHJ1 Y3QgZHNpX2h3X2N0eCBjdHg7Cit9OworCitzdHJ1Y3QgZHNpX3BoeV9yYW5nZSB7CisJdTMyIG1p bl9yYW5nZV9rSHo7CisJdTMyIG1heF9yYW5nZV9rSHo7CisJdTMyIHBsbF92Y29fNzUwTTsKKwl1 MzIgaHN0eF9ja2dfc2VsOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkc2lfcGh5X3Jhbmdl IGRwaHlfcmFuZ2VfaW5mb1tdID0geworCXsgICA0Njg3NSwgICAgNjI1MDAsICAgMSwgICAgNyB9 LAorCXsgICA2MjUwMCwgICAgOTM3NTAsICAgMCwgICAgNyB9LAorCXsgICA5Mzc1MCwgICAxMjUw MDAsICAgMSwgICAgNiB9LAorCXsgIDEyNTAwMCwgICAxODc1MDAsICAgMCwgICAgNiB9LAorCXsg IDE4NzUwMCwgICAyNTAwMDAsICAgMSwgICAgNSB9LAorCXsgIDI1MDAwMCwgICAzNzUwMDAsICAg MCwgICAgNSB9LAorCXsgIDM3NTAwMCwgICA1MDAwMDAsICAgMSwgICAgNCB9LAorCXsgIDUwMDAw MCwgICA3NTAwMDAsICAgMCwgICAgNCB9LAorCXsgIDc1MDAwMCwgIDEwMDAwMDAsICAgMSwgICAg MCB9LAorCXsgMTAwMDAwMCwgIDE1MDAwMDAsICAgMCwgICAgMCB9Cit9OworCitzdGF0aWMgdm9p ZCBkc2lfZ2V0X3BoeV9wYXJhbXModTMyIHBoeV9mcmVxX2tIeiwKKwkJCSAgICAgICBzdHJ1Y3Qg bWlwaV9waHlfcGFyYW1zICpwaHkpCit7CisJdTMyIHVpID0gMDsKKwl1MzIgY2ZnX2Nsa19wcyA9 IFBIWV9SRUZfQ0xLX1BFUklPRF9QUzsKKwl1MzIgaSA9IDA7CisJdTMyIHFfcGxsID0gMTsKKwl1 MzIgbV9wbGwgPSAwOworCXUzMiBuX3BsbCA9IDA7CisJdTMyIHJfcGxsID0gMTsKKwl1MzIgbV9u ID0gMDsKKwl1MzIgbV9uX2ludCA9IDA7CisJdTY0IGZfa0h6OworCXU2NCB0ZW1wOworCXU2NCB0 bXBfa0h6ID0gcGh5X2ZyZXFfa0h6OworCisJZG8geworCQlmX2tIeiA9IHRtcF9rSHo7CisKKwkJ LyogRmluZCB0aGUgUExMIGNsb2NrIHJhbmdlIGZyb20gdGhlIHRhYmxlICovCisJCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGRwaHlfcmFuZ2VfaW5mbyk7IGkrKykKKwkJCWlmIChmX2tIeiA+ PSBkcGh5X3JhbmdlX2luZm9baV0ubWluX3JhbmdlX2tIeiAmJgorCQkJICAgIGZfa0h6IDw9IGRw aHlfcmFuZ2VfaW5mb1tpXS5tYXhfcmFuZ2Vfa0h6KQorCQkJCWJyZWFrOworCisJCWlmIChpID09 IEFSUkFZX1NJWkUoZHBoeV9yYW5nZV9pbmZvKSkgeworCQkJRFJNX0VSUk9SKCIlbGxka0h6IG91 dCBvZiByYW5nZVxuIiwgZl9rSHopOworCQkJcmV0dXJuOworCQl9CisKKwkJcGh5LT5wbGxfdmNv Xzc1ME0gPSBkcGh5X3JhbmdlX2luZm9baV0ucGxsX3Zjb183NTBNOworCQlwaHktPmhzdHhfY2tn X3NlbCA9IGRwaHlfcmFuZ2VfaW5mb1tpXS5oc3R4X2NrZ19zZWw7CisKKwkJaWYgKHBoeS0+aHN0 eF9ja2dfc2VsIDw9IDcgJiYKKwkJICAgIHBoeS0+aHN0eF9ja2dfc2VsID49IDQpCisJCQlxX3Bs bCA9IDB4MTAgPj4gKDcgLSBwaHktPmhzdHhfY2tnX3NlbCk7CisKKwkJdGVtcCA9IGZfa0h6ICog KHU2NClxX3BsbCAqICh1NjQpY2ZnX2Nsa19wczsKKwkJbV9uX2ludCA9IHRlbXAgLyAodTY0KTEw MDAwMDAwMDA7CisJCW1fbiA9ICh0ZW1wICUgKHU2NCkxMDAwMDAwMDAwKSAvICh1NjQpMTAwMDAw MDAwOworCisJCWlmIChtX25faW50ICUgMiA9PSAwKSB7CisJCQlpZiAobV9uICogNiA+PSA1MCkg eworCQkJCW5fcGxsID0gMjsKKwkJCQltX3BsbCA9IChtX25faW50ICsgMSkgKiBuX3BsbDsKKwkJ CX0gZWxzZSBpZiAobV9uICogNiA+PSAzMCkgeworCQkJCW5fcGxsID0gMzsKKwkJCQltX3BsbCA9 IG1fbl9pbnQgKiBuX3BsbCArIDI7CisJCQl9IGVsc2UgeworCQkJCW5fcGxsID0gMTsKKwkJCQlt X3BsbCA9IG1fbl9pbnQgKiBuX3BsbDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChtX24gKiA2 ID49IDUwKSB7CisJCQkJbl9wbGwgPSAxOworCQkJCW1fcGxsID0gKG1fbl9pbnQgKyAxKSAqIG5f cGxsOworCQkJfSBlbHNlIGlmIChtX24gKiA2ID49IDMwKSB7CisJCQkJbl9wbGwgPSAxOworCQkJ CW1fcGxsID0gKG1fbl9pbnQgKyAxKSAqIG5fcGxsOworCQkJfSBlbHNlIGlmIChtX24gKiA2ID49 IDEwKSB7CisJCQkJbl9wbGwgPSAzOworCQkJCW1fcGxsID0gbV9uX2ludCAqIG5fcGxsICsgMTsK KwkJCX0gZWxzZSB7CisJCQkJbl9wbGwgPSAyOworCQkJCW1fcGxsID0gbV9uX2ludCAqIG5fcGxs OworCQkJfQorCQl9CisKKwkJaWYgKG5fcGxsID09IDEpIHsKKwkJCXBoeS0+cGxsX2ZiZF9wID0g MDsKKwkJCXBoeS0+cGxsX3ByZV9kaXYxcCA9IDE7CisJCX0gZWxzZSB7CisJCQlwaHktPnBsbF9m YmRfcCA9IG5fcGxsOworCQkJcGh5LT5wbGxfcHJlX2RpdjFwID0gMDsKKwkJfQorCisJCWlmIChw aHktPnBsbF9mYmRfMnAgPD0gNyAmJiBwaHktPnBsbF9mYmRfMnAgPj0gNCkKKwkJCXJfcGxsID0g MHgxMCA+PiAoNyAtIHBoeS0+cGxsX2ZiZF8ycCk7CisKKwkJaWYgKG1fcGxsID09IDIpIHsKKwkJ CXBoeS0+cGxsX3ByZV9wID0gMDsKKwkJCXBoeS0+cGxsX2ZiZF9zID0gMDsKKwkJCXBoeS0+cGxs X2ZiZF9kaXYxZiA9IDA7CisJCQlwaHktPnBsbF9mYmRfZGl2NWYgPSAxOworCQl9IGVsc2UgaWYg KG1fcGxsID49IDIgKiAyICogcl9wbGwgJiYgbV9wbGwgPD0gMiAqIDQgKiByX3BsbCkgeworCQkJ cGh5LT5wbGxfcHJlX3AgPSBtX3BsbCAvICgyICogcl9wbGwpOworCQkJcGh5LT5wbGxfZmJkX3Mg PSAwOworCQkJcGh5LT5wbGxfZmJkX2RpdjFmID0gMTsKKwkJCXBoeS0+cGxsX2ZiZF9kaXY1ZiA9 IDA7CisJCX0gZWxzZSBpZiAobV9wbGwgPj0gMiAqIDUgKiByX3BsbCAmJiBtX3BsbCA8PSAyICog MTUwICogcl9wbGwpIHsKKwkJCWlmICgoKG1fcGxsIC8gKDIgKiByX3BsbCkpICUgMikgPT0gMCkg eworCQkJCXBoeS0+cGxsX3ByZV9wID0KKwkJCQkJKG1fcGxsIC8gKDIgKiByX3BsbCkpIC8gMiAt IDE7CisJCQkJcGh5LT5wbGxfZmJkX3MgPQorCQkJCQkobV9wbGwgLyAoMiAqIHJfcGxsKSkgJSAy ICsgMjsKKwkJCX0gZWxzZSB7CisJCQkJcGh5LT5wbGxfcHJlX3AgPQorCQkJCQkobV9wbGwgLyAo MiAqIHJfcGxsKSkgLyAyOworCQkJCXBoeS0+cGxsX2ZiZF9zID0KKwkJCQkJKG1fcGxsIC8gKDIg KiByX3BsbCkpICUgMjsKKwkJCX0KKwkJCXBoeS0+cGxsX2ZiZF9kaXYxZiA9IDA7CisJCQlwaHkt PnBsbF9mYmRfZGl2NWYgPSAwOworCQl9IGVsc2UgeworCQkJcGh5LT5wbGxfcHJlX3AgPSAwOwor CQkJcGh5LT5wbGxfZmJkX3MgPSAwOworCQkJcGh5LT5wbGxfZmJkX2RpdjFmID0gMDsKKwkJCXBo eS0+cGxsX2ZiZF9kaXY1ZiA9IDE7CisJCX0KKworCQlmX2tIeiA9ICh1NjQpMTAwMDAwMDAwMCAq ICh1NjQpbV9wbGwgLworCQkJKCh1NjQpY2ZnX2Nsa19wcyAqICh1NjQpbl9wbGwgKiAodTY0KXFf cGxsKTsKKworCQlpZiAoZl9rSHogPj0gcGh5X2ZyZXFfa0h6KQorCQkJYnJlYWs7CisKKwkJdG1w X2tIeiArPSAxMDsKKworCX0gd2hpbGUgKDEpOworCisJdWkgPSAxMDAwMDAwIC8gZl9rSHo7CisK KwlwaHktPmNsa190X2xweCA9IFJPVU5EKDUwLCA4ICogdWkpOworCXBoeS0+Y2xrX3RfaHNfcHJl cGFyZSA9IFJPVU5EKDEzMywgMTYgKiB1aSkgLSAxOworCisJcGh5LT5jbGtfdF9oc196ZXJvID0g Uk9VTkQoMjYyLCA4ICogdWkpOworCXBoeS0+Y2xrX3RfaHNfdHJpYWwgPSAyICogKFJPVU5EKDYw LCA4ICogdWkpIC0gMSk7CisJcGh5LT5jbGtfdF93YWtldXAgPSBST1VORCgxMDAwMDAwLCAoY2Zn X2Nsa19wcyAvIDEwMDApIC0gMSk7CisJaWYgKHBoeS0+Y2xrX3Rfd2FrZXVwID4gMHhmZikKKwkJ cGh5LT5jbGtfdF93YWtldXAgPSAweGZmOworCXBoeS0+ZGF0YV90X3dha2V1cCA9IHBoeS0+Y2xr X3Rfd2FrZXVwOworCXBoeS0+ZGF0YV90X2xweCA9IHBoeS0+Y2xrX3RfbHB4OworCXBoeS0+ZGF0 YV90X2hzX3ByZXBhcmUgPSBST1VORCgxMjUgKyAxMCAqIHVpLCAxNiAqIHVpKSAtIDE7CisJcGh5 LT5kYXRhX3RfaHNfemVybyA9IFJPVU5EKDEwNSArIDYgKiB1aSwgOCAqIHVpKTsKKwlwaHktPmRh dGFfdF9oc190cmlhbCA9IDIgKiAoUk9VTkQoNjAgKyA0ICogdWksIDggKiB1aSkgLSAxKTsKKwlw aHktPmRhdGFfdF90YV9nbyA9IDM7CisJcGh5LT5kYXRhX3RfdGFfZ2V0ID0gNDsKKworCXBoeS0+ cGxsX2VuYnd0ID0gMTsKKwlwaHktPmNsa2xwMmhzX3RpbWUgPSBST1VORCg0MDcsIDggKiB1aSkg KyAxMjsKKwlwaHktPmNsa2hzMmxwX3RpbWUgPSBST1VORCgxMDUgKyAxMiAqIHVpLCA4ICogdWkp OworCXBoeS0+bHAyaHNfdGltZSA9IFJPVU5EKDI0MCArIDEyICogdWksIDggKiB1aSkgKyAxOwor CXBoeS0+aHMybHBfdGltZSA9IHBoeS0+Y2xraHMybHBfdGltZTsKKwlwaHktPmNsa190b19kYXRh X2RlbGF5ID0gMSArIHBoeS0+Y2xrbHAyaHNfdGltZTsKKwlwaHktPmRhdGFfdG9fY2xrX2RlbGF5 ID0gUk9VTkQoNjAgKyA1MiAqIHVpLCA4ICogdWkpICsKKwkJCQlwaHktPmNsa2hzMmxwX3RpbWU7 CisKKwlwaHktPmxhbmVfYnl0ZV9jbGtfa0h6ID0gZl9rSHogLyA4OworCXBoeS0+Y2xrX2Rpdmlz aW9uID0gcGh5LT5sYW5lX2J5dGVfY2xrX2tIeiAvIE1BWF9UWF9FU0NfQ0xLOworCWlmIChwaHkt PmxhbmVfYnl0ZV9jbGtfa0h6ICUgTUFYX1RYX0VTQ19DTEspCisJCXBoeS0+Y2xrX2RpdmlzaW9u Kys7Cit9CisKK3N0YXRpYyB1MzIgZHNpX2dldF9kcGlfY29sb3JfY29kaW5nKGVudW0gbWlwaV9k c2lfcGl4ZWxfZm9ybWF0IGZvcm1hdCkKK3sKKwl1MzIgdmFsOworCisJLyogVE9ETzogb25seSBz dXBwb3J0IFJHQjg4OCBub3csIHRvIHN1cHBvcnQgbW9yZSAqLworCXN3aXRjaCAoZm9ybWF0KSB7 CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQl2YWwgPSBEU0lfMjRCSVRTXzE7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCXZhbCA9IERTSV8yNEJJVFNfMTsKKwkJYnJlYWs7CisJfQorCisJ cmV0dXJuIHZhbDsKK30KKworLyoKKyAqIGRzaSBwaHkgcmVnIHdyaXRlIGZ1bmN0aW9uCisgKi8K K3N0YXRpYyB2b2lkIGRzaV9waHlfdHN0X3NldCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiByZWcs IHUzMiB2YWwpCit7CisJd3JpdGVsKHJlZywgYmFzZSArIFBIWV9UU1RfQ1RSTDEpOworCS8qIHJl ZyBhZGRyIHdyaXR0ZW4gYXQgZmlyc3QgKi8KKwl3bWIoKTsKKwl3cml0ZWwoMHgwMiwgYmFzZSAr IFBIWV9UU1RfQ1RSTDApOworCS8qIGNtZDEgc2VudCBmb3Igd3JpdGUgKi8KKwl3bWIoKTsKKwl3 cml0ZWwoMHgwMCwgYmFzZSArIFBIWV9UU1RfQ1RSTDApOworCS8qIGNtZDIgc2VudCBmb3Igd3Jp dGUgKi8KKwl3bWIoKTsKKwl3cml0ZWwodmFsLCBiYXNlICsgUEhZX1RTVF9DVFJMMSk7CisJLyog VGhlbiB3cml0ZSBkYXRhICovCisJd21iKCk7CisJd3JpdGVsKDB4MDIsIGJhc2UgKyBQSFlfVFNU X0NUUkwwKTsKKwkvKiBjbWQyIHNlbnQgZm9yIHdyaXRlICovCisJd21iKCk7CisJd3JpdGVsKDB4 MDAsIGJhc2UgKyBQSFlfVFNUX0NUUkwwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3NldF9taXBp X3BoeSh2b2lkIF9faW9tZW0gKmJhc2UsCisJCQkgICAgIHN0cnVjdCBtaXBpX3BoeV9wYXJhbXMg KnBoeSwKKwkJCSAgICAgdTMyIGxhbmVzKQoreworCXUzMiBkZWxheV9jb3VudDsKKwl1MzIgdmFs OworCXUzMiBpOworCisJLyogc2V0IGxhbmVzIHZhbHVlICovCisJdmFsID0gKGxhbmVzIC0gMSkg fCAoUEhZX1NUT1BfV0FJVF9USU1FIDw8IDgpOworCXdyaXRlbCh2YWwsIGJhc2UgKyBQSFlfSUZf Q0ZHKTsKKworCS8qIHNldCBwaHkgY2xrIGRpdmlzaW9uICovCisJdmFsID0gcmVhZGwoYmFzZSAr IENMS01HUl9DRkcpIHwgcGh5LT5jbGtfZGl2aXNpb247CisJd3JpdGVsKHZhbCwgYmFzZSArIENM S01HUl9DRkcpOworCisJLyogY2xlYW4gdXAgcGh5IHNldCBwYXJhbSAqLworCXdyaXRlbCgwLCBi YXNlICsgUEhZX1JTVFopOworCXdyaXRlbCgwLCBiYXNlICsgUEhZX1RTVF9DVFJMMCk7CisJd3Jp dGVsKDEsIGJhc2UgKyBQSFlfVFNUX0NUUkwwKTsKKwl3cml0ZWwoMCwgYmFzZSArIFBIWV9UU1Rf Q1RSTDApOworCisJLyogY2xvY2sgbGFuZSBUaW1pbmcgY29udHJvbCAtIFRMUFggKi8KKwlkc2lf cGh5X3RzdF9zZXQoYmFzZSwgMHgxMDAxMCwgcGh5LT5jbGtfdF9scHgpOworCisJLyogY2xvY2sg bGFuZSBUaW1pbmcgY29udHJvbCAtIFRIUy1QUkVQQVJFICovCisJZHNpX3BoeV90c3Rfc2V0KGJh c2UsIDB4MTAwMTEsIHBoeS0+Y2xrX3RfaHNfcHJlcGFyZSk7CisKKwkvKiBjbG9jayBsYW5lIFRp bWluZyBjb250cm9sIC0gVEhTLVpFUk8gKi8KKwlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDAx MiwgcGh5LT5jbGtfdF9oc196ZXJvKTsKKworCS8qIGNsb2NrIGxhbmUgVGltaW5nIGNvbnRyb2wg LSBUSFMtVFJBSUwgKi8KKwlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDAxMywgcGh5LT5jbGtf dF9oc190cmlhbCk7CisKKwkvKiBjbG9jayBsYW5lIFRpbWluZyBjb250cm9sIC0gVFdBS0VVUCAq LworCWRzaV9waHlfdHN0X3NldChiYXNlLCAweDEwMDE0LCBwaHktPmNsa190X3dha2V1cCk7CisK KwkvKiBkYXRhIGxhbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGFuZXM7IGkrKykgeworCQkvKiBU aW1pbmcgY29udHJvbCAtIFRMUFggKi8KKwkJZHNpX3BoeV90c3Rfc2V0KGJhc2UsIDB4MTAwMjAg KyAoaSA8PCA0KSwgcGh5LT5kYXRhX3RfbHB4KTsKKworCQkvKiBUaW1pbmcgY29udHJvbCAtIFRI Uy1QUkVQQVJFICovCisJCWRzaV9waHlfdHN0X3NldChiYXNlLCAweDEwMDIxICsgKGkgPDwgNCks CisJCQkJcGh5LT5kYXRhX3RfaHNfcHJlcGFyZSk7CisKKwkJLyogVGltaW5nIGNvbnRyb2wgLSBU SFMtWkVSTyAqLworCQlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDAyMiArIChpIDw8IDQpLCBw aHktPmRhdGFfdF9oc196ZXJvKTsKKworCQkvKiBUaW1pbmcgY29udHJvbCAtIFRIUy1UUkFJTCAq LworCQlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDAyMyArIChpIDw8IDQpLCBwaHktPmRhdGFf dF9oc190cmlhbCk7CisKKwkJLyogVGltaW5nIGNvbnRyb2wgLSBUVEEtR08gKi8KKwkJZHNpX3Bo eV90c3Rfc2V0KGJhc2UsIDB4MTAwMjQgKyAoaSA8PCA0KSwgcGh5LT5kYXRhX3RfdGFfZ28pOwor CisJCS8qIFRpbWluZyBjb250cm9sIC0gVFRBLUdFVCAqLworCQlkc2lfcGh5X3RzdF9zZXQoYmFz ZSwgMHgxMDAyNSArIChpIDw8IDQpLCBwaHktPmRhdGFfdF90YV9nZXQpOworCisJCS8qIFRpbWlu ZyBjb250cm9sIC0gVFdBS0VVUCAqLworCQlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDAyNiAr IChpIDw8IDQpLCBwaHktPmRhdGFfdF93YWtldXApOworCX0KKworCS8qIHBoeXNpY2FsIGNvbmZp Z3VyYXRpb24gSSAqLworCWRzaV9waHlfdHN0X3NldChiYXNlLCAweDEwMDYwLCBwaHktPmhzdHhf Y2tnX3NlbCk7CisKKwkvKiBwaHlzaWNhbCBjb25maWd1cmF0aW9uIHBsbCBJSSAqLworCXZhbCA9 IChwaHktPnBsbF9mYmRfZGl2NWYgPDwgNSkgKyAocGh5LT5wbGxfZmJkX2RpdjFmIDw8IDQpICsK KwkJCQkocGh5LT5wbGxfZmJkXzJwIDw8IDEpICsgcGh5LT5wbGxfZW5id3Q7CisJZHNpX3BoeV90 c3Rfc2V0KGJhc2UsIDB4MTAwNjMsIHZhbCk7CisKKwkvKiBwaHlzaWNhbCBjb25maWd1cmF0aW9u IHBsbCBJSSAqLworCWRzaV9waHlfdHN0X3NldChiYXNlLCAweDEwMDY0LCBwaHktPnBsbF9mYmRf cCk7CisKKwkvKiBwaHlzaWNhbCBjb25maWd1cmF0aW9uIHBsbCBJSUkgKi8KKwlkc2lfcGh5X3Rz dF9zZXQoYmFzZSwgMHgxMDA2NSwgcGh5LT5wbGxfZmJkX3MpOworCisJLyogcGh5c2ljYWwgY29u ZmlndXJhdGlvbiBwbGwgSVYgKi8KKwl2YWwgPSAocGh5LT5wbGxfcHJlX2RpdjFwIDw8IDcpICsg cGh5LT5wbGxfcHJlX3A7CisJZHNpX3BoeV90c3Rfc2V0KGJhc2UsIDB4MTAwNjYsIHZhbCk7CisK KwkvKiBwaHlzaWNhbCBjb25maWd1cmF0aW9uIHBsbCBWICovCisJdmFsID0gKHBoeS0+cGxsX3Zj b183NTBNIDw8IDQpICsgKHBoeS0+cGxsX2xwZl9ycyA8PCAyKSArCisJCQkJCXBoeS0+cGxsX2xw Zl9jcyArIEJJVCg1KTsKKwlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDA2NywgdmFsKTsKKwor CXdyaXRlbChCSVQoMiksIGJhc2UgKyBQSFlfUlNUWik7CisJdWRlbGF5KDEpOworCXdyaXRlbChC SVQoMikgfCBCSVQoMCksIGJhc2UgKyBQSFlfUlNUWik7CisJdWRlbGF5KDEpOworCXdyaXRlbChC SVQoMikgfCBCSVQoMSkgfCBCSVQoMCksIGJhc2UgKyBQSFlfUlNUWik7CisJdXNsZWVwX3Jhbmdl KDEwMDAsIDE1MDApOworCisJLyogd2FpdCBmb3IgcGh5J3MgY2xvY2sgcmVhZHkgKi8KKwlkZWxh eV9jb3VudCA9IDEwMDsKKwl3aGlsZSAoZGVsYXlfY291bnQtLSkgeworCQl2YWwgPSByZWFkbChi YXNlICsgIFBIWV9TVEFUVVMpOworCQlpZiAoKEJJVCgwKSB8IEJJVCgyKSkgJiB2YWwpCisJCQli cmVhazsKKworCQl1ZGVsYXkoMSk7CisJfQorCisJaWYgKCFkZWxheV9jb3VudCkKKwkJRFJNX0lO Rk8oInBoeWxvY2sgYW5kIHBoeXN0b3BzdGF0ZWNsa2xhbmUgaXMgbm90IHJlYWR5LlxuIik7CisK KwkvKiBzZXQgbHAgYW5kIGhzIHN3aXRjaGluZyBwYXJhbXMKKwkgKi8KKwlkd191cGRhdGVfYml0 cyhiYXNlICsgUEhZX1RNUl9DRkcsIDI0LCBNQVNLKDgpLCBwaHktPmhzMmxwX3RpbWUpOworCWR3 X3VwZGF0ZV9iaXRzKGJhc2UgKyBQSFlfVE1SX0NGRywgMTYsIE1BU0soOCksIHBoeS0+bHAyaHNf dGltZSk7CisJZHdfdXBkYXRlX2JpdHMoYmFzZSArIFBIWV9UTVJfTFBDTEtfQ0ZHLCAxNiwgTUFT SygxMCksCisJCSAgICAgICBwaHktPmNsa2hzMmxwX3RpbWUpOworCWR3X3VwZGF0ZV9iaXRzKGJh c2UgKyBQSFlfVE1SX0xQQ0xLX0NGRywgMCwgTUFTSygxMCksCisJCSAgICAgICBwaHktPmNsa2xw MmhzX3RpbWUpOworCWR3X3VwZGF0ZV9iaXRzKGJhc2UgKyBDTEtfREFUQV9UTVJfQ0ZHLCA4LCBN QVNLKDgpLAorCQkgICAgICAgcGh5LT5kYXRhX3RvX2Nsa19kZWxheSk7CisJZHdfdXBkYXRlX2Jp dHMoYmFzZSArIENMS19EQVRBX1RNUl9DRkcsIDAsIE1BU0soOCksCisJCSAgICAgICBwaHktPmNs a190b19kYXRhX2RlbGF5KTsKK30KKworc3RhdGljIHZvaWQgZHNpX3NldF9tb2RlX3RpbWluZyh2 b2lkIF9faW9tZW0gKmJhc2UsCisJCQkJdTMyIGxhbmVfYnl0ZV9jbGtfa0h6LAorCQkJCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCWVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0 IGZvcm1hdCkKK3sKKwl1MzIgaGZwLCBoYnAsIGhzdywgdmZwLCB2YnAsIHZzdzsKKwl1MzIgaGxp bmVfdGltZTsKKwl1MzIgaHNhX3RpbWU7CisJdTMyIGhicF90aW1lOworCXUzMiBwaXhlbF9jbGtf a0h6OworCWludCBodG90LCB2dG90OworCXUzMiB2YWw7CisJdTY0IHRtcDsKKworCS8qIERTSSBj b2xvciBjb2Rpbmcgc2V0dGluZyAqLworCXZhbCA9IGRzaV9nZXRfZHBpX2NvbG9yX2NvZGluZyhm b3JtYXQpOworCXdyaXRlbCh2YWwsIGJhc2UgKyBEUElfQ09MT1JfQ09ESU5HKTsKKworCS8qIERT SSBmb3JtYXQgYW5kIHBvbCBzZXR0aW5nICovCisJdmFsID0gKG1vZGUtPmZsYWdzICYgRFJNX01P REVfRkxBR19OSFNZTkMgPyAxIDogMCkgPDwgMjsKKwl2YWwgfD0gKG1vZGUtPmZsYWdzICYgRFJN X01PREVfRkxBR19OVlNZTkMgPyAxIDogMCkgPDwgMTsKKwl3cml0ZWwodmFsLCBiYXNlICsgIERQ SV9DRkdfUE9MKTsKKworCS8qCisJICogVGhlIERTSSBJUCBhY2NlcHRzIHZlcnRpY2FsIHRpbWlu ZyB1c2luZyBsaW5lcyBhcyBub3JtYWwsCisJICogYnV0IGhvcml6b250YWwgdGltaW5nIGlzIGEg bWl4dHVyZSBvZiBwaXhlbC1jbG9ja3MgZm9yIHRoZQorCSAqIGFjdGl2ZSByZWdpb24gYW5kIGJ5 dGUtbGFuZSBjbG9ja3MgZm9yIHRoZSBibGFua2luZy1yZWxhdGVkCisJICogdGltaW5ncy4gIGhm cCBpcyBzcGVjaWZpZWQgYXMgdGhlIHRvdGFsIGhsaW5lX3RpbWUgaW4gYnl0ZS0KKwkgKiBsYW5l IGNsb2NrcyBtaW51cyBoc2EsIGhicCBhbmQgYWN0aXZlLgorCSAqLworCXBpeGVsX2Nsa19rSHog PSBtb2RlLT5jbG9jazsKKwlodG90ID0gbW9kZS0+aHRvdGFsOworCXZ0b3QgPSBtb2RlLT52dG90 YWw7CisJaGZwID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKKwloYnAgPSBt b2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7CisJaHN3ID0gbW9kZS0+aHN5bmNfZW5kIC0g bW9kZS0+aHN5bmNfc3RhcnQ7CisJdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlz cGxheTsKKwl2YnAgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7CisJdnN3ID0gbW9k ZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJaWYgKHZzdyA+IDE1KSB7CisJCURS TV9ERUJVR19EUklWRVIoInZzdyBleGNlZWRlZCAxNVxuIik7CisJCXZzdyA9IDE1OworCX0KKwor CWhzYV90aW1lID0gKGhzdyAqIGxhbmVfYnl0ZV9jbGtfa0h6KSAvIHBpeGVsX2Nsa19rSHo7CisJ aGJwX3RpbWUgPSAoaGJwICogbGFuZV9ieXRlX2Nsa19rSHopIC8gcGl4ZWxfY2xrX2tIejsKKwl0 bXAgPSAodTY0KWh0b3QgKiAodTY0KWxhbmVfYnl0ZV9jbGtfa0h6OworCWhsaW5lX3RpbWUgPSBE SVZfUk9VTkRfVVAodG1wLCBwaXhlbF9jbGtfa0h6KTsKKworCS8qIGFsbCBzcGVjaWZpZWQgaW4g Ynl0ZS1sYW5lIGNsb2NrcyAqLworCXdyaXRlbChoc2FfdGltZSwgYmFzZSArIFZJRF9IU0FfVElN RSk7CisJd3JpdGVsKGhicF90aW1lLCBiYXNlICsgVklEX0hCUF9USU1FKTsKKwl3cml0ZWwoaGxp bmVfdGltZSwgYmFzZSArIFZJRF9ITElORV9USU1FKTsKKworCXdyaXRlbCh2c3csIGJhc2UgKyBW SURfVlNBX0xJTkVTKTsKKwl3cml0ZWwodmJwLCBiYXNlICsgVklEX1ZCUF9MSU5FUyk7CisJd3Jp dGVsKHZmcCwgYmFzZSArIFZJRF9WRlBfTElORVMpOworCXdyaXRlbChtb2RlLT52ZGlzcGxheSwg YmFzZSArIFZJRF9WQUNUSVZFX0xJTkVTKTsKKwl3cml0ZWwobW9kZS0+aGRpc3BsYXksIGJhc2Ug KyBWSURfUEtUX1NJWkUpOworCisJRFJNX0RFQlVHX0RSSVZFUigiaHRvdD0lZCwgaGZwPSVkLCBo YnA9JWQsIGhzdz0lZFxuIiwKKwkJCSBodG90LCBoZnAsIGhicCwgaHN3KTsKKwlEUk1fREVCVUdf RFJJVkVSKCJ2dG9sPSVkLCB2ZnA9JWQsIHZicD0lZCwgdnN3PSVkXG4iLAorCQkJIHZ0b3QsIHZm cCwgdmJwLCB2c3cpOworCURSTV9ERUJVR19EUklWRVIoImhzYV90aW1lPSVkLCBoYnBfdGltZT0l ZCwgaGxpbmVfdGltZT0lZFxuIiwKKwkJCSBoc2FfdGltZSwgaGJwX3RpbWUsIGhsaW5lX3RpbWUp OworfQorCitzdGF0aWMgdm9pZCBkc2lfc2V0X3ZpZGVvX21vZGVfdHlwZSh2b2lkIF9faW9tZW0g KmJhc2UsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJdTMyIHZhbDsKKwl1MzIg bW9kZV9tYXNrID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IE1JUElfRFNJX01PREVfVklERU9fQlVS U1QgfAorCQlNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0U7CisJdTMyIG5vbl9idXJzdF9z eW5jX3B1bHNlID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8CisJCU1JUElfRFNJX01PREVfVklERU9f U1lOQ19QVUxTRTsKKwl1MzIgbm9uX2J1cnN0X3N5bmNfZXZlbnQgPSBNSVBJX0RTSV9NT0RFX1ZJ REVPOworCisJLyoKKwkgKiBjaG9vc2UgdmlkZW8gdHlwZQorCSAqLworCWlmICgoZmxhZ3MgJiBt b2RlX21hc2spID09IG5vbl9idXJzdF9zeW5jX3B1bHNlKQorCQl2YWwgPSBEU0lfTk9OX0JVUlNU X1NZTkNfUFVMU0VTOworCWVsc2UgaWYgKChmbGFncyAmIG1vZGVfbWFzaykgPT0gbm9uX2J1cnN0 X3N5bmNfZXZlbnQpCisJCXZhbCA9IERTSV9OT05fQlVSU1RfU1lOQ19FVkVOVFM7CisJZWxzZQor CQl2YWwgPSBEU0lfQlVSU1RfU1lOQ19QVUxTRVNfMTsKKworCXdyaXRlbCh2YWwsIGJhc2UgKyBW SURfTU9ERV9DRkcpOworfQorCitzdGF0aWMgdm9pZCBkc2lfbWlwaV9pbml0KHN0cnVjdCBkd19k c2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZHNpX2h3X2N0eCAqY3R4ID0gZHNpLT5jdHg7CisJc3RydWN0 IG1pcGlfcGh5X3BhcmFtcyAqcGh5ID0gJmRzaS0+cGh5OworCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlID0gJmRzaS0+Y3VyX21vZGU7CisJdTMyIGJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zv cm1hdF90b19icHAoZHNpLT5mb3JtYXQpOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGN0eC0+YmFz ZTsKKwl1MzIgZHBoeV9mcmVxX2tIejsKKworCS8qIGNvdW50IHBoeSBwYXJhbXMgKi8KKwlkcGh5 X2ZyZXFfa0h6ID0gbW9kZS0+Y2xvY2sgKiBicHAgLyBkc2ktPmxhbmVzOworCWRzaV9nZXRfcGh5 X3BhcmFtcyhkcGh5X2ZyZXFfa0h6LCBwaHkpOworCisJLyogcmVzZXQgQ29yZSAqLworCXdyaXRl bCgwLCBiYXNlICsgUFdSX1VQKTsKKworCS8qIHNldCBwaHkgcGFyYW1zICovCisJZHNpX3NldF9t aXBpX3BoeShiYXNlLCBwaHksIGRzaS0+bGFuZXMpOworCisJLyogc2V0IGRzaSBtb2RlICovCisJ ZHNpX3NldF9tb2RlX3RpbWluZyhiYXNlLCBwaHktPmxhbmVfYnl0ZV9jbGtfa0h6LCBtb2RlLCBk c2ktPmZvcm1hdCk7CisKKwkvKiBzZXQgdmlkZW8gbW9kZSB0eXBlIGFuZCBscCAqLworCWRzaV9z ZXRfdmlkZW9fbW9kZV90eXBlKGJhc2UsIGRzaS0+bW9kZV9mbGFncyk7CisKKwkvKiBkc2kgd2Fr ZSB1cCAqLworCXdyaXRlbChEU0lfVklERU9fTU9ERSwgYmFzZSArIE1PREVfQ0ZHKTsKKwl3cml0 ZWwoQklUKDApLCBiYXNlICsgTFBDTEtfQ1RSTCk7CisJd3JpdGVsKEJJVCgwKSwgYmFzZSArIFBX Ul9VUCk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJsYW5lcz0lZCwgcGl4ZWxfY2xrPSVkIGtIeiwg Ynl0ZXNfZnJlcT0lZCBrSHpcbiIsCisJCQkgZHNpLT5sYW5lcywgbW9kZS0+Y2xvY2ssIHBoeS0+ bGFuZV9ieXRlX2Nsa19rSHopOworfQorCitzdGF0aWMgdm9pZCBkc2lfZW5jb2Rlcl9kaXNhYmxl KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHdfZHNpICpkc2kgPSBl bmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKwlzdHJ1Y3QgZHNpX2h3X2N0eCAqY3R4ID0gZHNpLT5j dHg7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gY3R4LT5iYXNlOworCisJaWYgKCFkc2ktPmVuYWJs ZSkKKwkJcmV0dXJuOworCisJd3JpdGVsKDAsIGJhc2UgKyBQV1JfVVApOworCXdyaXRlbCgwLCBi YXNlICsgTFBDTEtfQ1RSTCk7CisJd3JpdGVsKDAsIGJhc2UgKyBQSFlfUlNUWik7CisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGN0eC0+ZHNpX2NmZ19jbGspOworCisJZHNpLT5lbmFibGUgPSBmYWxz ZTsKK30KKworc3RhdGljIHZvaWQgZHNpX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHdfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNv ZGVyKTsKKwlzdHJ1Y3QgZHNpX2h3X2N0eCAqY3R4ID0gZHNpLT5jdHg7CisJaW50IHJldDsKKwor CWlmIChkc2ktPmVuYWJsZSkKKwkJcmV0dXJuOworCisJLyogbWlwaSBkcGh5IGNsb2NrIGVuYWJs ZSAqLworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjdHgtPmRzaV9jZmdfY2xrKTsKKwlpZiAo cmV0KSB7CisJCURSTV9FUlJPUigiZmFpbCB0byBlbmFibGUgZHNpX2NmZ19jbGs6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm47CisJfQorCisJZHNpX21pcGlfaW5pdChkc2kpOworCisJZHNpLT5lbmFi bGUgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBkc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl LAorCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCit7CisJc3RydWN0IGR3 X2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwlkcm1fbW9kZV9jb3B5KCZk c2ktPmN1cl9tb2RlLCBhZGpfbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgZHNpX2VuY29kZXJfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgc3RydWN0IGRy bV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwkvKiBkbyBub3RoaW5nICovCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGR3X2VuY29kZXJf aGVscGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hlY2sJPSBkc2lfZW5jb2Rlcl9hdG9taWNfY2hl Y2ssCisJLm1vZGVfc2V0CT0gZHNpX2VuY29kZXJfbW9kZV9zZXQsCisJLmVuYWJsZQkJPSBkc2lf ZW5jb2Rlcl9lbmFibGUsCisJLmRpc2FibGUJPSBkc2lfZW5jb2Rlcl9kaXNhYmxlCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGR3X2VuY29kZXJfZnVuY3MgPSB7 CisJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGljIGludCBkd19k cm1fZW5jb2Rlcl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZHJt X2RldmljZSAqZHJtX2RldiwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp Cit7CisJaW50IHJldDsKKwl1MzIgY3J0Y19tYXNrID0gZHJtX29mX2ZpbmRfcG9zc2libGVfY3J0 Y3MoZHJtX2RldiwgZGV2LT5vZl9ub2RlKTsKKworCWlmICghY3J0Y19tYXNrKSB7CisJCURSTV9F UlJPUigiZmFpbGVkIHRvIGZpbmQgY3J0YyBtYXNrXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBjcnRjX21hc2s7CisJcmV0ID0gZHJtX2Vu Y29kZXJfaW5pdChkcm1fZGV2LCBlbmNvZGVyLCAmZHdfZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAg ICBEUk1fTU9ERV9FTkNPREVSX0RTSSwgTlVMTCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1Io ImZhaWxlZCB0byBpbml0IGRzaSBlbmNvZGVyXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlk cm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZkd19lbmNvZGVyX2hlbHBlcl9mdW5jcyk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHNpX2Rh dGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGR3X2RzaSAqZHNpID0g JmRkYXRhLT5kc2k7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCBy ZXQ7CisKKwlyZXQgPSBkd19kcm1fZW5jb2Rlcl9pbml0KGRldiwgZHJtX2RldiwgJmRzaS0+ZW5j b2Rlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBkc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz dGVyLCB2b2lkICpkYXRhKQoreworCS8qIGRvIG5vdGhpbmcgKi8KK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBjb21wb25lbnRfb3BzIGRzaV9vcHMgPSB7CisJLmJpbmQJPSBkc2lfYmluZCwKKwku dW5iaW5kCT0gZHNpX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgZHNpX3BhcnNlX2R0KHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBkd19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3Qg ZHNpX2h3X2N0eCAqY3R4ID0gZHNpLT5jdHg7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlj dHgtPmRzaV9jZmdfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJwY2xrX2RzaSIpOwor CWlmIChJU19FUlIoY3R4LT5kc2lfY2ZnX2NsaykpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g Z2V0IGRzaSBwbGNrIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5kc2lfY2ZnX2Ns ayk7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAwKTsKKwljdHgtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwg cmVzKTsKKwlpZiAoSVNfRVJSKGN0eC0+YmFzZSkpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g cmVtYXAgZHNpIGlvIHJlZ2lvblxuIik7CisJCXJldHVybiBQVFJfRVJSKGN0eC0+YmFzZSk7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRzaV9kYXRhICpkYXRhOworCXN0cnVjdCBkd19k c2kgKmRzaTsKKwlzdHJ1Y3QgZHNpX2h3X2N0eCAqY3R4OworCWludCByZXQ7CisKKwlkYXRhID0g ZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlm ICghZGF0YSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBkc2kgZGF0YS5cbiIp OworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZHNpID0gJmRhdGEtPmRzaTsKKwljdHggPSAmZGF0 YS0+Y3R4OworCWRzaS0+Y3R4ID0gY3R4OworCisJcmV0ID0gZHNpX3BhcnNlX2R0KHBkZXYsIGRz aSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIGRhdGEpOworCisJcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJmRzaV9vcHMp OworfQorCitzdGF0aWMgaW50IGRzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZkc2lfb3BzKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkc2lfb2ZfbWF0Y2hbXSA9 IHsKKwl7LmNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpNjIyMC1kc2kifSwKKwl7IH0KK307CitN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkc2lfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBkc2lfZHJpdmVyID0geworCS5wcm9iZSA9IGRzaV9wcm9iZSwKKwkucmVt b3ZlID0gZHNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJkdy1kc2kiLAorCQku b2ZfbWF0Y2hfdGFibGUgPSBkc2lfb2ZfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9y bV9kcml2ZXIoZHNpX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlhpbmxpYW5nIExpdSA8eGlu bGlhbmcubGl1QGxpbmFyby5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJYaW5saWFuZyBMaXUgPHou bGl1eGlubGlhbmdAaGlzaWxpY29uLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlhpbndlaSBLb25n IDxrb25nLmtvbmd4aW53ZWlAaGlzaWxpY29uLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigi RGVzaWduV2FyZSBNSVBJIERTSSBIb3N0IENvbnRyb2xsZXIgdjEuMDIgZHJpdmVyIik7CitNT0RV TEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxp Y29uL2tpcmluL2R3X2RzaV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2lyaW4v ZHdfZHNpX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDNk NDRiN2QyMDk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9r aXJpbi9kd19kc2lfcmVnLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAxNiBMaW5hcm8gTGltaXRlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEhpc2lsaWNv biBMaW1pdGVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX19E V19EU0lfUkVHX0hfXworI2RlZmluZSBfX0RXX0RTSV9SRUdfSF9fCisKKyNkZWZpbmUgTUFTSyh4 KQkJCQkoQklUKHgpIC0gMSkKKworLyoKKyAqIHJlZ3MKKyAqLworI2RlZmluZSAgUFdSX1VQICAg ICAgICAgICAgICAgICAgMHgwNCAgLyogQ29yZSBwb3dlci11cCAqLworI2RlZmluZSAgUEhZX0lG X0NGRyAgICAgICAgICAgICAgMHhBNCAgLyogRC1QSFkgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24g Ki8KKyNkZWZpbmUgIENMS01HUl9DRkcgICAgICAgICAgICAgIDB4MDggIC8qIHRoZSBpbnRlcm5h bCBjbG9jayBkaXZpZGVycyAqLworI2RlZmluZSAgUEhZX1JTVFogICAgICAgICAgICAgICAgMHhB MCAgLyogRC1QSFkgcmVzZXQgY29udHJvbCAqLworI2RlZmluZSAgUEhZX1RTVF9DVFJMMCAgICAg ICAgICAgMHhCNCAgLyogRC1QSFkgdGVzdCBpbnRlcmZhY2UgY29udHJvbCAwICovCisjZGVmaW5l ICBQSFlfVFNUX0NUUkwxICAgICAgICAgICAweEI4ICAvKiBELVBIWSB0ZXN0IGludGVyZmFjZSBj b250cm9sIDEgKi8KKyNkZWZpbmUgIERQSV9WQ0lEICAgICAgICAgICAgICAgIDB4MEMgIC8qIERQ SSB2aXJ0dWFsIGNoYW5uZWwgaWQgKi8KKyNkZWZpbmUgIERQSV9DT0xPUl9DT0RJTkcgICAgICAg IDB4MTAgIC8qIERQSSBjb2xvciBjb2RpbmcgKi8KKyNkZWZpbmUgIERQSV9DRkdfUE9MICAgICAg ICAgICAgIDB4MTQgIC8qIERQSSBwb2xhcml0eSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICBW SURfSFNBX1RJTUUgICAgICAgICAgICAweDQ4ICAvKiBIb3Jpem9udGFsIFN5bmMgQWN0aXZlIHRp bWUgKi8KKyNkZWZpbmUgIFZJRF9IQlBfVElNRSAgICAgICAgICAgIDB4NEMgIC8qIEhvcml6b250 YWwgQmFjayBQb3JjaCB0aW1lICovCisjZGVmaW5lICBWSURfSExJTkVfVElNRSAgICAgICAgICAw eDUwICAvKiBMaW5lIHRpbWUgKi8KKyNkZWZpbmUgIFZJRF9WU0FfTElORVMgICAgICAgICAgIDB4 NTQgIC8qIFZlcnRpY2FsIFN5bmMgQWN0aXZlIHBlcmlvZCAqLworI2RlZmluZSAgVklEX1ZCUF9M SU5FUyAgICAgICAgICAgMHg1OCAgLyogVmVydGljYWwgQmFjayBQb3JjaCBwZXJpb2QgKi8KKyNk ZWZpbmUgIFZJRF9WRlBfTElORVMgICAgICAgICAgIDB4NUMgIC8qIFZlcnRpY2FsIEZyb250IFBv cmNoIHBlcmlvZCAqLworI2RlZmluZSAgVklEX1ZBQ1RJVkVfTElORVMgICAgICAgMHg2MCAgLyog VmVydGljYWwgcmVzb2x1dGlvbiAqLworI2RlZmluZSAgVklEX1BLVF9TSVpFICAgICAgICAgICAg MHgzQyAgLyogVmlkZW8gcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgIFZJRF9NT0RFX0NGRyAgICAg ICAgICAgIDB4MzggIC8qIFZpZGVvIG1vZGUgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgRFBJ X0xQX0NNRF9USU0gICAgICAgICAgMHgxOCAgLyogTG93LXBvd2VyIGNvbW1hbmQgdGltaW5nIGNv bmZpZyAqLworI2RlZmluZSAgUEhZX1RNUl9DRkcgICAgICAgICAgICAgMHg5QyAgLyogRGF0YSBs YW5lcyB0aW1pbmcgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgQlRBX1RPX0NOVCAgICAgICAg ICAgICAgMHg4QyAgLyogUmVzcG9uc2UgdGltZW91dCBkZWZpbml0aW9uICovCisjZGVmaW5lICBQ SFlfVE1SX0xQQ0xLX0NGRyAgICAgICAweDk4ICAvKiBjbG9jayBsYW5lIHRpbWluZyBjb25maWd1 cmF0aW9uICovCisjZGVmaW5lICBDTEtfREFUQV9UTVJfQ0ZHICAgICAgICAweENDCisjZGVmaW5l ICBMUENMS19DVFJMICAgICAgICAgICAgICAweDk0ICAvKiBMb3ctcG93ZXIgaW4gY2xvY2sgbGFu ZSAqLworI2RlZmluZSAgUENLSERMX0NGRyAgICAgICAgICAgICAgMHgyQyAgLyogUGFja2V0IGhh bmRsZXIgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgRURQSV9DTURfU0laRSAgICAgICAgICAg MHg2NCAgLyogU2l6ZSBmb3IgZURQSSBwYWNrZXRzICovCisjZGVmaW5lICBNT0RFX0NGRyAgICAg ICAgICAgICAgICAweDM0ICAvKiBWaWRlbyBvciBDb21tYW5kIG1vZGUgc2VsZWN0aW9uICovCisj ZGVmaW5lICBQSFlfU1RBVFVTICAgICAgICAgICAgICAweEIwICAvKiBELVBIWSBQUEkgc3RhdHVz IGludGVyZmFjZSAqLworCisjZGVmaW5lCVBIWV9TVE9QX1dBSVRfVElNRSAgICAgICAweDMwCisK Ky8qCisgKiByZWdzIHJlbGV2YW50IGVudW0KKyAqLworZW51bSBkcGlfY29sb3JfY29kaW5nIHsK KwlEU0lfMjRCSVRTXzEgPSA1LAorfTsKKworZW51bSBkc2lfdmlkZW9fbW9kZV90eXBlIHsKKwlE U0lfTk9OX0JVUlNUX1NZTkNfUFVMU0VTID0gMCwKKwlEU0lfTk9OX0JVUlNUX1NZTkNfRVZFTlRT LAorCURTSV9CVVJTVF9TWU5DX1BVTFNFU18xLAorCURTSV9CVVJTVF9TWU5DX1BVTFNFU18yCit9 OworCitlbnVtIGRzaV93b3JrX21vZGUgeworCURTSV9WSURFT19NT0RFID0gMCwKKwlEU0lfQ09N TUFORF9NT0RFCit9OworCisvKgorICogUmVnaXN0ZXIgV3JpdGUvUmVhZCBIZWxwZXIgZnVuY3Rp b25zCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkd191cGRhdGVfYml0cyh2b2lkIF9faW9tZW0g KmFkZHIsIHUzMiBiaXRfc3RhcnQsCisJCQkJICB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwl1MzIg dG1wLCBvcmlnOworCisJb3JpZyA9IHJlYWRsKGFkZHIpOworCXRtcCA9IG9yaWcgJiB+KG1hc2sg PDwgYml0X3N0YXJ0KTsKKwl0bXAgfD0gKHZhbCAmIG1hc2spIDw8IGJpdF9zdGFydDsKKwl3cml0 ZWwodG1wLCBhZGRyKTsKK30KKworI2VuZGlmIC8qIF9fRFdfRFJNX0RTSV9IX18gKi8KLS0gCjEu OS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=