From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xinliang Liu Subject: [PATCH v5 04/11] drm/hisilicon: Add plane driver for ADE Date: Tue, 23 Feb 2016 11:00:24 +0800 Message-ID: <1456196431-19923-5-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-x229.google.com (mail-pa0-x229.google.com [IPv6:2607:f8b0:400e:c03::229]) by gabe.freedesktop.org (Postfix) with ESMTPS id EC61C6E361 for ; Tue, 23 Feb 2016 03:03:18 +0000 (UTC) Received: by mail-pa0-x229.google.com with SMTP id ho8so104554873pac.2 for ; Mon, 22 Feb 2016 19:03:18 -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 QWRkIHBsYW5lIGZ1bmNzIGFuZCBoZWxwZXIgZnVuY3MgZm9yIEFERS4KCnY1OiBOb25lLgp2NDog Tm9uZS4KdjM6Ci0gQSBmZXcgY2xlYW51cC4KdjI6Ci0gUmVtb3ZlIGFidHJhY3Rpb24gbGF5ZXIu CgpTaWduZWQtb2ZmLWJ5OiBYaW5saWFuZyBMaXUgPHhpbmxpYW5nLmxpdUBsaW5hcm8ub3JnPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2lyaW4va2lyaW5fZHJtX2FkZS5jIHwgNTM1 ICsrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDUzNCBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNv bi9raXJpbi9raXJpbl9kcm1fYWRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmlu L2tpcmluX2RybV9hZGUuYwppbmRleCBkYmRlYjFmYzMzZTMuLmZhZTVmMGFmYWRiOCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9raXJpbl9kcm1fYWRlLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9raXJpbl9kcm1fYWRlLmMKQEAgLTI3 LDEzICsyNywyMyBAQAogI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KICNpbmNsdWRl IDxkcm0vZHJtX2F0b21pYy5oPgogI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgor I2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1f Y21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgogCiAjaW5j bHVkZSAia2lyaW5fZHJtX2Rydi5oIgogI2luY2x1ZGUgImtpcmluX2FkZV9yZWcuaCIKIAorI2Rl ZmluZSBQUklNQVJZX0NICUFERV9DSDEgLyogcHJpbWFyeSBwbGFuZSAqLworI2RlZmluZSBPVVRf T1ZMWQlBREVfT1ZMWTIgLyogb3V0cHV0IG92ZXJsYXkgY29tcG9zaXRvciAqLworI2RlZmluZSBB REVfREVCVUcJMQorCiAjZGVmaW5lIHRvX2FkZV9jcnRjKGNydGMpIFwKIAljb250YWluZXJfb2Yo Y3J0Yywgc3RydWN0IGFkZV9jcnRjLCBiYXNlKQogCisjZGVmaW5lIHRvX2FkZV9wbGFuZShwbGFu ZSkgXAorCWNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IGFkZV9wbGFuZSwgYmFzZSkKKwogc3Ry dWN0IGFkZV9od19jdHggewogCXZvaWQgX19pb21lbSAgKmJhc2U7CiAJc3RydWN0IHJlZ21hcCAq bm9jX3JlZ21hcDsKQEAgLTUyLDExICs2Miw3NiBAQCBzdHJ1Y3QgYWRlX2NydGMgewogCXUzMiBv dXRfZm9ybWF0OwogfTsKIAorc3RydWN0IGFkZV9wbGFuZSB7CisJc3RydWN0IGRybV9wbGFuZSBi YXNlOworCXZvaWQgKmN0eDsKKwl1OCBjaDsgLyogY2hhbm5lbCAqLworfTsKKwogc3RydWN0IGFk ZV9kYXRhIHsKIAlzdHJ1Y3QgYWRlX2NydGMgYWNydGM7CisJc3RydWN0IGFkZV9wbGFuZSBhcGxh bmVbQURFX0NIX05VTV07CiAJc3RydWN0IGFkZV9od19jdHggY3R4OwogfTsKIAorLyogYWRlLWZv cm1hdCBpbmZvOiAqLworc3RydWN0IGFkZV9mb3JtYXQgeworCXUzMiBwaXhlbF9mb3JtYXQ7CisJ ZW51bSBhZGVfZmJfZm9ybWF0IGFkZV9mb3JtYXQ7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGFkZV9mb3JtYXQgYWRlX2Zvcm1hdHNbXSA9IHsKKwkvKiAxNmJwcCBSR0I6ICovCisJeyBEUk1f Rk9STUFUX1JHQjU2NSwgQURFX1JHQl81NjUgfSwKKwl7IERSTV9GT1JNQVRfQkdSNTY1LCBBREVf QkdSXzU2NSB9LAorCS8qIDI0YnBwIFJHQjogKi8KKwl7IERSTV9GT1JNQVRfUkdCODg4LCBBREVf UkdCXzg4OCB9LAorCXsgRFJNX0ZPUk1BVF9CR1I4ODgsIEFERV9CR1JfODg4IH0sCisJLyogMzJi cHAgW0FdUkdCOiAqLworCXsgRFJNX0ZPUk1BVF9YUkdCODg4OCwgQURFX1hSR0JfODg4OCB9LAor CXsgRFJNX0ZPUk1BVF9YQkdSODg4OCwgQURFX1hCR1JfODg4OCB9LAorCXsgRFJNX0ZPUk1BVF9S R0JBODg4OCwgQURFX1JHQkFfODg4OCB9LAorCXsgRFJNX0ZPUk1BVF9CR1JBODg4OCwgQURFX0JH UkFfODg4OCB9LAorCXsgRFJNX0ZPUk1BVF9BUkdCODg4OCwgQURFX0FSR0JfODg4OCB9LAorCXsg RFJNX0ZPUk1BVF9BQkdSODg4OCwgQURFX0FCR1JfODg4OCB9LAorfTsKKworc3RhdGljIGNvbnN0 IHUzMiBjaGFubmVsX2Zvcm1hdHMxW10gPSB7CisJLyogY2hhbm5lbCAxLDIsMyw0ICovCisJRFJN X0ZPUk1BVF9SR0I1NjUsIERSTV9GT1JNQVRfQkdSNTY1LCBEUk1fRk9STUFUX1JHQjg4OCwKKwlE Uk1fRk9STUFUX0JHUjg4OCwgRFJNX0ZPUk1BVF9YUkdCODg4OCwgRFJNX0ZPUk1BVF9YQkdSODg4 OCwKKwlEUk1fRk9STUFUX1JHQkE4ODg4LCBEUk1fRk9STUFUX0JHUkE4ODg4LCBEUk1fRk9STUFU X0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgKK307CisKK3UzMiBhZGVfZ2V0X2NoYW5u ZWxfZm9ybWF0cyh1OCBjaCwgY29uc3QgdTMyICoqZm9ybWF0cykKK3sKKwlzd2l0Y2ggKGNoKSB7 CisJY2FzZSBBREVfQ0gxOgorCQkqZm9ybWF0cyA9IGNoYW5uZWxfZm9ybWF0czE7CisJCXJldHVy biBBUlJBWV9TSVpFKGNoYW5uZWxfZm9ybWF0czEpOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigi bm8gdGhpcyBjaGFubmVsICVkXG4iLCBjaCk7CisJCSpmb3JtYXRzID0gTlVMTDsKKwkJcmV0dXJu IDA7CisJfQorfQorCisvKiBjb252ZXJ0IGZyb20gZm91cmNjIGZvcm1hdCB0byBhZGUgZm9ybWF0 ICovCitzdGF0aWMgdTMyIGFkZV9nZXRfZm9ybWF0KHUzMiBwaXhlbF9mb3JtYXQpCit7CisJaW50 IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZGVfZm9ybWF0cyk7IGkrKykKKwkJ aWYgKGFkZV9mb3JtYXRzW2ldLnBpeGVsX2Zvcm1hdCA9PSBwaXhlbF9mb3JtYXQpCisJCQlyZXR1 cm4gYWRlX2Zvcm1hdHNbaV0uYWRlX2Zvcm1hdDsKKworCS8qIG5vdCBmb3VuZCAqLworCURSTV9F UlJPUigiTm90IGZvdW5kIHBpeGVsIGZvcm1hdCEhZm91cmNjX2Zvcm1hdD0gJWRcbiIsCisJCSAg cGl4ZWxfZm9ybWF0KTsKKwlyZXR1cm4gQURFX0ZPUk1BVF9OT1RfU1VQUE9SVDsKK30KKwogc3Rh dGljIHZvaWQgYWRlX3VwZGF0ZV9yZWxvYWRfYml0KHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGJp dF9udW0sIHUzMiB2YWwpCiB7CiAJdTMyIGJpdF9vZnN0LCByZWdfbnVtOwpAQCAtODksNyArMTY0 LDcgQEAgc3RhdGljIHZvaWQgYWRlX2luaXQoc3RydWN0IGFkZV9od19jdHggKmN0eCkKIAkvKiBj bGVhciBvdmVybGF5ICovCiAJd3JpdGVsKDAsIGJhc2UgKyBBREVfT1ZMWTFfVFJBTlNfQ0ZHKTsK IAl3cml0ZWwoMCwgYmFzZSArIEFERV9PVkxZX0NUTCk7Ci0Jd3JpdGVsKDAsIGJhc2UgKyBBREVf T1ZMWVhfQ1RMKEFERV9PVkxZMikpOworCXdyaXRlbCgwLCBiYXNlICsgQURFX09WTFlYX0NUTChP VVRfT1ZMWSkpOwogCS8qIGNsZWFyIHJlc2V0IGFuZCByZWxvYWQgcmVncyAqLwogCXdyaXRlbChN QVNLKDMyKSwgYmFzZSArIEFERV9TT0ZUX1JTVF9TRUwoMCkpOwogCXdyaXRlbChNQVNLKDMyKSwg YmFzZSArIEFERV9TT0ZUX1JTVF9TRUwoMSkpOwpAQCAtMTQ3LDYgKzIyMiwxMCBAQCBzdGF0aWMg dm9pZCBhZGVfbGRpX3NldF9tb2RlKHN0cnVjdCBhZGVfY3J0YyAqYWNydGMsCiAJCQkgIG1vZGUt PmNsb2NrICogMTAwMCwgcmV0KTsKIAlhZGpfbW9kZS0+Y2xvY2sgPSBjbGtfZ2V0X3JhdGUoY3R4 LT5hZGVfcGl4X2NsaykgLyAxMDAwOwogCisJLyogc2V0IG92ZXJsYXkgY29tcG9zaXRvciBvdXRw dXQgc2l6ZSAqLworCXdyaXRlbCgoKHdpZHRoIC0gMSkgPDwgT1VUUFVUX1hTSVpFX09GU1QpIHwg KGhlaWdodCAtIDEpLAorCSAgICAgICBiYXNlICsgQURFX09WTFlfT1VUUFVUX1NJWkUoT1VUX09W TFkpKTsKKwogCS8qIGN0cmFuNiBzZXR0aW5nICovCiAJd3JpdGVsKENUUkFOX0JZUEFTU19PTiwg YmFzZSArIEFERV9DVFJBTl9ESVMoQURFX0NUUkFONikpOwogCSAvKiB0aGUgY29uZmlndXJlZCB2 YWx1ZSBpcyBhY3R1YWwgdmFsdWUgLSAxICovCkBAIC0yMTksNiArMjk4LDEwIEBAIHN0YXRpYyB2 b2lkIGFkZV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3QgYWRlX2NydGMgKmFjcnRjKQogCXZvaWQgX19p b21lbSAqYmFzZSA9IGN0eC0+YmFzZTsKIAl1MzIgb3V0X2ZtdCA9IGFjcnRjLT5vdXRfZm9ybWF0 OwogCisJLyogZW5hYmxlIG91dHB1dCBvdmVybGF5IGNvbXBvc2l0b3IgKi8KKwl3cml0ZWwoQURF X0VOQUJMRSwgYmFzZSArIEFERV9PVkxZWF9DVEwoT1VUX09WTFkpKTsKKwlhZGVfdXBkYXRlX3Jl bG9hZF9iaXQoYmFzZSwgT1ZMWV9PRlNUICsgT1VUX09WTFksIDApOworCiAJLyogZGlzcGxheSBz b3VyY2Ugc2V0dGluZyAqLwogCXdyaXRlbChESVNQX1NSQ19PVkxZMiwgYmFzZSArIEFERV9ESVNQ X1NSQ19DRkcpOwogCkBAIC0yMzIsNiArMzE1LDk3IEBAIHN0YXRpYyB2b2lkIGFkZV9kaXNwbGF5 X2VuYWJsZShzdHJ1Y3QgYWRlX2NydGMgKmFjcnRjKQogCXdyaXRlbChEU0lfUENMS19PTiwgYmFz ZSArIExESV9IRE1JX0RTSV9HVCk7CiB9CiAKKyNpZiBBREVfREVCVUcKK3N0YXRpYyB2b2lkIGFk ZV9yZG1hX2R1bXBfcmVncyh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBjaCkKK3sKKwl1MzIgcmVn X2N0cmwsIHJlZ19hZGRyLCByZWdfc2l6ZSwgcmVnX3N0cmlkZSwgcmVnX3NwYWNlLCByZWdfZW47 CisJdTMyIHZhbDsKKworCXJlZ19jdHJsID0gUkRfQ0hfQ1RSTChjaCk7CisJcmVnX2FkZHIgPSBS RF9DSF9BRERSKGNoKTsKKwlyZWdfc2l6ZSA9IFJEX0NIX1NJWkUoY2gpOworCXJlZ19zdHJpZGUg PSBSRF9DSF9TVFJJREUoY2gpOworCXJlZ19zcGFjZSA9IFJEX0NIX1NQQUNFKGNoKTsKKwlyZWdf ZW4gPSBSRF9DSF9FTihjaCk7CisKKwl2YWwgPSBhZGVfcmVhZF9yZWxvYWRfYml0KGJhc2UsIFJE TUFfT0ZTVCArIGNoKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJbcmRtYSVkXTogcmVsb2FkKCVkKVxu IiwgY2ggKyAxLCB2YWwpOworCXZhbCA9IHJlYWRsKGJhc2UgKyByZWdfY3RybCk7CisJRFJNX0RF QlVHX0RSSVZFUigiW3JkbWElZF06IHJlZ19jdHJsKDB4JTA4eClcbiIsIGNoICsgMSwgdmFsKTsK Kwl2YWwgPSByZWFkbChiYXNlICsgcmVnX2FkZHIpOworCURSTV9ERUJVR19EUklWRVIoIltyZG1h JWRdOiByZWdfYWRkcigweCUwOHgpXG4iLCBjaCArIDEsIHZhbCk7CisJdmFsID0gcmVhZGwoYmFz ZSArIHJlZ19zaXplKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJbcmRtYSVkXTogcmVnX3NpemUoMHgl MDh4KVxuIiwgY2ggKyAxLCB2YWwpOworCXZhbCA9IHJlYWRsKGJhc2UgKyByZWdfc3RyaWRlKTsK KwlEUk1fREVCVUdfRFJJVkVSKCJbcmRtYSVkXTogcmVnX3N0cmlkZSgweCUwOHgpXG4iLCBjaCAr IDEsIHZhbCk7CisJdmFsID0gcmVhZGwoYmFzZSArIHJlZ19zcGFjZSk7CisJRFJNX0RFQlVHX0RS SVZFUigiW3JkbWElZF06IHJlZ19zcGFjZSgweCUwOHgpXG4iLCBjaCArIDEsIHZhbCk7CisJdmFs ID0gcmVhZGwoYmFzZSArIHJlZ19lbik7CisJRFJNX0RFQlVHX0RSSVZFUigiW3JkbWElZF06IHJl Z19lbigweCUwOHgpXG4iLCBjaCArIDEsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZV9jbGlw X2R1bXBfcmVncyh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBjaCkKK3sKKwl1MzIgdmFsOworCisJ dmFsID0gYWRlX3JlYWRfcmVsb2FkX2JpdChiYXNlLCBDTElQX09GU1QgKyBjaCk7CisJRFJNX0RF QlVHX0RSSVZFUigiW2NsaXAlZF06IHJlbG9hZCglZClcbiIsIGNoICsgMSwgdmFsKTsKKwl2YWwg PSByZWFkbChiYXNlICsgQURFX0NMSVBfRElTQUJMRShjaCkpOworCURSTV9ERUJVR19EUklWRVIo IltjbGlwJWRdOiByZWdfY2xpcF9kaXNhYmxlKDB4JTA4eClcbiIsIGNoICsgMSwgdmFsKTsKKwl2 YWwgPSByZWFkbChiYXNlICsgQURFX0NMSVBfU0laRTAoY2gpKTsKKwlEUk1fREVCVUdfRFJJVkVS KCJbY2xpcCVkXTogcmVnX2NsaXBfc2l6ZTAoMHglMDh4KVxuIiwgY2ggKyAxLCB2YWwpOworCXZh bCA9IHJlYWRsKGJhc2UgKyBBREVfQ0xJUF9TSVpFMShjaCkpOworCURSTV9ERUJVR19EUklWRVIo IltjbGlwJWRdOiByZWdfY2xpcF9zaXplMSgweCUwOHgpXG4iLCBjaCArIDEsIHZhbCk7Cit9CisK K3N0YXRpYyB2b2lkIGFkZV9jb21wb3NpdG9yX3JvdXRpbmdfZHVtcF9yZWdzKHZvaWQgX19pb21l bSAqYmFzZSwgdTMyIGNoKQoreworCXU4IG92bHlfY2ggPSAwOyAvKiBUT0RPOiBPbmx5IHByaW1h cnkgcGxhbmUgbm93ICovCisJdTMyIHZhbDsKKworCXZhbCA9IHJlYWRsKGJhc2UgKyBBREVfT1ZM WV9DSF9YWTAob3ZseV9jaCkpOworCURSTV9ERUJVR19EUklWRVIoIltvdmVybGF5IGNoJWRdOiBy ZWdfY2hfeHkwKDB4JTA4eClcbiIsIG92bHlfY2gsIHZhbCk7CisJdmFsID0gcmVhZGwoYmFzZSAr IEFERV9PVkxZX0NIX1hZMShvdmx5X2NoKSk7CisJRFJNX0RFQlVHX0RSSVZFUigiW292ZXJsYXkg Y2glZF06IHJlZ19jaF94eTEoMHglMDh4KVxuIiwgb3ZseV9jaCwgdmFsKTsKKwl2YWwgPSByZWFk bChiYXNlICsgQURFX09WTFlfQ0hfQ1RMKG92bHlfY2gpKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJb b3ZlcmxheSBjaCVkXTogcmVnX2NoX2N0bCgweCUwOHgpXG4iLCBvdmx5X2NoLCB2YWwpOworfQor CitzdGF0aWMgdm9pZCBhZGVfZHVtcF9vdmVybGF5X2NvbXBvc2l0b3JfcmVncyh2b2lkIF9faW9t ZW0gKmJhc2UsIHUzMiBjb21wKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBhZGVfcmVhZF9yZWxv YWRfYml0KGJhc2UsIE9WTFlfT0ZTVCArIGNvbXApOworCURSTV9ERUJVR19EUklWRVIoIltvdmVy bGF5JWRdOiByZWxvYWQoJWQpXG4iLCBjb21wICsgMSwgdmFsKTsKKwl3cml0ZWwoQURFX0VOQUJM RSwgYmFzZSArIEFERV9PVkxZWF9DVEwoY29tcCkpOworCURSTV9ERUJVR19EUklWRVIoIltvdmVy bGF5JWRdOiByZWdfY3RsKDB4JTA4eClcbiIsIGNvbXAgKyAxLCB2YWwpOworCXZhbCA9IHJlYWRs KGJhc2UgKyBBREVfT1ZMWV9DVEwpOworCURSTV9ERUJVR19EUklWRVIoIm92bHlfY3RsKDB4JTA4 eClcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZV9kdW1wX3JlZ3Modm9pZCBfX2lvbWVt ICpiYXNlKQoreworCXUzMiBpOworCisJLyogZHVtcCBjaGFubmVsIHJlZ3MgKi8KKwlmb3IgKGkg PSAwOyBpIDwgQURFX0NIX05VTTsgaSsrKSB7CisJCS8qIGR1bXAgcmRtYSByZWdzICovCisJCWFk ZV9yZG1hX2R1bXBfcmVncyhiYXNlLCBpKTsKKworCQkvKiBkdW1wIGNsaXAgcmVncyAqLworCQlh ZGVfY2xpcF9kdW1wX3JlZ3MoYmFzZSwgaSk7CisKKwkJLyogZHVtcCBjb21wb3NpdG9yIHJvdXRp bmcgcmVncyAqLworCQlhZGVfY29tcG9zaXRvcl9yb3V0aW5nX2R1bXBfcmVncyhiYXNlLCBpKTsK Kwl9CisKKwkvKiBkdW1wIG92ZXJsYXkgY29tcG9zaXRvciByZWdzICovCisJYWRlX2R1bXBfb3Zl cmxheV9jb21wb3NpdG9yX3JlZ3MoYmFzZSwgT1VUX09WTFkpOworfQorI2Vsc2UKK3N0YXRpYyB2 b2lkIGFkZV9kdW1wX3JlZ3Modm9pZCBfX2lvbWVtICpiYXNlKSB7IH0KKyNlbmRpZgorCiBzdGF0 aWMgdm9pZCBhZGVfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVj dCBhZGVfY3J0YyAqYWNydGMgPSB0b19hZGVfY3J0YyhjcnRjKTsKQEAgLTI0OSw2ICs0MjMsNyBA QCBzdGF0aWMgdm9pZCBhZGVfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCiAJ YWRlX3NldF9tZWRpYW5vY19xb3MoYWNydGMpOwogCWFkZV9kaXNwbGF5X2VuYWJsZShhY3J0Yyk7 CisJYWRlX2R1bXBfcmVncyhjdHgtPmJhc2UpOwogCWFjcnRjLT5lbmFibGUgPSB0cnVlOwogfQog CkBAIC0zMDMsNiArNDc4LDcgQEAgc3RhdGljIHZvaWQgYWRlX2NydGNfYXRvbWljX2ZsdXNoKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKIAogCS8qIG9ubHkgY3J0YyBpcyBlYW5ibGVkIHJlZ3MgdGFr ZSBlZmZlY3QgKi8KIAlpZiAoYWNydGMtPmVuYWJsZSkgeworCQlhZGVfZHVtcF9yZWdzKGJhc2Up OwogCQkvKiBmbHVzaCBhZGUgcmVnaXRzdGVycyAqLwogCQl3cml0ZWwoQURFX0VOQUJMRSwgYmFz ZSArIEFERV9FTik7CiAJfQpAQCAtMzU5LDYgKzUzNSwzMzggQEAgc3RhdGljIGludCBhZGVfY3J0 Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAly ZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYWRlX3JkbWFfc2V0KHZvaWQgX19pb21lbSAqYmFz ZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgdTMyIGNoLCB1MzIgeSwgdTMyIGlu X2gsIHUzMiBmbXQpCit7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqb2JqID0gZHJtX2Zi X2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7CisJdTMyIHJlZ19jdHJsLCByZWdfYWRkciwgcmVnX3Np emUsIHJlZ19zdHJpZGUsIHJlZ19zcGFjZSwgcmVnX2VuOworCXUzMiBzdHJpZGUgPSBmYi0+cGl0 Y2hlc1swXTsKKwl1MzIgYWRkciA9ICh1MzIpb2JqLT5wYWRkciArIHkgKiBzdHJpZGU7CisKKwlE Uk1fREVCVUdfRFJJVkVSKCJyZG1hJWQ6ICh5PSVkLCBoZWlnaHQ9JWQpLCBzdHJpZGU9JWQsIHBh ZGRyPTB4JXhcbiIsCisJCQkgY2ggKyAxLCB5LCBpbl9oLCBzdHJpZGUsICh1MzIpb2JqLT5wYWRk cik7CisJRFJNX0RFQlVHX0RSSVZFUigiYWRkcj0weCV4LCBmYjolZHglZCwgcGl4ZWxfZm9ybWF0 PSVkKCVzKVxuIiwKKwkJCSBhZGRyLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIGZtdCwKKwkJCSBk cm1fZ2V0X2Zvcm1hdF9uYW1lKGZiLT5waXhlbF9mb3JtYXQpKTsKKworCS8qIGdldCByZWcgb2Zm c2V0ICovCisJcmVnX2N0cmwgPSBSRF9DSF9DVFJMKGNoKTsKKwlyZWdfYWRkciA9IFJEX0NIX0FE RFIoY2gpOworCXJlZ19zaXplID0gUkRfQ0hfU0laRShjaCk7CisJcmVnX3N0cmlkZSA9IFJEX0NI X1NUUklERShjaCk7CisJcmVnX3NwYWNlID0gUkRfQ0hfU1BBQ0UoY2gpOworCXJlZ19lbiA9IFJE X0NIX0VOKGNoKTsKKworCS8qCisJICogVE9ETzogc2V0IHJvdGF0aW9uCisJICovCisJd3JpdGVs KChmbXQgPDwgMTYpICYgMHgxZjAwMDAsIGJhc2UgKyByZWdfY3RybCk7CisJd3JpdGVsKGFkZHIs IGJhc2UgKyByZWdfYWRkcik7CisJd3JpdGVsKChpbl9oIDw8IDE2KSB8IHN0cmlkZSwgYmFzZSAr IHJlZ19zaXplKTsKKwl3cml0ZWwoc3RyaWRlLCBiYXNlICsgcmVnX3N0cmlkZSk7CisJd3JpdGVs KGluX2ggKiBzdHJpZGUsIGJhc2UgKyByZWdfc3BhY2UpOworCXdyaXRlbChBREVfRU5BQkxFLCBi YXNlICsgcmVnX2VuKTsKKwlhZGVfdXBkYXRlX3JlbG9hZF9iaXQoYmFzZSwgUkRNQV9PRlNUICsg Y2gsIDApOworfQorCitzdGF0aWMgdm9pZCBhZGVfcmRtYV9kaXNhYmxlKHZvaWQgX19pb21lbSAq YmFzZSwgdTMyIGNoKQoreworCXUzMiByZWdfZW47CisKKwkvKiBnZXQgcmVnIG9mZnNldCAqLwor CXJlZ19lbiA9IFJEX0NIX0VOKGNoKTsKKwl3cml0ZWwoMCwgYmFzZSArIHJlZ19lbik7CisJYWRl X3VwZGF0ZV9yZWxvYWRfYml0KGJhc2UsIFJETUFfT0ZTVCArIGNoLCAxKTsKK30KKworc3RhdGlj IHZvaWQgYWRlX2NsaXBfc2V0KHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGNoLCB1MzIgZmJfdywg dTMyIHgsCisJCQkgdTMyIGluX3csIHUzMiBpbl9oKQoreworCXUzMiBkaXNhYmxlX3ZhbDsKKwl1 MzIgY2xpcF9sZWZ0OworCXUzMiBjbGlwX3JpZ2h0OworCisJLyoKKwkgKiBjbGlwIHdpZHRoLCBu byBuZWVkIHRvIGNsaXAgaGVpZ2h0CisJICovCisJaWYgKGZiX3cgPT0gaW5fdykgeyAvKiBieXBh c3MgKi8KKwkJZGlzYWJsZV92YWwgPSAxOworCQljbGlwX2xlZnQgPSAwOworCQljbGlwX3JpZ2h0 ID0gMDsKKwl9IGVsc2UgeworCQlkaXNhYmxlX3ZhbCA9IDA7CisJCWNsaXBfbGVmdCA9IHg7CisJ CWNsaXBfcmlnaHQgPSBmYl93IC0gKHggKyBpbl93KSAtIDE7CisJfQorCisJRFJNX0RFQlVHX0RS SVZFUigiY2xpcCVkOiBjbGlwX2xlZnQ9JWQsIGNsaXBfcmlnaHQ9JWRcbiIsCisJCQkgY2ggKyAx LCBjbGlwX2xlZnQsIGNsaXBfcmlnaHQpOworCisJd3JpdGVsKGRpc2FibGVfdmFsLCBiYXNlICsg QURFX0NMSVBfRElTQUJMRShjaCkpOworCXdyaXRlbCgoZmJfdyAtIDEpIDw8IDE2IHwgKGluX2gg LSAxKSwgYmFzZSArIEFERV9DTElQX1NJWkUwKGNoKSk7CisJd3JpdGVsKGNsaXBfbGVmdCA8PCAx NiB8IGNsaXBfcmlnaHQsIGJhc2UgKyBBREVfQ0xJUF9TSVpFMShjaCkpOworCWFkZV91cGRhdGVf cmVsb2FkX2JpdChiYXNlLCBDTElQX09GU1QgKyBjaCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGFk ZV9jbGlwX2Rpc2FibGUodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgY2gpCit7CisJd3JpdGVsKDEs IGJhc2UgKyBBREVfQ0xJUF9ESVNBQkxFKGNoKSk7CisJYWRlX3VwZGF0ZV9yZWxvYWRfYml0KGJh c2UsIENMSVBfT0ZTVCArIGNoLCAxKTsKK30KKworc3RhdGljIGJvb2wgaGFzX0FscGhhX2NoYW5u ZWwoaW50IGZvcm1hdCkKK3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgQURFX0FSR0JfODg4 ODoKKwljYXNlIEFERV9BQkdSXzg4ODg6CisJY2FzZSBBREVfUkdCQV84ODg4OgorCWNhc2UgQURF X0JHUkFfODg4ODoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOwor CX0KK30KKworc3RhdGljIHZvaWQgYWRlX2dldF9ibGVuZGluZ19wYXJhbXModTMyIGZtdCwgdTgg Z2xiX2FscGhhLCB1OCAqYWxwX21vZGUsCisJCQkJICAgIHU4ICphbHBfc2VsLCB1OCAqdW5kZXJf YWxwX3NlbCkKK3sKKwlib29sIGhhc19hbHBoYSA9IGhhc19BbHBoYV9jaGFubmVsKGZtdCk7CisK KwkvKgorCSAqIGdldCBhbHBfbW9kZQorCSAqLworCWlmIChoYXNfYWxwaGEgJiYgZ2xiX2FscGhh IDwgMjU1KQorCQkqYWxwX21vZGUgPSBBREVfQUxQX1BJWEVMX0FORF9HTEI7CisJZWxzZSBpZiAo aGFzX2FscGhhKQorCQkqYWxwX21vZGUgPSBBREVfQUxQX1BJWEVMOworCWVsc2UKKwkJKmFscF9t b2RlID0gQURFX0FMUF9HTE9CQUw7CisKKwkvKgorCSAqIGdldCBhbHAgc2VsCisJICovCisJKmFs cF9zZWwgPSBBREVfQUxQX01VTF9DT0VGRl8zOyAvKiAxICovCisJKnVuZGVyX2FscF9zZWwgPSBB REVfQUxQX01VTF9DT0VGRl8yOyAvKiAwICovCit9CisKK3N0YXRpYyB2b2lkIGFkZV9jb21wb3Np dG9yX3JvdXRpbmdfc2V0KHZvaWQgX19pb21lbSAqYmFzZSwgdTggY2gsCisJCQkJICAgICAgIHUz MiB4MCwgdTMyIHkwLAorCQkJCSAgICAgICB1MzIgaW5fdywgdTMyIGluX2gsIHUzMiBmbXQpCit7 CisJdTggb3ZseV9jaCA9IDA7IC8qIFRPRE86IFRoaXMgaXMgdGhlIHpwb3MsIG9ubHkgb25lIHBs YW5lIG5vdyAqLworCXU4IGdsYl9hbHBoYSA9IDI1NTsKKwl1MzIgeDEgPSB4MCArIGluX3cgLSAx OworCXUzMiB5MSA9IHkwICsgaW5faCAtIDE7CisJdTMyIHZhbDsKKwl1OCBhbHBfc2VsOworCXU4 IHVuZGVyX2FscF9zZWw7CisJdTggYWxwX21vZGU7CisKKwlhZGVfZ2V0X2JsZW5kaW5nX3BhcmFt cyhmbXQsIGdsYl9hbHBoYSwgJmFscF9tb2RlLCAmYWxwX3NlbCwKKwkJCQkmdW5kZXJfYWxwX3Nl bCk7CisKKwkvKiBvdmVybGF5IHJvdXRpbmcgc2V0dGluZworCSAqLworCXdyaXRlbCh4MCA8PCAx NiB8IHkwLCBiYXNlICsgQURFX09WTFlfQ0hfWFkwKG92bHlfY2gpKTsKKwl3cml0ZWwoeDEgPDwg MTYgfCB5MSwgYmFzZSArIEFERV9PVkxZX0NIX1hZMShvdmx5X2NoKSk7CisJdmFsID0gKGNoICsg MSkgPDwgQ0hfU0VMX09GU1QgfCBCSVQoQ0hfRU5fT0ZTVCkgfAorCQlhbHBfc2VsIDw8IENIX0FM UF9TRUxfT0ZTVCB8CisJCXVuZGVyX2FscF9zZWwgPDwgQ0hfVU5ERVJfQUxQX1NFTF9PRlNUIHwK KwkJZ2xiX2FscGhhIDw8IENIX0FMUF9HQkxfT0ZTVCB8CisJCWFscF9tb2RlIDw8IENIX0FMUF9N T0RFX09GU1Q7CisJd3JpdGVsKHZhbCwgYmFzZSArIEFERV9PVkxZX0NIX0NUTChvdmx5X2NoKSk7 CisJLyogY29ubmVjdCB0aGlzIHBsYW5lL2NoYW5uZWwgdG8gb3ZlcmxheTIgY29tcG9zaXRvciAq LworCWFkZV91cGRhdGVfYml0cyhiYXNlICsgQURFX09WTFlfQ1RMLCBDSF9PVkxZX1NFTF9PRlNU KG92bHlfY2gpLAorCQkJQ0hfT1ZMWV9TRUxfTUFTSywgQ0hfT1ZMWV9TRUxfVkFMKE9VVF9PVkxZ KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZV9jb21wb3NpdG9yX3JvdXRpbmdfZGlzYWJsZSh2b2lk IF9faW9tZW0gKmJhc2UsIHUzMiBjaCkKK3sKKwl1OCBvdmx5X2NoID0gMDsgLyogVE9ETzogT25s eSBwcmltYXJ5IHBsYW5lIG5vdyAqLworCisJLyogZGlzYWJsZSB0aGlzIHBsYW5lL2NoYW5uZWwg Ki8KKwlhZGVfdXBkYXRlX2JpdHMoYmFzZSArIEFERV9PVkxZX0NIX0NUTChvdmx5X2NoKSwgQ0hf RU5fT0ZTVCwKKwkJCU1BU0soMSksIDApOworCS8qIGRpcy1jb25uZWN0IHRoaXMgcGxhbmUvY2hh bm5lbCBvZiBvdmVybGF5MiBjb21wb3NpdG9yICovCisJYWRlX3VwZGF0ZV9iaXRzKGJhc2UgKyBB REVfT1ZMWV9DVEwsIENIX09WTFlfU0VMX09GU1Qob3ZseV9jaCksCisJCQlDSF9PVkxZX1NFTF9N QVNLLCAwKTsKK30KKworLyoKKyAqIFR5cGljYWx5LCBhIGNoYW5uZWwgbG9va3MgbGlrZTogRE1B LS0+Y2xpcC0tPnNjYWxlLS0+Y3RyYW5zLS0+Y29tcG9zaXRvcgorICovCitzdGF0aWMgdm9pZCBh ZGVfdXBkYXRlX2NoYW5uZWwoc3RydWN0IGFkZV9wbGFuZSAqYXBsYW5lLAorCQkJICAgICAgIHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY3J0Y194LAorCQkJICAgICAgIGludCBjcnRj X3ksIHVuc2lnbmVkIGludCBjcnRjX3csCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNydGNfaCwg dTMyIHNyY194LAorCQkJICAgICAgIHUzMiBzcmNfeSwgdTMyIHNyY193LCB1MzIgc3JjX2gpCit7 CisJc3RydWN0IGFkZV9od19jdHggKmN0eCA9IGFwbGFuZS0+Y3R4OworCXZvaWQgX19pb21lbSAq YmFzZSA9IGN0eC0+YmFzZTsKKwl1MzIgZm10ID0gYWRlX2dldF9mb3JtYXQoZmItPnBpeGVsX2Zv cm1hdCk7CisJdTMyIGNoID0gYXBsYW5lLT5jaDsKKwl1MzIgaW5fdzsKKwl1MzIgaW5faDsKKwor CURSTV9ERUJVR19EUklWRVIoImNoYW5uZWwlZDogc3JjOiglZCwgJWQpLSVkeCVkLCBjcnRjOigl ZCwgJWQpLSVkeCVkIiwKKwkJCSBjaCArIDEsIHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oLAor CQkJIGNydGNfeCwgY3J0Y195LCBjcnRjX3csIGNydGNfaCk7CisKKwkvKiAxKSBETUEgc2V0dGlu ZyAqLworCWluX3cgPSBzcmNfdzsKKwlpbl9oID0gc3JjX2g7CisJYWRlX3JkbWFfc2V0KGJhc2Us IGZiLCBjaCwgc3JjX3ksIGluX2gsIGZtdCk7CisKKwkvKiAyKSBjbGlwIHNldHRpbmcgKi8KKwlh ZGVfY2xpcF9zZXQoYmFzZSwgY2gsIGZiLT53aWR0aCwgc3JjX3gsIGluX3csIGluX2gpOworCisJ LyogMykgVE9ETzogc2NhbGUgc2V0dGluZyBmb3Igb3ZlcmxheSBwbGFuZXMgKi8KKworCS8qIDQp IFRPRE86IGN0cmFuL2NzYyBzZXR0aW5nIGZvciBvdmVybGF5IHBsYW5lcyAqLworCisJLyogNSkg Y29tcG9zaXRvciByb3V0aW5nIHNldHRpbmcgKi8KKwlhZGVfY29tcG9zaXRvcl9yb3V0aW5nX3Nl dChiYXNlLCBjaCwgY3J0Y194LCBjcnRjX3ksIGluX3csIGluX2gsIGZtdCk7Cit9CisKK3N0YXRp YyB2b2lkIGFkZV9kaXNhYmxlX2NoYW5uZWwoc3RydWN0IGFkZV9wbGFuZSAqYXBsYW5lKQorewor CXN0cnVjdCBhZGVfaHdfY3R4ICpjdHggPSBhcGxhbmUtPmN0eDsKKwl2b2lkIF9faW9tZW0gKmJh c2UgPSBjdHgtPmJhc2U7CisJdTMyIGNoID0gYXBsYW5lLT5jaDsKKworCURSTV9ERUJVR19EUklW RVIoImRpc2FibGUgY2hhbm5lbCVkXG4iLCBjaCArIDEpOworCisJLyogZGlzYWJsZSByZWFkIERN QSAqLworCWFkZV9yZG1hX2Rpc2FibGUoYmFzZSwgY2gpOworCisJLyogZGlzYWJsZSBjbGlwICov CisJYWRlX2NsaXBfZGlzYWJsZShiYXNlLCBjaCk7CisKKwkvKiBkaXNhYmxlIGNvbXBvc2l0b3Ig cm91dGluZyAqLworCWFkZV9jb21wb3NpdG9yX3JvdXRpbmdfZGlzYWJsZShiYXNlLCBjaCk7Cit9 CisKK3N0YXRpYyBpbnQgYWRlX3BsYW5lX3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCisJCQkJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQoreworCS8q IGRvIG5vdGhpbmcgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRlX3BsYW5lX2Ns ZWFudXBfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJIGNvbnN0IHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwkvKiBkbyBub3RoaW5nICovCit9CisKK3N0YXRp YyBpbnQgYWRlX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJ CQkgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gc3RhdGUtPmZiOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5j cnRjOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwl1MzIgc3JjX3ggPSBz dGF0ZS0+c3JjX3ggPj4gMTY7CisJdTMyIHNyY195ID0gc3RhdGUtPnNyY195ID4+IDE2OworCXUz MiBzcmNfdyA9IHN0YXRlLT5zcmNfdyA+PiAxNjsKKwl1MzIgc3JjX2ggPSBzdGF0ZS0+c3JjX2gg Pj4gMTY7CisJaW50IGNydGNfeCA9IHN0YXRlLT5jcnRjX3g7CisJaW50IGNydGNfeSA9IHN0YXRl LT5jcnRjX3k7CisJdTMyIGNydGNfdyA9IHN0YXRlLT5jcnRjX3c7CisJdTMyIGNydGNfaCA9IHN0 YXRlLT5jcnRjX2g7CisJdTMyIGZtdDsKKworCWlmICghY3J0YyB8fCAhZmIpCisJCXJldHVybiAw OworCisJZm10ID0gYWRlX2dldF9mb3JtYXQoZmItPnBpeGVsX2Zvcm1hdCk7CisJaWYgKGZtdCA9 PSBBREVfRk9STUFUX05PVF9TVVBQT1JUKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNydGNfc3Rh dGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLT5zdGF0ZSwgY3J0Yyk7CisJaWYg KElTX0VSUihjcnRjX3N0YXRlKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwlp ZiAoc3JjX3cgIT0gY3J0Y193IHx8IHNyY19oICE9IGNydGNfaCkgeworCQlEUk1fRVJST1IoIlNj YWxlIG5vdCBzdXBwb3J0ISEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNy Y194ICsgc3JjX3cgPiBmYi0+d2lkdGggfHwKKwkgICAgc3JjX3kgKyBzcmNfaCA+IGZiLT5oZWln aHQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNydGNfeCA8IDAgfHwgY3J0Y195IDwgMCkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY3J0Y194ICsgY3J0Y193ID4gY3J0Y19zdGF0ZS0+ YWRqdXN0ZWRfbW9kZS5oZGlzcGxheSB8fAorCSAgICBjcnRjX3kgKyBjcnRjX2ggPiBjcnRjX3N0 YXRlLT5hZGp1c3RlZF9tb2RlLnZkaXNwbGF5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBhZGVfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRl KQoreworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUJKnN0YXRlCT0gcGxhbmUtPnN0YXRlOworCXN0 cnVjdCBhZGVfcGxhbmUgKmFwbGFuZSA9IHRvX2FkZV9wbGFuZShwbGFuZSk7CisKKwlhZGVfdXBk YXRlX2NoYW5uZWwoYXBsYW5lLCBzdGF0ZS0+ZmIsIHN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRj X3ksCisJCQkgICBzdGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0Y19oLAorCQkJICAgc3RhdGUtPnNy Y194ID4+IDE2LCBzdGF0ZS0+c3JjX3kgPj4gMTYsCisJCQkgICBzdGF0ZS0+c3JjX3cgPj4gMTYs IHN0YXRlLT5zcmNfaCA+PiAxNik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZV9wbGFuZV9hdG9taWNf ZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgYWRlX3BsYW5lICphcGxhbmUgPSB0b19h ZGVfcGxhbmUocGxhbmUpOworCisJYWRlX2Rpc2FibGVfY2hhbm5lbChhcGxhbmUpOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgYWRlX3BsYW5lX2hlbHBl cl9mdW5jcyA9IHsKKwkucHJlcGFyZV9mYiA9IGFkZV9wbGFuZV9wcmVwYXJlX2ZiLAorCS5jbGVh bnVwX2ZiID0gYWRlX3BsYW5lX2NsZWFudXBfZmIsCisJLmF0b21pY19jaGVjayA9IGFkZV9wbGFu ZV9hdG9taWNfY2hlY2ssCisJLmF0b21pY191cGRhdGUgPSBhZGVfcGxhbmVfYXRvbWljX3VwZGF0 ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBhZGVfcGxhbmVfYXRvbWljX2Rpc2FibGUsCit9OworCitz dGF0aWMgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBhZGVfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0 ZV9wbGFuZQk9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFu ZQk9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLnNldF9wcm9wZXJ0eSA9IGRy bV9hdG9taWNfaGVscGVyX3BsYW5lX3NldF9wcm9wZXJ0eSwKKwkuZGVzdHJveSA9IGRybV9wbGFu ZV9jbGVhbnVwLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAorCS5h dG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRl X3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5l X2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgaW50IGFkZV9wbGFuZV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHN0cnVjdCBhZGVfcGxhbmUgKmFwbGFuZSwKKwkJCSAgZW51bSBkcm1f cGxhbmVfdHlwZSB0eXBlKQoreworCWNvbnN0IHUzMiAqZm10czsKKwl1MzIgZm10c19jbnQ7CisJ aW50IHJldCA9IDA7CisKKwkvKiBnZXQgIHByb3BlcnRpZXMgKi8KKwlmbXRzX2NudCA9IGFkZV9n ZXRfY2hhbm5lbF9mb3JtYXRzKGFwbGFuZS0+Y2gsICZmbXRzKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRldiwgJmFwbGFuZS0+ YmFzZSwgMSwgJmFkZV9wbGFuZV9mdW5jcywKKwkJCQkgICAgICAgZm10cywgZm10c19jbnQsIHR5 cGUsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsIHRvIGluaXQgcGxhbmUs IGNoPSVkXG4iLCBhcGxhbmUtPmNoKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fcGxhbmVf aGVscGVyX2FkZCgmYXBsYW5lLT5iYXNlLCAmYWRlX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisKKwly ZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhZGVfZHRzX3BhcnNlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsIHN0cnVjdCBhZGVfaHdfY3R4ICpjdHgpCiB7CiAJc3RydWN0IHJlc291cmNl ICpyZXM7CkBAIC00MTYsNyArOTI0LDEwIEBAIGludCBhZGVfZHJtX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKIAlzdHJ1Y3QgYWRlX2RhdGEgKmFkZTsKIAlzdHJ1Y3QgYWRlX2h3X2N0eCAq Y3R4OwogCXN0cnVjdCBhZGVfY3J0YyAqYWNydGM7CisJc3RydWN0IGFkZV9wbGFuZSAqYXBsYW5l OworCWVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZTsKIAlpbnQgcmV0OworCWludCBpOwogCiAJYWRl ID0gZGV2bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKmFkZSksIEdGUF9LRVJORUwpOwogCWlm ICghYWRlKSB7CkBAIC00MzQsNiArOTQ1LDI4IEBAIGludCBhZGVfZHJtX2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJLyoKKwkgKiBwbGFu ZSBpbml0CisJICogVE9ETzogTm93IG9ubHkgc3VwcG9ydCBwcmltYXJ5IHBsYW5lLCBvdmVybGF5 IHBsYW5lcworCSAqIG5lZWQgdG8gZG8uCisJICovCisJZm9yIChpID0gMDsgaSA8IEFERV9DSF9O VU07IGkrKykgeworCQlhcGxhbmUgPSAmYWRlLT5hcGxhbmVbaV07CisJCWFwbGFuZS0+Y2ggPSBp OworCQlhcGxhbmUtPmN0eCA9IGN0eDsKKwkJdHlwZSA9IGkgPT0gUFJJTUFSWV9DSCA/IERSTV9Q TEFORV9UWVBFX1BSSU1BUlkgOgorCQkJRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKKworCQlyZXQg PSBhZGVfcGxhbmVfaW5pdChkZXYsIGFwbGFuZSwgdHlwZSk7CisJCWlmIChyZXQpCisJCQlyZXR1 cm4gcmV0OworCX0KKworCS8qIGNydGMgaW5pdCAqLworCXJldCA9IGFkZV9jcnRjX2luaXQoZGV2 LCAmYWNydGMtPmJhc2UsICZhZGUtPmFwbGFuZVtQUklNQVJZX0NIXS5iYXNlKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCiAJcmV0dXJuIDA7CiB9CiAKLS0gCjEuOS4xCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK