From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xinliang Liu Subject: [PATCH v5 07/11] drm/hisilicon: Add designware dsi encoder driver Date: Tue, 23 Feb 2016 11:00:27 +0800 Message-ID: <1456196431-19923-8-git-send-email-xinliang.liu@linaro.org> References: <1456196431-19923-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: Received: from mail-pa0-x22f.google.com (mail-pa0-x22f.google.com [IPv6:2607:f8b0:400e:c03::22f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8B8106E36C for ; Tue, 23 Feb 2016 03:03:38 +0000 (UTC) Received: by mail-pa0-x22f.google.com with SMTP id fy10so101681466pac.1 for ; Mon, 22 Feb 2016 19:03:38 -0800 (PST) In-Reply-To: <1456196431-19923-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: dri-devel@lists.freedesktop.org QWRkIERlc2lnbldhcmUgTUlQSSBEU0kgSG9zdCBDb250cm9sbGVyIHYxLjAyIGVuY29kZXIgZHJp dmVyCmZvciBoaTYyMjAgU29DLgoKdjU6IE5vbmUuCnY0OiBOb25lLgp2MzoKLSBSZW5hbWUgZmls ZSBuYW1lIHRvIGR3X2RybV9kc2kuYwotIE1ha2UgZW5jb2RlciB0eXBlIGFzIERSTV9NT0RFX0VO Q09ERVJfRFNJLgotIEEgZmV3IGNsZWFudXAuCnYyOgotIFJlbW92ZSBhYnRyYWN0aW9uIGxheWVy LgoKU2lnbmVkLW9mZi1ieTogWGlubGlhbmcgTGl1IDx4aW5saWFuZy5saXVAbGluYXJvLm9yZz4K U2lnbmVkLW9mZi1ieTogWGlud2VpIEtvbmcgPGtvbmcua29uZ3hpbndlaUBoaXNpbGljb24uY29t PgpTaWduZWQtb2ZmLWJ5OiBBbmR5IEdyZWVuIDxhbmR5LmdyZWVuQGxpbmFyby5vcmc+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9LY29uZmlnICAgICAgfCAgIDEgKwogZHJp dmVycy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9NYWtlZmlsZSAgICAgfCAgIDMgKy0KIGRyaXZl cnMvZ3B1L2RybS9oaXNpbGljb24va2lyaW4vZHdfZHJtX2RzaS5jIHwgNzQzICsrKysrKysrKysr KysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9kd19kc2lf cmVnLmggfCAgODMgKysrCiA0IGZpbGVzIGNoYW5nZWQsIDgyOSBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9r aXJpbi9kd19kcm1fZHNpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaGlz aWxpY29uL2tpcmluL2R3X2RzaV9yZWcuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9o aXNpbGljb24va2lyaW4vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2lyaW4v S2NvbmZpZwppbmRleCAzYWM0YjhlZGVhYzEuLmRlMGQ0NTRjNWMxMyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9oaXNpbGljb24va2lyaW4vS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAgY29uZmlnIERSTV9ISVNJ X0tJUklOCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCiAJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBF UgogCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQRVIKKwlzZWxlY3QgRFJNX01JUElfRFNJCiAJaGVs cAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgaGlzaWxpY29uIEtpcmluIGNo aXBzZXRzKGhpNjIyMCkuCiAJICBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBj YWxsZWQga2lyaW4tZHJtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9r aXJpbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2lyaW4vTWFrZWZpbGUK aW5kZXggMmE2MWFiMDA2ZGRiLi41ZGNkMGQ0MzI4YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9oaXNpbGljb24va2lyaW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2hpc2ls aWNvbi9raXJpbi9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIGtpcmluLWRybS15IDo9IGtpcmlu X2RybV9kcnYubyBcCi0JICAgICAgIGtpcmluX2RybV9hZGUubworCSAgICAgICBraXJpbl9kcm1f YWRlLm8gXAorCSAgICAgICBkd19kcm1fZHNpLm8KIAogb2JqLSQoQ09ORklHX0RSTV9ISVNJX0tJ UklOKSArPSBraXJpbi1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNv bi9raXJpbi9kd19kcm1fZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmluL2R3 X2RybV9kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdjOTQy MzUzN2I3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2ly aW4vZHdfZHJtX2RzaS5jCkBAIC0wLDAgKzEsNzQzIEBACisvKgorICogRGVzaWduV2FyZSBNSVBJ IERTSSBIb3N0IENvbnRyb2xsZXIgdjEuMDIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAy MDE2IExpbmFybyBMaW1pdGVkLgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYgSGlzaWxpY29u IExpbWl0ZWQuCisgKgorICogQXV0aG9yOgorICoJWGlubGlhbmcgTGl1IDx6LmxpdXhpbmxpYW5n QGhpc2lsaWNvbi5jb20+CisgKglYaW5saWFuZyBMaXUgPHhpbmxpYW5nLmxpdUBsaW5hcm8ub3Jn PgorICoJWGlud2VpIEtvbmcgPGtvbmcua29uZ3hpbndlaUBoaXNpbGljb24uY29tPgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs dWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorCisj aW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lbmNvZGVy X3NsYXZlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisKKyNpbmNsdWRl ICJkd19kc2lfcmVnLmgiCisKKyNkZWZpbmUgTUFYX1RYX0VTQ19DTEsJCSAgICgxMCkKKyNkZWZp bmUgUk9VTkQoeCwgeSkgKCh4KSAvICh5KSArICgoeCkgJSAoeSkgKiAxMCAvICh5KSA+PSA1ID8g MSA6IDApKQorI2RlZmluZSBQSFlfUkVGX0NMS19SQVRFICAgMTkyMDAwMDAKKyNkZWZpbmUgUEhZ X1JFRl9DTEtfUEVSSU9EX1BTICgxMDAwMDAwMDAwIC8gKFBIWV9SRUZfQ0xLX1JBVEUgLyAxMDAw KSkKKworI2RlZmluZSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKSBcCisJY29udGFpbmVyX29mKGVu Y29kZXIsIHN0cnVjdCBkd19kc2ksIGVuY29kZXIpCisjZGVmaW5lIGhvc3RfdG9fZHNpKGhvc3Qp IFwKKwljb250YWluZXJfb2YoaG9zdCwgc3RydWN0IGR3X2RzaSwgaG9zdCkKKworc3RydWN0IG1p cGlfcGh5X3BhcmFtcyB7CisJdTMyIGNsa190X2xweDsKKwl1MzIgY2xrX3RfaHNfcHJlcGFyZTsK Kwl1MzIgY2xrX3RfaHNfemVybzsKKwl1MzIgY2xrX3RfaHNfdHJpYWw7CisJdTMyIGNsa190X3dh a2V1cDsKKwl1MzIgZGF0YV90X2xweDsKKwl1MzIgZGF0YV90X2hzX3ByZXBhcmU7CisJdTMyIGRh dGFfdF9oc196ZXJvOworCXUzMiBkYXRhX3RfaHNfdHJpYWw7CisJdTMyIGRhdGFfdF90YV9nbzsK Kwl1MzIgZGF0YV90X3RhX2dldDsKKwl1MzIgZGF0YV90X3dha2V1cDsKKwl1MzIgaHN0eF9ja2df c2VsOworCXUzMiBwbGxfZmJkX2RpdjVmOworCXUzMiBwbGxfZmJkX2RpdjFmOworCXUzMiBwbGxf ZmJkXzJwOworCXUzMiBwbGxfZW5id3Q7CisJdTMyIHBsbF9mYmRfcDsKKwl1MzIgcGxsX2ZiZF9z OworCXUzMiBwbGxfcHJlX2RpdjFwOworCXUzMiBwbGxfcHJlX3A7CisJdTMyIHBsbF92Y29fNzUw TTsKKwl1MzIgcGxsX2xwZl9yczsKKwl1MzIgcGxsX2xwZl9jczsKKwl1MzIgY2xrbHAyaHNfdGlt ZTsKKwl1MzIgY2xraHMybHBfdGltZTsKKwl1MzIgbHAyaHNfdGltZTsKKwl1MzIgaHMybHBfdGlt ZTsKKwl1MzIgY2xrX3RvX2RhdGFfZGVsYXk7CisJdTMyIGRhdGFfdG9fY2xrX2RlbGF5OworCXUz MiBsYW5lX2J5dGVfY2xrX2tIejsKKwl1MzIgY2xrX2RpdmlzaW9uOworfTsKKworc3RydWN0IGRz aV9od19jdHggeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgY2xrICpkc2lfY2ZnX2Ns azsKK307CisKK3N0cnVjdCBkd19kc2kgeworCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOwor CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGN1cl9tb2RlOworCXN0cnVjdCBkc2lfaHdfY3R4ICpj dHg7CisJc3RydWN0IG1pcGlfcGh5X3BhcmFtcyBwaHk7CisKKwl1MzIgbGFuZXM7CisJZW51bSBt aXBpX2RzaV9waXhlbF9mb3JtYXQgZm9ybWF0OworCXVuc2lnbmVkIGxvbmcgbW9kZV9mbGFnczsK Kwlib29sIGVuYWJsZTsKK307CisKK3N0cnVjdCBkc2lfZGF0YSB7CisJc3RydWN0IGR3X2RzaSBk c2k7CisJc3RydWN0IGRzaV9od19jdHggY3R4OworfTsKKworc3RydWN0IGRzaV9waHlfcmFuZ2Ug eworCXUzMiBtaW5fcmFuZ2Vfa0h6OworCXUzMiBtYXhfcmFuZ2Vfa0h6OworCXUzMiBwbGxfdmNv Xzc1ME07CisJdTMyIGhzdHhfY2tnX3NlbDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNp X3BoeV9yYW5nZSBkcGh5X3JhbmdlX2luZm9bXSA9IHsKKwl7ICAgNDY4NzUsICAgIDYyNTAwLCAg IDEsICAgIDcgfSwKKwl7ICAgNjI1MDAsICAgIDkzNzUwLCAgIDAsICAgIDcgfSwKKwl7ICAgOTM3 NTAsICAgMTI1MDAwLCAgIDEsICAgIDYgfSwKKwl7ICAxMjUwMDAsICAgMTg3NTAwLCAgIDAsICAg IDYgfSwKKwl7ICAxODc1MDAsICAgMjUwMDAwLCAgIDEsICAgIDUgfSwKKwl7ICAyNTAwMDAsICAg Mzc1MDAwLCAgIDAsICAgIDUgfSwKKwl7ICAzNzUwMDAsICAgNTAwMDAwLCAgIDEsICAgIDQgfSwK Kwl7ICA1MDAwMDAsICAgNzUwMDAwLCAgIDAsICAgIDQgfSwKKwl7ICA3NTAwMDAsICAxMDAwMDAw LCAgIDEsICAgIDAgfSwKKwl7IDEwMDAwMDAsICAxNTAwMDAwLCAgIDAsICAgIDAgfQorfTsKKwor c3RhdGljIHZvaWQgZHNpX2dldF9waHlfcGFyYW1zKHUzMiBwaHlfZnJlcV9rSHosCisJCQkgICAg ICAgc3RydWN0IG1pcGlfcGh5X3BhcmFtcyAqcGh5KQoreworCXUzMiB1aSA9IDA7CisJdTMyIGNm Z19jbGtfcHMgPSBQSFlfUkVGX0NMS19QRVJJT0RfUFM7CisJdTMyIGkgPSAwOworCXUzMiBxX3Bs bCA9IDE7CisJdTMyIG1fcGxsID0gMDsKKwl1MzIgbl9wbGwgPSAwOworCXUzMiByX3BsbCA9IDE7 CisJdTMyIG1fbiA9IDA7CisJdTMyIG1fbl9pbnQgPSAwOworCXU2NCBmX2tIejsKKwl1NjQgdGVt cDsKKwl1NjQgdG1wX2tIeiA9IHBoeV9mcmVxX2tIejsKKworCWRvIHsKKwkJZl9rSHogPSB0bXBf a0h6OworCisJCS8qIEZpbmQgdGhlIFBMTCBjbG9jayByYW5nZSBmcm9tIHRoZSB0YWJsZSAqLwor CQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcGh5X3JhbmdlX2luZm8pOyBpKyspCisJCQlp ZiAoZl9rSHogPj0gZHBoeV9yYW5nZV9pbmZvW2ldLm1pbl9yYW5nZV9rSHogJiYKKwkJCSAgICBm X2tIeiA8PSBkcGh5X3JhbmdlX2luZm9baV0ubWF4X3JhbmdlX2tIeikKKwkJCQlicmVhazsKKwor CQlpZiAoaSA9PSBBUlJBWV9TSVpFKGRwaHlfcmFuZ2VfaW5mbykpIHsKKwkJCURSTV9FUlJPUigi JWxsZGtIeiBvdXQgb2YgcmFuZ2VcbiIsIGZfa0h6KTsKKwkJCXJldHVybjsKKwkJfQorCisJCXBo eS0+cGxsX3Zjb183NTBNID0gZHBoeV9yYW5nZV9pbmZvW2ldLnBsbF92Y29fNzUwTTsKKwkJcGh5 LT5oc3R4X2NrZ19zZWwgPSBkcGh5X3JhbmdlX2luZm9baV0uaHN0eF9ja2dfc2VsOworCisJCWlm IChwaHktPmhzdHhfY2tnX3NlbCA8PSA3ICYmCisJCSAgICBwaHktPmhzdHhfY2tnX3NlbCA+PSA0 KQorCQkJcV9wbGwgPSAweDEwID4+ICg3IC0gcGh5LT5oc3R4X2NrZ19zZWwpOworCisJCXRlbXAg PSBmX2tIeiAqICh1NjQpcV9wbGwgKiAodTY0KWNmZ19jbGtfcHM7CisJCW1fbl9pbnQgPSB0ZW1w IC8gKHU2NCkxMDAwMDAwMDAwOworCQltX24gPSAodGVtcCAlICh1NjQpMTAwMDAwMDAwMCkgLyAo dTY0KTEwMDAwMDAwMDsKKworCQlpZiAobV9uX2ludCAlIDIgPT0gMCkgeworCQkJaWYgKG1fbiAq IDYgPj0gNTApIHsKKwkJCQluX3BsbCA9IDI7CisJCQkJbV9wbGwgPSAobV9uX2ludCArIDEpICog bl9wbGw7CisJCQl9IGVsc2UgaWYgKG1fbiAqIDYgPj0gMzApIHsKKwkJCQluX3BsbCA9IDM7CisJ CQkJbV9wbGwgPSBtX25faW50ICogbl9wbGwgKyAyOworCQkJfSBlbHNlIHsKKwkJCQluX3BsbCA9 IDE7CisJCQkJbV9wbGwgPSBtX25faW50ICogbl9wbGw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlp ZiAobV9uICogNiA+PSA1MCkgeworCQkJCW5fcGxsID0gMTsKKwkJCQltX3BsbCA9IChtX25faW50 ICsgMSkgKiBuX3BsbDsKKwkJCX0gZWxzZSBpZiAobV9uICogNiA+PSAzMCkgeworCQkJCW5fcGxs ID0gMTsKKwkJCQltX3BsbCA9IChtX25faW50ICsgMSkgKiBuX3BsbDsKKwkJCX0gZWxzZSBpZiAo bV9uICogNiA+PSAxMCkgeworCQkJCW5fcGxsID0gMzsKKwkJCQltX3BsbCA9IG1fbl9pbnQgKiBu X3BsbCArIDE7CisJCQl9IGVsc2UgeworCQkJCW5fcGxsID0gMjsKKwkJCQltX3BsbCA9IG1fbl9p bnQgKiBuX3BsbDsKKwkJCX0KKwkJfQorCisJCWlmIChuX3BsbCA9PSAxKSB7CisJCQlwaHktPnBs bF9mYmRfcCA9IDA7CisJCQlwaHktPnBsbF9wcmVfZGl2MXAgPSAxOworCQl9IGVsc2UgeworCQkJ cGh5LT5wbGxfZmJkX3AgPSBuX3BsbDsKKwkJCXBoeS0+cGxsX3ByZV9kaXYxcCA9IDA7CisJCX0K KworCQlpZiAocGh5LT5wbGxfZmJkXzJwIDw9IDcgJiYgcGh5LT5wbGxfZmJkXzJwID49IDQpCisJ CQlyX3BsbCA9IDB4MTAgPj4gKDcgLSBwaHktPnBsbF9mYmRfMnApOworCisJCWlmIChtX3BsbCA9 PSAyKSB7CisJCQlwaHktPnBsbF9wcmVfcCA9IDA7CisJCQlwaHktPnBsbF9mYmRfcyA9IDA7CisJ CQlwaHktPnBsbF9mYmRfZGl2MWYgPSAwOworCQkJcGh5LT5wbGxfZmJkX2RpdjVmID0gMTsKKwkJ fSBlbHNlIGlmIChtX3BsbCA+PSAyICogMiAqIHJfcGxsICYmIG1fcGxsIDw9IDIgKiA0ICogcl9w bGwpIHsKKwkJCXBoeS0+cGxsX3ByZV9wID0gbV9wbGwgLyAoMiAqIHJfcGxsKTsKKwkJCXBoeS0+ cGxsX2ZiZF9zID0gMDsKKwkJCXBoeS0+cGxsX2ZiZF9kaXYxZiA9IDE7CisJCQlwaHktPnBsbF9m YmRfZGl2NWYgPSAwOworCQl9IGVsc2UgaWYgKG1fcGxsID49IDIgKiA1ICogcl9wbGwgJiYgbV9w bGwgPD0gMiAqIDE1MCAqIHJfcGxsKSB7CisJCQlpZiAoKChtX3BsbCAvICgyICogcl9wbGwpKSAl IDIpID09IDApIHsKKwkJCQlwaHktPnBsbF9wcmVfcCA9CisJCQkJCShtX3BsbCAvICgyICogcl9w bGwpKSAvIDIgLSAxOworCQkJCXBoeS0+cGxsX2ZiZF9zID0KKwkJCQkJKG1fcGxsIC8gKDIgKiBy X3BsbCkpICUgMiArIDI7CisJCQl9IGVsc2UgeworCQkJCXBoeS0+cGxsX3ByZV9wID0KKwkJCQkJ KG1fcGxsIC8gKDIgKiByX3BsbCkpIC8gMjsKKwkJCQlwaHktPnBsbF9mYmRfcyA9CisJCQkJCSht X3BsbCAvICgyICogcl9wbGwpKSAlIDI7CisJCQl9CisJCQlwaHktPnBsbF9mYmRfZGl2MWYgPSAw OworCQkJcGh5LT5wbGxfZmJkX2RpdjVmID0gMDsKKwkJfSBlbHNlIHsKKwkJCXBoeS0+cGxsX3By ZV9wID0gMDsKKwkJCXBoeS0+cGxsX2ZiZF9zID0gMDsKKwkJCXBoeS0+cGxsX2ZiZF9kaXYxZiA9 IDA7CisJCQlwaHktPnBsbF9mYmRfZGl2NWYgPSAxOworCQl9CisKKwkJZl9rSHogPSAodTY0KTEw MDAwMDAwMDAgKiAodTY0KW1fcGxsIC8KKwkJCSgodTY0KWNmZ19jbGtfcHMgKiAodTY0KW5fcGxs ICogKHU2NClxX3BsbCk7CisKKwkJaWYgKGZfa0h6ID49IHBoeV9mcmVxX2tIeikKKwkJCWJyZWFr OworCisJCXRtcF9rSHogKz0gMTA7CisKKwl9IHdoaWxlICgxKTsKKworCXVpID0gMTAwMDAwMCAv IGZfa0h6OworCisJcGh5LT5jbGtfdF9scHggPSBST1VORCg1MCwgOCAqIHVpKTsKKwlwaHktPmNs a190X2hzX3ByZXBhcmUgPSBST1VORCgxMzMsIDE2ICogdWkpIC0gMTsKKworCXBoeS0+Y2xrX3Rf aHNfemVybyA9IFJPVU5EKDI2MiwgOCAqIHVpKTsKKwlwaHktPmNsa190X2hzX3RyaWFsID0gMiAq IChST1VORCg2MCwgOCAqIHVpKSAtIDEpOworCXBoeS0+Y2xrX3Rfd2FrZXVwID0gUk9VTkQoMTAw MDAwMCwgKGNmZ19jbGtfcHMgLyAxMDAwKSAtIDEpOworCWlmIChwaHktPmNsa190X3dha2V1cCA+ IDB4ZmYpCisJCXBoeS0+Y2xrX3Rfd2FrZXVwID0gMHhmZjsKKwlwaHktPmRhdGFfdF93YWtldXAg PSBwaHktPmNsa190X3dha2V1cDsKKwlwaHktPmRhdGFfdF9scHggPSBwaHktPmNsa190X2xweDsK KwlwaHktPmRhdGFfdF9oc19wcmVwYXJlID0gUk9VTkQoMTI1ICsgMTAgKiB1aSwgMTYgKiB1aSkg LSAxOworCXBoeS0+ZGF0YV90X2hzX3plcm8gPSBST1VORCgxMDUgKyA2ICogdWksIDggKiB1aSk7 CisJcGh5LT5kYXRhX3RfaHNfdHJpYWwgPSAyICogKFJPVU5EKDYwICsgNCAqIHVpLCA4ICogdWkp IC0gMSk7CisJcGh5LT5kYXRhX3RfdGFfZ28gPSAzOworCXBoeS0+ZGF0YV90X3RhX2dldCA9IDQ7 CisKKwlwaHktPnBsbF9lbmJ3dCA9IDE7CisJcGh5LT5jbGtscDJoc190aW1lID0gUk9VTkQoNDA3 LCA4ICogdWkpICsgMTI7CisJcGh5LT5jbGtoczJscF90aW1lID0gUk9VTkQoMTA1ICsgMTIgKiB1 aSwgOCAqIHVpKTsKKwlwaHktPmxwMmhzX3RpbWUgPSBST1VORCgyNDAgKyAxMiAqIHVpLCA4ICog dWkpICsgMTsKKwlwaHktPmhzMmxwX3RpbWUgPSBwaHktPmNsa2hzMmxwX3RpbWU7CisJcGh5LT5j bGtfdG9fZGF0YV9kZWxheSA9IDEgKyBwaHktPmNsa2xwMmhzX3RpbWU7CisJcGh5LT5kYXRhX3Rv X2Nsa19kZWxheSA9IFJPVU5EKDYwICsgNTIgKiB1aSwgOCAqIHVpKSArCisJCQkJcGh5LT5jbGto czJscF90aW1lOworCisJcGh5LT5sYW5lX2J5dGVfY2xrX2tIeiA9IGZfa0h6IC8gODsKKwlwaHkt PmNsa19kaXZpc2lvbiA9IHBoeS0+bGFuZV9ieXRlX2Nsa19rSHogLyBNQVhfVFhfRVNDX0NMSzsK KwlpZiAocGh5LT5sYW5lX2J5dGVfY2xrX2tIeiAlIE1BWF9UWF9FU0NfQ0xLKQorCQlwaHktPmNs a19kaXZpc2lvbisrOworfQorCitzdGF0aWMgdTMyIGRzaV9nZXRfZHBpX2NvbG9yX2NvZGluZyhl bnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQpCit7CisJdTMyIHZhbDsKKworCS8qIFRP RE86IG9ubHkgc3VwcG9ydCBSR0I4ODggbm93LCB0byBzdXBwb3J0IG1vcmUgKi8KKwlzd2l0Y2gg KGZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJdmFsID0gRFNJXzI0QklU U18xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSBEU0lfMjRCSVRTXzE7CisJCWJyZWFr OworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qCisgKiBkc2kgcGh5IHJlZyB3cml0ZSBmdW5j dGlvbgorICovCitzdGF0aWMgdm9pZCBkc2lfcGh5X3RzdF9zZXQodm9pZCBfX2lvbWVtICpiYXNl LCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbChyZWcsIGJhc2UgKyBQSFlfVFNUX0NUUkwx KTsKKwkvKiByZWcgYWRkciB3cml0dGVuIGF0IGZpcnN0ICovCisJd21iKCk7CisJd3JpdGVsKDB4 MDIsIGJhc2UgKyBQSFlfVFNUX0NUUkwwKTsKKwkvKiBjbWQxIHNlbnQgZm9yIHdyaXRlICovCisJ d21iKCk7CisJd3JpdGVsKDB4MDAsIGJhc2UgKyBQSFlfVFNUX0NUUkwwKTsKKwkvKiBjbWQyIHNl bnQgZm9yIHdyaXRlICovCisJd21iKCk7CisJd3JpdGVsKHZhbCwgYmFzZSArIFBIWV9UU1RfQ1RS TDEpOworCS8qIFRoZW4gd3JpdGUgZGF0YSAqLworCXdtYigpOworCXdyaXRlbCgweDAyLCBiYXNl ICsgUEhZX1RTVF9DVFJMMCk7CisJLyogY21kMiBzZW50IGZvciB3cml0ZSAqLworCXdtYigpOwor CXdyaXRlbCgweDAwLCBiYXNlICsgUEhZX1RTVF9DVFJMMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRz aV9zZXRfbWlwaV9waHkodm9pZCBfX2lvbWVtICpiYXNlLAorCQkJICAgICBzdHJ1Y3QgbWlwaV9w aHlfcGFyYW1zICpwaHksCisJCQkgICAgIHUzMiBsYW5lcykKK3sKKwl1MzIgZGVsYXlfY291bnQ7 CisJdTMyIHZhbDsKKwl1MzIgaTsKKworCS8qIHNldCBsYW5lcyB2YWx1ZSAqLworCXZhbCA9IChs YW5lcyAtIDEpIHwgKFBIWV9TVE9QX1dBSVRfVElNRSA8PCA4KTsKKwl3cml0ZWwodmFsLCBiYXNl ICsgUEhZX0lGX0NGRyk7CisKKwkvKiBzZXQgcGh5IGNsayBkaXZpc2lvbiAqLworCXZhbCA9IHJl YWRsKGJhc2UgKyBDTEtNR1JfQ0ZHKSB8IHBoeS0+Y2xrX2RpdmlzaW9uOworCXdyaXRlbCh2YWws IGJhc2UgKyBDTEtNR1JfQ0ZHKTsKKworCS8qIGNsZWFuIHVwIHBoeSBzZXQgcGFyYW0gKi8KKwl3 cml0ZWwoMCwgYmFzZSArIFBIWV9SU1RaKTsKKwl3cml0ZWwoMCwgYmFzZSArIFBIWV9UU1RfQ1RS TDApOworCXdyaXRlbCgxLCBiYXNlICsgUEhZX1RTVF9DVFJMMCk7CisJd3JpdGVsKDAsIGJhc2Ug KyBQSFlfVFNUX0NUUkwwKTsKKworCS8qIGNsb2NrIGxhbmUgVGltaW5nIGNvbnRyb2wgLSBUTFBY ICovCisJZHNpX3BoeV90c3Rfc2V0KGJhc2UsIDB4MTAwMTAsIHBoeS0+Y2xrX3RfbHB4KTsKKwor CS8qIGNsb2NrIGxhbmUgVGltaW5nIGNvbnRyb2wgLSBUSFMtUFJFUEFSRSAqLworCWRzaV9waHlf dHN0X3NldChiYXNlLCAweDEwMDExLCBwaHktPmNsa190X2hzX3ByZXBhcmUpOworCisJLyogY2xv Y2sgbGFuZSBUaW1pbmcgY29udHJvbCAtIFRIUy1aRVJPICovCisJZHNpX3BoeV90c3Rfc2V0KGJh c2UsIDB4MTAwMTIsIHBoeS0+Y2xrX3RfaHNfemVybyk7CisKKwkvKiBjbG9jayBsYW5lIFRpbWlu ZyBjb250cm9sIC0gVEhTLVRSQUlMICovCisJZHNpX3BoeV90c3Rfc2V0KGJhc2UsIDB4MTAwMTMs IHBoeS0+Y2xrX3RfaHNfdHJpYWwpOworCisJLyogY2xvY2sgbGFuZSBUaW1pbmcgY29udHJvbCAt IFRXQUtFVVAgKi8KKwlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDAxNCwgcGh5LT5jbGtfdF93 YWtldXApOworCisJLyogZGF0YSBsYW5lICovCisJZm9yIChpID0gMDsgaSA8IGxhbmVzOyBpKysp IHsKKwkJLyogVGltaW5nIGNvbnRyb2wgLSBUTFBYICovCisJCWRzaV9waHlfdHN0X3NldChiYXNl LCAweDEwMDIwICsgKGkgPDwgNCksIHBoeS0+ZGF0YV90X2xweCk7CisKKwkJLyogVGltaW5nIGNv bnRyb2wgLSBUSFMtUFJFUEFSRSAqLworCQlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDAyMSAr IChpIDw8IDQpLAorCQkJCXBoeS0+ZGF0YV90X2hzX3ByZXBhcmUpOworCisJCS8qIFRpbWluZyBj b250cm9sIC0gVEhTLVpFUk8gKi8KKwkJZHNpX3BoeV90c3Rfc2V0KGJhc2UsIDB4MTAwMjIgKyAo aSA8PCA0KSwgcGh5LT5kYXRhX3RfaHNfemVybyk7CisKKwkJLyogVGltaW5nIGNvbnRyb2wgLSBU SFMtVFJBSUwgKi8KKwkJZHNpX3BoeV90c3Rfc2V0KGJhc2UsIDB4MTAwMjMgKyAoaSA8PCA0KSwg cGh5LT5kYXRhX3RfaHNfdHJpYWwpOworCisJCS8qIFRpbWluZyBjb250cm9sIC0gVFRBLUdPICov CisJCWRzaV9waHlfdHN0X3NldChiYXNlLCAweDEwMDI0ICsgKGkgPDwgNCksIHBoeS0+ZGF0YV90 X3RhX2dvKTsKKworCQkvKiBUaW1pbmcgY29udHJvbCAtIFRUQS1HRVQgKi8KKwkJZHNpX3BoeV90 c3Rfc2V0KGJhc2UsIDB4MTAwMjUgKyAoaSA8PCA0KSwgcGh5LT5kYXRhX3RfdGFfZ2V0KTsKKwor CQkvKiBUaW1pbmcgY29udHJvbCAtIFRXQUtFVVAgKi8KKwkJZHNpX3BoeV90c3Rfc2V0KGJhc2Us IDB4MTAwMjYgKyAoaSA8PCA0KSwgcGh5LT5kYXRhX3Rfd2FrZXVwKTsKKwl9CisKKwkvKiBwaHlz aWNhbCBjb25maWd1cmF0aW9uIEkgKi8KKwlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDA2MCwg cGh5LT5oc3R4X2NrZ19zZWwpOworCisJLyogcGh5c2ljYWwgY29uZmlndXJhdGlvbiBwbGwgSUkg Ki8KKwl2YWwgPSAocGh5LT5wbGxfZmJkX2RpdjVmIDw8IDUpICsgKHBoeS0+cGxsX2ZiZF9kaXYx ZiA8PCA0KSArCisJCQkJKHBoeS0+cGxsX2ZiZF8ycCA8PCAxKSArIHBoeS0+cGxsX2VuYnd0Owor CWRzaV9waHlfdHN0X3NldChiYXNlLCAweDEwMDYzLCB2YWwpOworCisJLyogcGh5c2ljYWwgY29u ZmlndXJhdGlvbiBwbGwgSUkgKi8KKwlkc2lfcGh5X3RzdF9zZXQoYmFzZSwgMHgxMDA2NCwgcGh5 LT5wbGxfZmJkX3ApOworCisJLyogcGh5c2ljYWwgY29uZmlndXJhdGlvbiBwbGwgSUlJICovCisJ ZHNpX3BoeV90c3Rfc2V0KGJhc2UsIDB4MTAwNjUsIHBoeS0+cGxsX2ZiZF9zKTsKKworCS8qIHBo eXNpY2FsIGNvbmZpZ3VyYXRpb24gcGxsIElWICovCisJdmFsID0gKHBoeS0+cGxsX3ByZV9kaXYx cCA8PCA3KSArIHBoeS0+cGxsX3ByZV9wOworCWRzaV9waHlfdHN0X3NldChiYXNlLCAweDEwMDY2 LCB2YWwpOworCisJLyogcGh5c2ljYWwgY29uZmlndXJhdGlvbiBwbGwgViAqLworCXZhbCA9IChw aHktPnBsbF92Y29fNzUwTSA8PCA0KSArIChwaHktPnBsbF9scGZfcnMgPDwgMikgKworCQkJCQlw aHktPnBsbF9scGZfY3MgKyBCSVQoNSk7CisJZHNpX3BoeV90c3Rfc2V0KGJhc2UsIDB4MTAwNjcs IHZhbCk7CisKKwl3cml0ZWwoQklUKDIpLCBiYXNlICsgUEhZX1JTVFopOworCXVkZWxheSgxKTsK Kwl3cml0ZWwoQklUKDIpIHwgQklUKDApLCBiYXNlICsgUEhZX1JTVFopOworCXVkZWxheSgxKTsK Kwl3cml0ZWwoQklUKDIpIHwgQklUKDEpIHwgQklUKDApLCBiYXNlICsgUEhZX1JTVFopOworCXVz bGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsKKworCS8qIHdhaXQgZm9yIHBoeSdzIGNsb2NrIHJlYWR5 ICovCisJZGVsYXlfY291bnQgPSAxMDA7CisJd2hpbGUgKGRlbGF5X2NvdW50LS0pIHsKKwkJdmFs ID0gcmVhZGwoYmFzZSArICBQSFlfU1RBVFVTKTsKKwkJaWYgKChCSVQoMCkgfCBCSVQoMikpICYg dmFsKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDEpOworCX0KKworCWlmICghZGVsYXlfY291bnQp CisJCURSTV9JTkZPKCJwaHlsb2NrIGFuZCBwaHlzdG9wc3RhdGVjbGtsYW5lIGlzIG5vdCByZWFk eS5cbiIpOworCisJLyogc2V0IGxwIGFuZCBocyBzd2l0Y2hpbmcgcGFyYW1zCisJICovCisJZHdf dXBkYXRlX2JpdHMoYmFzZSArIFBIWV9UTVJfQ0ZHLCAyNCwgTUFTSyg4KSwgcGh5LT5oczJscF90 aW1lKTsKKwlkd191cGRhdGVfYml0cyhiYXNlICsgUEhZX1RNUl9DRkcsIDE2LCBNQVNLKDgpLCBw aHktPmxwMmhzX3RpbWUpOworCWR3X3VwZGF0ZV9iaXRzKGJhc2UgKyBQSFlfVE1SX0xQQ0xLX0NG RywgMTYsIE1BU0soMTApLAorCQkgICAgICAgcGh5LT5jbGtoczJscF90aW1lKTsKKwlkd191cGRh dGVfYml0cyhiYXNlICsgUEhZX1RNUl9MUENMS19DRkcsIDAsIE1BU0soMTApLAorCQkgICAgICAg cGh5LT5jbGtscDJoc190aW1lKTsKKwlkd191cGRhdGVfYml0cyhiYXNlICsgQ0xLX0RBVEFfVE1S X0NGRywgOCwgTUFTSyg4KSwKKwkJICAgICAgIHBoeS0+ZGF0YV90b19jbGtfZGVsYXkpOworCWR3 X3VwZGF0ZV9iaXRzKGJhc2UgKyBDTEtfREFUQV9UTVJfQ0ZHLCAwLCBNQVNLKDgpLAorCQkgICAg ICAgcGh5LT5jbGtfdG9fZGF0YV9kZWxheSk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9zZXRfbW9k ZV90aW1pbmcodm9pZCBfX2lvbWVtICpiYXNlLAorCQkJCXUzMiBsYW5lX2J5dGVfY2xrX2tIeiwK KwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQllbnVtIG1pcGlfZHNpX3Bp eGVsX2Zvcm1hdCBmb3JtYXQpCit7CisJdTMyIGhmcCwgaGJwLCBoc3csIHZmcCwgdmJwLCB2c3c7 CisJdTMyIGhsaW5lX3RpbWU7CisJdTMyIGhzYV90aW1lOworCXUzMiBoYnBfdGltZTsKKwl1MzIg cGl4ZWxfY2xrX2tIejsKKwlpbnQgaHRvdCwgdnRvdDsKKwl1MzIgdmFsOworCXU2NCB0bXA7CisK KwkvKiBEU0kgY29sb3IgY29kaW5nIHNldHRpbmcgKi8KKwl2YWwgPSBkc2lfZ2V0X2RwaV9jb2xv cl9jb2RpbmcoZm9ybWF0KTsKKwl3cml0ZWwodmFsLCBiYXNlICsgRFBJX0NPTE9SX0NPRElORyk7 CisKKwkvKiBEU0kgZm9ybWF0IGFuZCBwb2wgc2V0dGluZyAqLworCXZhbCA9IChtb2RlLT5mbGFn cyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DID8gMSA6IDApIDw8IDI7CisJdmFsIHw9IChtb2RlLT5m bGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DID8gMSA6IDApIDw8IDE7CisJd3JpdGVsKHZhbCwg YmFzZSArICBEUElfQ0ZHX1BPTCk7CisKKwkvKgorCSAqIFRoZSBEU0kgSVAgYWNjZXB0cyB2ZXJ0 aWNhbCB0aW1pbmcgdXNpbmcgbGluZXMgYXMgbm9ybWFsLAorCSAqIGJ1dCBob3Jpem9udGFsIHRp bWluZyBpcyBhIG1peHR1cmUgb2YgcGl4ZWwtY2xvY2tzIGZvciB0aGUKKwkgKiBhY3RpdmUgcmVn aW9uIGFuZCBieXRlLWxhbmUgY2xvY2tzIGZvciB0aGUgYmxhbmtpbmctcmVsYXRlZAorCSAqIHRp bWluZ3MuICBoZnAgaXMgc3BlY2lmaWVkIGFzIHRoZSB0b3RhbCBobGluZV90aW1lIGluIGJ5dGUt CisJICogbGFuZSBjbG9ja3MgbWludXMgaHNhLCBoYnAgYW5kIGFjdGl2ZS4KKwkgKi8KKwlwaXhl bF9jbGtfa0h6ID0gbW9kZS0+Y2xvY2s7CisJaHRvdCA9IG1vZGUtPmh0b3RhbDsKKwl2dG90ID0g bW9kZS0+dnRvdGFsOworCWhmcCA9IG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXk7 CisJaGJwID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCWhzdyA9IG1vZGUtPmhz eW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OworCXZmcCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0g bW9kZS0+dmRpc3BsYXk7CisJdmJwID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kOwor CXZzdyA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCWlmICh2c3cgPiAx NSkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJ2c3cgZXhjZWVkZWQgMTVcbiIpOworCQl2c3cgPSAx NTsKKwl9CisKKwloc2FfdGltZSA9IChoc3cgKiBsYW5lX2J5dGVfY2xrX2tIeikgLyBwaXhlbF9j bGtfa0h6OworCWhicF90aW1lID0gKGhicCAqIGxhbmVfYnl0ZV9jbGtfa0h6KSAvIHBpeGVsX2Ns a19rSHo7CisJdG1wID0gKHU2NClodG90ICogKHU2NClsYW5lX2J5dGVfY2xrX2tIejsKKwlobGlu ZV90aW1lID0gRElWX1JPVU5EX1VQKHRtcCwgcGl4ZWxfY2xrX2tIeik7CisKKwkvKiBhbGwgc3Bl Y2lmaWVkIGluIGJ5dGUtbGFuZSBjbG9ja3MgKi8KKwl3cml0ZWwoaHNhX3RpbWUsIGJhc2UgKyBW SURfSFNBX1RJTUUpOworCXdyaXRlbChoYnBfdGltZSwgYmFzZSArIFZJRF9IQlBfVElNRSk7CisJ d3JpdGVsKGhsaW5lX3RpbWUsIGJhc2UgKyBWSURfSExJTkVfVElNRSk7CisKKwl3cml0ZWwodnN3 LCBiYXNlICsgVklEX1ZTQV9MSU5FUyk7CisJd3JpdGVsKHZicCwgYmFzZSArIFZJRF9WQlBfTElO RVMpOworCXdyaXRlbCh2ZnAsIGJhc2UgKyBWSURfVkZQX0xJTkVTKTsKKwl3cml0ZWwobW9kZS0+ dmRpc3BsYXksIGJhc2UgKyBWSURfVkFDVElWRV9MSU5FUyk7CisJd3JpdGVsKG1vZGUtPmhkaXNw bGF5LCBiYXNlICsgVklEX1BLVF9TSVpFKTsKKworCURSTV9ERUJVR19EUklWRVIoImh0b3Q9JWQs IGhmcD0lZCwgaGJwPSVkLCBoc3c9JWRcbiIsCisJCQkgaHRvdCwgaGZwLCBoYnAsIGhzdyk7CisJ RFJNX0RFQlVHX0RSSVZFUigidnRvbD0lZCwgdmZwPSVkLCB2YnA9JWQsIHZzdz0lZFxuIiwKKwkJ CSB2dG90LCB2ZnAsIHZicCwgdnN3KTsKKwlEUk1fREVCVUdfRFJJVkVSKCJoc2FfdGltZT0lZCwg aGJwX3RpbWU9JWQsIGhsaW5lX3RpbWU9JWRcbiIsCisJCQkgaHNhX3RpbWUsIGhicF90aW1lLCBo bGluZV90aW1lKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3NldF92aWRlb19tb2RlX3R5cGUodm9p ZCBfX2lvbWVtICpiYXNlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXUzMiB2 YWw7CisJdTMyIG1vZGVfbWFzayA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RF X1ZJREVPX0JVUlNUIHwKKwkJTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFOworCXUzMiBu b25fYnVyc3Rfc3luY19wdWxzZSA9IE1JUElfRFNJX01PREVfVklERU8gfAorCQlNSVBJX0RTSV9N T0RFX1ZJREVPX1NZTkNfUFVMU0U7CisJdTMyIG5vbl9idXJzdF9zeW5jX2V2ZW50ID0gTUlQSV9E U0lfTU9ERV9WSURFTzsKKworCS8qCisJICogY2hvb3NlIHZpZGVvIHR5cGUKKwkgKi8KKwlpZiAo KGZsYWdzICYgbW9kZV9tYXNrKSA9PSBub25fYnVyc3Rfc3luY19wdWxzZSkKKwkJdmFsID0gRFNJ X05PTl9CVVJTVF9TWU5DX1BVTFNFUzsKKwllbHNlIGlmICgoZmxhZ3MgJiBtb2RlX21hc2spID09 IG5vbl9idXJzdF9zeW5jX2V2ZW50KQorCQl2YWwgPSBEU0lfTk9OX0JVUlNUX1NZTkNfRVZFTlRT OworCWVsc2UKKwkJdmFsID0gRFNJX0JVUlNUX1NZTkNfUFVMU0VTXzE7CisKKwl3cml0ZWwodmFs LCBiYXNlICsgVklEX01PREVfQ0ZHKTsKK30KKworc3RhdGljIHZvaWQgZHNpX21pcGlfaW5pdChz dHJ1Y3QgZHdfZHNpICpkc2kpCit7CisJc3RydWN0IGRzaV9od19jdHggKmN0eCA9IGRzaS0+Y3R4 OworCXN0cnVjdCBtaXBpX3BoeV9wYXJhbXMgKnBoeSA9ICZkc2ktPnBoeTsKKwlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZkc2ktPmN1cl9tb2RlOworCXUzMiBicHAgPSBtaXBpX2Rz aV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKKwl2b2lkIF9faW9tZW0gKmJhc2Ug PSBjdHgtPmJhc2U7CisJdTMyIGRwaHlfZnJlcV9rSHo7CisKKwkvKiBjb3VudCBwaHkgcGFyYW1z ICovCisJZHBoeV9mcmVxX2tIeiA9IG1vZGUtPmNsb2NrICogYnBwIC8gZHNpLT5sYW5lczsKKwlk c2lfZ2V0X3BoeV9wYXJhbXMoZHBoeV9mcmVxX2tIeiwgcGh5KTsKKworCS8qIHJlc2V0IENvcmUg Ki8KKwl3cml0ZWwoMCwgYmFzZSArIFBXUl9VUCk7CisKKwkvKiBzZXQgcGh5IHBhcmFtcyAqLwor CWRzaV9zZXRfbWlwaV9waHkoYmFzZSwgcGh5LCBkc2ktPmxhbmVzKTsKKworCS8qIHNldCBkc2kg bW9kZSAqLworCWRzaV9zZXRfbW9kZV90aW1pbmcoYmFzZSwgcGh5LT5sYW5lX2J5dGVfY2xrX2tI eiwgbW9kZSwgZHNpLT5mb3JtYXQpOworCisJLyogc2V0IHZpZGVvIG1vZGUgdHlwZSBhbmQgbHAg Ki8KKwlkc2lfc2V0X3ZpZGVvX21vZGVfdHlwZShiYXNlLCBkc2ktPm1vZGVfZmxhZ3MpOworCisJ LyogZHNpIHdha2UgdXAgKi8KKwl3cml0ZWwoRFNJX1ZJREVPX01PREUsIGJhc2UgKyBNT0RFX0NG Ryk7CisJd3JpdGVsKEJJVCgwKSwgYmFzZSArIExQQ0xLX0NUUkwpOworCXdyaXRlbChCSVQoMCks IGJhc2UgKyBQV1JfVVApOworCisJRFJNX0RFQlVHX0RSSVZFUigibGFuZXM9JWQsIHBpeGVsX2Ns az0lZCBrSHosIGJ5dGVzX2ZyZXE9JWQga0h6XG4iLAorCQkJIGRzaS0+bGFuZXMsIG1vZGUtPmNs b2NrLCBwaHktPmxhbmVfYnl0ZV9jbGtfa0h6KTsKK30KKworc3RhdGljIHZvaWQgZHNpX2VuY29k ZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGR3X2Rz aSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisJc3RydWN0IGRzaV9od19jdHggKmN0 eCA9IGRzaS0+Y3R4OworCXZvaWQgX19pb21lbSAqYmFzZSA9IGN0eC0+YmFzZTsKKworCWlmICgh ZHNpLT5lbmFibGUpCisJCXJldHVybjsKKworCXdyaXRlbCgwLCBiYXNlICsgUFdSX1VQKTsKKwl3 cml0ZWwoMCwgYmFzZSArIExQQ0xLX0NUUkwpOworCXdyaXRlbCgwLCBiYXNlICsgUEhZX1JTVFop OworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjdHgtPmRzaV9jZmdfY2xrKTsKKworCWRzaS0+ZW5h YmxlID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9lbmNvZGVyX2VuYWJsZShzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGR3X2RzaSAqZHNpID0gZW5jb2Rlcl90 b19kc2koZW5jb2Rlcik7CisJc3RydWN0IGRzaV9od19jdHggKmN0eCA9IGRzaS0+Y3R4OworCWlu dCByZXQ7CisKKwlpZiAoZHNpLT5lbmFibGUpCisJCXJldHVybjsKKworCS8qIG1pcGkgZHBoeSBj bG9jayBlbmFibGUgKi8KKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY3R4LT5kc2lfY2ZnX2Ns ayk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWwgdG8gZW5hYmxlIGRzaV9jZmdfY2xr OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCWRzaV9taXBpX2luaXQoZHNpKTsKKwor CWRzaS0+ZW5hYmxlID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZHNpX2VuY29kZXJfbW9kZV9z ZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwKKwkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQorewor CXN0cnVjdCBkd19kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJZHJtX21v ZGVfY29weSgmZHNpLT5jdXJfbW9kZSwgYWRqX21vZGUpOworfQorCitzdGF0aWMgaW50IGRzaV9l bmNvZGVyX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAg IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkgICAgc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJLyogZG8gbm90aGluZyAqLworCXJldHVy biAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBk d19lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2NoZWNrCT0gZHNpX2VuY29kZXJf YXRvbWljX2NoZWNrLAorCS5tb2RlX3NldAk9IGRzaV9lbmNvZGVyX21vZGVfc2V0LAorCS5lbmFi bGUJCT0gZHNpX2VuY29kZXJfZW5hYmxlLAorCS5kaXNhYmxlCT0gZHNpX2VuY29kZXJfZGlzYWJs ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19lbmNvZGVy X2Z1bmNzID0geworCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKK307CisKK3N0YXRp YyBpbnQgZHdfZHJtX2VuY29kZXJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAg c3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQkgICAgICAgc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyKQoreworCWludCByZXQ7CisJdTMyIGNydGNfbWFzayA9IGRybV9vZl9maW5kX3Bv c3NpYmxlX2NydGNzKGRybV9kZXYsIGRldi0+b2Zfbm9kZSk7CisKKwlpZiAoIWNydGNfbWFzaykg eworCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIGNydGMgbWFza1xuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gY3J0Y19tYXNrOworCXJl dCA9IGRybV9lbmNvZGVyX2luaXQoZHJtX2RldiwgZW5jb2RlciwgJmR3X2VuY29kZXJfZnVuY3Ms CisJCQkgICAgICAgRFJNX01PREVfRU5DT0RFUl9EU0ksIE5VTEwpOworCWlmIChyZXQpIHsKKwkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBkc2kgZW5jb2RlclxuIik7CisJCXJldHVybiByZXQ7 CisJfQorCisJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmZHdfZW5jb2Rlcl9oZWxw ZXJfZnVuY3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHNpX2JpbmQoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IGRzaV9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkd19k c2kgKmRzaSA9ICZkZGF0YS0+ZHNpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0 YTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHdfZHJtX2VuY29kZXJfaW5pdChkZXYsIGRybV9kZXYs ICZkc2ktPmVuY29kZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwkvKiBkbyBub3RoaW5nICovCit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBkc2lfb3BzID0geworCS5iaW5kCT0gZHNp X2JpbmQsCisJLnVuYmluZAk9IGRzaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IGRzaV9wYXJz ZV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgZHdfZHNpICpkc2kpCit7 CisJc3RydWN0IGRzaV9od19jdHggKmN0eCA9IGRzaS0+Y3R4OworCXN0cnVjdCByZXNvdXJjZSAq cmVzOworCisJY3R4LT5kc2lfY2ZnX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicGNs a19kc2kiKTsKKwlpZiAoSVNfRVJSKGN0eC0+ZHNpX2NmZ19jbGspKSB7CisJCURSTV9FUlJPUigi ZmFpbGVkIHRvIGdldCBkc2kgcGxjayBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKGN0eC0+ ZHNpX2NmZ19jbGspOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgMCk7CisJY3R4LT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZw ZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihjdHgtPmJhc2UpKSB7CisJCURSTV9FUlJPUigi ZmFpbGVkIHRvIHJlbWFwIGRzaSBpbyByZWdpb25cbiIpOworCQlyZXR1cm4gUFRSX0VSUihjdHgt PmJhc2UpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzaV9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkc2lfZGF0YSAqZGF0YTsKKwlz dHJ1Y3QgZHdfZHNpICpkc2k7CisJc3RydWN0IGRzaV9od19jdHggKmN0eDsKKwlpbnQgcmV0Owor CisJZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRhdGEpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgZHNp IGRhdGEuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRzaSA9ICZkYXRhLT5kc2k7CisJ Y3R4ID0gJmRhdGEtPmN0eDsKKwlkc2ktPmN0eCA9IGN0eDsKKworCXJldCA9IGRzaV9wYXJzZV9k dChwZGV2LCBkc2kpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCBkYXRhKTsKKworCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYs ICZkc2lfb3BzKTsKK30KKworc3RhdGljIGludCBkc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmZHNpX29wcyk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHNpX29m X21hdGNoW10gPSB7CisJey5jb21wYXRpYmxlID0gImhpc2lsaWNvbixoaTYyMjAtZHNpIn0sCisJ eyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHNpX29mX21hdGNoKTsKKworc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHNpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBkc2lfcHJv YmUsCisJLnJlbW92ZSA9IGRzaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiZHct ZHNpIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gZHNpX29mX21hdGNoLAorCX0sCit9OworCittb2R1 bGVfcGxhdGZvcm1fZHJpdmVyKGRzaV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJYaW5saWFu ZyBMaXUgPHhpbmxpYW5nLmxpdUBsaW5hcm8ub3JnPiIpOworTU9EVUxFX0FVVEhPUigiWGlubGlh bmcgTGl1IDx6LmxpdXhpbmxpYW5nQGhpc2lsaWNvbi5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJY aW53ZWkgS29uZyA8a29uZy5rb25neGlud2VpQGhpc2lsaWNvbi5jb20+Iik7CitNT0RVTEVfREVT Q1JJUFRJT04oIkRlc2lnbldhcmUgTUlQSSBEU0kgSG9zdCBDb250cm9sbGVyIHYxLjAyIGRyaXZl ciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2hpc2lsaWNvbi9raXJpbi9kd19kc2lfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxp Y29uL2tpcmluL2R3X2RzaV9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmQzZDQ0YjdkMjA5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9o aXNpbGljb24va2lyaW4vZHdfZHNpX3JlZy5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYgTGluYXJvIExpbWl0ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAx NiBIaXNpbGljb24gTGltaXRlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisj aWZuZGVmIF9fRFdfRFNJX1JFR19IX18KKyNkZWZpbmUgX19EV19EU0lfUkVHX0hfXworCisjZGVm aW5lIE1BU0soeCkJCQkJKEJJVCh4KSAtIDEpCisKKy8qCisgKiByZWdzCisgKi8KKyNkZWZpbmUg IFBXUl9VUCAgICAgICAgICAgICAgICAgIDB4MDQgIC8qIENvcmUgcG93ZXItdXAgKi8KKyNkZWZp bmUgIFBIWV9JRl9DRkcgICAgICAgICAgICAgIDB4QTQgIC8qIEQtUEhZIGludGVyZmFjZSBjb25m aWd1cmF0aW9uICovCisjZGVmaW5lICBDTEtNR1JfQ0ZHICAgICAgICAgICAgICAweDA4ICAvKiB0 aGUgaW50ZXJuYWwgY2xvY2sgZGl2aWRlcnMgKi8KKyNkZWZpbmUgIFBIWV9SU1RaICAgICAgICAg ICAgICAgIDB4QTAgIC8qIEQtUEhZIHJlc2V0IGNvbnRyb2wgKi8KKyNkZWZpbmUgIFBIWV9UU1Rf Q1RSTDAgICAgICAgICAgIDB4QjQgIC8qIEQtUEhZIHRlc3QgaW50ZXJmYWNlIGNvbnRyb2wgMCAq LworI2RlZmluZSAgUEhZX1RTVF9DVFJMMSAgICAgICAgICAgMHhCOCAgLyogRC1QSFkgdGVzdCBp bnRlcmZhY2UgY29udHJvbCAxICovCisjZGVmaW5lICBEUElfVkNJRCAgICAgICAgICAgICAgICAw eDBDICAvKiBEUEkgdmlydHVhbCBjaGFubmVsIGlkICovCisjZGVmaW5lICBEUElfQ09MT1JfQ09E SU5HICAgICAgICAweDEwICAvKiBEUEkgY29sb3IgY29kaW5nICovCisjZGVmaW5lICBEUElfQ0ZH X1BPTCAgICAgICAgICAgICAweDE0ICAvKiBEUEkgcG9sYXJpdHkgY29uZmlndXJhdGlvbiAqLwor I2RlZmluZSAgVklEX0hTQV9USU1FICAgICAgICAgICAgMHg0OCAgLyogSG9yaXpvbnRhbCBTeW5j IEFjdGl2ZSB0aW1lICovCisjZGVmaW5lICBWSURfSEJQX1RJTUUgICAgICAgICAgICAweDRDICAv KiBIb3Jpem9udGFsIEJhY2sgUG9yY2ggdGltZSAqLworI2RlZmluZSAgVklEX0hMSU5FX1RJTUUg ICAgICAgICAgMHg1MCAgLyogTGluZSB0aW1lICovCisjZGVmaW5lICBWSURfVlNBX0xJTkVTICAg ICAgICAgICAweDU0ICAvKiBWZXJ0aWNhbCBTeW5jIEFjdGl2ZSBwZXJpb2QgKi8KKyNkZWZpbmUg IFZJRF9WQlBfTElORVMgICAgICAgICAgIDB4NTggIC8qIFZlcnRpY2FsIEJhY2sgUG9yY2ggcGVy aW9kICovCisjZGVmaW5lICBWSURfVkZQX0xJTkVTICAgICAgICAgICAweDVDICAvKiBWZXJ0aWNh bCBGcm9udCBQb3JjaCBwZXJpb2QgKi8KKyNkZWZpbmUgIFZJRF9WQUNUSVZFX0xJTkVTICAgICAg IDB4NjAgIC8qIFZlcnRpY2FsIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgIFZJRF9QS1RfU0laRSAg ICAgICAgICAgIDB4M0MgIC8qIFZpZGVvIHBhY2tldCBzaXplICovCisjZGVmaW5lICBWSURfTU9E RV9DRkcgICAgICAgICAgICAweDM4ICAvKiBWaWRlbyBtb2RlIGNvbmZpZ3VyYXRpb24gKi8KKyNk ZWZpbmUgIERQSV9MUF9DTURfVElNICAgICAgICAgIDB4MTggIC8qIExvdy1wb3dlciBjb21tYW5k IHRpbWluZyBjb25maWcgKi8KKyNkZWZpbmUgIFBIWV9UTVJfQ0ZHICAgICAgICAgICAgIDB4OUMg IC8qIERhdGEgbGFuZXMgdGltaW5nIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgIEJUQV9UT19D TlQgICAgICAgICAgICAgIDB4OEMgIC8qIFJlc3BvbnNlIHRpbWVvdXQgZGVmaW5pdGlvbiAqLwor I2RlZmluZSAgUEhZX1RNUl9MUENMS19DRkcgICAgICAgMHg5OCAgLyogY2xvY2sgbGFuZSB0aW1p bmcgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgQ0xLX0RBVEFfVE1SX0NGRyAgICAgICAgMHhD QworI2RlZmluZSAgTFBDTEtfQ1RSTCAgICAgICAgICAgICAgMHg5NCAgLyogTG93LXBvd2VyIGlu IGNsb2NrIGxhbmUgKi8KKyNkZWZpbmUgIFBDS0hETF9DRkcgICAgICAgICAgICAgIDB4MkMgIC8q IFBhY2tldCBoYW5kbGVyIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgIEVEUElfQ01EX1NJWkUg ICAgICAgICAgIDB4NjQgIC8qIFNpemUgZm9yIGVEUEkgcGFja2V0cyAqLworI2RlZmluZSAgTU9E RV9DRkcgICAgICAgICAgICAgICAgMHgzNCAgLyogVmlkZW8gb3IgQ29tbWFuZCBtb2RlIHNlbGVj dGlvbiAqLworI2RlZmluZSAgUEhZX1NUQVRVUyAgICAgICAgICAgICAgMHhCMCAgLyogRC1QSFkg UFBJIHN0YXR1cyBpbnRlcmZhY2UgKi8KKworI2RlZmluZQlQSFlfU1RPUF9XQUlUX1RJTUUgICAg ICAgMHgzMAorCisvKgorICogcmVncyByZWxldmFudCBlbnVtCisgKi8KK2VudW0gZHBpX2NvbG9y X2NvZGluZyB7CisJRFNJXzI0QklUU18xID0gNSwKK307CisKK2VudW0gZHNpX3ZpZGVvX21vZGVf dHlwZSB7CisJRFNJX05PTl9CVVJTVF9TWU5DX1BVTFNFUyA9IDAsCisJRFNJX05PTl9CVVJTVF9T WU5DX0VWRU5UUywKKwlEU0lfQlVSU1RfU1lOQ19QVUxTRVNfMSwKKwlEU0lfQlVSU1RfU1lOQ19Q VUxTRVNfMgorfTsKKworZW51bSBkc2lfd29ya19tb2RlIHsKKwlEU0lfVklERU9fTU9ERSA9IDAs CisJRFNJX0NPTU1BTkRfTU9ERQorfTsKKworLyoKKyAqIFJlZ2lzdGVyIFdyaXRlL1JlYWQgSGVs cGVyIGZ1bmN0aW9ucworICovCitzdGF0aWMgaW5saW5lIHZvaWQgZHdfdXBkYXRlX2JpdHModm9p ZCBfX2lvbWVtICphZGRyLCB1MzIgYml0X3N0YXJ0LAorCQkJCSAgdTMyIG1hc2ssIHUzMiB2YWwp Cit7CisJdTMyIHRtcCwgb3JpZzsKKworCW9yaWcgPSByZWFkbChhZGRyKTsKKwl0bXAgPSBvcmln ICYgfihtYXNrIDw8IGJpdF9zdGFydCk7CisJdG1wIHw9ICh2YWwgJiBtYXNrKSA8PCBiaXRfc3Rh cnQ7CisJd3JpdGVsKHRtcCwgYWRkcik7Cit9CisKKyNlbmRpZiAvKiBfX0RXX0RSTV9EU0lfSF9f ICovCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==