From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH 1/4] drm/hisilicon/hibmc: Switch to generic fbdev emulation Date: Fri, 22 Nov 2019 09:30:41 +0100 Message-ID: <20191122083044.6627-2-tzimmermann@suse.de> References: <20191122083044.6627-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id DDCCB6F4E7 for ; Fri, 22 Nov 2019 08:30:48 +0000 (UTC) In-Reply-To: <20191122083044.6627-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: daniel@ffwll.ch, maarten.lankhorst@linux.intel.com, mripard@kernel.org, airlied@linux.ie, z.liuxinliang@hisilicon.com, zourongrong@gmail.com, kong.kongxinwei@hisilicon.com, puck.chen@hisilicon.com, sam@ravnborg.org, kraxel@redhat.com, hslester96@gmail.com, yuehaibing@huawei.com Cc: Thomas Zimmermann , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhlcmUncyBub3RoaW5nIHNwZWNpYWwgYWJvdXQgaGlibWMncyBmYmRldiBlbXVsYXRpb24gdGhh dCBpcyBub3QKcHJvdmlkZWQgYnkgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uIFN3aXRjaCBv dmVyIGFuZCByZW1vdmUgdGhlCmRyaXZlcidzIGNvZGUuCgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMg WmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaGlz aWxpY29uL2hpYm1jL01ha2VmaWxlICAgICAgfCAgIDIgKy0KIC4uLi9ncHUvZHJtL2hpc2lsaWNv bi9oaWJtYy9oaWJtY19kcm1fZHJ2LmMgICB8ICAgNSArLQogLi4uL2dwdS9kcm0vaGlzaWxpY29u L2hpYm1jL2hpYm1jX2RybV9kcnYuaCAgIHwgIDExIC0KIC4uLi9ncHUvZHJtL2hpc2lsaWNvbi9o aWJtYy9oaWJtY19kcm1fZmJkZXYuYyB8IDI0MCAtLS0tLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMg Y2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyNTUgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9oaWJtY19kcm1fZmJkZXYuYwoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24vaGlibWMvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL01ha2VmaWxlCmluZGV4IDBjMmQ0Mjk2YmNj ZC4uZjk5MTMyNzE1NTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hp Ym1jL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24vaGlibWMvTWFrZWZp bGUKQEAgLTEsNCArMSw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkKLWhpYm1jLWRybS15IDo9IGhpYm1jX2RybV9kcnYubyBoaWJtY19kcm1fZGUubyBoaWJtY19k cm1fdmRhYy5vIGhpYm1jX2RybV9mYmRldi5vIGhpYm1jX3R0bS5vCitoaWJtYy1kcm0teSA6PSBo aWJtY19kcm1fZHJ2Lm8gaGlibWNfZHJtX2RlLm8gaGlibWNfZHJtX3ZkYWMubyBoaWJtY190dG0u bwogCiBvYmotJChDT05GSUdfRFJNX0hJU0lfSElCTUMpICs9IGhpYm1jLWRybS5vCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX2RybV9kcnYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9oaXNpbGljb24vaGlibWMvaGlibWNfZHJtX2Rydi5jCmluZGV4IDJmZDRj YTkxYTYyZC4uMTEzZDI3YjhhOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxp Y29uL2hpYm1jL2hpYm1jX2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29u L2hpYm1jL2hpYm1jX2RybV9kcnYuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2ZiX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZ2VtX3ZyYW1faGVscGVy Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9pcnEuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+ CkBAIC0yNDcsOCArMjQ4LDYgQEAgc3RhdGljIGludCBoaWJtY191bmxvYWQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaGlibWNfZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwogCi0JaGlibWNfZmJkZXZfZmluaShwcml2KTsKLQogCWRybV9hdG9taWNfaGVs cGVyX3NodXRkb3duKGRldik7CiAKIAlpZiAoZGV2LT5pcnFfZW5hYmxlZCkKQEAgLTMwNyw3ICsz MDYsNyBAQCBzdGF0aWMgaW50IGhpYm1jX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkv KiByZXNldCBhbGwgdGhlIHN0YXRlcyBvZiBjcnRjL3BsYW5lL2VuY29kZXIvY29ubmVjdG9yICov CiAJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CiAKLQlyZXQgPSBoaWJtY19mYmRldl9pbml0 KHByaXYpOworCXJldCA9IGRybV9mYmRldl9nZW5lcmljX3NldHVwKGRldiwgMTYpOwogCWlmIChy ZXQpIHsKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmYmRldjogJWRcbiIsIHJl dCk7CiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9o aWJtYy9oaWJtY19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL2hp Ym1jX2RybV9kcnYuaAppbmRleCBlNThlY2Q3ZWRjZjguLmIzNDQ5M2VhZDMwYiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9oaWJtY19kcm1fZHJ2LmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9oaWJtY19kcm1fZHJ2LmgKQEAgLTI1LDEy ICsyNSw2IEBAIHN0cnVjdCBoaWJtY19mcmFtZWJ1ZmZlciB7CiAJc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmo7CiB9OwogCi1zdHJ1Y3QgaGlibWNfZmJkZXYgewotCXN0cnVjdCBkcm1fZmJfaGVs cGVyIGhlbHBlcjsgLyogbXVzdCBiZSBmaXJzdCAqLwotCXN0cnVjdCBoaWJtY19mcmFtZWJ1ZmZl ciAqZmI7Ci0JaW50IHNpemU7Ci19OwotCiBzdHJ1Y3QgaGlibWNfZHJtX3ByaXZhdGUgewogCS8q IGh3ICovCiAJdm9pZCBfX2lvbWVtICAgKm1taW87CkBAIC00Miw5ICszNiw2IEBAIHN0cnVjdCBo aWJtY19kcm1fcHJpdmF0ZSB7CiAJLyogZHJtICovCiAJc3RydWN0IGRybV9kZXZpY2UgICpkZXY7 CiAJYm9vbCBtb2RlX2NvbmZpZ19pbml0aWFsaXplZDsKLQotCS8qIGZiZGV2ICovCi0Jc3RydWN0 IGhpYm1jX2ZiZGV2ICpmYmRldjsKIH07CiAKICNkZWZpbmUgdG9faGlibWNfZnJhbWVidWZmZXIo eCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBoaWJtY19mcmFtZWJ1ZmZlciwgZmIpCkBAIC01Niw4 ICs0Nyw2IEBAIHZvaWQgaGlibWNfc2V0X2N1cnJlbnRfZ2F0ZShzdHJ1Y3QgaGlibWNfZHJtX3By aXZhdGUgKnByaXYsCiAKIGludCBoaWJtY19kZV9pbml0KHN0cnVjdCBoaWJtY19kcm1fcHJpdmF0 ZSAqcHJpdik7CiBpbnQgaGlibWNfdmRhY19pbml0KHN0cnVjdCBoaWJtY19kcm1fcHJpdmF0ZSAq cHJpdik7Ci1pbnQgaGlibWNfZmJkZXZfaW5pdChzdHJ1Y3QgaGlibWNfZHJtX3ByaXZhdGUgKnBy aXYpOwotdm9pZCBoaWJtY19mYmRldl9maW5pKHN0cnVjdCBoaWJtY19kcm1fcHJpdmF0ZSAqcHJp dik7CiAKIGludCBoaWJtY19nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBz aXplLCBib29sIGlza2VybmVsLAogCQkgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iaik7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX2RybV9m YmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9oaWJtY19kcm1fZmJkZXYu YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRjMWNlYTA1MWU4Li4wMDAwMDAwMDAw MDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9oaWJtY19kcm1fZmJkZXYu YworKysgL2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vci1sYXRlcgotLyogSGlzaWxpY29uIEhpYm1jIFNvQyBkcm0gZHJpdmVy Ci0gKgotICogQmFzZWQgb24gdGhlIGJvY2hzIGRybSBkcml2ZXIuCi0gKgotICogQ29weXJpZ2h0 IChjKSAyMDE2IEh1YXdlaSBMaW1pdGVkLgotICoKLSAqIEF1dGhvcjoKLSAqCVJvbmdyb25nIFpv dSA8em91cm9uZ3JvbmdAaHVhd2VpLmNvbT4KLSAqCVJvbmdyb25nIFpvdSA8em91cm9uZ3JvbmdA Z21haWwuY29tPgotICoJSmlhbmh1YSBMaSA8bGlqaWFuaHVhQGh1YXdlaS5jb20+Ci0gKi8KLQot I2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgotI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+ Ci0jaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2dlbV92cmFt X2hlbHBlci5oPgotI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+Ci0KLSNpbmNsdWRl ICJoaWJtY19kcm1fZHJ2LmgiCi0KLXN0YXRpYyBpbnQgaGlibWNmYl9jcmVhdGVfb2JqZWN0KAot CQkJCXN0cnVjdCBoaWJtY19kcm1fcHJpdmF0ZSAqcHJpdiwKLQkJCQljb25zdCBzdHJ1Y3QgZHJt X21vZGVfZmJfY21kMiAqbW9kZV9jbWQsCi0JCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqZ29i al9wKQotewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iajsKLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gcHJpdi0+ZGV2OwotCXUzMiBzaXplOwotCWludCByZXQgPSAwOwotCi0Jc2l6ZSA9 IG1vZGVfY21kLT5waXRjaGVzWzBdICogbW9kZV9jbWQtPmhlaWdodDsKLQlyZXQgPSBoaWJtY19n ZW1fY3JlYXRlKGRldiwgc2l6ZSwgdHJ1ZSwgJmdvYmopOwotCWlmIChyZXQpCi0JCXJldHVybiBy ZXQ7Ci0KLQkqZ29ial9wID0gZ29iajsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0 IGZiX29wcyBoaWJtY19kcm1fZmJfb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5m Yl9jaGVja192YXIgPSBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhciwKLQkuZmJfc2V0X3BhciA9IGRy bV9mYl9oZWxwZXJfc2V0X3BhciwKLQkuZmJfZmlsbHJlY3QgPSBkcm1fZmJfaGVscGVyX3N5c19m aWxscmVjdCwKLQkuZmJfY29weWFyZWEgPSBkcm1fZmJfaGVscGVyX3N5c19jb3B5YXJlYSwKLQku ZmJfaW1hZ2VibGl0ID0gZHJtX2ZiX2hlbHBlcl9zeXNfaW1hZ2VibGl0LAotCS5mYl9wYW5fZGlz cGxheSA9IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXksCi0JLmZiX2JsYW5rID0gZHJtX2ZiX2hl bHBlcl9ibGFuaywKLQkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKLX07Ci0K LXN0YXRpYyBpbnQgaGlibWNfZHJtX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVs cGVyLAotCQkJICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6ZXMp Ci17Ci0Jc3RydWN0IGhpYm1jX2ZiZGV2ICpoaV9mYmRldiA9Ci0JCWNvbnRhaW5lcl9vZihoZWxw ZXIsIHN0cnVjdCBoaWJtY19mYmRldiwgaGVscGVyKTsKLQlzdHJ1Y3QgaGlibWNfZHJtX3ByaXZh dGUgKnByaXYgPSBoZWxwZXItPmRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGZiX2luZm8gKmlu Zm87Ci0Jc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgbW9kZV9jbWQ7Ci0Jc3RydWN0IGRybV9nZW1f b2JqZWN0ICpnb2JqID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQlzaXplX3Qgc2l6ZTsKLQl1bnNp Z25lZCBpbnQgYnl0ZXNfcGVyX3BpeGVsOwotCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpn Ym8gPSBOVUxMOwotCXZvaWQgKmJhc2U7Ci0KLQlEUk1fREVCVUdfRFJJVkVSKCJzdXJmYWNlIHdp ZHRoKCVkKSwgaGVpZ2h0KCVkKSBhbmQgYnBwKCVkKVxuIiwKLQkJCSBzaXplcy0+c3VyZmFjZV93 aWR0aCwgc2l6ZXMtPnN1cmZhY2VfaGVpZ2h0LAotCQkJIHNpemVzLT5zdXJmYWNlX2JwcCk7Ci0K LQlieXRlc19wZXJfcGl4ZWwgPSBESVZfUk9VTkRfVVAoc2l6ZXMtPnN1cmZhY2VfYnBwLCA4KTsK LQotCW1vZGVfY21kLndpZHRoID0gc2l6ZXMtPnN1cmZhY2Vfd2lkdGg7Ci0JbW9kZV9jbWQuaGVp Z2h0ID0gc2l6ZXMtPnN1cmZhY2VfaGVpZ2h0OwotCW1vZGVfY21kLnBpdGNoZXNbMF0gPSBtb2Rl X2NtZC53aWR0aCAqIGJ5dGVzX3Blcl9waXhlbDsKLQltb2RlX2NtZC5waXhlbF9mb3JtYXQgPSBk cm1fbW9kZV9sZWdhY3lfZmJfZm9ybWF0KHNpemVzLT5zdXJmYWNlX2JwcCwKLQkJCQkJCQkgIHNp emVzLT5zdXJmYWNlX2RlcHRoKTsKLQotCXNpemUgPSBQQUdFX0FMSUdOKG1vZGVfY21kLnBpdGNo ZXNbMF0gKiBtb2RlX2NtZC5oZWlnaHQpOwotCi0JcmV0ID0gaGlibWNmYl9jcmVhdGVfb2JqZWN0 KHByaXYsICZtb2RlX2NtZCwgJmdvYmopOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gY3JlYXRlIGZiY29uIGJhY2tpbmcgb2JqZWN0OiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJu IC1FTk9NRU07Ci0JfQotCi0JZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShnb2JqKTsKLQotCXJl dCA9IGRybV9nZW1fdnJhbV9waW4oZ2JvLCBEUk1fR0VNX1ZSQU1fUExfRkxBR19WUkFNKTsKLQlp ZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBmYmNvbjogJWRcbiIsIHJldCk7 Ci0JCWdvdG8gb3V0X3VucmVmX2dlbTsKLQl9Ci0KLQliYXNlID0gZHJtX2dlbV92cmFtX2ttYXAo Z2JvLCB0cnVlLCBOVUxMKTsKLQlpZiAoSVNfRVJSKGJhc2UpKSB7Ci0JCXJldCA9IFBUUl9FUlIo YmFzZSk7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGttYXAgZmJjb246ICVkXG4iLCByZXQpOwot CQlnb3RvIG91dF91bnBpbl9ibzsKLQl9Ci0KLQlpbmZvID0gZHJtX2ZiX2hlbHBlcl9hbGxvY19m YmkoaGVscGVyKTsKLQlpZiAoSVNfRVJSKGluZm8pKSB7Ci0JCXJldCA9IFBUUl9FUlIoaW5mbyk7 Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIGZiaTogJWRcbiIsIHJldCk7Ci0JCWdv dG8gb3V0X3JlbGVhc2VfZmJpOwotCX0KLQotCWhpX2ZiZGV2LT5mYiA9IGhpYm1jX2ZyYW1lYnVm ZmVyX2luaXQocHJpdi0+ZGV2LCAmbW9kZV9jbWQsIGdvYmopOwotCWlmIChJU19FUlIoaGlfZmJk ZXYtPmZiKSkgewotCQlyZXQgPSBQVFJfRVJSKGhpX2ZiZGV2LT5mYik7Ci0JCWhpX2ZiZGV2LT5m YiA9IE5VTEw7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXI6 ICVkXG4iLCByZXQpOwotCQlnb3RvIG91dF9yZWxlYXNlX2ZiaTsKLQl9Ci0KLQlwcml2LT5mYmRl di0+c2l6ZSA9IHNpemU7Ci0JaGlfZmJkZXYtPmhlbHBlci5mYiA9ICZoaV9mYmRldi0+ZmItPmZi OwotCi0JaW5mby0+ZmJvcHMgPSAmaGlibWNfZHJtX2ZiX29wczsKLQotCWRybV9mYl9oZWxwZXJf ZmlsbF9pbmZvKGluZm8sICZwcml2LT5mYmRldi0+aGVscGVyLCBzaXplcyk7Ci0KLQlpbmZvLT5z Y3JlZW5fYmFzZSA9IGJhc2U7Ci0JaW5mby0+c2NyZWVuX3NpemUgPSBzaXplOwotCi0JaW5mby0+ Zml4LnNtZW1fc3RhcnQgPSBnYm8tPmJvLm1lbS5idXMub2Zmc2V0ICsgZ2JvLT5iby5tZW0uYnVz LmJhc2U7Ci0JaW5mby0+Zml4LnNtZW1fbGVuID0gc2l6ZTsKLQlyZXR1cm4gMDsKLQotb3V0X3Jl bGVhc2VfZmJpOgotCWRybV9nZW1fdnJhbV9rdW5tYXAoZ2JvKTsKLW91dF91bnBpbl9ibzoKLQlk cm1fZ2VtX3ZyYW1fdW5waW4oZ2JvKTsKLW91dF91bnJlZl9nZW06Ci0JZHJtX2dlbV9vYmplY3Rf cHV0X3VubG9ja2VkKGdvYmopOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgaGli bWNfZmJkZXZfZGVzdHJveShzdHJ1Y3QgaGlibWNfZmJkZXYgKmZiZGV2KQotewotCXN0cnVjdCBo aWJtY19mcmFtZWJ1ZmZlciAqZ2ZiID0gZmJkZXYtPmZiOwotCXN0cnVjdCBkcm1fZmJfaGVscGVy ICpmYmggPSAmZmJkZXYtPmhlbHBlcjsKLQotCWRybV9mYl9oZWxwZXJfdW5yZWdpc3Rlcl9mYmko ZmJoKTsKLQotCWRybV9mYl9oZWxwZXJfZmluaShmYmgpOwotCi0JaWYgKGdmYikKLQkJZHJtX2Zy YW1lYnVmZmVyX3B1dCgmZ2ZiLT5mYik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9mdW5jcyBoaWJtY19mYmRldl9oZWxwZXJfZnVuY3MgPSB7Ci0JLmZiX3Byb2JlID0g aGlibWNfZHJtX2ZiX2NyZWF0ZSwKLX07Ci0KLWludCBoaWJtY19mYmRldl9pbml0KHN0cnVjdCBo aWJtY19kcm1fcHJpdmF0ZSAqcHJpdikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBmYl92YXJfc2Ny ZWVuaW5mbyAqdmFyOwotCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4OwotCXN0cnVjdCBo aWJtY19mYmRldiAqaGlmYmRldjsKLQotCWhpZmJkZXYgPSBkZXZtX2t6YWxsb2MocHJpdi0+ZGV2 LT5kZXYsIHNpemVvZigqaGlmYmRldiksIEdGUF9LRVJORUwpOwotCWlmICghaGlmYmRldikgewot CQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBoaWJtY19mYmRldlxuIik7Ci0JCXJldHVy biAtRU5PTUVNOwotCX0KLQotCXByaXYtPmZiZGV2ID0gaGlmYmRldjsKLQlkcm1fZmJfaGVscGVy X3ByZXBhcmUocHJpdi0+ZGV2LCAmaGlmYmRldi0+aGVscGVyLAotCQkJICAgICAgJmhpYm1jX2Zi ZGV2X2hlbHBlcl9mdW5jcyk7Ci0KLQkvKiBOb3cganVzdCBvbmUgY3J0YyBhbmQgb25lIGNoYW5u ZWwgKi8KLQlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQocHJpdi0+ZGV2LCAmaGlmYmRldi0+aGVs cGVyLCAxKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUg ZmIgaGVscGVyOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBkcm1f ZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoJmhpZmJkZXYtPmhlbHBlcik7Ci0J aWYgKHJldCkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBhZGQgYWxsIGNvbm5lY3RvcnM6ICVk XG4iLCByZXQpOwotCQlnb3RvIGZpbmk7Ci0JfQotCi0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0 aWFsX2NvbmZpZygmaGlmYmRldi0+aGVscGVyLCAxNik7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJS T1IoImZhaWxlZCB0byBzZXR1cCBpbml0aWFsIGNvbm4gY29uZmlnOiAlZFxuIiwgcmV0KTsKLQkJ Z290byBmaW5pOwotCX0KLQotCXZhciA9ICZoaWZiZGV2LT5oZWxwZXIuZmJkZXYtPnZhcjsKLQlm aXggPSAmaGlmYmRldi0+aGVscGVyLmZiZGV2LT5maXg7Ci0KLQlEUk1fREVCVUdfRFJJVkVSKCJN ZW1iZXIgb2YgaW5mby0+dmFyIGlzIDpcbiIKLQkJCSAieHJlcz0lZFxuIgotCQkJICJ5cmVzPSVk XG4iCi0JCQkgInhyZXNfdmlydHVhbD0lZFxuIgotCQkJICJ5cmVzX3ZpcnR1YWw9JWRcbiIKLQkJ CSAieG9mZnNldD0lZFxuIgotCQkJICJ5b2Zmc2V0PSVkXG4iCi0JCQkgImJpdHNfcGVyX3BpeGVs PSVkXG4iCi0JCQkgIi4uLlxuIiwgdmFyLT54cmVzLCB2YXItPnlyZXMsIHZhci0+eHJlc192aXJ0 dWFsLAotCQkJIHZhci0+eXJlc192aXJ0dWFsLCB2YXItPnhvZmZzZXQsIHZhci0+eW9mZnNldCwK LQkJCSB2YXItPmJpdHNfcGVyX3BpeGVsKTsKLQlEUk1fREVCVUdfRFJJVkVSKCJNZW1iZXIgb2Yg aW5mby0+Zml4IGlzIDpcbiIKLQkJCSAic21lbV9zdGFydD0lbHhcbiIKLQkJCSAic21lbV9sZW49 JWRcbiIKLQkJCSAidHlwZT0lZFxuIgotCQkJICJ0eXBlX2F1eD0lZFxuIgotCQkJICJ2aXN1YWw9 JWRcbiIKLQkJCSAieHBhbnN0ZXA9JWRcbiIKLQkJCSAieXBhbnN0ZXA9JWRcbiIKLQkJCSAieXdy YXBzdGVwPSVkXG4iCi0JCQkgImxpbmVfbGVuZ3RoPSVkXG4iCi0JCQkgImFjY2VsPSVkXG4iCi0J CQkgImNhcGFiaWxpdGllcz0lZFxuIgotCQkJICIuLi5cbiIsIGZpeC0+c21lbV9zdGFydCwgZml4 LT5zbWVtX2xlbiwgZml4LT50eXBlLAotCQkJIGZpeC0+dHlwZV9hdXgsIGZpeC0+dmlzdWFsLCBm aXgtPnhwYW5zdGVwLAotCQkJIGZpeC0+eXBhbnN0ZXAsIGZpeC0+eXdyYXBzdGVwLCBmaXgtPmxp bmVfbGVuZ3RoLAotCQkJIGZpeC0+YWNjZWwsIGZpeC0+Y2FwYWJpbGl0aWVzKTsKLQotCXJldHVy biAwOwotCi1maW5pOgotCWRybV9mYl9oZWxwZXJfZmluaSgmaGlmYmRldi0+aGVscGVyKTsKLQly ZXR1cm4gcmV0OwotfQotCi12b2lkIGhpYm1jX2ZiZGV2X2Zpbmkoc3RydWN0IGhpYm1jX2RybV9w cml2YXRlICpwcml2KQotewotCWlmICghcHJpdi0+ZmJkZXYpCi0JCXJldHVybjsKLQotCWhpYm1j X2ZiZGV2X2Rlc3Ryb3kocHJpdi0+ZmJkZXYpOwotCXByaXYtPmZiZGV2ID0gTlVMTDsKLX0KLS0g CjIuMjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs