From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xinliang Liu Subject: [PATCH v4 04/11] drm/hisilicon: Add plane driver for ADE Date: Sat, 6 Feb 2016 11:24:51 +0800 Message-ID: <1454729098-79807-5-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 QWRkIHBsYW5lIGZ1bmNzIGFuZCBoZWxwZXIgZnVuY3MgZm9yIEFERS4KCnY0OiBOb25lLgp2MzoK LSBBIGZldyBjbGVhbnVwLgp2MjoKLSBSZW1vdmUgYWJ0cmFjdGlvbiBsYXllci4KClNpZ25lZC1v ZmYtYnk6IFhpbmxpYW5nIExpdSA8eGlubGlhbmcubGl1QGxpbmFyby5vcmc+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL2hpc2lsaWNvbi9raXJpbi9raXJpbl9kcm1fYWRlLmMgfCA1MzUgKysrKysrKysr KysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgNTM0IGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmluL2tp cmluX2RybV9hZGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24va2lyaW4va2lyaW5fZHJt X2FkZS5jCmluZGV4IGI0NTE0OTYxNjcxNi4uZmY3MGYxYzNkZDc4IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2tpcmluL2tpcmluX2RybV9hZGUuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaGlzaWxpY29uL2tpcmluL2tpcmluX2RybV9hZGUuYwpAQCAtMjQsMTMgKzI0LDIz IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CiAKICNpbmNsdWRlICJraXJp bl9kcm1fZHJ2LmgiCiAjaW5jbHVkZSAia2lyaW5fYWRlX3JlZy5oIgogCisjZGVmaW5lIFBSSU1B UllfQ0gJQURFX0NIMSAvKiBwcmltYXJ5IHBsYW5lICovCisjZGVmaW5lIE9VVF9PVkxZCUFERV9P VkxZMiAvKiBvdXRwdXQgb3ZlcmxheSBjb21wb3NpdG9yICovCisjZGVmaW5lIEFERV9ERUJVRwkx CisKICNkZWZpbmUgdG9fYWRlX2NydGMoY3J0YykgXAogCWNvbnRhaW5lcl9vZihjcnRjLCBzdHJ1 Y3QgYWRlX2NydGMsIGJhc2UpCiAKKyNkZWZpbmUgdG9fYWRlX3BsYW5lKHBsYW5lKSBcCisJY29u dGFpbmVyX29mKHBsYW5lLCBzdHJ1Y3QgYWRlX3BsYW5lLCBiYXNlKQorCiBzdHJ1Y3QgYWRlX2h3 X2N0eCB7CiAJdm9pZCBfX2lvbWVtICAqYmFzZTsKIAl2b2lkIF9faW9tZW0gICptZWRpYV9iYXNl OwpAQCAtNDksMTEgKzU5LDc2IEBAIHN0cnVjdCBhZGVfY3J0YyB7CiAJdTMyIG91dF9mb3JtYXQ7 CiB9OwogCitzdHJ1Y3QgYWRlX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lIGJhc2U7CisJdm9p ZCAqY3R4OworCXU4IGNoOyAvKiBjaGFubmVsICovCit9OworCiBzdHJ1Y3QgYWRlX2RhdGEgewog CXN0cnVjdCBhZGVfY3J0YyBhY3J0YzsKKwlzdHJ1Y3QgYWRlX3BsYW5lIGFwbGFuZVtBREVfQ0hf TlVNXTsKIAlzdHJ1Y3QgYWRlX2h3X2N0eCBjdHg7CiB9OwogCisvKiBhZGUtZm9ybWF0IGluZm86 ICovCitzdHJ1Y3QgYWRlX2Zvcm1hdCB7CisJdTMyIHBpeGVsX2Zvcm1hdDsKKwllbnVtIGFkZV9m Yl9mb3JtYXQgYWRlX2Zvcm1hdDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRlX2Zvcm1h dCBhZGVfZm9ybWF0c1tdID0geworCS8qIDE2YnBwIFJHQjogKi8KKwl7IERSTV9GT1JNQVRfUkdC NTY1LCBBREVfUkdCXzU2NSB9LAorCXsgRFJNX0ZPUk1BVF9CR1I1NjUsIEFERV9CR1JfNTY1IH0s CisJLyogMjRicHAgUkdCOiAqLworCXsgRFJNX0ZPUk1BVF9SR0I4ODgsIEFERV9SR0JfODg4IH0s CisJeyBEUk1fRk9STUFUX0JHUjg4OCwgQURFX0JHUl84ODggfSwKKwkvKiAzMmJwcCBbQV1SR0I6 ICovCisJeyBEUk1fRk9STUFUX1hSR0I4ODg4LCBBREVfWFJHQl84ODg4IH0sCisJeyBEUk1fRk9S TUFUX1hCR1I4ODg4LCBBREVfWEJHUl84ODg4IH0sCisJeyBEUk1fRk9STUFUX1JHQkE4ODg4LCBB REVfUkdCQV84ODg4IH0sCisJeyBEUk1fRk9STUFUX0JHUkE4ODg4LCBBREVfQkdSQV84ODg4IH0s CisJeyBEUk1fRk9STUFUX0FSR0I4ODg4LCBBREVfQVJHQl84ODg4IH0sCisJeyBEUk1fRk9STUFU X0FCR1I4ODg4LCBBREVfQUJHUl84ODg4IH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGNoYW5u ZWxfZm9ybWF0czFbXSA9IHsKKwkvKiBjaGFubmVsIDEsMiwzLDQgKi8KKwlEUk1fRk9STUFUX1JH QjU2NSwgRFJNX0ZPUk1BVF9CR1I1NjUsIERSTV9GT1JNQVRfUkdCODg4LAorCURSTV9GT1JNQVRf QkdSODg4LCBEUk1fRk9STUFUX1hSR0I4ODg4LCBEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9G T1JNQVRfUkdCQTg4ODgsIERSTV9GT1JNQVRfQkdSQTg4ODgsIERSTV9GT1JNQVRfQVJHQjg4ODgs CisJRFJNX0ZPUk1BVF9BQkdSODg4OAorfTsKKwordTMyIGFkZV9nZXRfY2hhbm5lbF9mb3JtYXRz KHU4IGNoLCBjb25zdCB1MzIgKipmb3JtYXRzKQoreworCXN3aXRjaCAoY2gpIHsKKwljYXNlIEFE RV9DSDE6CisJCSpmb3JtYXRzID0gY2hhbm5lbF9mb3JtYXRzMTsKKwkJcmV0dXJuIEFSUkFZX1NJ WkUoY2hhbm5lbF9mb3JtYXRzMSk7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJubyB0aGlzIGNo YW5uZWwgJWRcbiIsIGNoKTsKKwkJKmZvcm1hdHMgPSBOVUxMOworCQlyZXR1cm4gMDsKKwl9Cit9 CisKKy8qIGNvbnZlcnQgZnJvbSBmb3VyY2MgZm9ybWF0IHRvIGFkZSBmb3JtYXQgKi8KK3N0YXRp YyB1MzIgYWRlX2dldF9mb3JtYXQodTMyIHBpeGVsX2Zvcm1hdCkKK3sKKwlpbnQgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkZV9mb3JtYXRzKTsgaSsrKQorCQlpZiAoYWRlX2Zv cm1hdHNbaV0ucGl4ZWxfZm9ybWF0ID09IHBpeGVsX2Zvcm1hdCkKKwkJCXJldHVybiBhZGVfZm9y bWF0c1tpXS5hZGVfZm9ybWF0OworCisJLyogbm90IGZvdW5kICovCisJRFJNX0VSUk9SKCJOb3Qg Zm91bmQgcGl4ZWwgZm9ybWF0ISFmb3VyY2NfZm9ybWF0PSAlZFxuIiwKKwkJICBwaXhlbF9mb3Jt YXQpOworCXJldHVybiBBREVfRk9STUFUX05PVF9TVVBQT1JUOworfQorCiBzdGF0aWMgdm9pZCBh ZGVfdXBkYXRlX3JlbG9hZF9iaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgYml0X251bSwgdTMy IHZhbCkKIHsKIAl1MzIgYml0X29mc3QsIHJlZ19udW07CkBAIC04Niw3ICsxNjEsNyBAQCBzdGF0 aWMgdm9pZCBhZGVfaW5pdChzdHJ1Y3QgYWRlX2h3X2N0eCAqY3R4KQogCS8qIGNsZWFyIG92ZXJs YXkgKi8KIAl3cml0ZWwoMCwgYmFzZSArIEFERV9PVkxZMV9UUkFOU19DRkcpOwogCXdyaXRlbCgw LCBiYXNlICsgQURFX09WTFlfQ1RMKTsKLQl3cml0ZWwoMCwgYmFzZSArIEFERV9PVkxZWF9DVEwo QURFX09WTFkyKSk7CisJd3JpdGVsKDAsIGJhc2UgKyBBREVfT1ZMWVhfQ1RMKE9VVF9PVkxZKSk7 CiAJLyogY2xlYXIgcmVzZXQgYW5kIHJlbG9hZCByZWdzICovCiAJd3JpdGVsKE1BU0soMzIpLCBi YXNlICsgQURFX1NPRlRfUlNUX1NFTCgwKSk7CiAJd3JpdGVsKE1BU0soMzIpLCBiYXNlICsgQURF X1NPRlRfUlNUX1NFTCgxKSk7CkBAIC0xNDQsNiArMjE5LDEwIEBAIHN0YXRpYyB2b2lkIGFkZV9s ZGlfc2V0X21vZGUoc3RydWN0IGFkZV9jcnRjICphY3J0YywKIAkJCSAgbW9kZS0+Y2xvY2sgKiAx MDAwLCByZXQpOwogCWFkal9tb2RlLT5jbG9jayA9IGNsa19nZXRfcmF0ZShjdHgtPmFkZV9waXhf Y2xrKSAvIDEwMDA7CiAKKwkvKiBzZXQgb3ZlcmxheSBjb21wb3NpdG9yIG91dHB1dCBzaXplICov CisJd3JpdGVsKCgod2lkdGggLSAxKSA8PCBPVVRQVVRfWFNJWkVfT0ZTVCkgfCAoaGVpZ2h0IC0g MSksCisJICAgICAgIGJhc2UgKyBBREVfT1ZMWV9PVVRQVVRfU0laRShPVVRfT1ZMWSkpOworCiAJ LyogY3RyYW42IHNldHRpbmcgKi8KIAl3cml0ZWwoQ1RSQU5fQllQQVNTX09OLCBiYXNlICsgQURF X0NUUkFOX0RJUyhBREVfQ1RSQU42KSk7CiAJIC8qIHRoZSBjb25maWd1cmVkIHZhbHVlIGlzIGFj dHVhbCB2YWx1ZSAtIDEgKi8KQEAgLTIyMiw2ICszMDEsMTAgQEAgc3RhdGljIHZvaWQgYWRlX2Rp c3BsYXlfZW5hYmxlKHN0cnVjdCBhZGVfY3J0YyAqYWNydGMpCiAJdm9pZCBfX2lvbWVtICpiYXNl ID0gY3R4LT5iYXNlOwogCXUzMiBvdXRfZm10ID0gYWNydGMtPm91dF9mb3JtYXQ7CiAKKwkvKiBl bmFibGUgb3V0cHV0IG92ZXJsYXkgY29tcG9zaXRvciAqLworCXdyaXRlbChBREVfRU5BQkxFLCBi YXNlICsgQURFX09WTFlYX0NUTChPVVRfT1ZMWSkpOworCWFkZV91cGRhdGVfcmVsb2FkX2JpdChi YXNlLCBPVkxZX09GU1QgKyBPVVRfT1ZMWSwgMCk7CisKIAkvKiBkaXNwbGF5IHNvdXJjZSBzZXR0 aW5nICovCiAJd3JpdGVsKERJU1BfU1JDX09WTFkyLCBiYXNlICsgQURFX0RJU1BfU1JDX0NGRyk7 CiAKQEAgLTIzNSw2ICszMTgsOTcgQEAgc3RhdGljIHZvaWQgYWRlX2Rpc3BsYXlfZW5hYmxlKHN0 cnVjdCBhZGVfY3J0YyAqYWNydGMpCiAJd3JpdGVsKERTSV9QQ0xLX09OLCBiYXNlICsgTERJX0hE TUlfRFNJX0dUKTsKIH0KIAorI2lmIEFERV9ERUJVRworc3RhdGljIHZvaWQgYWRlX3JkbWFfZHVt cF9yZWdzKHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGNoKQoreworCXUzMiByZWdfY3RybCwgcmVn X2FkZHIsIHJlZ19zaXplLCByZWdfc3RyaWRlLCByZWdfc3BhY2UsIHJlZ19lbjsKKwl1MzIgdmFs OworCisJcmVnX2N0cmwgPSBSRF9DSF9DVFJMKGNoKTsKKwlyZWdfYWRkciA9IFJEX0NIX0FERFIo Y2gpOworCXJlZ19zaXplID0gUkRfQ0hfU0laRShjaCk7CisJcmVnX3N0cmlkZSA9IFJEX0NIX1NU UklERShjaCk7CisJcmVnX3NwYWNlID0gUkRfQ0hfU1BBQ0UoY2gpOworCXJlZ19lbiA9IFJEX0NI X0VOKGNoKTsKKworCXZhbCA9IGFkZV9yZWFkX3JlbG9hZF9iaXQoYmFzZSwgUkRNQV9PRlNUICsg Y2gpOworCURSTV9ERUJVR19EUklWRVIoIltyZG1hJWRdOiByZWxvYWQoJWQpXG4iLCBjaCArIDEs IHZhbCk7CisJdmFsID0gcmVhZGwoYmFzZSArIHJlZ19jdHJsKTsKKwlEUk1fREVCVUdfRFJJVkVS KCJbcmRtYSVkXTogcmVnX2N0cmwoMHglMDh4KVxuIiwgY2ggKyAxLCB2YWwpOworCXZhbCA9IHJl YWRsKGJhc2UgKyByZWdfYWRkcik7CisJRFJNX0RFQlVHX0RSSVZFUigiW3JkbWElZF06IHJlZ19h ZGRyKDB4JTA4eClcbiIsIGNoICsgMSwgdmFsKTsKKwl2YWwgPSByZWFkbChiYXNlICsgcmVnX3Np emUpOworCURSTV9ERUJVR19EUklWRVIoIltyZG1hJWRdOiByZWdfc2l6ZSgweCUwOHgpXG4iLCBj aCArIDEsIHZhbCk7CisJdmFsID0gcmVhZGwoYmFzZSArIHJlZ19zdHJpZGUpOworCURSTV9ERUJV R19EUklWRVIoIltyZG1hJWRdOiByZWdfc3RyaWRlKDB4JTA4eClcbiIsIGNoICsgMSwgdmFsKTsK Kwl2YWwgPSByZWFkbChiYXNlICsgcmVnX3NwYWNlKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJbcmRt YSVkXTogcmVnX3NwYWNlKDB4JTA4eClcbiIsIGNoICsgMSwgdmFsKTsKKwl2YWwgPSByZWFkbChi YXNlICsgcmVnX2VuKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJbcmRtYSVkXTogcmVnX2VuKDB4JTA4 eClcbiIsIGNoICsgMSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgYWRlX2NsaXBfZHVtcF9yZWdz KHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGNoKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBhZGVf cmVhZF9yZWxvYWRfYml0KGJhc2UsIENMSVBfT0ZTVCArIGNoKTsKKwlEUk1fREVCVUdfRFJJVkVS KCJbY2xpcCVkXTogcmVsb2FkKCVkKVxuIiwgY2ggKyAxLCB2YWwpOworCXZhbCA9IHJlYWRsKGJh c2UgKyBBREVfQ0xJUF9ESVNBQkxFKGNoKSk7CisJRFJNX0RFQlVHX0RSSVZFUigiW2NsaXAlZF06 IHJlZ19jbGlwX2Rpc2FibGUoMHglMDh4KVxuIiwgY2ggKyAxLCB2YWwpOworCXZhbCA9IHJlYWRs KGJhc2UgKyBBREVfQ0xJUF9TSVpFMChjaCkpOworCURSTV9ERUJVR19EUklWRVIoIltjbGlwJWRd OiByZWdfY2xpcF9zaXplMCgweCUwOHgpXG4iLCBjaCArIDEsIHZhbCk7CisJdmFsID0gcmVhZGwo YmFzZSArIEFERV9DTElQX1NJWkUxKGNoKSk7CisJRFJNX0RFQlVHX0RSSVZFUigiW2NsaXAlZF06 IHJlZ19jbGlwX3NpemUxKDB4JTA4eClcbiIsIGNoICsgMSwgdmFsKTsKK30KKworc3RhdGljIHZv aWQgYWRlX2NvbXBvc2l0b3Jfcm91dGluZ19kdW1wX3JlZ3Modm9pZCBfX2lvbWVtICpiYXNlLCB1 MzIgY2gpCit7CisJdTggb3ZseV9jaCA9IDA7IC8qIFRPRE86IE9ubHkgcHJpbWFyeSBwbGFuZSBu b3cgKi8KKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwoYmFzZSArIEFERV9PVkxZX0NIX1hZMChv dmx5X2NoKSk7CisJRFJNX0RFQlVHX0RSSVZFUigiW292ZXJsYXkgY2glZF06IHJlZ19jaF94eTAo MHglMDh4KVxuIiwgb3ZseV9jaCwgdmFsKTsKKwl2YWwgPSByZWFkbChiYXNlICsgQURFX09WTFlf Q0hfWFkxKG92bHlfY2gpKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJbb3ZlcmxheSBjaCVkXTogcmVn X2NoX3h5MSgweCUwOHgpXG4iLCBvdmx5X2NoLCB2YWwpOworCXZhbCA9IHJlYWRsKGJhc2UgKyBB REVfT1ZMWV9DSF9DVEwob3ZseV9jaCkpOworCURSTV9ERUJVR19EUklWRVIoIltvdmVybGF5IGNo JWRdOiByZWdfY2hfY3RsKDB4JTA4eClcbiIsIG92bHlfY2gsIHZhbCk7Cit9CisKK3N0YXRpYyB2 b2lkIGFkZV9kdW1wX292ZXJsYXlfY29tcG9zaXRvcl9yZWdzKHZvaWQgX19pb21lbSAqYmFzZSwg dTMyIGNvbXApCit7CisJdTMyIHZhbDsKKworCXZhbCA9IGFkZV9yZWFkX3JlbG9hZF9iaXQoYmFz ZSwgT1ZMWV9PRlNUICsgY29tcCk7CisJRFJNX0RFQlVHX0RSSVZFUigiW292ZXJsYXklZF06IHJl bG9hZCglZClcbiIsIGNvbXAgKyAxLCB2YWwpOworCXdyaXRlbChBREVfRU5BQkxFLCBiYXNlICsg QURFX09WTFlYX0NUTChjb21wKSk7CisJRFJNX0RFQlVHX0RSSVZFUigiW292ZXJsYXklZF06IHJl Z19jdGwoMHglMDh4KVxuIiwgY29tcCArIDEsIHZhbCk7CisJdmFsID0gcmVhZGwoYmFzZSArIEFE RV9PVkxZX0NUTCk7CisJRFJNX0RFQlVHX0RSSVZFUigib3ZseV9jdGwoMHglMDh4KVxuIiwgdmFs KTsKK30KKworc3RhdGljIHZvaWQgYWRlX2R1bXBfcmVncyh2b2lkIF9faW9tZW0gKmJhc2UpCit7 CisJdTMyIGk7CisKKwkvKiBkdW1wIGNoYW5uZWwgcmVncyAqLworCWZvciAoaSA9IDA7IGkgPCBB REVfQ0hfTlVNOyBpKyspIHsKKwkJLyogZHVtcCByZG1hIHJlZ3MgKi8KKwkJYWRlX3JkbWFfZHVt cF9yZWdzKGJhc2UsIGkpOworCisJCS8qIGR1bXAgY2xpcCByZWdzICovCisJCWFkZV9jbGlwX2R1 bXBfcmVncyhiYXNlLCBpKTsKKworCQkvKiBkdW1wIGNvbXBvc2l0b3Igcm91dGluZyByZWdzICov CisJCWFkZV9jb21wb3NpdG9yX3JvdXRpbmdfZHVtcF9yZWdzKGJhc2UsIGkpOworCX0KKworCS8q IGR1bXAgb3ZlcmxheSBjb21wb3NpdG9yIHJlZ3MgKi8KKwlhZGVfZHVtcF9vdmVybGF5X2NvbXBv c2l0b3JfcmVncyhiYXNlLCBPVVRfT1ZMWSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgYWRlX2R1 bXBfcmVncyh2b2lkIF9faW9tZW0gKmJhc2UpIHsgfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGFk ZV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGFkZV9jcnRj ICphY3J0YyA9IHRvX2FkZV9jcnRjKGNydGMpOwpAQCAtMjUyLDYgKzQyNiw3IEBAIHN0YXRpYyB2 b2lkIGFkZV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAKIAlhZGVfc2V0X21l ZGlhbm9jX3FvcyhhY3J0Yyk7CiAJYWRlX2Rpc3BsYXlfZW5hYmxlKGFjcnRjKTsKKwlhZGVfZHVt cF9yZWdzKGN0eC0+YmFzZSk7CiAJYWNydGMtPmVuYWJsZSA9IHRydWU7CiB9CiAKQEAgLTMwNiw2 ICs0ODEsNyBAQCBzdGF0aWMgdm9pZCBhZGVfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9j cnRjICpjcnRjLAogCiAJLyogb25seSBjcnRjIGlzIGVhbmJsZWQgcmVncyB0YWtlIGVmZmVjdCAq LwogCWlmIChhY3J0Yy0+ZW5hYmxlKSB7CisJCWFkZV9kdW1wX3JlZ3MoYmFzZSk7CiAJCS8qIGZs dXNoIGFkZSByZWdpdHN0ZXJzICovCiAJCXdyaXRlbChBREVfRU5BQkxFLCBiYXNlICsgQURFX0VO KTsKIAl9CkBAIC0zNjIsNiArNTM4LDMzOCBAQCBzdGF0aWMgaW50IGFkZV9jcnRjX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9jcnRjICpjcnRjLAogCXJldHVybiAwOwog fQogCitzdGF0aWMgdm9pZCBhZGVfcmRtYV9zZXQodm9pZCBfX2lvbWVtICpiYXNlLCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSB1MzIgY2gsIHUzMiB5LCB1MzIgaW5faCwgdTMyIGZt dCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpvYmogPSBkcm1fZmJfY21hX2dldF9n ZW1fb2JqKGZiLCAwKTsKKwl1MzIgcmVnX2N0cmwsIHJlZ19hZGRyLCByZWdfc2l6ZSwgcmVnX3N0 cmlkZSwgcmVnX3NwYWNlLCByZWdfZW47CisJdTMyIHN0cmlkZSA9IGZiLT5waXRjaGVzWzBdOwor CXUzMiBhZGRyID0gKHUzMilvYmotPnBhZGRyICsgeSAqIHN0cmlkZTsKKworCURSTV9ERUJVR19E UklWRVIoInJkbWElZDogKHk9JWQsIGhlaWdodD0lZCksIHN0cmlkZT0lZCwgcGFkZHI9MHgleFxu IiwKKwkJCSBjaCArIDEsIHksIGluX2gsIHN0cmlkZSwgKHUzMilvYmotPnBhZGRyKTsKKwlEUk1f REVCVUdfRFJJVkVSKCJhZGRyPTB4JXgsIGZiOiVkeCVkLCBwaXhlbF9mb3JtYXQ9JWQoJXMpXG4i LAorCQkJIGFkZHIsIGZiLT53aWR0aCwgZmItPmhlaWdodCwgZm10LAorCQkJIGRybV9nZXRfZm9y bWF0X25hbWUoZmItPnBpeGVsX2Zvcm1hdCkpOworCisJLyogZ2V0IHJlZyBvZmZzZXQgKi8KKwly ZWdfY3RybCA9IFJEX0NIX0NUUkwoY2gpOworCXJlZ19hZGRyID0gUkRfQ0hfQUREUihjaCk7CisJ cmVnX3NpemUgPSBSRF9DSF9TSVpFKGNoKTsKKwlyZWdfc3RyaWRlID0gUkRfQ0hfU1RSSURFKGNo KTsKKwlyZWdfc3BhY2UgPSBSRF9DSF9TUEFDRShjaCk7CisJcmVnX2VuID0gUkRfQ0hfRU4oY2gp OworCisJLyoKKwkgKiBUT0RPOiBzZXQgcm90YXRpb24KKwkgKi8KKwl3cml0ZWwoKGZtdCA8PCAx NikgJiAweDFmMDAwMCwgYmFzZSArIHJlZ19jdHJsKTsKKwl3cml0ZWwoYWRkciwgYmFzZSArIHJl Z19hZGRyKTsKKwl3cml0ZWwoKGluX2ggPDwgMTYpIHwgc3RyaWRlLCBiYXNlICsgcmVnX3NpemUp OworCXdyaXRlbChzdHJpZGUsIGJhc2UgKyByZWdfc3RyaWRlKTsKKwl3cml0ZWwoaW5faCAqIHN0 cmlkZSwgYmFzZSArIHJlZ19zcGFjZSk7CisJd3JpdGVsKEFERV9FTkFCTEUsIGJhc2UgKyByZWdf ZW4pOworCWFkZV91cGRhdGVfcmVsb2FkX2JpdChiYXNlLCBSRE1BX09GU1QgKyBjaCwgMCk7Cit9 CisKK3N0YXRpYyB2b2lkIGFkZV9yZG1hX2Rpc2FibGUodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIg Y2gpCit7CisJdTMyIHJlZ19lbjsKKworCS8qIGdldCByZWcgb2Zmc2V0ICovCisJcmVnX2VuID0g UkRfQ0hfRU4oY2gpOworCXdyaXRlbCgwLCBiYXNlICsgcmVnX2VuKTsKKwlhZGVfdXBkYXRlX3Jl bG9hZF9iaXQoYmFzZSwgUkRNQV9PRlNUICsgY2gsIDEpOworfQorCitzdGF0aWMgdm9pZCBhZGVf Y2xpcF9zZXQodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgY2gsIHUzMiBmYl93LCB1MzIgeCwKKwkJ CSB1MzIgaW5fdywgdTMyIGluX2gpCit7CisJdTMyIGRpc2FibGVfdmFsOworCXUzMiBjbGlwX2xl ZnQ7CisJdTMyIGNsaXBfcmlnaHQ7CisKKwkvKgorCSAqIGNsaXAgd2lkdGgsIG5vIG5lZWQgdG8g Y2xpcCBoZWlnaHQKKwkgKi8KKwlpZiAoZmJfdyA9PSBpbl93KSB7IC8qIGJ5cGFzcyAqLworCQlk aXNhYmxlX3ZhbCA9IDE7CisJCWNsaXBfbGVmdCA9IDA7CisJCWNsaXBfcmlnaHQgPSAwOworCX0g ZWxzZSB7CisJCWRpc2FibGVfdmFsID0gMDsKKwkJY2xpcF9sZWZ0ID0geDsKKwkJY2xpcF9yaWdo dCA9IGZiX3cgLSAoeCArIGluX3cpIC0gMTsKKwl9CisKKwlEUk1fREVCVUdfRFJJVkVSKCJjbGlw JWQ6IGNsaXBfbGVmdD0lZCwgY2xpcF9yaWdodD0lZFxuIiwKKwkJCSBjaCArIDEsIGNsaXBfbGVm dCwgY2xpcF9yaWdodCk7CisKKwl3cml0ZWwoZGlzYWJsZV92YWwsIGJhc2UgKyBBREVfQ0xJUF9E SVNBQkxFKGNoKSk7CisJd3JpdGVsKChmYl93IC0gMSkgPDwgMTYgfCAoaW5faCAtIDEpLCBiYXNl ICsgQURFX0NMSVBfU0laRTAoY2gpKTsKKwl3cml0ZWwoY2xpcF9sZWZ0IDw8IDE2IHwgY2xpcF9y aWdodCwgYmFzZSArIEFERV9DTElQX1NJWkUxKGNoKSk7CisJYWRlX3VwZGF0ZV9yZWxvYWRfYml0 KGJhc2UsIENMSVBfT0ZTVCArIGNoLCAwKTsKK30KKworc3RhdGljIHZvaWQgYWRlX2NsaXBfZGlz YWJsZSh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBjaCkKK3sKKwl3cml0ZWwoMSwgYmFzZSArIEFE RV9DTElQX0RJU0FCTEUoY2gpKTsKKwlhZGVfdXBkYXRlX3JlbG9hZF9iaXQoYmFzZSwgQ0xJUF9P RlNUICsgY2gsIDEpOworfQorCitzdGF0aWMgYm9vbCBoYXNfQWxwaGFfY2hhbm5lbChpbnQgZm9y bWF0KQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBBREVfQVJHQl84ODg4OgorCWNhc2Ug QURFX0FCR1JfODg4ODoKKwljYXNlIEFERV9SR0JBXzg4ODg6CisJY2FzZSBBREVfQkdSQV84ODg4 OgorCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitz dGF0aWMgdm9pZCBhZGVfZ2V0X2JsZW5kaW5nX3BhcmFtcyh1MzIgZm10LCB1OCBnbGJfYWxwaGEs IHU4ICphbHBfbW9kZSwKKwkJCQkgICAgdTggKmFscF9zZWwsIHU4ICp1bmRlcl9hbHBfc2VsKQor eworCWJvb2wgaGFzX2FscGhhID0gaGFzX0FscGhhX2NoYW5uZWwoZm10KTsKKworCS8qCisJICog Z2V0IGFscF9tb2RlCisJICovCisJaWYgKGhhc19hbHBoYSAmJiBnbGJfYWxwaGEgPCAyNTUpCisJ CSphbHBfbW9kZSA9IEFERV9BTFBfUElYRUxfQU5EX0dMQjsKKwllbHNlIGlmIChoYXNfYWxwaGEp CisJCSphbHBfbW9kZSA9IEFERV9BTFBfUElYRUw7CisJZWxzZQorCQkqYWxwX21vZGUgPSBBREVf QUxQX0dMT0JBTDsKKworCS8qCisJICogZ2V0IGFscCBzZWwKKwkgKi8KKwkqYWxwX3NlbCA9IEFE RV9BTFBfTVVMX0NPRUZGXzM7IC8qIDEgKi8KKwkqdW5kZXJfYWxwX3NlbCA9IEFERV9BTFBfTVVM X0NPRUZGXzI7IC8qIDAgKi8KK30KKworc3RhdGljIHZvaWQgYWRlX2NvbXBvc2l0b3Jfcm91dGlu Z19zZXQodm9pZCBfX2lvbWVtICpiYXNlLCB1OCBjaCwKKwkJCQkgICAgICAgdTMyIHgwLCB1MzIg eTAsCisJCQkJICAgICAgIHUzMiBpbl93LCB1MzIgaW5faCwgdTMyIGZtdCkKK3sKKwl1OCBvdmx5 X2NoID0gMDsgLyogVE9ETzogVGhpcyBpcyB0aGUgenBvcywgb25seSBvbmUgcGxhbmUgbm93ICov CisJdTggZ2xiX2FscGhhID0gMjU1OworCXUzMiB4MSA9IHgwICsgaW5fdyAtIDE7CisJdTMyIHkx ID0geTAgKyBpbl9oIC0gMTsKKwl1MzIgdmFsOworCXU4IGFscF9zZWw7CisJdTggdW5kZXJfYWxw X3NlbDsKKwl1OCBhbHBfbW9kZTsKKworCWFkZV9nZXRfYmxlbmRpbmdfcGFyYW1zKGZtdCwgZ2xi X2FscGhhLCAmYWxwX21vZGUsICZhbHBfc2VsLAorCQkJCSZ1bmRlcl9hbHBfc2VsKTsKKworCS8q IG92ZXJsYXkgcm91dGluZyBzZXR0aW5nCisJICovCisJd3JpdGVsKHgwIDw8IDE2IHwgeTAsIGJh c2UgKyBBREVfT1ZMWV9DSF9YWTAob3ZseV9jaCkpOworCXdyaXRlbCh4MSA8PCAxNiB8IHkxLCBi YXNlICsgQURFX09WTFlfQ0hfWFkxKG92bHlfY2gpKTsKKwl2YWwgPSAoY2ggKyAxKSA8PCBDSF9T RUxfT0ZTVCB8IEJJVChDSF9FTl9PRlNUKSB8CisJCWFscF9zZWwgPDwgQ0hfQUxQX1NFTF9PRlNU IHwKKwkJdW5kZXJfYWxwX3NlbCA8PCBDSF9VTkRFUl9BTFBfU0VMX09GU1QgfAorCQlnbGJfYWxw aGEgPDwgQ0hfQUxQX0dCTF9PRlNUIHwKKwkJYWxwX21vZGUgPDwgQ0hfQUxQX01PREVfT0ZTVDsK Kwl3cml0ZWwodmFsLCBiYXNlICsgQURFX09WTFlfQ0hfQ1RMKG92bHlfY2gpKTsKKwkvKiBjb25u ZWN0IHRoaXMgcGxhbmUvY2hhbm5lbCB0byBvdmVybGF5MiBjb21wb3NpdG9yICovCisJYWRlX3Vw ZGF0ZV9iaXRzKGJhc2UgKyBBREVfT1ZMWV9DVEwsIENIX09WTFlfU0VMX09GU1Qob3ZseV9jaCks CisJCQlDSF9PVkxZX1NFTF9NQVNLLCBDSF9PVkxZX1NFTF9WQUwoT1VUX09WTFkpKTsKK30KKwor c3RhdGljIHZvaWQgYWRlX2NvbXBvc2l0b3Jfcm91dGluZ19kaXNhYmxlKHZvaWQgX19pb21lbSAq YmFzZSwgdTMyIGNoKQoreworCXU4IG92bHlfY2ggPSAwOyAvKiBUT0RPOiBPbmx5IHByaW1hcnkg cGxhbmUgbm93ICovCisKKwkvKiBkaXNhYmxlIHRoaXMgcGxhbmUvY2hhbm5lbCAqLworCWFkZV91 cGRhdGVfYml0cyhiYXNlICsgQURFX09WTFlfQ0hfQ1RMKG92bHlfY2gpLCBDSF9FTl9PRlNULAor CQkJTUFTSygxKSwgMCk7CisJLyogZGlzLWNvbm5lY3QgdGhpcyBwbGFuZS9jaGFubmVsIG9mIG92 ZXJsYXkyIGNvbXBvc2l0b3IgKi8KKwlhZGVfdXBkYXRlX2JpdHMoYmFzZSArIEFERV9PVkxZX0NU TCwgQ0hfT1ZMWV9TRUxfT0ZTVChvdmx5X2NoKSwKKwkJCUNIX09WTFlfU0VMX01BU0ssIDApOwor fQorCisvKgorICogVHlwaWNhbHksIGEgY2hhbm5lbCBsb29rcyBsaWtlOiBETUEtLT5jbGlwLS0+ c2NhbGUtLT5jdHJhbnMtLT5jb21wb3NpdG9yCisgKi8KK3N0YXRpYyB2b2lkIGFkZV91cGRhdGVf Y2hhbm5lbChzdHJ1Y3QgYWRlX3BsYW5lICphcGxhbmUsCisJCQkgICAgICAgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsIGludCBjcnRjX3gsCisJCQkgICAgICAgaW50IGNydGNfeSwgdW5zaWdu ZWQgaW50IGNydGNfdywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3J0Y19oLCB1MzIgc3JjX3gs CisJCQkgICAgICAgdTMyIHNyY195LCB1MzIgc3JjX3csIHUzMiBzcmNfaCkKK3sKKwlzdHJ1Y3Qg YWRlX2h3X2N0eCAqY3R4ID0gYXBsYW5lLT5jdHg7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gY3R4 LT5iYXNlOworCXUzMiBmbXQgPSBhZGVfZ2V0X2Zvcm1hdChmYi0+cGl4ZWxfZm9ybWF0KTsKKwl1 MzIgY2ggPSBhcGxhbmUtPmNoOworCXUzMiBpbl93OworCXUzMiBpbl9oOworCisJRFJNX0RFQlVH X0RSSVZFUigiY2hhbm5lbCVkOiBzcmM6KCVkLCAlZCktJWR4JWQsIGNydGM6KCVkLCAlZCktJWR4 JWQiLAorCQkJIGNoICsgMSwgc3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2gsCisJCQkgY3J0Y194 LCBjcnRjX3ksIGNydGNfdywgY3J0Y19oKTsKKworCS8qIDEpIERNQSBzZXR0aW5nICovCisJaW5f dyA9IHNyY193OworCWluX2ggPSBzcmNfaDsKKwlhZGVfcmRtYV9zZXQoYmFzZSwgZmIsIGNoLCBz cmNfeSwgaW5faCwgZm10KTsKKworCS8qIDIpIGNsaXAgc2V0dGluZyAqLworCWFkZV9jbGlwX3Nl dChiYXNlLCBjaCwgZmItPndpZHRoLCBzcmNfeCwgaW5fdywgaW5faCk7CisKKwkvKiAzKSBUT0RP OiBzY2FsZSBzZXR0aW5nIGZvciBvdmVybGF5IHBsYW5lcyAqLworCisJLyogNCkgVE9ETzogY3Ry YW4vY3NjIHNldHRpbmcgZm9yIG92ZXJsYXkgcGxhbmVzICovCisKKwkvKiA1KSBjb21wb3NpdG9y IHJvdXRpbmcgc2V0dGluZyAqLworCWFkZV9jb21wb3NpdG9yX3JvdXRpbmdfc2V0KGJhc2UsIGNo LCBjcnRjX3gsIGNydGNfeSwgaW5fdywgaW5faCwgZm10KTsKK30KKworc3RhdGljIHZvaWQgYWRl X2Rpc2FibGVfY2hhbm5lbChzdHJ1Y3QgYWRlX3BsYW5lICphcGxhbmUpCit7CisJc3RydWN0IGFk ZV9od19jdHggKmN0eCA9IGFwbGFuZS0+Y3R4OworCXZvaWQgX19pb21lbSAqYmFzZSA9IGN0eC0+ YmFzZTsKKwl1MzIgY2ggPSBhcGxhbmUtPmNoOworCisJRFJNX0RFQlVHX0RSSVZFUigiZGlzYWJs ZSBjaGFubmVsJWRcbiIsIGNoICsgMSk7CisKKwkvKiBkaXNhYmxlIHJlYWQgRE1BICovCisJYWRl X3JkbWFfZGlzYWJsZShiYXNlLCBjaCk7CisKKwkvKiBkaXNhYmxlIGNsaXAgKi8KKwlhZGVfY2xp cF9kaXNhYmxlKGJhc2UsIGNoKTsKKworCS8qIGRpc2FibGUgY29tcG9zaXRvciByb3V0aW5nICov CisJYWRlX2NvbXBvc2l0b3Jfcm91dGluZ19kaXNhYmxlKGJhc2UsIGNoKTsKK30KKworc3RhdGlj IGludCBhZGVfcGxhbmVfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQlj b25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUpCit7CisJLyogZG8gbm90aGlu ZyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGVfcGxhbmVfY2xlYW51cF9mYihz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqb2xkX3N0YXRlKQoreworCS8qIGRvIG5vdGhpbmcgKi8KK30KKworc3RhdGljIGludCBhZGVf cGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUtPmNydGM7CisJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCXUzMiBzcmNfeCA9IHN0YXRlLT5zcmNf eCA+PiAxNjsKKwl1MzIgc3JjX3kgPSBzdGF0ZS0+c3JjX3kgPj4gMTY7CisJdTMyIHNyY193ID0g c3RhdGUtPnNyY193ID4+IDE2OworCXUzMiBzcmNfaCA9IHN0YXRlLT5zcmNfaCA+PiAxNjsKKwlp bnQgY3J0Y194ID0gc3RhdGUtPmNydGNfeDsKKwlpbnQgY3J0Y195ID0gc3RhdGUtPmNydGNfeTsK Kwl1MzIgY3J0Y193ID0gc3RhdGUtPmNydGNfdzsKKwl1MzIgY3J0Y19oID0gc3RhdGUtPmNydGNf aDsKKwl1MzIgZm10OworCisJaWYgKCFjcnRjIHx8ICFmYikKKwkJcmV0dXJuIDA7CisKKwlmbXQg PSBhZGVfZ2V0X2Zvcm1hdChmYi0+cGl4ZWxfZm9ybWF0KTsKKwlpZiAoZm10ID09IEFERV9GT1JN QVRfTk9UX1NVUFBPUlQpCisJCXJldHVybiAtRUlOVkFMOworCisJY3J0Y19zdGF0ZSA9IGRybV9h dG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBjcnRjKTsKKwlpZiAoSVNfRVJSKGNy dGNfc3RhdGUpKQorCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKworCWlmIChzcmNfdyAh PSBjcnRjX3cgfHwgc3JjX2ggIT0gY3J0Y19oKSB7CisJCURSTV9FUlJPUigiU2NhbGUgbm90IHN1 cHBvcnQhISFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3JjX3ggKyBzcmNf dyA+IGZiLT53aWR0aCB8fAorCSAgICBzcmNfeSArIHNyY19oID4gZmItPmhlaWdodCkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlpZiAoY3J0Y194IDwgMCB8fCBjcnRjX3kgPCAwKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWlmIChjcnRjX3ggKyBjcnRjX3cgPiBjcnRjX3N0YXRlLT5hZGp1c3RlZF9t b2RlLmhkaXNwbGF5IHx8CisJICAgIGNydGNfeSArIGNydGNfaCA+IGNydGNfc3RhdGUtPmFkanVz dGVkX21vZGUudmRpc3BsYXkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIGFkZV9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZQkqc3RhdGUJPSBwbGFuZS0+c3RhdGU7CisJc3RydWN0IGFkZV9w bGFuZSAqYXBsYW5lID0gdG9fYWRlX3BsYW5lKHBsYW5lKTsKKworCWFkZV91cGRhdGVfY2hhbm5l bChhcGxhbmUsIHN0YXRlLT5mYiwgc3RhdGUtPmNydGNfeCwgc3RhdGUtPmNydGNfeSwKKwkJCSAg IHN0YXRlLT5jcnRjX3csIHN0YXRlLT5jcnRjX2gsCisJCQkgICBzdGF0ZS0+c3JjX3ggPj4gMTYs IHN0YXRlLT5zcmNfeSA+PiAxNiwKKwkJCSAgIHN0YXRlLT5zcmNfdyA+PiAxNiwgc3RhdGUtPnNy Y19oID4+IDE2KTsKK30KKworc3RhdGljIHZvaWQgYWRlX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq b2xkX3N0YXRlKQoreworCXN0cnVjdCBhZGVfcGxhbmUgKmFwbGFuZSA9IHRvX2FkZV9wbGFuZShw bGFuZSk7CisKKwlhZGVfZGlzYWJsZV9jaGFubmVsKGFwbGFuZSk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBhZGVfcGxhbmVfaGVscGVyX2Z1bmNzID0g eworCS5wcmVwYXJlX2ZiID0gYWRlX3BsYW5lX3ByZXBhcmVfZmIsCisJLmNsZWFudXBfZmIgPSBh ZGVfcGxhbmVfY2xlYW51cF9mYiwKKwkuYXRvbWljX2NoZWNrID0gYWRlX3BsYW5lX2F0b21pY19j aGVjaywKKwkuYXRvbWljX3VwZGF0ZSA9IGFkZV9wbGFuZV9hdG9taWNfdXBkYXRlLAorCS5hdG9t aWNfZGlzYWJsZSA9IGFkZV9wbGFuZV9hdG9taWNfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX3BsYW5lX2Z1bmNzIGFkZV9wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lCT0g ZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lCT0gZHJtX2F0 b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuc2V0X3Byb3BlcnR5ID0gZHJtX2F0b21pY19o ZWxwZXJfcGxhbmVfc2V0X3Byb3BlcnR5LAorCS5kZXN0cm95ID0gZHJtX3BsYW5lX2NsZWFudXAs CisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBs aWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJ LmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9z dGF0ZSwKK307CisKK3N0YXRpYyBpbnQgYWRlX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgc3RydWN0IGFkZV9wbGFuZSAqYXBsYW5lLAorCQkJICBlbnVtIGRybV9wbGFuZV90eXBl IHR5cGUpCit7CisJY29uc3QgdTMyICpmbXRzOworCXUzMiBmbXRzX2NudDsKKwlpbnQgcmV0ID0g MDsKKworCS8qIGdldCAgcHJvcGVydGllcyAqLworCWZtdHNfY250ID0gYWRlX2dldF9jaGFubmVs X2Zvcm1hdHMoYXBsYW5lLT5jaCwgJmZtdHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZGV2LCAmYXBsYW5lLT5iYXNlLCAxLCAm YWRlX3BsYW5lX2Z1bmNzLAorCQkJCSAgICAgICBmbXRzLCBmbXRzX2NudCwgdHlwZSwgTlVMTCk7 CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWwgdG8gaW5pdCBwbGFuZSwgY2g9JWRcbiIs IGFwbGFuZS0+Y2gpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9wbGFuZV9oZWxwZXJfYWRk KCZhcGxhbmUtPmJhc2UsICZhZGVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiAwOwor fQorCiBzdGF0aWMgaW50IGFkZV9kdHNfcGFyc2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diwgc3RydWN0IGFkZV9od19jdHggKmN0eCkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAg LTQyMiw3ICs5MzAsMTAgQEAgaW50IGFkZV9kcm1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQogCXN0cnVjdCBhZGVfZGF0YSAqYWRlOwogCXN0cnVjdCBhZGVfaHdfY3R4ICpjdHg7CiAJc3Ry dWN0IGFkZV9jcnRjICphY3J0YzsKKwlzdHJ1Y3QgYWRlX3BsYW5lICphcGxhbmU7CisJZW51bSBk cm1fcGxhbmVfdHlwZSB0eXBlOwogCWludCByZXQ7CisJaW50IGk7CiAKIAlhZGUgPSBkZXZtX2t6 YWxsb2MoZGV2LT5kZXYsIHNpemVvZigqYWRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhZGUpIHsK QEAgLTQ0MCw2ICs5NTEsMjggQEAgaW50IGFkZV9kcm1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKgorCSAqIHBsYW5lIGluaXQKKwkg KiBUT0RPOiBOb3cgb25seSBzdXBwb3J0IHByaW1hcnkgcGxhbmUsIG92ZXJsYXkgcGxhbmVzCisJ ICogbmVlZCB0byBkby4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQURFX0NIX05VTTsgaSsrKSB7 CisJCWFwbGFuZSA9ICZhZGUtPmFwbGFuZVtpXTsKKwkJYXBsYW5lLT5jaCA9IGk7CisJCWFwbGFu ZS0+Y3R4ID0gY3R4OworCQl0eXBlID0gaSA9PSBQUklNQVJZX0NIID8gRFJNX1BMQU5FX1RZUEVf UFJJTUFSWSA6CisJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZOworCisJCXJldCA9IGFkZV9wbGFu ZV9pbml0KGRldiwgYXBsYW5lLCB0eXBlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJ fQorCisJLyogY3J0YyBpbml0ICovCisJcmV0ID0gYWRlX2NydGNfaW5pdChkZXYsICZhY3J0Yy0+ YmFzZSwgJmFkZS0+YXBsYW5lW1BSSU1BUllfQ0hdLmJhc2UpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKIAlyZXR1cm4gMDsKIH0KIAotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==